【发布时间】:2011-06-06 10:02:32
【问题描述】:
我使用的 openMP 版本不支持 reduce() 用于复杂参数。我需要一个快速的点积函数,比如
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 循环的内容放在临界区就像(甚至更糟)根本不进行并行化
标签: c++ openmp reduce dot-product