隐含的DO循环是否效率低下?

时间:2010-12-30 15:38:34

标签: fortran fortran90

我有一个基于隐含do循环的数组初始化,给定奇数大小N

J=(N+1)/2
XLOC(1:N) = (/ (I-J, I=1,N) /)

在F90 +的上下文中,建议使用(/ .. /)语法,或者使用FORALL语句更有效。

示例:N=19然后XLOC=(-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9)

你怎么初始化这个数组?


编辑1

如何使用更易读的代码初始化此数组?

2 个答案:

答案 0 :(得分:2)

对于这样一个简单的构造,两者都可能导致相同的代码,因为编译器擅长优化。 FORALL语句不是一个循环语句,而是一个初始化语句,它有许多限制,可以禁止优化。如果一个简单的循环可以工作,我就会使用它。

另见前一个答案:Do Fortran 95 constructs such as WHERE, FORALL and SPREAD generally result in faster parallel code?

答案 1 :(得分:2)

没有理由他们应该效率低于实际的循环。如果您找到了一个案例,请将其作为错过的优化错误报告给您的编译器供应商!