2017-02-19 11 views
1

私は、複数のデバイスコンテキストを使用するプログラムで作業しています。それぞれは別々のストリームで処理されます(多くの場合、同期されます)。問題は、cuda-memcheck --tool initcheckで実行した場合にのみ正しい結果が得られることです。私の質問は:initcheckはCUDAプログラムの実行にどのように影響しますか?

initcheckの実行プログラムは実行を変更しますか?

複雑なレベルのため、私はコードを共有したりMCVEを作成することができませんので、この質問をむしろ一般的に扱ってください。このプログラムは、nvidiaが提供するすべてのデバッグツールでチェックされ、エラーは発生しませんでした。 http://docs.nvidia.com/cuda/cuda-memcheck/#what-is-initcheckから

+0

私はシリアル化を推測します。 – talonmies

答えて

1

initcheckツールは、実行時初期化されていないデバイスのグローバルメモリ アクセス検出器です。このツールは、デバイスのグローバルメモリがデバイスサイドの書き込みを介して、または のcudaMemcpy/cudaMemsetによって初期化されずにアクセスされたときに、 がアクセスされたことを識別できます。

現在のところ、このツールは、デバイスグローバル メモリへのアクセスの検出のみをサポートしています。 [...] 注:initcheckツールは、メモリアクセスエラーチェックを実行しません。

エラーが実際に検出されないが、ツールがオフのときに異なる結果が得られた場合、私の最初の疑いは、並行処理エラー(read-after-writeなど)です。上記のようなツールは通常、プログラムの一部を遅くします。そのような問題に影響する可能性があります。

これはちょうど推測ですが...

+0

あなたの答えをありがとう! Docsが私の最初の選択でしたが、情報の欠如が私にここで質問をさせました。私はいくつかの並行処理の問題についても賭けているが、その起源をどのように特定するかについては何の手がかりも持っていない。私は 'initcheck'が単にオーバーヘッドを追加する以上のことをしていることを期待していました。 – pSoLT

+0

これは何かをします:初期化されたメモリのみを使用するかどうかをチェックしますが、エラーがなければ問題ありません。 – CygnusX1

+0

問題が異なることが判明しました。カーネルに渡している間、ホスト側のデバイスポインタ演算が正しく動作しなかったようです。とにかく、あなたの助けをありがとう! – pSoLT

関連する問題