Phi*_*rad 54
GCC为您提供了几种不同的处理方式:
使用#pragma指令一样#pragma GCC optimize ("string"...),如被看见在GCC文档.请注意,pragma使剩余函数的优化成为全局.如果你聪明地使用#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
Run Code Online (Sandbox Code Playgroud)使用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;
}
}
Run Code Online (Sandbox Code Playgroud)注意:我不确定GCC在展开反向迭代循环方面有多好(我这样做是为了让Markdown与我的代码一起玩得很好).但是这些例子应该编译得很好.
GCC 8获得了新的实用性,可让您控制循环展开的方式:
#pragma GCC unroll n
从手册中引用:
您可以使用此编译指示来控制循环应展开的次数。必须将它放在for,while或do循环或#pragma GCC ivdep之前,并且仅适用于随后的循环。n是一个整数常数表达式,指定展开因子。0和1的值将阻止循环的任何展开。
| 归档时间: |
|
| 查看次数: |
32899 次 |
| 最近记录: |