-3

CUDA については、「ブロックが複数の MP にまたがって分割されることはない」ということは理解しています。(http://llpanorama.wordpress.com/2008/06/11/threads-and-blocks-and-grids-oh-my/)。

これをテストするために、非常に大きなブロック サイズをカーネルに割り当てました。

__global__ void dummy()
{
}

int main()
{
        int N=21504*40000; //21504 is the total threads I found for my Tesla M2070
        dim3 grids(1,2);
        dim3 thres(N,N);
        dummy<<<grids,thres>>>();
        return 0;
}

ただし、コンパイル エラーや実行時エラーは発生せず、何が起こっているのかわかりません...

4

2 に答える 2

2

dummy<<<>>> 呼び出しの後に cudaGetLastError() を追加すると、CUDA Launch Failure エラーが発生します (cudaGetErrorString(err_code) を使用してエラー コードを文字列に変換できます)。

于 2012-09-24T20:27:52.843 に答える
0

これらのエラーはコンパイル エラーではなく、実行後に実行時エラーが発生します。文を理解するには、アーキテクチャを理解する必要があります。これは、1 つの MP (SM) の共有メモリを介して同じスレッド ブロックに配置されたスレッドの通信を高速化するように設計されています。したがって、それらはすべて同じ SM に常駐し、ディスパッチされません。

于 2012-09-25T10:00:18.210 に答える