告诉gcc具体展开一个循环

我如何告诉GCC展开一个特定的循环? 我已经使用CUDA SDK,可以使用#pragma unroll手动展开循环。 gcc有类似的function吗? 我GOOGLE了一下,但找不到任何东西。

GCC为您提供了几种不同的处理方法:

  • 使用#pragma指令 ,如#pragma GCC optimize ("string"...) ,如GCC文档中所示 。 请注意,该编译指示使剩余函数的优化成为全局优化。 如果你巧妙地使用了#pragma push_optionspop_optionsmacros,你可以用一个函数来定义这个:

     #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在展开反向迭代循环方面的performance有多出色(我这样做是为了让Markdown能和我的代码一起玩)。 但是,这些例子应该编译好。

-funroll-loops可能会有所帮助(虽然它打开全局循环展开,而不是循环)。 我不确定是否有一个#pragma做同样的事情…