为什么这个使用OpenMP的C ++程序不能扩展?

时间:2017-04-15 21:46:13

标签: c++ openmp

令我感到困惑的是,无论我在OpenMP中使用的线程数是多少,以下程序总是在相同的时间内执行:

#include <iostream>
#include <chrono>
#include <vector>

int main()
{
    double sum = 0.0;
    std::vector<int> v(1000000000, 1.0);
    auto t1 = std::chrono::steady_clock::now();
#pragma omp parallel for
    for(int k = 0 ; k < v.size(); ++k)
    {
          v[k] *= 2;
    }
    auto t2 = std::chrono::steady_clock::now();
    auto dt = std::chrono::duration<double, std::nano>(t2 - t1).count();
    std::cout << dt<< std::endl;

    return 0;
}

在有人要求之前:是的,OpenMP正在我的机器上工作;上面的代码来自我正在研究的库,我一直在观察OpenMP的加速。我正在使用gcc 5.4.0并使用-O3进行编译,并在Intel i5-4210U上运行。

执行时间是否与任何人的线程数一致?

这是完整的gcc命令:g++ -O3 -std=c++11 x.cpp -fopenmp

0 个答案:

没有答案