オフロードのモデル化パースペクティブを実行した後、[Accelerated Regions (アクセラレートされた領域)] タブに次のいずれかが表示されます。
コード領域が重複しています。
コード領域が誤った場所にあります。
コード領域の [トリップカウント] カラムグループのいずれかのカラムでレポートされたトリップカウントの数が正しくありません。
コードを含む領域にシステムモジュールの診断メッセージがあるためモデル化できません。システムモジュールをオフロードできない理由。
これらの症状は、インテル® Advisor がサーベイ中にアプリケーションのコールツリーを誤って検出することを意味します。
データ並列 C++ (SYCL*) またはインテル® oneAPI スレッディング・ビルディング・ブロックでプログラムモデルを使用すると、コールツリーが壊れることがあります。これらのプログラムモデルは、複雑なスケジューラーを使用して多数のスレッドでコードを実行しますが、インテル® Advisor はコールスタックを正しく検出できないことがあります。その結果、一部のコード・インスタンスではレポートにメトリックがないか、不正なメトリックが含まれる可能性があり、コールツリーが壊れます。
これは、次の理由で発生する可能性があります。
コールスタックが誤って検出されました。
過度な最適化が行われました。
デバッグ情報に問題があります。
注目するすべてのホットスポットとコードが壊れたコールツリーの外にある場合、これは問題とはなりません。これは無視できます。
壊れたコールツリーの問題を解決するには、以下を行います。
-g オプションを使用してバイナリーがコンパイルされていることを確認してください。
-debug inline-debug-info オプションを追加して再コンパイルすると、拡張デバッグ情報が利用できます。
低い最適化べレルで再コンパイルします: -O2 を使用します。
advisor CLI でパフォーマンス・メトリックを収集する場合: サーベイ解析で次を試してください。
サーベイ解析の実行時には、--stackwalk-mode=online オプションを削除します。
--no-stack-stitching オプションを追加する。
ターゲットデバイスでの推定実行時間が元の実行時間を上回る場合、特定のコード領域のみをオフロードします。--select-loops を使用してパフォーマンスのモデル化を再実行し、注目するループを指定して、--enforce-offloads によりすべてのループが確実にオフロードされるようにします。例:
advisor-python <APM>/analyze.py <project-dir> --select-loops=[<file-name1>:<line-number1>,<file-name1>:<line-number2>,<file-name2>:<line-number3>] --enforce-offloads
詳細については、特定のループのオフロードを強制するを参照してください。
複雑なスケジューラーで実行されるマルチスレッド・コードをモデル化すると、コード領域のトリップカウントが極端に低くなり、同じ領域のループの複数インスタンスがスケジューラーに存在する可能性があります。これは、オフロードのモデル化がコールスタックを正しく検出できなかったことを意味します。--enable-batching オプションを指定して平均トリップカウント数の代わりに合計実行数を使用し、意図的にトリップカウント数を増やします。