フロートの配列を更新したCUDAコードを実行しました。私はHow can I compile CUDA code then link it to a C++ project?で議論されたようなラッパー関数を持っています。私のCUDA関数内CUDAコード内のループ
私は...
int tid = threadIdx.x;
for(int i=0;i<X;i++)
{
//code here
}
このようなループのために作成今問題Xが100の値に等しい場合、すべてがうまく動作しますが、Xが等しいかどうかということです〜1000000、私のベクトルは更新されません(ほとんどの場合、forループ内のコードが実行されないように)
私はCUDA関数をforループで呼び出すと、今でもうまく動作します(ただし、CPU上で同じプロセスを単純に実行した場合よりも何らかの理由でかなり遅くなります)。
for(int i=0;i<1000000;i++)
{
update<<<NumObjects,1>>>(dev_a, NumObjects);
}
私はラッパー関数で何百万回もループすることができますが、単にCUDAの "更新"関数を呼び出してからその関数内で百万回のループを開始するのは誰にも分かりますか?
[CUDAの上限に達しているようですが、それは何ですか?](http://stackoverflow.com/questions/6913206/cuda-limit-seems-to-be-reached-but-what- limit-is-that) – talonmies
Xの値を大きくすると、カーネルはまったく実行されますか?エラーチェックをしていますか?あなたがすべき。 Xはコンパイル時定数か#defineですか?もしそうなら、適切なコンパイラフラグを使用して、共有された一定のメモリ要件とレジスタ数をチェックしていますか? NVIDIA CUDA Occupancy Calculatorを使用して結果を調べていますか?たくさんのことが起こっている可能性があります。 – Patrick87
ありがとうパトリック... Xは、この投稿の目的のための変数です。私は通常 "x"を "1000000"のようなハードコードされた値に置き換えます。Talonmiesは良い投稿をしています。それが理由です – Matthew