【发布时间】:2016-01-26 21:17:41
【问题描述】:
我一直在尝试学习如何在 c++ 中使用 OpenMP,但在尝试将其应用于使用 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);
【问题讨论】:
-
请不要发布到场外代码的链接。它使这个问题对未来毫无用处。面对这种情况,我们的模组不得不关闭和删除。
-
好的,我怎样才能把我的代码以更好的方式来完成我的问题?
-
将代码的最小工作部分复制并粘贴到问题本身中,缩进 4 个空格,以便本网站将其视为代码而不是文本。
-
另外,从技术上讲,您的
#pragma声明是正确的。但是,正如@MSalters 所指出的,每个线程所做的工作很少,因此您不太可能看到整体加速。此外,当您应该使用omp_get_wtime()时,您正在使用clock()来衡量代码的完成时间。一个测量 CPU 时间(不是您关心的),而另一个测量程序的实际运行时间(您正在寻找的时间)。
标签: c++ parallel-processing openmp icc