循环矢量化是在一开始就计算出所有右侧表达式的时候。我刚刚发现我的循环正在矢量化(在Fortran 77 ...中不要问)。我需要在每次迭代中更新我的循环条件变量,但是如何重写以解决此矢量化呢?

在一个 相关文章, ,我正在寻找一种专门禁用Fortran中这种优化“功能”的方法,但是在这里,我正在寻找对一般情况的更算法解决方案。

有帮助吗?

解决方案

那不是循环矢量化对我的意义。对我来说,这句话意味着编译器将生成代码,该代码可以利用硬件的任何向量计算功能。在简单的Intel Xeon上,这可能意味着生成SSE4指令同时操纵一些相邻的数组元素,在Cray上,在同时执行Vector寄存器上的同一操作方面可能还有更多可用。

您如何看待所有RHS表达式是“在开始时计算”的?我不确定您的意思。您可以发布一些代码以解释吗?如果您的意思是在进入第一次迭代时计算通过循环的旅行数量,那是正确的。在优化代码方面,这是一个非常有用的功能,而不是大多数Fortran程序都会受益于避免。

如果您正在写作,则在更新迭代变量的情况下进行循环,该标准将禁止,据我所记得,始终是。您的编译器可能会让您摆脱困境,但我不相信发生这种情况的Fortran程序。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top