2010-12-13 11 views
2

ループベクトル化は、すべての右辺式が開始時に計算されるときです。私はちょうど私のループがベクトル化されていることを発見しました(FORTRAN 77では...質問しません)。各繰り返しでループ条件変数を更新する必要がありますが、このベクトル化を回避するにはどのように書き直すことができますか?ループベクトル化と回避方法

related postでは、私はFORTRANのこの最適化「機能」を特に無効にする方法を探していますが、ここでは一般的な場合のアルゴリズム的な解決策を探しています。

+1

投稿した2つの関連する質問が、あなたの根本的な質問に対する明確な答えを得るのに役立つかどうかはわかりません。それは私を混乱させる! –

+0

謝罪します。私は、一般的なケースと一般的な聴衆への質問を開くことは良いことかもしれないと考え、FORTRANniesのための他のスレッドでFORTRAN固有の詳細を保持することも良いかもしれません。私はそこからこのスレッドを相互参照します。 –

+0

ループアンローリングについてお聞きしますか? – ja72

答えて

5

これはループのベクトル化が私にとって何を意味するのではないのですか?私にとっては、コンパイラがハードウェアのベクトル計算機能を利用できるコードを生成することを意味します。シンプルなインテルXeonでは、隣接するいくつかの配列要素を同時に操作するためのSSE4命令を生成することを意味するかもしれませんが、Crayでは、ベクトルレジスタ上で同じ操作を同時に実行するという点ではるかに利用可能です。

すべてのRHS表現が「発症時に計算された」と思いますか?私はあなたがそれによって何を意味するか分からない。説明するコードを投稿できますか?ループを通る回数が最初の反復への入力時に計算されることを意味するならば、それは正しいです。これは、コードを最適化する上で非常に有用な機能であり、ほとんどのFortranプログラムが回避することによって利益を得るわけではありません。

FORTRANの更新でDOループを作成している場合、反復変数は標準によって禁止されていますが、これまでのところ思い出した限りです。あなたのコンパイラはそれを取り除くかもしれませんが、私はこれが起こったFortranプログラムを信頼しません。

+0

すべてがうまく受け取りました。はい、これはDOループなので、そこに私の問題がなければなりません!代わりにIF/THEN/GOTOコンボを実行できると思います。 –

+2

いくつかのコードを投稿すると、依存関係を解明するのに役立つかもしれません。それが可能であれば、最適化のために条件文を避けるのは良いことです。そして、あなたがGOTOステートメントを書いたことがあれば、あなたはもう一方の足で自分自身を撃つための私の許可も持っています:-) –

関連する問題