OMP 串行与并行黎曼 Zeta
OMP Serial vs Parallel Riemann Zeta
我一直在尝试学习如何将 OpenMP 用于 C++,但在尝试将其应用于使用黎曼 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);
通常:启动并行线程的时间太多,每个线程的工作太少。
我用英特尔编译器中的标志 -mavx 解决了这个问题。我正在尝试了解问题所在,但还不确定。我的处理器没有矢量化的东西。仍然无法获得 -vec-report。如果有人知道怎么做,请告诉我。特别感谢 NoseKnowsAll
我一直在尝试学习如何将 OpenMP 用于 C++,但在尝试将其应用于使用黎曼 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);
通常:启动并行线程的时间太多,每个线程的工作太少。
我用英特尔编译器中的标志 -mavx 解决了这个问题。我正在尝试了解问题所在,但还不确定。我的处理器没有矢量化的东西。仍然无法获得 -vec-report。如果有人知道怎么做,请告诉我。特别感谢 NoseKnowsAll