ループのベクトル化は、すべての右側の式が開始時に計算される場合です。ループがベクトル化されていることを発見しました (FORTRAN 77 では ... 質問しないでください)。反復ごとにループ条件変数を更新する必要がありますが、このベクトル化を回避するにはどうすれば書き直せますか?
関連する投稿で、特に FORTRAN でこの最適化「機能」を無効にする方法を探していますが、ここでは、一般的なケースに対するよりアルゴリズム的な解決策を探しています。
ループのベクトル化は、すべての右側の式が開始時に計算される場合です。ループがベクトル化されていることを発見しました (FORTRAN 77 では ... 質問しないでください)。反復ごとにループ条件変数を更新する必要がありますが、このベクトル化を回避するにはどうすれば書き直せますか?
関連する投稿で、特に FORTRAN でこの最適化「機能」を無効にする方法を探していますが、ここでは、一般的なケースに対するよりアルゴリズム的な解決策を探しています。
それは私にとってループのベクトル化が意味するものではありません。私にとって、このフレーズは、コンパイラがハードウェアのベクトル計算機能を利用できるコードを生成することを意味します。単純な Intel Xeon では、これは SSE4 命令を生成していくつかの隣接する配列要素を同時に操作することを意味する場合があります。Cray では、ベクトル レジスタで同じ操作を同時に実行するという点で、はるかに多くの可能性があります。
すべての RHS 式が「開始時に計算される」とどのように考えますか? それが何を意味するのかわかりません。説明するコードを投稿していただけますか?ループのトリップ数が最初の反復の開始時に計算されるという意味であれば、それは正しいことです。これは、コードの最適化に関しては非常に便利な機能であり、ほとんどの Fortran プログラムが回避するメリットはありません。
Fortran で DO ループを記述している場合、繰り返し変数を更新することは標準で禁止されています。あなたのコンパイラはそれを許してくれるかもしれませんが、私はこれが起こった Fortran プログラムを信用しません。