1 つの関数またはすべての関数の最適化を制御します。
#pragma [intel|GCC] optimization_level n |
intel|GCC |
使用する解釈を示します。 |
n |
最適化レベルを指定する整数値です。有効な値は次のとおりです。
|
最適化レベルに関する詳細は、「自動最適化」 (「アプリケーションの最適化」>「コンパイラーの最適化の使用」) を参照してください。
特定の関数の最適化レベルを制限し、残りのアプリケーションでは別の高度な最適化レベルを使用して最適化を行うには、optimization_level プラグマを使用します。例えば、アプリケーションに対して -O3 (Linux* および Mac OS* X システム) を指定し、#pragma optimization_level 1 を指定すると、マークされた関数は -O1 レベルで最適化され、残りのアプリケーションはこれよりも高いレベルで最適化されます。
一般に、プラグマは n によって指定されたレベルで関数を最適化しますが、プロシージャー間の最適化 (IPO) など一部のコンパイラーの最適化は、変換単位のコンパイル時に有効または無効になりません。例えば、IPO と特定の最適化レベルを有効にすると、IPO は このプラグマのターゲット関数に対しても有効になります。ただし、コマンドラインで指定された最適化レベルに関係なく、IPO は完全には実装されない場合もあります。また、その逆も起こります。
最適化制限の範囲
Linux と Mac OS X システムでは、最適化制限の範囲は、次の表の -pragma-optimization-level コンパイラー・オプションに渡される引数によって変わることがあります。
構文 |
動作 |
---|---|
#pragma intel optimization_level n |
-pragma-optimization-level オプションに渡される引数に関係なく、指定された最適化レベルを使用して次の関数のみにプラグマを適用します。 |
#pragma GCC optimization_level n または |
-pragma-optimization-level オプションに渡される引数に関係なく、指定された最適化レベルを使用して後続のすべての関数にプラグマを適用します。 reset を指定すると、以前指定した最適化レベルに戻り、最近の #pragma GCC optimization_level 文がリセットされます。 |
#pragma optimization_level n |
インテルまたは GCC の解釈のいずれかを適用します。適用される解釈は、-pragma-optimization-level オプションに渡される引数によって決まります。 |
Windows* システムの場合、プラグマには intel の解釈 (次の関数のみに適用) が常に使用されます。
#pragma optimization_level の intel 解釈の使用
プラグマは適用する関数の直前に配置します。
例: #pragma intel optimization_level 1
gamma() {
...
}
#pragma optimization_level の GCC* 解釈の使用
適用する関数の前であればどこに配置しても問題ありません。