Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenMP运行时间_C++_Openmp - Fatal编程技术网

C++ OpenMP运行时间

C++ OpenMP运行时间,c++,openmp,C++,Openmp,我正在使用OpenMP运行一些并行工作,但发现加速比不能很好地扩展。然后我发现,随着线程数量的增加,完成相同工作量的时间也会增加。以下是一个例子: void fillingVec(vector<int>& vec) { for (int i = 0; i < 1000000; ++i) vec.push_back(i); } int main() { const int num_thread = omp_get_max_threads(

我正在使用OpenMP运行一些并行工作,但发现加速比不能很好地扩展。然后我发现,随着线程数量的增加,完成相同工作量的时间也会增加。以下是一个例子:

void fillingVec(vector<int>& vec) {
    for (int i = 0; i < 1000000; ++i)
        vec.push_back(i);
}

int main() {
    const int num_thread = omp_get_max_threads();
    vector<int> vec;
    double start;
    #pragma omp parallel \
    private(vec)
    {
        int id = omp_get_thread_num();
        start = omp_get_wtime();
        fillingVec(vec);
    }
    double end = omp_get_wtime();
    printf("Elasped time = %f sec\n", end - start);

    return 0;
}

有人能解释为什么会这样吗?这仅仅是由于OpenMP的开销吗?

最有可能的是,时间增加是由于内存分配开销。在用数据填充向量之前,请尝试为向量保留空间(使用
vec.reserve(1000000);


此外,度量时间的方式很奇怪,并且存在数据竞争,因为并行区域中的每个线程都写入共享
start
变量

它是什么硬件(有多少核)?我建议简化benchamrk(只留下空循环)。同时也增加了一点运行时间。我试过你的例子(有点修改),它似乎有一些开销,但不确定它是否与硬件或软件相关。你也可以通过同时运行N个进程(相同的程序也可以,只需使用单线程运行N个进程)获得一些见解。谢谢你的回复。但即使我事先保留了向量,运行时间仍然是线性增长的。我也更改了其他说明,但问题仍然存在。
#     time
1     0.004387
4     0.009015
16    0.034197
32    0.230581