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);
}
答案 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);
尝试增加网格大小并在块中放置更少的线程。但是你的主要问题可能与汤姆建议的情况有关。