1

我有一个基于隐含 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

你将如何用更易读的代码初始化这个数组?

4

2 回答 2

2

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

另请参阅之前的答案:WHERE、FORALL 和 SPREAD 等 Fortran 95 结构通常会产生更快的并行代码吗?

于 2010-12-30T16:07:54.670 回答
2

没有理由它们应该比实际的 do 循环效率低。如果你发现了一个案例,它们在哪里,把它作为一个错过的优化错误报告给你的编译器供应商!

于 2011-01-06T11:25:49.243 回答