0

cuda-gdb からメモリ トレースを取得しようとしています。ただし、カーネル コードにステップ インすることはできません。nvcc フラグ -g -G および -keep を使用していますが、効果がありません。カーネル関数にブレークポイントを設定できますが、次の命令にアクセスしようとすると、カーネル関数の最後にジャンプします。私はSDKの例でこれを試しましたが、同じ動作を観察しました。私はcuda 5ツールキットに取り組んでいます。助言がありますか?ありがとう!

4

1 に答える 1

1

この動作は、カーネルの起動エラーの典型です。CUDA 呼び出しのリターン コードを確認してください。cudaDeviceSynchronizeデバッグのために、カーネル呼び出しの直後に追加の呼び出しを追加し、この呼び出しからの戻りコードを確認することが必要な場合があることに注意してください。これは、非同期カーネル起動の失敗の原因を取得する最も正確な方法です。

更新:デバッガーの外部で実行されているが cuda-gdb では実行されていないコードは、ほとんどの場合、グラフィカル環境から単一 GPU システムでデバッグしようとしたことが原因です。OS がハングアップするため、cuda-gdb は GPU を Xwindows と共有できません。

システムに GPU が 1 つしかない場合は、グラフィカル環境を終了し (X ウィンドウを終了するなど)、コンソールからデバッグする必要があります。

マルチ GPU システムを使用している場合は、Xwindow 構成 (Xorg.conf) を確認して、デバッグ用に予約した GPU を使用しないようにする必要があります。

于 2013-06-19T00:57:02.070 に答える