0

ベクトル間の距離を計算するカーネルを実装しました。プログラムは期待どおりに実行され、結果は CPU と同じです。プログラムは、デバイスで使用されているリソースを解放し ( cudaFree)、正常に終了します。さらに、終了する前にcudaDeviceReset().

すべての CUDA API 呼び出しはラップされ、Eclipse Nsight API の例のようにエラーをチェックします。プログラムの実行でエラーは報告されません。

グローバルメモリへの読み取りまたは書き込みアクセスを実行する前に、メモリ位置インデックスのカーネルチェック。つまり、if ( idx < N ) ...

CPU では、ループは、カーネルの呼び出しの前と次の反復の前に aと aを実行する実行p時間です。Aは、カーネルの後、cudaFree 呼び出しの前に配置され、GPU によって起動された作業が完了するのを待ちます。cudaMalloccudaMemcpy(HtoD)cudaFree()cudaDeviceSynchronize()

cuda-memcheck、リリースおよびデバッグ モードでプログラムを分析するときにエラーを報告しません。

ただし、プログラムの実行中にコンピューターが再起動することがありますが、エラーを追跡するための繰り返しパターンが見つかりません。だから、私の質問は次のとおりです。このエラーをどのようにトラップできますか?

Xシステムを実行しているUbuntu x86_64 GNU/LinuxでCUDAリリース5.0、V0.2.1221を使用しています。デバイスは GTX480 で、インストールされているドライバーのバージョンは 304.54 です。

4

1 に答える 1

1

これは、デバイスの温度に関連する問題です。

@Robert Crovella のコメントに従って、x86_64 GNU/Linux 専用サーバー (X システムは実行されていません) でカーネルを実行しました。これも CUDA 5 を使用しましたが、GTX680 を使用しました。プログラムは常に正常に実行されます。

コマンドを使用して、使用されている GPU メモリと温度を追跡したnvidia-smiところ、温度が 70 度を超えるとコンピューターがリセットされることがわかりました。

したがって、この問題はメモリ リークやメモリ アクセス違反とは関係ありませんが、デバイスの集中的な使用に関係しています。

于 2013-01-17T11:51:23.343 に答える