小编Joh*_*ohn的帖子

我可以为OpenMP中的代码部分分配多个线程吗?

我正在寻找一种方法来为每个部分使用多个线程并行执行代码段.例如,如果我有16个线程和两个任务,我希望每个8个线程同时执行这两个任务.OpenMP有几个并行执行通用代码的构造(section,task),但它们是单线程的.在我的场景中,使用sectiontask将导致一个线程执行两个任务中的每一个,而14个线程闲置.

OpenMP甚至可以实现这样的功能吗?如果是这样,我该怎么做,如果没有,我可以为此目的使用什么?

谢谢你的时间!

编辑2:

让我用示例代码扩展这个问题:

class some_class{
    void task(){
        cout<<"Entering the task method"<<endl;
        #pragma openmp parallel for
            for(int i=0; i < large_matrix.rows(); i++){
                 perform_thread_safe_operation(large_matrix.getRow(i));
            }
    }

    matrix large_matrix;
};


void main(){
    //I have 16 cores, so I want to spawn 16 threads
     some_class o1;
     some_class o2;
    // I want 8 of the 16 threads to execute this line:
    o1.task();
    // and 8 remaining threads to execute this line:
    o2.task();
}
Run Code Online (Sandbox Code Playgroud)

c++ multithreading openmp

6
推荐指数
1
解决办法
3499
查看次数

将对象矢量划分为2个或更多个子组

我想基于一些共同特征将参考向量MyObject(即vector<MyObject*>)分割成2个或更多个子向量.

我有一个等价函数bool belongToSameGroup(MyObject *x, MyObject *y);,true如果某些数据字段MyObject是相等的,false否则.因为这种等价不是一般性的,仅用于特定目的,我宁愿不超载operator==.

我可以创建一个最好的方法,例如,一个<vector<MyObject*>'s(即vector< vector<MyObject*> >)的向量,以便元素根据它们在函数下的等价性进行分组belongToSameGroup?我不想做一堆for循环并尽可能地利用STL算法和容器.

c++ stl

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

标签 统计

c++ ×2

multithreading ×1

openmp ×1

stl ×1