コンパイラー・フレンドリーなプログラミング・イディオムは、オプションやディレクティブのようにパフォーマンスに
有効である場合があります。
以下にいくつかの提案を示します。
- 一般
- 可能であれば、xlf90 または
xlf95 のようなコマンド呼び出しを使用して、
標準の準拠性とコード移植性を高めてください。
これが不可能な場合は、-qnosave オプションを使用して、すべてのローカル変数を自動化してください。
これにより、さらに最適化の機会がもたらされます。
- モジュールを使用して、関連するサブルーチンおよび関数をグループ化してください。
- カスタム・インプリメンテーションまたは汎用ライブラリーではなく、高度にチューニングされた MASS
および ESSL ライブラリー
を使用することを検討してください。
- 手作業によるチューニング
- 手作業によるコードの最適化を過度に行ってはいけません。
異常な構文はコンパイラー (および他のプログラマー) を混乱させ、新しいマシンでのアプリケーションの最適化を
困難なものにします。
- インライン化による小さな関数の手作業によるチューニングを限定的に行ってください。
- プログラムを数多くの小さな関数に過度に分割すると、呼び出しのオーバーヘッドの処理に
プログラムが費やす時間の比率が増えるため、これは避けてください。
小さな関数を数多く使用することを
選択する場合は、-qipa を
使用することを検討してください。
- 変数
- グローバル変数およびポインターの不要な使用は避けてください。
これらをループ内で使用するときは、ループの前にローカル変数にロードし、ループの後で保管し戻してください。
- INTENT ステートメントを使用して、パラメーターの使用を記述してください。
- ストレージの節約
- スカラーには、レジスター・サイズの整数 (INTEGER(4) または INTEGER(8) データ型) を
使用してください。
- 計算に適した、最小の浮動小数点精度を使用してください。
- 新しいコードを作成するときは、グローバル・ストレージの共通ブロックではなくモジュール変数を使用してください。
- CONTAINS ステートメントは、スレッド・ローカル・ストレージを共用するときにのみ使用してください。
- ポインター
- すべての言語別名割り当て規則に従ってください。
-qalias=nostd の使用は避けるようにしてください。
- ALLOCATABLE 配列と POINTER 変数は、動的割り振りを必要とする状況に限って使用するように
してください。
- 配列
- ループ指標変数および境界には、可能であれば常にローカル変数を使用してください。
- 配列指標式は、可能な限りシンプルにしてください。
指標付けが間接であることを必要とする場合は、PERMUTATION ディレクティブの使用を検討してください。
- 配列割り当てまたは WHERE ステートメントの使用時には、-qlist または -qreport で
生成されたコードには特に注意してください。
パフォーマンスが不適当なものである場合は、-qhot の使用を検討するか、または配列言語をループ形式で書き直してください。
- 関連情報:
-
