2010-12-30 19 views
1

私は、奇数のサイズNが与えられている暗黙のdoループに基づいて配列の初期化を行っています。 F90の+の文脈ではDOループは非効率的ですか?

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

それは(/ .. /)シンタックスを使用することをお勧めします、または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

このような単純な構成では、両方ともコンパイラが最適化するので、どちらも同じコードにつながる可能性があります。 FORALL文はあまりループ文ではありませんが、最適化を阻害する可能性のある多くの制約がある初期化文です。単純なループがうまくいくなら、私はそれを使うだろう。彼らは実際にはループを行うことをあまり効率的でなければならない理由はありませんDo Fortran 95 constructs such as WHERE, FORALL and SPREAD generally result in faster parallel code?

2

また、この前の回答を参照してください。ケースが見つかった場合は、どこにあるのか、コンパイラベンダーには見つからない最適化バグとして報告してください!

関連する問題