我一直在努力学习如何将OpenMP用于c ++,并且我在尝试将其应用于使用Riemann Zeta函数的代码时遇到了巨大的麻烦,我只是这样找到它(在代码),但如果你运行它,你会发现串行过程更快。任何人都可以帮我找到为什么序列比并行更快?
double rzfParallel(int n, long inf)
{
double sum = 0.0;
#pragma omp parallel for reduction(+:sum) num_threads(8)
for(int k = 1; k <= inf; k++)
sum += 1.0/pow(k, (double)n);
return sum;
}
The method to chath time:
startTime = clock();
funcResult = rzfParallel(n, inf);
endTime = clock();
timeResult = (endTime/CLOCKS_PER_SEC) -(startTime/CLOCKS_PER_SEC);
答案 0 :(得分:1)
通常:太多时间盯着并行线程,每个线程的工作量太少。
答案 1 :(得分:0)
我用英特尔编译器中的标志-mavx解决了这个问题。我正在努力理解这个问题,还不确定。我的处理器没有矢量化的东西。仍然无法获得-vec报告。如果有人知道怎么做,请告诉我。特别感谢NoseKnowsAll