2

Parallel NSightを使用してデバッグしたい追加の CUDA( .cu ) ファイルを含む OpenCV アプリケーションがあります。NSight デバッグは CUDA サンプル (OpenCV .cppファイルなし) で動作しますが、アプリケーションでデバッガーを起動しようとすると、デバッガーは多くの追加モジュールをロードし (「シンボルがロードされていません」)、次のエラーでクラッシュします:

OpenCV Error: Gpu API call (out of memory) in unknown function, file ..\.\
opencv-2.4.4\modules\core\src\gpumat.cpp, line 1415  

また、「Microsoft Visual c++ Debug Library」というウィンドウが開き、「Debug error!」というメッセージが表示されます。および「R6010 アボートが呼び出されました」。

問題は何ですか?このモジュールのロードを回避できますか? それらが必要かどうかはわかりません。

また、CUDA カーネルを正しくデバッグする方法は? CPU と GPU のコードを同時にデバッグできないことはわかっています。

編集:

200 を超えるカーネルをロードするとクラッシュすることは間違いありません。単一の gpu::GpuMat 宣言には 100 を超えるカーネル (モジュール) があり、残りは SURF、BFM などのアルゴリズムで実行されます...

ブレークポイントを配置したカーネル (つまり、OpenCV のカーネルではなく、自分のカーネル)のみをデバッグしたいと考えています。何らかの方法で他のモジュール/カーネルを除外することは可能ですか?

ありがとう!

4

1 に答える 1

1

すべての OpenCV カーネル用にシンボルがコンパイルされているように聞こえますが、これは望んでいるものではありません。CUDA デバッグ フラグを使用して OpenCV をビルドしていないことを確認してください。具体的には、-g/-G/--debug* フラグが nvcc に渡されることは望ましくありません。

多くのカーネルをデバッグしても、パフォーマンスに影響はありますが、クラッシュは発生しません。Nsight Visual Studio Edition Early Access サイトから現在入手可能な Nsight 3.0 にアップグレードすることをお勧めします。このバージョンでは多くの改善が行われました。

于 2013-04-22T23:28:26.010 に答える