1

私のCUDAコードは、デバッグモードで正しい結果を生成します。ただし、リリースモードでは、同じコードでガベージ結果が生成されます。スレッド間の同期は、デバッグモードとリリースモードで異なる動作をする可能性がありますか?

4

2 に答える 2

2

-O0 で生成されたコードは、最適化されていないコードになり、競合状態を隠す可能性のあるグローバルおよびローカル メモリ アクセスが大幅に増加します。共有メモリに競合状態があると思われる場合は、いくつかの形式の競合状態検出をサポートする新しい CUDA 5.0 プレビュー メモリ チェッカーを試すことができます。最善の策は、2 つのスレッド間でメモリを共有した場所を探し、同期スレッドのスレッド フェンスが欠落しているかどうかを判断することです。

于 2012-05-25T01:37:14.837 に答える
1

競合状態の問題があると思います。コードを再編成し、必要に応じて同期を追加できます。デバッグモードでは、スレッドは通常順番に実行されるため、この問題は発生しません。

于 2012-05-23T19:59:35.280 に答える