DPC++ と OpenMP* オフロード処理のデバッグ
ホスト・プラットフォーム:向けにコードを記述、デバッグ、および最適化する場合、コードを改善する手順はシンプルです。デバッガーで実行中のビルド、キャッチ、およびクラッシュや不正な結果の原因となる言語レベルのエラーに対処し、プロファイル・ツールを使用してパフォーマンスの問題を特定して修正します。
コードの一部分が DPC++ または OpenMP* オフロードにより別のデバイスで実行されるアプリケーションでは、コードの改善はかなり複雑になる可能性があります。
DPC++ または OpenMP* オフロードの誤った使い方は、接続されたオフロードデバイスでプログラムが実行される際に、ジャストインタイム (JIT) コンパイルされるまで認識できないことがあります(この問題は、事前コンパイル(AOT)で確認できることがあります)。
プログラムの論理的なエラーによるクラッシュは、ホスト、オフロードデバイス、または各種計算デバイスを連携されるソフトウェア・スタックで予期しない動作として現れる可能性があります。原因を究明するには以下が必要です。
インテル® ディストリビューションの GDB* などの標準デバッガーを使用して、ホスト上のコードで何が起こっているかデバッグします。
デバイス固有のデバッガーを使用してオフロードデバイスの問題をデバッグします。ただし、デバイスのアーキテクチャー、計算スレッドを表現する規則、またはアセンブリーがホストとは異なることに注意してください。
カーネルとデータがデバイスとのやり取りを行う時にのみ中間ソフトウェア・スタックで現れる問題をデバッグするには、デバイスとホスト間の通信、および処理中に報告されるエラーを監視する必要があります。
ホストとオフロードデバイスで発生する可能性がある一般的なパフォーマンスの問題に加えて、ホストとオフロードデバイスが連携するパターンは、アプリケーションのパフォーマンスに大きな影響を与えることがあります。これは、ホストとオフロードデバイス間の通信を監視する必要があるもう一つのケースです。
ここでは、オフロードプログラムの実行中に利用できる各種デバッグ、およびパフォーマンスに解析ツールとその用法について説明します。
リソースをオフロードする拡張機能を備えた OpenMP* または SYCL* API を使用するアプリケーションのトラブルシューティングは、「高度な並列アプリケーションのトラブルシューティング」 (英語) のチュートリアルを参照してください。