3

CUDAにはたくさんのドキュメントとガイドがありますが、私が見つけられなかったのは、コンパイルするが、「不特定の起動失敗」などの不可解で漠然としたエラーメッセージを受け取るカーネルを診断する方法の説明です。通常の「これらのブロック/グリッド構造は意味がありますか?」等

どういうわけかcubinファイルを傍受し、メモリ構造などの静的分析を行うことはできますか?私の許しを許してください、しかし私はどこにも決定的な、ばかガイドを見つけることができません。

みなさん、良い週末をお過ごしください。

私が探しているもの

  • cubin中間ファイルを分離する方法
  • 何が起こっているのかを理解するために後でそれをどうするか、具体的には、コードがハードウェア要件に違反していないか、またはどこかで1つずつエラーがないかどうかを確認するためにレジスタとメモリ構成を行います。

後でこれに遭遇する人のために(私は数ヶ月後に自分のクエリに表示され続けるSO質問を作成する習慣があるようです...)CUDA-Memcheckは、「エラーのチェック」ハンドラーよりもはるかに興味深い応答を提供します。例えば

========= Error: process didn't terminate successfully
========= Invalid __global__ write of size 4
=========     at 0x00000040 in decomp
=========     by thread (1,0,0) in block (0,0,0)
=========     Address 0x00101024 is out of bounds
=========
========= ERROR SUMMARY: 1 error

そのエラーメッセージを説明する必要さえありません...

4

3 に答える 3

3

CUDAでは、「不特定の起動失敗」はセグメンテーション違反に相当します。

最近のツールキットバージョンには、cuda-memcheckと呼ばれるユーティリティが付属しています。実行中のカーネル内のメモリトランザクションのvalgrindのような分析を実行し、カーネルでのバッファオーバーフローまたは不正なポインタの使用を報告します。これを、さらに分析するための開始点として使用できます。Fermiカードを使用している場合は、カーネル内のprintfサポートもあります。カーネル内のエラー状態をテストおよび報告するために、独自のアサート関数を生成することは難しくありません。

CUDAにはソースレベルのデバッガーも付属していますが、それを使用するには専用のGPUが必要です。Linuxを使用していて、GPUが1つしかない場合は、X11を終了し、コンソールTTYから実行します。

于 2011-04-16T16:37:45.630 に答える
2

[前処理されたファイルを保持]フラグを設定した場合--keepを設定すると、CUBINファイルと他の多くのファイルが残り、確認できるようになります。しかし、これがそれほど役立つかどうかはわかりません。

于 2011-04-16T16:18:41.987 に答える
2

cudaGetLastError()を使用していますか?「不特定の起動失敗」を与えるためにまだ使用されていない場合、それはより多くの情報を与えるのに役立つ可能性があります。

于 2011-04-16T16:26:28.887 に答える