インテル® C++ コンパイラー 17.0 デベロッパー・ガイドおよびリファレンス
カウントされたループをアンロールする [しない] ようにコンパイラーに指示します。
#pragma unroll #pragma unroll(n) #pragma nounroll |
n |
ループを何回アンロールするかを表すアンロール要素です。0 から 255 までの整数定数でなければなりません。 |
unroll[n] プラグマは、コンパイラーに、カウントされたループをアンロールする回数を伝えます。
unroll プラグマは、各 for ループが動作する for 文の前になければなりません。 n が指定されると、最適化はループを n 回アンロールします。 n が省略されるか、n が有効範囲外の場合、最適化はループをアンロールする回数を割り当てます。
このプラグマは、オプション O3 が設定された場合のみサポートされます。 unroll プラグマは、コマンドラインから行われるループアンロールの設定を変更します。
プラグマは最内ループの入れ子構造と外側のループの入れ子構造に適用できます。 外側のループの入れ子構造に適用された場合は、現在の実装では完全な外側のループアンロールがサポートされます。 ループの入れ子構造の内側は、まったくアンロールされないか、または部分的にアンロールされます。 コンパイラーは、n とループカウンターを比較することによって、正しいコードを生成します。
ループをアンロールすることでレジスターとコードサイズが増える場合は、ループアンロールを抑止する必要があります。 この場合は、nounroll プラグマを使用してください。 nounroll プラグマは、指定したループをアンロールしないようにコンパイラーに指示します。
最内ループアンロールにおける unroll プラグマの使用例 |
---|
|
外側のループアンロールにおける unroll プラグマの使用例 |
---|
|
unroll プラグマを最初の for ループの前に配置すると、コンパイラーにより外側のループが完全にアンロールされます。 unroll プラグマが内側の for ループの前と外側の for ループの前に配置された場合は、コンパイラーは内側の for ループの unroll プラグマを無視します。 unroll プラグマが最内ループのみに配置された場合は、コンパイラーはいくつかの要因に従って最内ループをアンロールします。