小编kae*_*gre的帖子

如何在循环内将大对象复制到omp任务?

我正在使用while循环来启动几个omp任务。每个任务都需要复制一个相当大的对象(作为第一个私有对象)。由于我的设置,大对象(在此示例中为矢量)将被天真地复制两次:

struct bigStruct {
    bool next() {
        /* do something with m_bigVector */
    }

    std::vector<int> m_bigVector;
    /* other (big) data members */
};

bigStruct s;

#pragma omp parallel
{
    #pragma omp single
    while (s.next()) {
        auto obj = s.m_bigVector; //copy the first time

        #pragma omp task firstprivate(obj) //copy the second time
        {
            /* do something with obj */
        }
    }
} //end parallel
Run Code Online (Sandbox Code Playgroud)

gcc优化(-O3)似乎并没有以任何方式优化两个复制步骤。一个(不太优雅的)解决方案是使用显式的new/delete

#pragma omp parallel
{
    #pragma omp single
    while (s.next()) {
        auto obj_ptr = new …
Run Code Online (Sandbox Code Playgroud)

c++ openmp

5
推荐指数
1
解决办法
72
查看次数

标签 统计

c++ ×1

openmp ×1