私はC言語(2次元ポアソンソルバー)でプログラムを書いていますが、大きなforループを高速化するためにopenMPを使っています。私が観察したことは、OpenMP並列ブロックの中で、#pragma always vector指示文を含める場合でも、forループがベクトル化されないことです。コンパイルのために私はpathscaleコンパイラを使用しています。OpenMPでのループのベクトル化
私はベクトル化するコードは次のようになります。
#pragma omp parallel shared(in, out, lambda,dim,C) private(k)
{
#pragma omp for schedule(guided,dim/nthreads) nowait
for(k = 0;k < dim; k++){
in[k] = C*out[k]*lambda[k];
}
}
はどこ出て、ラムダとでは、倍精度配列です。
しかし、私は常にベクトルをの#pragmaが含まれていても、どのようなコンパイラの答えは次のとおりです。このため任意の回避策がある場合は、
warning: ignoring #pragma always vector
知っていますか?
ありがとうございました。
私は、ループをベクトル化/並列化することで多くのことを得ることはできないと思っています。たくさんのメモリアクセスのための仕事はほとんどありません。 – Mysticial
@Mysticial、これはコンテストのエントリーの一部であり、助けになりました。 :) – Konstantinos