我正在用C編寫一個程序(一個2d泊松求解程序),我使用openMP來加速一個大的for循環。我觀察到,在openMP並行塊內部,即使在包含#pragma always向量指令的情況下,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 2012-03-11 21:16:01
@Mysticial,這是比賽入場的一部分,它確實有幫助。 :) – Konstantinos 2012-03-18 05:31:18