プロが教える店舗&オフィスのセキュリティ対策術

こんにちは、プログラミング1年目の初心者です。

現在Fortranで書いたプログラムをifortで走らせているのですが、

do i = 1,ni
x(i,j) = ...
enddo

ではベクトル化してくれるのに、

do j = 1,nj
x(i,j) = ...
enddo

ではしてくれません。
これはこのコンパイラ独特の癖で、普通はベクトル化してくれるものなのでしょうか?

また、この場合の j で do 文を回す何かしらのオプションがあるのか、
それともベクトル化の条件に当てはまるような工夫をしなくてはいけないのか、
ということも教えて頂けたらと思います。

よろしくお願いします。

A 回答 (1件)

ベクトルプロセッサつきのマシンは使ったことがないのでわかりませんが、



do j = 1,nj
x(i,j) = ...
enddo

こちらの場合、Fortranの配列の並び方ではとびとびの番地の要素に
アクセスすることになりますが、

do i = 1,ni
x(i,j) = ...
enddo

こちらでは連続する番地にアクセスすることになります。
この違いによって、ベクトル化する/されるの違いが出るのではないでしょうか?
つまり
> それともベクトル化の条件に当てはまるような工夫をしなくてはいけないのか、

こっちでしょう。

http://www.gfd-dennou.org/library/dcl/dcl-f77doc …

多次元配列の記憶順序 の辺りを見てみてください。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
番地云々の話は聞いたことがあったのですが、そこまで意識していませんでした。
なんとか工夫をしてみます。

お礼日時:2007/12/14 11:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!