float の配列を更新する CUDA コードをいくつか実行しました。「 CUDA コードをコンパイルして C++ プロジェクトにリンクするにはどうすればよいですか?」で説明されているようなラッパー関数があります。この質問。
CUDA 関数内で、このような for ループを作成します...
int tid = threadIdx.x;
for(int i=0;i<X;i++)
{
//code here
}
ここでの問題は、X が 100 の値に等しい場合、すべて正常に動作しますが、X が 1000000 に等しい場合、ベクトルが更新されないことです (for ループ内のコードが実行されないかのように)。
ラッパー関数内で、for ループで CUDA 関数を呼び出しても、問題なく動作します (ただし、CPU で同じプロセスをすべて実行した場合よりも何らかの理由で大幅に遅くなります)。このように...
for(int i=0;i<1000000;i++)
{
update<<<NumObjects,1>>>(dev_a, NumObjects);
}
ラッパー関数で100万回ループできるのに、単にCUDAの「更新」関数を1回呼び出してから、その関数内で100万回のforループを開始できない理由を知っている人はいますか?