インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
インテル® C++ コンパイラーのガイド付き自動並列化機能は、シリアルコードのアプリケーション・パフォーマンスを向上させるためのアドバイスを提供します。コンパイラーの自動ベクトル化および並列化機能を利用し、データ操作の効率を向上させるための変更を提案します。実行パフォーマンスを向上するためにスレッド化されたコードを実装する必要はありません。また、コードがスレッド化または並列化されている必要もありません。
このツールを起動するには、[Q]guide[=n] コンパイラー・オプションを使用します。このオプションを使用すると、コンパイラーはメッセージを出力し、アプリケーションのパフォーマンスを最適化する方法を推奨します。また、[Q]guide-vec、[Q]guide-par、[Q]guide-data-trans などの特定のコンパイラー・オプションを使用して、アプリケーションのベクトル化、並列化、データ変換についての各アドバイスを得ることもできます。
ガイド付き自動並列化オプションが使用されると、コンパイラーは診断アドバイスのみを出力します。オブジェクト・ファイルや実行ファイルはこのモードでは作成されません。オプションの説明については、次の表を参照してください。
構文 |
説明 |
---|---|
[Q]guide |
自動ベクトル化とデータ変換解析のアドバイスのレベルを設定します。 自動ベクトル化のアドバイスを得るには、[Q]parallel オプションを [Q]guide オプションと一緒に使用してください。 |
[Q]guide-par |
自動並列化解析のみのアドバイスのレベルを設定します。 注このアドバイスを得るには、[Q]parallel オプションを [Q]guide-par オプションと一緒に使用してください。 |
[Q]guide-vec |
自動ベクトル化解析のアドバイスのレベルを設定します。 |
[Q]guide-data-trans |
データ変換解析のアドバイスのレベルを設定します。 |
上記のすべてのオプションで、オプション引数 n はアドバイスのレベルを指定します。n には、1-4 の値を指定します。n が指定されない場合のデフォルトは 4 です。n=1 または 2 を指定した場合、標準レベルのアドバイスが提供されます。
n=3 または n=4 を指定すると、詳細なメッセージが得られます。例えば、特定のループの入れ子構造を最適化する方法についてのメッセージや、ループの入れ子構造内で例外処理が最適化に与える影響に関するメッセージが出力されます。あるいは、コストモデリングに関する追加情報をコンパイラーに提供する方法についてメッセージが得られることもあります (反復回数などの予想値)。
[Q]guide オプションでアドバイスのレベルを指定し、個々のガイドオプションで異なるアドバイスのレベル (n の値) を設定すると、各ガイドオプションの値が [Q]guide オプションに指定された設定よりも優先されます。
[Q]guide オプションでアドバイスのレベルを指定せず、個々のガイドオプションでアドバイスのレベルを指定した場合、個々のガイドオプションで渡されたアドバイスのレベルのうち最も高い値で [Q]guide オプションが有効になります。
ガイド付き自動並列化ツールは、シリアルコードのすべて、またはコードの各部分を解析し、アドバイスメッセージを生成します。デフォルトでは、生成されたこのメッセージは stderr に出力されます。
ファイルに保存するには、次の表に示すオプションを使用してください。
この表のオプションは、[Q]guide、[Q]guide-par、[Q]guide-vec、[Q]guide-data-trans オプションとともに使用する必要があります。そうでない場合、オプションは無視されます。
構文 |
説明 |
---|---|
[Q]guide-file |
ガイド付き自動並列化のコンパイルで生成されたすべてのメッセージを指定したファイルに保存します。 |
[Q]guide-file-append |
ガイド付き自動並列化の実行中に生成されたすべてのメッセージを追加するファイルを指定します。 |
上記のオプションでは、file_name 引数にパスを含めることもできます。パスを指定しない場合、ファイルは現在の作業ディレクトリーに作成されます。file_name と同じ名前のファイルがすでに存在する場合、[Q]guide-file オプションを使用するとファイルは上書きされます。file_name に拡張子を含めない場合は、拡張子 .guide が追加されます。
ガイド付き自動並列化の解析をアプリケーションの特定の領域 (hotspot) に制限する場合は、以下の表に示すオプションを使用します。
構文 |
説明 |
---|---|
[Q]guide-opts |
string で識別される指定したコード要素を解析します。 |
[Q]guide-profile |
[Q]guide オプションと一緒に使用すると、ループ・プロファイラーのデータファイル (1 つまたは複数) を指定できます。 |
[Q]guide-opts オプションを、[Q]guide、[Q]guide-vec、[Q]guide-par、[Q]guide-data-trans のようなガイド付き自動並列化オプションとともに使用してください。string 引数を使用して、特定の領域 (hotspot) の情報を提供します。string 引数には、次の変数を複数指定できます: filename、routine、range。コンパイラーは string 引数を解析して、エラーがあれば構文エラーを出力します。
Windows* 構文
/Qguide-opts:string
Linux* および macOS* 構文
-guide-opts=string
string 引数を使用する場合は次のガイドラインに従ってください。
有効なファイル名、ルーチン名、行番号のみを使用してください。ガイド付き自動並列化ツールは無効な値を無視し、無視した内容を示した診断メッセージを発行します。
ルーチン名は一重引用符で囲みます。オリジナルのソース名 (復号化された名前) をルーチン名として指定します。ルーチン名だけでは、ルーチンを一意に識別できないことがあります。その場合には、追加の引数情報を指定する必要があります。次に例を示します。
Linux* および macOS*:
-guide-opts="foo.cpp,'CLHEP::StaticRandomSta::restore(std::basic_istream<char,std::char_traits<char>>&)'"
-guide-opts="bar.f90,'module_1::routine_name'"
-guide-opts="baz.c,'c_routine_name'"
Windows*:
/Qguide-opts:"foo.cpp,'CLHEP::StaticRandomSta::restore(std::basic_istream<char,std::char_traits<char>>&)'"
/Qguide-opts:"bar.f90,'module_1::routine_name'"
/Qguide-opts:"baz.c,'c_routine_name'"
指定されたルーチン名に対して、最初にガイド付き自動並列化ツールは、提供されたルーチン情報を使用してルーチンを一意に識別しようとします。一意に識別できない場合、指定されたルーチン名を持つすべてのルーチンを選択します。そして、引数情報があればそれを使って、選択肢を絞ります。
インライン展開を使用する場合、呼び出し先行番号を使用します。生成されたメッセージでもその呼び出し先行番号が使用されます。
あるいは、[Q]guide-profile オプションと [Q]guide オプションを一緒に使用して、自動でアプリケーション・コード中の特定の hotspot に対象領域を絞ることができます。
Windows* 構文
/Qguide-profile:filename | dir [, [filename|dir]...]
Linux* および macOS* 構文
-guide-profile=filename | dir [ , [ filename | dir ] ... ]
[Q]guide-profile オプションと一緒に使用した場合に [Q]guide オプションによって絞り込まれる領域は、ループ・プロファイラーのインストルメント済み実行により生成される XML データファイルを処理して設定されます。ループ・プロファイラーの結果ファイルには、実際のループ・プロファイラーのデータファイル、またはループ・プロファイラーのデータファイルを格納するディレクトリー名を指定できます。