cuda内核使用pthreads缺少配置错误

时间:2012-02-04 09:47:33

标签: configuration pthreads cuda

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);
  }

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

为什么要在网格中启动单个块?这种配置似乎很可疑:

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

尝试增加网格大小并在块中放置更少的线程。但是你的主要问题可能与汤姆建议的情况有关。