0

私は奇妙な問題を抱えています..エミュレーションで正しく実行され、すべての結果が表示されるCUDAコードを書きました..しかし、ハードウェア「G210」で実行すると..結果メモリの結果は常に0です

カーネルに 2 つのベクトルを渡します。1 つはランダム変数で、もう 1 つはゼロに初期化されます。コードは最初のベクトルを共有メモリにコピーし、いくつかのスワッピングやその他の操作を実行してから、結果を 2 番目のベクトルに書き戻します (最初の0)

私は倍精度を使用しています、-arch sm13 フラグが使用され、すべてのメモリ割り当ても sizeof(double) を使用します..

カーネルが呼び出されているかどうかを確認しました..ここでは問題ありません..cudaMemCpyには問題はありません..

何が問題になる可能性があります.. :(なぜエミュレーションでは機能するのにHWでは機能しないのですか

私はかなり混乱しています..何かアイデアはありますか?

4

3 に答える 3

2

私の記憶が正しければ、GeForce 210 は Compute Capability 1.3 をサポートしていません。つまり、doubles をサポートしていません。

シングルを使用するようにコードを書き直し、-arch=sm_12 でコンパイルしてみてください。

于 2010-05-21T09:18:12.707 に答える
1

エミュレーション モードは、GPU の正確なシミュレーションではありません。並行スレッドの動作や、これから発生する可能性のあるすべての問題をシミュレートしようとはしません。カーネルをデバッグするには、問題を特定できるまで、カーネルを小さなバージョンに分割する必要があります。

于 2010-05-21T05:55:08.287 に答える
1

エミュレーションは別のコンパイラを使用し、すべてのメモリはホスト上にあり、実行中のスレッドは 1 つだけです。エミュレーションでバグが見つかった場合は、コードにバグが見つかりました。エミュレーションで動作する場合、バグがないわけではありません。あなたの質問は基本的に、バグのあるコードを持っています。私のバグは何ですか?

アドバイス: すべての戻り値を確認してください。エラーチェックの方法を学びます。デバイスのエラーは、CPU コードに関して非同期に表示される可能性があることに注意してください。デバッガーを使用します (これを簡単にするために安価なローエンドの nvidia GPU を購入することもできます)。デバッグよりも printf を好む場合は、cuprintf を試してみてください (cuda フォーラムで入手できます)。nvidia cuda フォーラムで助けを求めてください。

于 2010-05-21T06:19:16.140 に答える