我正在学习OpenMP并遇到一些问题: 并行程序比串行慢,我很困惑(1个线程对2个线程) 我的代码:
#include <iostream>
#include <omp.h>
using namespace std;
int main()
{
int threadsNumber=1;
int S=0;
cout << "Enter number of threads:\n";
cin >> threadsNumber;
double start, end, calculationTime;
omp_set_num_threads(threadsNumber);
start = omp_get_wtime();
#pragma omp parallel for reduction(+: S)
for(int i=1;i<1000;i++) {
S+= 10;
}
#pragma omp end parallel
end = omp_get_wtime();
calculationTime = end - start;
cout << "Время выполнения: " << calculationTime << "\n";
cout<<"S = "<< S <<"\n";
return 0;
}
结果: 1个主题: 2.59876e-05 2个主题: 0.000102043
我的错误在哪里? 谢谢!
答案 0 :(得分:2)
正如J.F Sebastian在评论中指出的那样,并没有从并行化中获得太多好处,因为1000次迭代的循环相当快。这意味着创建第二个线程所需的开销大于由于并行化而节省的开销。当你增加循环迭代的次数并因此给线程做更多的事情时,多线程的好处变得更加明显。