インテル® VTune™ プロファイラー・ユーザーガイド
インテル® VTune™ プロファイラーは、Linux* ターゲットシステム上でほとんどのネイティブバイナリーを解析できます。次の設定は、パフォーマンス解析をより生産的におよび簡単に行うために推奨されています。
使用するスイッチ |
説明 |
---|---|
-g (強く推奨) |
アドレスとソースコード行を関連付けて、ユーザーモード・サンプリングとトレース収集タイプ (ホットスポットとスレッド化) でコールスタックを適切に追跡するには、シンボル情報の生成を有効にする必要があります。 |
リリース ビルドまたは -O2 (強く推奨) |
コンパイラーの最適化機能を最大限に有効にして、コンパイラーが最適化できないパフォーマンス上の問題をインテル® VTune™ プロファイラーで特定します。 |
-shared-intel (インテル® C++ コンパイラー) -shared-libgcc (GCC コンパイラー) |
ユーザーコードから libm と C ランタイム呼び出しをシステム関数として識別するには、適切なフィルターモードをインテル® VTune™ プロファイラーの収集結果に適用します。 |
-debug inline-debug-info (インテル® C++ コンパイラー) |
インテル® VTune™ プロファイラーがインライン展開された関数を特定し、選択されたインラインモードに応じてインライン展開された関数自身、または呼び出し元にインライン展開された関数のシンボルを関連付けることを可能にします。これは、GCC 4.1 以降ではデフォルトのモードです。 |
TBB_USE_THREADING_TOOLS |
インテル® VTune™ プロファイラーによるインテル® スレッディング・ビルディング・ブロック (インテル® TBB) 解析を有効にします。このマクロは、-D_DEBUG または -DTBB_USE_DEBUG を使用してコンパイルすると自動的に設定されます。 TBB_USE_THREADING_TOOLS を設定しないと、インテル® VTune™ プロファイラーはインテル® TBB 構文に関連する並行性の問題を正しく識別できません。 |
-qopenmp (強く推奨) (インテル® C++ コンパイラー) |
インテル® VTune™ プロファイラーで OpenMP* プラグマによる並列領域を識別します。 |
-qopenmp-link dynamic (インテル® C++ コンパイラー) |
インテル® コンパイラーは、インテル® VTune™ プロファイラー向けにインストルメントされた OpenMP* ランタイム・ライブラリーのダイナミック・バージョンを選択できるようにします。通常、このオプションはインテル® コンパイラーがデフォルトで有効にします。 |
-parallel-source-info=2 (インテル® C++ コンパイラー) |
OpenMP* または自動並列化コードの生成時にソースの位置情報の出力を有効/無効にします。2 はソース位置の規制レベルを示し、コンパイラーにパス、ファイル、ルーチン名、および行情報を出力するようにコンパイラーに指示します。 |
-gline-tables-only -fdebug-info-for-profiling インテル® oneAPI DPC++ コンパイラー |
DPC++ アプリケーションの GPU 解析向けのデバッグ情報の生成を有効にします。 |
-Xsprofile インテル® oneAPI DPC++ コンパイラー |
FPGA アプリケーション解析のパフォーマンス・データをソースレベルでマッピングできるようにします。 |
次のコンパイラー・オプションは推奨されません。
使用しないオプション |
理由 |
---|---|
デバッグビルドまたは -O0 |
アプリケーションのパフォーマンスに影響するオプションを使用すると、”リリース” ビルドとしてコンパイルしたときにパフォーマンス上問題にならないコード領域に対して解析や最適化を行うことになる可能性があり、パフォーマンス・プロファイルに大きな影響を与える可能性があります。 |
-static -static-libgcc |
インテル® VTune™ プロファイラーが、ユーザーモード・サンプリングとトレース解析タイプを実行するのを妨げます。詳細は、以下をご覧ください。 注インテル® コンパイラーで -fast オプションを指定すると、-static が自動的に有効になります。 |
-static-intel |
ユーザーモード・サンプリングとトレース解析タイプがシステム関数を区別できないようにします。インテル® コンパイラーではデフォルトのオプションです。 |
-qopenmp-link static |
インテル® コンパイラーの静的バージョンの OpenMP* ランタイム・ライブラリーを選択します。このバージョンの OpenMP* ランタイム・ライブラリーは、インテル® VTune™ プロファイラーの解析で必要なインストルメント・データを含みません。 |
-qopenmp_stubs |
OpenMP* コードが並列化されないようにします。 |
-msse4a、-m3dnow |
インテル® プロセッサーがサポートしない命令を使用するバイナリーを生成すると、インテル® VTune™ プロファイラーのプロファイルは予測できない振る舞いをする可能性があります。 |
-debug [parallel | extended | emit-column | expr-source-pos | semantic-stepping | variable-locations] |
インテル® VTune™ プロファイラーは、-debug full (-g を使用した場合のデフォルト) を使用すると最も適切に動作します。parallel、extended、emit-column、expr-source-pos、semantic-stepping、および variable-locations を含むほかのオプションは、インテル® VTune™ プロファイラーではサポートされません。詳細は、-debug inline-debug-info をご覧ください。 |
-coarray |
Co-Array Fortran でスケーリングを制限するロックをスレッド化解析が正しく識別するのを妨げます。 |
実行コードとすべての共有ライブラリーのユーザーモード・サンプリングとトレース解析 (ホットスポットとスレッド化) を成功させるには、次のオプションを使用してコールスタックを適切に監視できるようにします。
-g オプションを使用して、シンボル情報を生成し、ソースコードレベルの解析を有効にします。
フレームポインター解析を有効にするには、-fno-omit-frame-pointer オプションを使用します。
バイナリーにフレームポインターを追加するいくつかのオプションがあります。例: -fexceptions (C++ のデフォルト) または -O0。実行可能ファイル (および共有ライブラリー) にこの情報が含まれることを確かめるには、objdump -h <binary> コマンドを使用して、.eh_frame_hdr セクションが含まれることを確認します。
ユーザーモード・サンプリングとトレース解析タイプは、次の動的バージョンのライブラリーで上手く動作します。
ライブラリー |
動的バージョン (推奨) |
静的バージョン (非推奨) |
---|---|---|
OpenMP* ランタイム (インテル® コンパイラーが提供) |
libiomp5.so または libguide40.so |
libiomp5.a または libguide4.a |
POSIX* スレッド |
libpthread.so |
libpthread.a |
C ランタイム |
libc.so |
libc.a |
C++ ランタイム |
libstdc++.so |
libstdc++.a |
Intel Libm |
libm.so |
libm.a |
ユーザーモード・サンプリングとトレース解析には、ライブラリー/関数とスタティックにリンクされた場合、次のような制限があります。
インテル® コンパイラーで提供される OpenMP* ランタイム・ライブラリーの静的バージョンは、スレッド化解析タイプに必要なインストルメンテーション・コードを含みません。
そのため、コールスタック・モードで、ユーザーコードとシステム関数を正しく分類できません。
ユーザーモード・サンプリングとトレース解析では、いくつかの C ランタイム関数がエクスポートされないと実行できません。解決方法はいくつかあります。1 つの方法として、GCC コンパイラーの -u コマンドを使用する方法があります。
-u malloc
-u free
-u realloc
-u getenv
-u setenv
-u __errno_location
アプリケーションが Posix スレッドを生成する (明示的に、または OpenMP* ライブラリーや他のスタティック・ライブラリーを介して) 場合、次の関数を定義する必要があります。
-u pthread_key_create
-u pthread_key_delete
-u pthread_setspecific
-u pthread_getspecific
-u pthread_spin_init
-u pthread_spin_destroy
-u pthread_spin_lock
-u pthread_spin_trylock
-u pthread_spin_unlock
-u pthread_mutex_init
-u pthread_mutex_destroy
-u pthread_mutex_trylock
-u pthread_mutex_lock
-u pthread_mutex_unlock
-u pthread_cond_init
-u pthread_cond_destroy
-u pthread_cond_signal
-u pthread_cond_wait
-u _pthread_cleanup_push
-u _pthread_cleanup_pop
-u pthread_setcancelstate
-u pthread_self
-u pthread_yield
これらの関数を明示的に定義する最も簡単な方法は、上記のオプションを含むファイルを作成して、gcc や ld に渡すことです。次に例を示します。
gcc -static mysource.cpp @Cdefs @Pdefs
Cdefs は上記で必要な必須 C 関数のオプションを含むファイルで、Pdefs は上記で必要な必須 POSIX 関数のオプションを含むファイルです。
最適化に関する注意事項 |
---|
インテル® コンパイラーでは、インテル® マイクロプロセッサーに限定されない最適化に関して、他社製マイクロプロセッサー用に同等の最適化を行えないことがあります。これには、インテル® ストリーミング SIMD 拡張命令 2 (インテル® SSE2)、インテル® ストリーミング SIMD 拡張命令 3 (インテル® SSE3)、ストリーミング SIMD 拡張命令 3 補足命令 (SSSE3) 命令セットに関連する最適化およびその他の最適化が含まれます。インテルは、他社製マイクロプロセッサーに関して、いかなる最適化の利用、機能、または効果も保証いたしません。本製品のマイクロプロセッサー依存の最適化は、インテル® マイクロプロセッサーでの使用を前提としています。インテル® マイクロアーキテクチャーに限定されない最適化のなかにも、インテル® マイクロプロセッサー用のものがあります。この注意事項で言及した命令セットの詳細については、該当する製品のユーザー・リファレンス・ガイドを参照してください。 注意事項の改訂 #20110804 |