循环矢量化以及如何避免它

Old*_*her 2 fortran loops vectorization

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

在一篇相关文章中,我正在寻找一种方法来专门禁用FORTRAN中的这种优化"功能",但在这里我正在寻找一种更通用的算法解决方案.

Hig*_*ark 5

这不是循环矢量化对我意味着什么.对我而言,这个短语意味着编译器将生成可以利用硬件的任何矢量计算功能的代码.在简单的Intel Xeon上,这可能意味着生成SSE4指令以同时操作几个相邻的阵列元素,在Cray上,在向量寄存器上同时执行相同操作方面可能有更多可用.

您如何看待所有RHS表达式都是"在开始时计算"?我不确定你的意思.你能发一些代码来解释吗?如果你的意思是在进入第一次迭代时计算通过循环的跳闸次数,那么这是正确的.在优化代码方面,这是一个非常有用的功能,而且大多数Fortran程序都不会从中避免受益.

如果你在Fortran中编写DO循环更新,标准禁止迭代变量,并且我一直记得.您的编译器可能会让您逃脱它但我不相信发生这种情况的Fortran程序.

  • 如果您发布一些代码,我们可能会帮助您解开依赖关系.如果有可能的话,避免条件总是好的,如果没有别的话,可以进行优化.如果你曾经写过GOTO声明,你也可以在另一只脚上射击自己:-) (2认同)