循环向量化是指在开始时计算所有右侧表达式的时间。我刚刚发现我的循环正在被矢量化(在FORTRAN 77中......不要问)。我需要在每次迭代中更新循环条件变量,但是如何重写以解决此向量化问题呢?
在related post中,我正在寻找一种方法来专门禁用FORTRAN中的这种优化“功能”,但在这里我正在寻找针对一般情况的更多算法解决方案。
答案 0 :(得分:5)
这不是循环矢量化对我意味着什么。对我而言,这个短语意味着编译器将生成可以利用硬件的任何矢量计算功能的代码。在一个简单的Intel Xeon上,这可能意味着生成SSE4指令以同时操作几个相邻的数组元素,在Cray上,在向量寄存器上同时执行相同操作方面可能有更多可用。
您如何看待所有RHS表达式都是“在开始时计算”?我不确定你的意思。你能发一些代码来解释吗?如果你的意思是在进入第一次迭代时计算通过循环的跳闸次数,那么这是正确的。在优化代码时,这是一个非常有用的功能,而且大多数Fortran程序都不会从避免中受益。
如果你在Fortran更新中编写DO循环,那么标准禁止迭代变量,并且我一直记得这一点。您的编译器可能会让您逃脱它但我不相信发生这种情况的Fortran程序。