#pragma unroll(0)和#pragma unroll(1)有什么区别吗?(涉及IT技术)

3

我阅读了关于循环展开的文档。 它解释说,如果将展开因子设置为1,则程序将像使用#pragma nounrolling一样工作。

然而,该文档没有包括#pragma unroll(0)的情况。 由于n的范围是0到255,我只是出于好奇想知道#pragma unroll(0)和#pragma unroll(1)之间是否有任何区别。

我正在使用带有icc编译器的C语言。


我猜它应该是等价的,但你说得对,他们没有提到。不过,他们提到了:如果省略 n 或者它超出允许的范围,优化器会分配循环展开的次数。我想它超出了那个范围。 - Jeff Mercado
非常感谢!为了找出差异,我测试了10^6次添加数组元素。然而,我发现不仅在unroll(0)和unroll(1)之间没有性能差异,在unroll、unroll(0)、unroll(1)、...、unroll(8)之间也没有性能差异。您能否建议更适合捕捉不同特征的实验? - rae hyun kim
我认为这些指令仅在编译参数中附加了“O3”优化时才会生效。 - static_cast
是的,我已经使用 -O3 编译器选项进行了测试。 - rae hyun kim
1个回答

1
根据英特尔文档:
编译器通过比较 n 和循环计数生成正确的代码。
基于此,我会假设在生成的代码方面,#pragma unroll(0)#pragma unroll(1)之间没有区别。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接