2012-02-04 73 views
0

cuda中缺少配置错误的原因是什么? 这下面的代码是一个线程函数,当我运行这个代码时,得到的错误是1,这意味着缺少配置错误。这段代码有什么错误?使用pthreads的cuda内核缺失配置错误

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

回答

3

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

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

0

为什么要在Grid中启动一个块?这种配置显得可疑:

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

尝试增加电网规模和投入较少线程块。但是,你的主要问题可能与汤姆建议的背景有关。