インテル® VTune™ Amplifier XE Linux* 版を使用するためのコンパイラー・オプション

インテル® DPC++/C++ コンパイラーインテル® Fortran コンパイラーインテル® oneTBBインテル® VTune™ プロファイラー
この記事は、インテル® ソフトウェア・ネットワークに掲載されている「Compiler Switches for Intel® VTune™ Amplifier XE for Linux*」(http://software.intel.com/en-us/articles/compiler-switches-for-intel-vtune-amplifier-xe-for-linux/) の日本語参考訳です。
はじめに: インテル® VTune™ Amplifier XE Linux* 版は、ほとんどのネイティブバイナリーを解析することができますが、適切なコンパイラー・オプションを利用することで解析がより容易になります。 インテル® VTune™ Amplifier XE Linux* 版を使用する際に推奨するコンパイラー・オプション:
オプション 目的
-g (強く推奨) インテル® VTune™ Amplifier XE は、シンボル情報を使用してアドレスとソース行を関連付けます。 また、これは “ユーザー・モード・サンプリングとトレース解析” (hotspot、コンカレンシー、ロックと待機)1 でコールスタックを参照するために必要となります。
“リリース” ビルド (例: -O2) (強く推奨) “リリース” ビルドで -O2 などの最適化オプション (-O0 を除く) を使用しない場合、コード領域の実行に要する時間の割合が変わり、パフォーマンス上問題にならないコード領域に対して解析や最適化を行うことになる可能性があります。
-shared-intel -shared-libgcc2 (推奨) これらのオプションを使用すると、インテル® VTune™ Amplifier XE で “ユーザー・モード・サンプリングとトレース解析” (hotspot、コンカレンシー、ロックと待機) を容易に実行できるようになります。 これらの設定を行うと、インテル® VTune™ Amplifier XE は、コール・スタックで libm 呼び出しと C ランタイム呼び出しを区別することができます。
-fno-inline -fno-inline-functions (場合により推奨) これらのオプションを使用すると、コンパイラーは関数をインライン展開しません。インテル® VTune™ Amplifier XE は、サンプルとインストルメント済み API を caller (呼び出し元) ではなく callee (呼び出し先) に割り当てます。コールスタックがより完全になり、オプションなしでインライン展開される、関数のサンプルとインストルメント済み API のソースコードを確認できます。 注: これらのオプションを使用すると、パフォーマンス上問題にならないコード領域に対して解析や最適化を行うことになる可能性があり、プログラムのパフォーマンスに大きな影響を与えることがあります。これらのオプションはインライン展開の効果を理解するために使用します。リリースビルドのアプリケーションの hotspot を特定する場合は、注意して使用してください。
インテル® スレッディング・ビルディング・ブロック (インテル® TBB) を使用してアプリケーションを作成する際に推奨するコンパイラー・オプション:
オプション 目的
-D TBB_USE_THREADING_TOOLS (推奨) このオプションを使用すると、インテル® VTune™ Amplifier XE でインテル® TBB に対する解析サポートが有効になります。注: このマクロは、-D_DEBUG または -DTBB_USE_DEBUG を使用してコンパイルすると自動的に設定されます。 TBB_USE_THREADING_TOOLS を設定しないと、インテル® VTune™ Amplifier XE は TBB 構文に関連する並行性 (コンカレンシー) の問題を正しく識別できません。
インテル® VTune™ Amplifier XE 用にインテル® コンパイラーを使用して OpenMP* アプリケーションをコンパイルする際に推奨するコンパイラー・オプション:
オプション 目的
-openmp (強く推奨) このオプションを使用しないと、インテル® VTune™ Amplifier XE は OpenMP* プラグマによる並列領域を識別できません。
-openmp-link dynamic2 (推奨) このインテル® コンパイラーのデフォルト設定は、インテル® VTune™ Amplifier XE 用にインストルメントを行う OpenMP* ランタイム・ライブラリーのダイナミック・バージョンを選択します。
インテル® VTune™ Amplifier XE Linux* 版を使用する際に推奨しない設定:
オプション 目的
“デバッグ” ビルド 例: -O0 (非推奨) 注: “リリース” ビルドでアプリケーションのパフォーマンスを最適化するオプションを使用すると、”リリース” バイナリーとしてコンパイルしたときにパフォーマンス上問題にならないコード領域に対して解析や最適化を行うことになる可能性があり、インテル® VTune™ Amplifier XE レポートのプロファイルに大きな影響を与える可能性があります。
-tcheck (使用しません) このオプションは、インテル® スレッド・チェッカーのインストルメンテーションの代替手法で、パフォーマンス解析中にオーバーヘッドが増加します。インテル® VTune™ Amplifier XE では、このオプションを使用しません。
-static -static-libgcc2 これらのオプションを使用すると、インテル® VTune™ Amplifier XE は “ユーザー・モード・サンプリングとトレース解析” (hotspot、コンカレンシー、ロックと待機)2 を実行しません。 注: インテル® コンパイラーで -fast オプションを指定すると、-static が有効になります。
-static-intel2 このオプション (インテル® コンパイラーのデフォルト設定) を使用すると、”ユーザー・モード・サンプリングとトレース解析” のコール・スタック・モードで、これらの関数がシステム関数として正しく識別できません。
-openmp-link static2 (使用しません) インテル® コンパイラー 11.0 およびインテル® Composer では、このオプションを使用すると OpenMP* ランタイム・ライブラリーのスタティック・バージョンを選択します。このバージョンの OpenMP* ランタイム・ライブラリーには、インテル® VTune™ Amplifier XE 用に必要なインストルメンテーション・コードが含まれません。
-tprofile (使用しません) このオプションは、インテル® スレッド・プロファイラーのインストルメンテーションの代替手法で、パフォーマンス解析中にオーバーヘッドが増加します。インテル® VTune™ Amplifier XE では、このオプションを使用しません。
-openmp_stubs (使用しません) このオプションを使用すると、OpenMP* コードがシングルスレッドで実行されます。
-msse4a, -m3dnow (使用しません) インテル® プロセッサーでサポートされない命令セットが使用され、インテル® VTune™ Amplifier XE で予期しない動作を引き起こすことがあります。
-debug [keyword] (非推奨) インテル® VTune™ Amplifier XE は、-debug full (-g を使用した場合のデフォルト) を使用すると最も適切に動作します。parallel、extended、emit-column、expr-source-pos、inline-debug-info、semantic-stepping、variable-locations を含むほかのオプションは、インテル® VTune™ Amplifier XE ではサポートされません。
-coarray コンカレンシー解析、ロックと待機解析は、Co-Array Fortran でスケーリングが制限されたロックを正しく識別できません。
注: 1) “ユーザー・モード・サンプリングとトレース解析” (hotspot、コンカレンシー、ロックと待機) でコールスタックを正しく処理するには、アプリケーションの実行ファイルとすべての共有ライブラリーで、次の 2 つのいずれかの設定が必要です。

a) シンボル: -g を使用します。このオプションを使用すると、ソースコードを表示できます。

b) フレームポインター: -fno-omit-frame-pointer を使用します。

注: -fexceptions (C++ のデフォルト) や -O0 のように、暗示的にフレームポインターを追加するオプションもあります。実行ファイル (と共有ライブラリー) にこの情報があることを確認するには、objdump -h <binary> コマンドを使用します。詳細は、.eh_frame_hdr セクションを参照してください。

2) ユーザー・モード・サンプリングとトレース解析 (hotspot、コンカレンシー、ロックと待機) は、次のライブラリーのダイナミック・バージョンで動作します。
  • インテル® コンパイラーで提供される OpenMP* ランタイム・ライブラリー (libiomp5.so または libguide40.so)
  • Posix スレッド・ライブラリー (libpthread.so)
  • C ランタイム・ライブラリー (libc.so)
  • C++ ランタイム・ライブラリー (libstdc++.so)
  • インテルの Libm ライブラリー (libm.so)

ユーザー・モード・サンプリングとトレース解析 (hotspot、コンカレンシー、ロックと待機) は、次のライブラリーのスタティック・バージョンでは動作しません。

  • インテル® コンパイラーで提供される OpenMP* ランタイム・ライブラリー (libiomp5.a または libguide4.a)
  • Posix スレッド・ライブラリー (libpthread.a)
  • C ランタイム・ライブラリー (libc.a)
  • C++ ランタイム・ライブラリー (libstdc++.a)
  • インテルの Libm ライブラリー (libm.a)

ユーザー・モード・サンプリングとトレース解析でライブラリー/関数のスタティック・リンクを使用すると、次のような問題が起こります。

•a)     インテル® コンパイラーで提供される OpenMP* ランタイム・ライブラリーのスタティック・バージョンは、コンカレンシー、ロックと待機に必要なインストルメンテーション・コードを含みません。

•b)     “ユーザー・モード・サンプリングとトレース解析” のコール・スタック・モードは、ユーザーコードとシステム関数を正しく区別できません。

•c)     さまざまな C ランタイム関数をエクスポートしないと、”ユーザー・モード・サンプリングとトレース解析” (hotspot、コンカレンシー、ロックと待機)1 を実行できません。解決方法はいくつかあります。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 関数のオプションを含むファイルです。

注記: この記事は、開発者にとって関心が高いと思われるオプションについて説明しました。ほとんどのオプションはインテル® VTune™ Amplifier XE Linux* 版で動作しますが、すべてのオプションおよびオプションの組み合わせをテストした訳ではありません。ほかのオプションに関する情報をお持ちの場合は、この記事に対するご意見をお寄せください。特定のオプションに関する質問がある場合は、インテル® VTune™ Amplifier XE フォーラム (英語) に質問を投稿してください。 バージョン: インテル® VTune™ Amplifier XE 2011 Linux* 版 インテル® C++/Fortran コンパイラー 11.x/12.x Linux* 版 GNU C/C++ コンパイラー 3.4.6 インテル® ソフトウェア製品のパフォーマンス/最適化に関する詳細は、最適化に関する注意事項 (英語) を参照してください。
タイトルとURLをコピーしました