OpenMP循环并行化

时间:2013-11-23 20:47:31

标签: c++ multithreading openmp

我正在学习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

我的错误在哪里? 谢谢!

1 个答案:

答案 0 :(得分:2)

正如J.F Sebastian在评论中指出的那样,并没有从并行化中获得太多好处,因为1000次迭代的循环相当快。这意味着创建第二个线程所需的开销大于由于并行化而节省的开销。当你增加循环迭代的次数并因此给线程做更多的事情时,多线程的好处变得更加明显。