16

OpenCL C カーネル コードを含む PyOpenCL コードがあります。アプリを実行すると、セグメンテーション違反エラーが発生します。デバッガーまたは他の開発ツールでこのようなエラーをデバッグするにはどうすればよいですか? 問題を見つけるために正確に何をすべきかわかりません。または何かのオプションを念頭に置いていますが、printfより強力なものを使用したいです。

カーネルコードのエラーだと思いますので、まずはカーネルコードをデバッグしたいと思います。

アップデート。私はLinux(Arch Linux、3.6.11)、python 2または3、PyOpenCl 2012.1を使用しています

4

4 に答える 4

4

カーネルのデバッグは、実装に依存する問題です。Linux では、CPU で AMD の CL 実装を使用し、カーネルを -g でコンパイルし、gdb を使用するのが最善の方法です。これについては、次のプログラミング ガイドに説明があります。

AMD CL ドキュメンテーションページ

于 2013-02-03T19:59:54.240 に答える
4

ATI/AMD GPU の代わりに nvidia を使用している場合、nvidia SDK での OpenCL サポートは...あまり期待できません。

Intel は、最近のプロセッサ用に CPU ベースの OpenCL SDK を提供しています。各パッケージで「fakeroot Alien --to-deb」を実行してから、「dpkg -i」を実行する必要があります)。

その SDK では、build() のコンパイラ オプションに「-g」および「-s filename」フラグを追加する必要があります。(カーネルがプログラム内に文字列としてのみ存在する場合は、カーネルを実行する直前にファイルに保存するコードを追加できます。) 次に、「gdb --args python-cmd」を試してください。「break」と入力してデバッグを開始できます。 「mykernel」シンボルが動的にロードされるのを待つかどうか尋ねられたら Y と答え、「run」と入力します。

コマンドを手動で入力してデバッガーを実行したら、実行可能なシェル スクリプトを作成して、お気に入りの .py ファイルをデバッガーで起動することをお勧めします (これは、アプリケーションの起動にハッカーを追加するのにも便利な場所です。たとえば、python -m unittest、 PYTHONPATH、virtualenv、LD_LIBRARY_PATH、LD_PRELOAD など)。

于 2013-07-14T00:58:42.790 に答える
0

ソフトウェアスイートを完全にテストせずに結論に飛びつくことはありません。PyOpenClの最後にリリースされたバージョンを実行しています。正しく入力されていないものをモジュールに渡していて、バックエンドモジュールが、正しく入力されていないものを使用する前に必要なエラーチェックを行わない可能性があります(コードがない場合、デバッグを実際に支援することはできません)利用可能になりました)

さまざまなpyopencl呼び出しの直前に、 Pythonデバッガーを使用してさまざまなブレークポイント()を設定し、コード内のどこでセグメント障害が発生しているかを確認しようとしましたか?import pdb; pdb.set_trace()これは間違いなくあなたの最初の仕事になるはずです。セグメントの障害がどこにあるかを見つけたら、pyopencl examples / apiを注意深く調べて、エラーが発生した理由を確認する必要があります。

于 2013-01-31T12:25:40.197 に答える