特定のループをアンロールするように GCC に指示するにはどうすればよいですか? を使用して手動でループを展開できる CUDA SDK を使用し#pragma unroll
ました。gcc に同様の機能はありますか? 少しグーグルで検索しましたが、何も見つかりませんでした。
44818 次
3 に答える
63
GCC には、これを処理するためのいくつかの異なる方法があります。
GCC docsに見られるように、 #pragma ディレクティブを使用します。プラグマにより、残りの関数の最適化がグローバルになることに注意してください。andマクロを巧みに使用した場合、次のように 1 つの関数だけでこれを定義できる可能性があります。
#pragma GCC optimize ("string"...)
#pragma push_options
pop_options
#pragma GCC push_options #pragma GCC optimize ("unroll-loops") //add 5 to each element of the int array. void add5(int a[20]) { int i = 19; for(; i > 0; i--) { a[i] += 5; } } #pragma GCC pop_options
個々の関数にGCC の属性構文で注釈を付けます: GCC 関数属性のドキュメントで、この件に関するより詳細な論文を確認してください。例:
//add 5 to each element of the int array. __attribute__((optimize("unroll-loops"))) void add5(int a[20]) { int i = 19; for(; i > 0; i--) { a[i] += 5; } }
注: GCC が逆反復ループをアンロールするのにどれほど優れているかはわかりません (Markdown を自分のコードでうまく動作させるために行いました)。ただし、例は正常にコンパイルされるはずです。
于 2013-01-10T05:44:49.863 に答える
4
-funroll-loops
役立つかもしれません (ただし、ループごとではなくグローバルにループ展開をオンにします)。同じことをする必要があるかどうかはわかりません#pragma
...
于 2010-11-01T18:07:07.600 に答える