使用OpenMP并行化C ++代码并不能提高性能

时间:2015-05-21 09:18:16

标签: c++ multithreading performance parallel-processing openmp

我编写了一个计算某个数字的C ++代码。我试图使用OpenMP库来并行化它。它有3个嵌套for循环,并行化的是循环。我使用G ++编译器在Linux上工作。 代码有效,但问题是并行化没有改进的性能。在我的双核笔记本电脑(关闭多线程的intel i5处理器)中使用2个线程启动它需要花费更多时间来执行它只需一个。

这是代码(使用:g ++ source.cpp -fopenmp启动):

#include <time.h>
clock_t tStart = clock();
#include <stdlib.h>
#include <iostream>
#include <iomanip>
#include <omp.h>
using namespace std;

int nThreads= 2; // switch to change the number of threads.

int main () {
    int i, j, k, nz= 10;
    double T= 1000, deltaT= 0.005, g= 9.80665, h=10, dz= h/nz, t, z, V, A;
    int nT= T/deltaT;

    #pragma omp parallel for private (j, k, t, z, V, A) num_threads(nThreads)
    for (i=0; i<=nT; i++) {
        t= i*deltaT;
        for (j=0; j<=nz; ++j) {
            z= dz*j;
            for (k=0; k<=1000; k++) {
                V= t*z*g*k;
                A= z*g*k;
            }
        }
    }

    cout << "Time taken: " << setprecision(5) <<  (double)(clock() - tStart)/CLOCKS_PER_SEC << endl;
    return 0;
}

1 个答案:

答案 0 :(得分:1)

好的,完美的。我正在测量cpu时间,结果是连贯的。 time()函数给出了我需要知道的数字。 问题解决了。谢谢大家。