1

均一な 3D グリッドで偏導関数を近似するための非常に単純なコードがあります。私は Scientific Linux で実行していますが、nvcc でコンパイルしてもエラーや警告は表示されません。cudaSuccessfor everyの戻り値をチェックしてcudaMalloc()呼び出すcudaMemcpy()と、実際にはすべて正常に機能します。

デバッガーなしでプログラムを実行すると、カーネルが実際に実行されていないように見えることを除いて、すべて正常に動作しているように見えます。出力用に割り当てた (すべてゼロを保持するように初期化された) 配列は、カーネルの起動後も、各スレッドに配列のインデックスを 5 に設定させるようなばかげたことをしても、すべてゼロのままです。

したがって、このコードで cuda-gdb を使用しようとすると、0x9 がcudaLaunch()返されます。エラー 9 が何であるかわからないため、Google 検索ですぐに見つけることができませんでした。コードを書き出す前に、番号 9 のエラーはどれですか? 数字が特定のエラーにどのように一致するかのリストはどこかにありますか?

エラー番号が特定のエラーにどのように対応するかを示すオンライン リストはありますか?

このマシンにはコードがありませんが、次のようなものです。

dim3 dimGrid(1,1,1);
dim3 dimBlock(mx,my,mz);
x_derivative<<<dimGrid,dimBlock>>>(f_d,df_d);

どこで (現在) mx=my=mz=64.

おそらく、64^3 のスレッド数は大きすぎますか? 明らかに、GPU 上の実際のスレッドはそれほど多くありません (Tesla C2050 fwiw です) が、任意の数のスレッドを指定できると思いましたか? これがアルゴリズムの「単純な」バージョンであることも注目に値するため、パフォーマンスを最適化するつもりはありません (まだ)。

4

2 に答える 2

1

ブロックあたりのスレッドの最大数は、デバイスに応じて 512 または 1024 です。そうです、64^3 は確かに大きすぎます。

于 2012-05-27T18:33:33.777 に答える
0

参考までに、起動後にエラー コードをチェックしていたら、多くの時間を節約できたでしょう。起動後に同期がないため、カーネルの起動の結果を確認すると、カーネルの完全な実行自体ではなく、カーネルの起動のみの結果が得られます。

于 2012-06-19T06:40:30.873 に答える