コンパイラーの最適化のサンプル

このサンプルでは、一般的なコンパイラー・オプションを使用してパフォーマンスを向上させる方法が示されています。

コンパイラーに付属しているその他のサンプルについては、「サンプル」を参照してください。

サンプルファイルと保存場所

ソース

場所

init_sin.c

Linux* および Mac OS*

<install-dir>/samples/optimize/

Windows*

<install-dir>\samples\optimize\

説明

サンプルは、1 サイクル 2 π ラジアンの正弦曲線の絶対値を積分する算術プログラムです。このサンプルでは、複雑な計算が行われ、自動最適化におけるパフォーマンスの違いを示します。

次の図は、計算に使用される方法を示しています。この方法は、曲線と上辺の中央部分が一致するように長方形を連続的に追加します。長方形の数が増えると (長方形の幅が狭くなると)、計算領域は 4 (4.0) に近づきます。24 内点と 25 内点の最初の 8 片で何が計算されているかを示しています。

最適化を行わずにコンパイルする

最適化を有効にせずにソースコードをコンパイルすることにより、パフォーマンスの基準を得ることができます。

プラットフォーム

コマンドの例

Linux および Mac OS

icpc int_sin.c -O0

Windows

icl int_sin.c /Od  

コンパイル済みプログラムは、ソースと同じディレクトリーにあります。プログラムを次のように実行します。

プラットフォーム

コマンドの例

Linux および Mac OS

./a.out

Windows

int_sin.exe

通常各計算で費やされる実行時間は、内点の増加に伴って増えるため、各計算において、積分値は 4.0 に近いかまたは等しくなります。次のサンプル出力は一般的な結果を示しています。

サンプル出力

   Number of     | Computed Integral |
Interior Points  |                   |
-------------------------------------
 4       |   3.141593e+000   |
-------------------------------------
 8       |   3.792238e+000   |
-------------------------------------
16       |   3.948463e+000   |
-------------------------------------
32       |   3.987141e+000   |
-------------------------------------
64       |   3.996787e+000   |
-------------------------------------
128       |   3.999197e+000   |
-------------------------------------
256       |   3.999799e+000   |
-------------------------------------
512       |   3.999950e+000   |
-------------------------------------
1024       |   3.999987e+000   |
-------------------------------------
2048       |   3.999997e+000   |
-------------------------------------
4096       |   3.999999e+000   |
-------------------------------------
8192       |   4.000000e+000   |
-------------------------------------
16384       |   4.000000e+000   |
-------------------------------------
32768       |   4.000000e+000   |
-------------------------------------
65536       |   4.000000e+000   |
-------------------------------------
131072       |   4.000000e+000   |
-------------------------------------
262144       |   4.000000e+000   |
-------------------------------------
524288       |   4.000000e+000   |
-------------------------------------
1048576       |   4.000000e+000   |
-------------------------------------
2097152       |   4.000000e+000   |
-------------------------------------
4194304       |   4.000000e+000   |
-------------------------------------
8388608       |   4.000000e+000   |
-------------------------------------
16777216       |   4.000000e+000   |
-------------------------------------
33554432       |   4.000000e+000   |
-------------------------------------
67108864       |   4.000000e+000   |

Application Clocks = <output time>

出力の最終行にレポートされている時間、Application Clocks (アプリケーション・クロック) = <output time (出力時間)> に注目してください。この数字を基準にして後続の実行結果を比較します。

最適化を有効にしてコンパイルする

一部のコンパイラーの最適化オプションでパフォーマンスを大幅に向上させることができます。その他のオプションでは、別の領域の操作やパフォーマンスを強化することができます。

ソースファイルをデフォルトの最適化レベル (サンプルコマンド相当) でコンパイルします。

プラットフォーム

コマンドの例

Linux および Mac OS

icpc int_sin.c

または

icpc int_sin.c -O2

Windows

icl int_sin.c

または

icl int_sin.c /O2

最適化されたプログラムを実行します。

プラットフォーム

コマンドの例

Linux および Mac OS

./a.out

Windows

int_sin.exe

レポートされた最終行の数字と最適化されていないプログラムの数字を比較します。次の自動最適化オプションを使用してもう一度ソースをコンパイルします。1 回のコンパイルにつき 1 つのオプションを使用します。

プラットフォーム

推奨するオプション

Linux および Mac OS

-O1

-O3

-fast

Windows

/O1

/O3

/fast

さまざまな最適化レベルで検証した場合の、実行時間、(Application Clocks (アプリケーション・クロック)) や場合によって、実行ファイルのファイルサイズの違いに注目してください。

このサンプルで示されている実行時間の向上 (最適化されていないプログラムと最適化されたプログラム) は、すべてのプログラムにあてはまるわけではありませんが、自動最適化オプションを使用してソースをコンパイルすると、プログラムの実行時間を向上させることができます。

制限事項

こに示されている最適化オプションの一部は、アプリケーションの最小要件のアーキテクチャー・レベルを課すオプションを有効にすることにより、パフォーマンスが向上します。例えば、コンパイル中に -fast (Linux および Mac OS) または /fast (Windows) を指定したが、アプリケーションをインテル(R) Pentium(R) 4 プロセッサーで実行した場合、次のようなエラーが生成されます。

ランタイムエラー

重大なエラー: このプログラムは現在のシステムのプロセッサーで実行するようにビルドされていません。

許可されているプロセッサーはインテル(R) Core(TM) Duo プロセッサーおよび SSE3 補足命令 (Supplemental Streaming SIMD Extensions 3) に対応した互換性のあるインテル・プロセッサーです。