我正在使用一个不支持 reduce() 复杂参数的 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() 来处理复杂的参数?