インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス

optimization_level

1 つの関数またはすべての関数の最適化を制御します。

構文

#pragma[intel|GCC] optimization_level n

引数

intel|GCC

使用する解釈を示します。

n

最適化レベルを指定する整数値です。有効な値は次のとおりです。

  • 0: -O0 (Linux* および macOS*) または /Od (Windows*) オプションと同じ最適化機能

  • 1: O1 オプションと同じ最適化機能

  • 2: O2 オプションと同じ最適化機能

  • 3: O3 オプションと同じ最適化機能

説明

特定の関数の最適化レベルを制限し、残りのアプリケーションでは別の高度な最適化レベルを使用して最適化を行うには、optimization_level プラグマを使用します。例えば、アプリケーションに対して O3 レベルを指定し、ある関数に対して #pragma optimization_level 1 を指定すると、その関数は O1 レベルで最適化され、アプリケーションの残りの部分はこれよりも高いレベルで最適化されます。

一般に、プラグマは n によって指定されたレベルで関数を最適化しますが、プロシージャー間の最適化 (IPO) など一部のコンパイラーの最適化は、翻訳単位のコンパイル時に有効または無効になりません。例えば、IPO と特定の最適化レベルを有効にすると、IPO はこのプラグマのターゲット関数に対しても有効になります。ただし、コマンドラインで指定された最適化レベルに関係なく、IPO は完全には実装されない場合もあります。また、その逆も起こります。

最適化制限の範囲

Linux* と macOS* システムでは、最適化制限の範囲は、次の表の -pragma-optimization-level コンパイラー・オプションに渡される引数によって変わることがあります。

構文

動作

#pragma intel optimization_level n

-pragma-optimization-level オプションに渡される引数に関係なく、指定された最適化レベルを使用して次の関数のみにプラグマを適用します。

#pragma GCC optimization_leveln または
#pragma GCC optimization_level reset

-pragma-optimization-level オプションに渡される引数に関係なく、指定された最適化レベルを使用して後続のすべての関数にプラグマを適用します。

reset を指定すると、以前指定した最適化レベルに戻り、最近の #pragma GCC optimization_level 文がリセットされます。

#pragma optimization_level n

インテル® C++ コンパイラーの実装または GCC の解釈のいずれかを適用します。適用される解釈は、-pragma-optimization-level オプションに渡される引数によって決まります。

Windows* システムの場合、プラグマには intel の解釈 (次の関数のみに適用) が常に使用されます。

プラグマは適用する関数の直前に配置します。

optimization_level pragma の intel 実装の例

#pragma intel optimization_level 1 
  gamma() { ... }

optimization_level pragma の GCC 実装の例

#pragma GCC optimization_level 1 
  gamma() { ... }