ソフトウェア・ベースのスペキュレーティブ・プリコンピュテーション (IA-32)

ソフトウェア・ベースのスペキュレーティブ・プリコンピュテーション (SSP) は、ヘルパー・スレッディング最適化とも呼ばれ、データ・プリフェッチを動的に行うヘルパースレッドを作成することで、一部のプログラムのパフォーマンスを向上させる最適化手法です。

Mac OS*: SSP はサポートされていません。また、このトピックにリストされている関連オプションも利用できません。

SSP は、プログラムのパフォーマンスがデータ・キャッシュ・ミス、特に pointer-chasing ループの影響を受けるプログラムに対して有効です。データのプリフェッチは、メインメモリーにアクセスするのに生じる長いレイテンシーの影響を軽減します。生成されたコードは、ハイパースレッディング・テクノロジー インテル(R) Pentium(R) 4 プロセッサーのような、共有データキャッシュとマルチスレッド機能が有効なハードウェア上で実行する必要があります。

SSP の動作

SSP は、IA-32 コンパイラーでのみ利用できます。SSP は、メインの計算スレッドと並列な別のヘルパースレッドで、オリジナルプログラム命令のサブセット (スライス) を直接実行します。ヘルパースレッドはメインスレッドに先行して実行され、先にメモリーアクセスのアドレスを計算して、初期のキャッシュミスをトリガーします。この動作は、メインスレッドからメモリー・レイテンシーを隠蔽します。

SSP を有効にするコマンドライン・オプションは、-ssp (Linux*) または /Qssp (Windows*) です。SSP は、代表的なデータセットを使用してアプリケーションを実行し、プロファイル・フィードバック情報を生成した後に実行する必要があります。詳細は、「profrun ユーティリティー」を参照してください。

SSP を有効にして起動すると、コンパイラーは次の処理を行います。

警告

プロファイリングおよびプロシージャー間の最適化とともに SSP を使用すると、一部のプログラムでパフォーマンスが低下することがあります。これらの手法を使用する前に、SSP を使ったテストを行い、ターゲットのアプリケーションにおける SSP の影響をよく確認してください。SSP を使用すると、コンパイル時間も長くなります。

SSP 最適化の使用

SSP 最適化には、いくつかのステップが必要です。以下に、SSP 最適化を行う一般的な手順を示します。

次の例では、ソースファイル a1.ca2.c および a3.c をコンパイルして実行ファイル go (Linux) または go.exe (Windows) を生成します。

  1. -prof-gen (Linux) または /Qprof-gen (Windows) オプションを使用してアプリケーションをコンパイルし、下記の例に示すように、インストルメント済みコードを含む実行ファイルを生成します。

プラットフォーム

コマンド例

Linux

icc -prof-gen a1.c a2.c a3.c -o go

Windows

icl /Qprof-gen a1.c a2.c a3.c /Fego

このステップで使用されているオプションに関する詳細は、次のトピックを参照してください。

  1. 代表的なデータセットを使用してインストルメント済みプログラムを実行し、動的プロファイル情報ファイルを生成します。

プラットフォーム

コマンド例

Linux

go

Windows

go.exe

インストルメント済みプログラムを実行すると、拡張子が .dyn の動的プロファイル情報ファイルが生成されます。入力データを変更して、プログラムを複数回実行できます。後のステップで、コンパイラーはすべての .dyn ファイルを 1 つの .dpi ファイルにマージします。

  1. -prof-gen-sampling-prof-use (Linux)、/Qprof-gen-sampling/Qprof-use (Windows) オプションを使用してアプリケーションを再コンパイルし、実行ファイルを生成して、PMU 用にアプリケーションを準備します。この実行ファイルは、ハードウェア・パフォーマンス・モニタリング・ユニット (PMU) から情報を収集できます。次のコマンド例は、コンパイル中のオプションの組み合わせを示しています。

プラットフォーム

コマンド例

Linux

icc -prof-gen-sampling -prof-use -O3 -ipo a1.c a2.c a3.c -o go

Windows

icl /Qprof-gen-sampling /Qprof-use /O3 /Qipo a1.c a2.c a3.c /Fego

このステップで使用されているオプションに関する詳細は、次のトピックを参照してください。

  1. profrun ユーティリティーを使用して代表的なデータセットでアプリケーションを再度実行し、delinquent ロード情報を含むハードウェア・プロファイル情報ファイルを作成します。

プラットフォーム

コマンド例

Linux

profrun -dcache go

Windows

profrun -dcache go.exe

このステップでは、アプリケーションを実行して、ハードウェア・プロファイル情報を含むファイルを生成します。ファイルはローカル・ディレクトリーに生成されます。拡張子は .hpi です。入力データを変更して、プログラムを複数回実行できます。すべての実行のハードウェア・プロファイル情報が自動的にマージされます。

  1. -prof-use-ssp (Linux)、/Qprof-use/Qssp (Windows) オプションを使用してアプリケーションをコンパイルし、SSP 最適化が有効な実行ファイルを生成します。次のコマンド例は、コンパイル中のオプションの組み合わせを示しています。

プラットフォーム

コマンド例

Linux

icc -prof-use -ssp -O3 -ipo a1.c a2.c a3.c -o go

Windows

icl /Qprof-use /Qssp /O3 /Qipo a1.c a2.c a3.c -o go

このステップで使用されている -ssp (Linux) または /Qssp (Windows) オプションに関する詳細は、コンパイラー・オプションの次のトピックを参照してください。

最後のステップでは、インストルメント済みプログラムの実行フェーズにおけるフィードバックとプロファイリングの実行フェーズにおけるキャッシュミス情報を使用し、SSP を有効にしてソースファイルをコンパイルおよびリンクします。

SSP はプロファイリングおよびサンプリング・フィードバック・ベースの最適化のため、コンパイラーが delinquent ロードを発見できない場合、またはヘルパースレッドを使用することによって得られるパフォーマンス・ゲインがほとんどない場合、コンパイラーは SSP 固有のコードを生成しません。この場合、コンパイラーは SSP ステータスメッセージを生成しません。

「プロファイルに基づく最適化の概要」を参照してください。