2012-02-04 6 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呼び出しのステータスをチェックする必要があります。

チェックポイントは、の前にCUDA APIルーチンを呼び出していないことを確認することです。スレッドをフォークする前にCUDAコンテキスト(CUDA APIルーチンのすべてではなくほとんどの場合、自動的に)を作成すると問題が発生します。これをチェックし、問題でない場合は、質問に詳細を追加し、すべてのAPI呼び出しの戻り値を確認します。

0

グリッド内で1つのブロックを起動するのはなぜですか?この構成は疑わしいと思われます。

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

ブロック内にグリッドサイズを増やし、スレッドを少なくしてください。しかし、あなたの主な問題は、おそらくトムの示唆している文脈に関するものです。

関連する問題