我有一个基于隐含 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
你将如何用更易读的代码初始化这个数组?
对于这样一个简单的构造,两者都可能导致相同的代码,因为编译器擅长优化。FORALL 语句与其说是一个循环语句,不如说是一个初始化语句,它有许多可以抑制优化的限制。如果一个简单的循环可以工作,我会使用它。
另请参阅之前的答案:WHERE、FORALL 和 SPREAD 等 Fortran 95 结构通常会产生更快的并行代码吗?
没有理由它们应该比实际的 do 循环效率低。如果你发现了一个案例,它们在哪里,把它作为一个错过的优化错误报告给你的编译器供应商!