有没有办法告诉铛展开一个特定的循环?铛:强制循环展开具体循环
谷歌搜索答案给我的命令行选项将影响整个compilant,而不是一个单一的循环。
没有为GCC --- Tell gcc to specifically unroll a loop类似的问题---但答案只要不铛工作。
选项1建议有:
#pragma GCC optimize ("unroll-loops")
似乎被忽略。其实
#pragma GCC akjhdfkjahsdkjfhskdfhd
也被默默地忽略。
选项2:
__attribute__((optimize("unroll-loops")))
导致警告:
warning: unknown attribute 'optimize' ignored [-Wattributes]
更新
joshuanapoli提供了一个很好的解决方案如何通过模板元编程和C迭代+ +11而不创建循环。该构造将在编译时被解析,从而导致重复内嵌的主体。虽然这不完全是问题的答案,但它基本上实现了相同的目的。
这就是我接受答案的原因。但是,如果您碰巧知道如何使用标准C循环(for
,while
)并强制展开它,请与我们分享这些知识!
通常情况下,编译器有一个非常好的概念,何时适合展开循环以及何时不是个好主意。你试图解决哪些不适用的特殊情况? – 2013-03-07 15:53:39
它可能不会*强制*展开,但'__attribute__((hot))'可能值得尝试。 – 2013-03-07 18:33:51
@MatsPetersson我想明确衡量循环展开的好处。手写的展开实际上可以使代码加速3次,但编译器无法解决这个问题。 – CygnusX1 2013-03-07 21:39:30