効率的なコンパイル処理を行うことでパフォーマンスが向上します。プログラムのパフォーマンスを向上させるためにプログラムを解析する前に、まずコンパイル自体を効率的に行うことが大切です。
アプリケーションの解析結果に基づいて、コンパイラーの最適化とコマンドライン・オプションのうち、どれを使用するとアプリケーションのランタイム・パフォーマンスが改善するかを判断することができます。
効率的なコンパイル手法は、プログラム開発の初期および後期の段階で使用できます。プログラム開発の初期の段階では、最適化なしでインクリメンタル・コンパイルを行うことができます。次に例を示します。
Linux* および Mac OS* X
例 |
---|
ifort -c -g -O0 sub2.f90 ifort -c -g -O0 sub3.f90 ifort -o main -g -O0 main.f90 sub2.o sub3.o |
これらのコマンドは、-O0 (Linux および Mac OS X) または /Od (Windows) を使用して、-O2 (Linux および Mac OS X) または /O2 (Windows) などのコンパイラーのデフォルトの最適化オプションをすべてオフにします。-g (Linux)、/Zi または /debug:full (Windows) オプションを使用すると、プログラムに含まれるすべてのルーチンのオブジェクト・コードにシンボリック・デバッグ情報と行番号が生成され、これをソースレベルのデバッグに使用することができます。3 番目のコマンドで生成される main ファイルにも、シンボリック・デバッグ情報が含まれています。
プログラム開発の後期の段階では、一度に複数のソースファイルを指定して、少なくとも -O2 (Linux および Mac OS X) または /O2 (Windows) 以上の最適化レベルを使用することをお勧めします。例えば次のコマンドは、デフォルトの最適化レベルを使用して 3 つのソースファイルを一緒にコンパイルします。
Linux および Mac OS X
例 |
---|
ifort -o main main.f90 sub2.f90 sub3.f90 |
複数のソースファイルをコンパイルすることで、コンパイラーが最適化の対象候補となるコードをより多く検証することができ、その結果、次のことが可能になります。
より多くのプロシージャーのインライン化
より完全なデータフロー解析
リンク時に解決される外部参照数の削減
非常に大きなプログラムの開発では、すべてのソースファイルを一緒にコンパイルすることが実用的ではない場合があります。その場合、各ソースファイルを別々にコンパイルするのではなく、複数の ifort コマンドを使用して関連のあるルーチンを含むソースファイルを一緒にコンパイルすると効率的です。