【问题标题】:cuda kernels using pthreads Missing Configuration Error使用 pthreads 的 cuda 内核缺少配置错误
【发布时间】:2023-03-28 18:34:01
【问题描述】:

cuda 中缺少配置错误是什么意思? 下面的代码是一个线程函数,当我运行此代码时,得到的错误是 1,这意味着缺少配置错误。这段代码有什么错误?

  void* run(void *args)
  {
   cudaError_t error;
   Matrix *matrix=(Matrix*)args;
    int scalar=2;
   dim3 dimGrid(1,1,1);
   dim3 dimBlock(1024,1,1);
   cudaEvent_t  start,stop;
   cudaSetDevice(0);
   cudaEventCreate(&start);
   cudaEventCreate(&stop);
   cudaEventRecord(start,0);
   for(int i=0 ;i< matrix->number ;i++ )
   {
   syntheticKernel<<<dimGrid,dimBlock>>>();
   cudaThreadSynchronize();
   }
   cudaEventRecord(stop,0);
   cudaEventSynchronize(stop);
   cudaEventElapsedTime(&matrix->time,start,stop);
   error=cudaGetLastError();
   assert(error!=0);
   printf("%d\n",error);
  }

【问题讨论】:

    标签: configuration pthreads cuda


    【解决方案1】:

    您能否添加有关您的程序的更多详细信息?每个 CUDA API 例程都返回一个状态码,您应该检查每个 API 调用的状态以捕获并解码第一个报告的错误。

    要检查的一点是,您在分叉 pthread 之前 没有调用任何 CUDA API 例程。在 fork 线程之前创建一个 CUDA 上下文(对于大多数但不是所有的 CUDA API 例程都是自动的)会导致问题。检查此项,如果不是问题,请在您的问题中添加更多详细信息并检查所有 API 调用的返回值。

    【讨论】:

      【解决方案2】:

      为什么要在网格中启动单个块?这个配置看起来很可疑:

      dim3 dimGrid(1,1,1);
      dim3 dimBlock(1024,1,1);
      

      尝试增加网格大小并在块中放置更少的线程。但您的主要问题可能与 Tom 建议的上下文有关。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-29
        • 2012-03-31
        • 1970-01-01
        • 2014-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多