• 締切済み

ifortのベクトル化

こんにちは、プログラミング1年目の初心者です。 現在Fortranで書いたプログラムをifortで走らせているのですが、 do i = 1,ni x(i,j) = ... enddo ではベクトル化してくれるのに、 do j = 1,nj x(i,j) = ... enddo ではしてくれません。 これはこのコンパイラ独特の癖で、普通はベクトル化してくれるものなのでしょうか? また、この場合の j で do 文を回す何かしらのオプションがあるのか、 それともベクトル化の条件に当てはまるような工夫をしなくてはいけないのか、 ということも教えて頂けたらと思います。 よろしくお願いします。

みんなの回答

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.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/doc_numaguti/math1/gaiyou/fortran.html の 多次元配列の記憶順序 の辺りを見てみてください。

reaven82
質問者

お礼

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

関連するQ&A