我正在使用不支持複雜參數的reduce()的openMP版本。我需要一個像帶有openMP的複數向量的點積
std::complex<double> dot_prod(std::complex<double> *v1,std::complex<double> *v2,int dim)
{
std::complex<double> sum=0.;
int i;
# pragma omp parallel shared(sum)
# pragma omp for
for (i=0; i<dim;i++)
{
#pragma omp critical
{
sum+=std::conj<double>(v1[i])*v2[i];
}
}
return sum;
}
快速點積函數顯然,這代碼不加快的問題,但減緩下來。你是否有一個快速的解決方案,而不使用reduce()來處理複雜的參數?
注意,讓內容的並行for循環中的一個關鍵部分是像(或更糟)所有 – CharlesB 2011-06-06 10:25:15