カウントされたループをアンロールする/しないようにコンパイラーに指示します。
このプラグマの一般的な構文は次のとおりです。
#pragma unroll
#pragma unroll(n)
#pragma nounroll
引数 |
説明 |
|---|---|
|
n |
0 から 255 までの整数定数です。 |
unroll[n] プラグマは、カウントされたループをアンロールする回数をコンパイラーに伝えます。
unroll プラグマは、各 FOR ループが動作する FOR 文の前になければなりません。n が指定されると、最適化機構はループを n 回アンロールします。n が省略されるか、n が有効範囲外の場合、最適化機構はループをアンロールする回数を割り当てます。
このプラグマは、-O3 (Linux* および Mac OS* X) または /O3 (Windows*) オプションが使用された場合のみサポートされます。unroll プラグマは、コマンドラインから行われるループのアンロールの設定を変更します。
現在、プラグマは最内ループの入れ子にのみ適用されます。外側のループの入れ子に適用された場合、無視されます。コンパイラーは、n とループカウンターを比較することによって、正しいコードを生成します。
ループをアンロールすることでレジスターとコードサイズが増える場合は、ループのアンロールを防ぐ必要があります。この場合は、nounroll プラグマを使用してください。nounroll プラグマは、指定したループをアンロールしないようにコンパイラーに指示します。
例: unroll プラグマの使用 |
|---|
|
void unroll(int a[], int b[], int c[], int d[]) { #pragma unroll(4) for (int i = 1; i < 100; i++) { b[i] = a[i] + 1; d[i] = c[i] + 1; } } |