c++ - OpenMP:一次为线程分配一个迭代

标签 c++ multithreading parallel-processing openmp

假设您有一个包含不同迭代次数和 4 个核心的循环

我明白了

#pragma omp parallel for

基本上会将迭代分成大小为 4 的 block

| T1 | T2 | T3 | T4 |

但是,在我的特定情况下,这种行为会更有优势。每个 block 的大小/大小长度。所以线程 1 不会得到迭代 0..size/4,而是迭代 0,size/4,2*size/4,3*size/4

|T1|T2|T3|T4|T1|T2|T3|T4|T1|T2|T3|T4|T1|T2|T3|T4|

当直到运行时才知道迭代次数时,如何让我的代码像这样执行?

最佳答案

你所描述的——假设你的启发式是大小/线程总数——是一个循环调度(即,静态调度),chunk_size = 1。为此你只需要:

#pragma omp parallel for schedule(static,1)

在这种情况下,如果迭代次数在运行时已知(或未知),则没有区别。

关于c++ - OpenMP:一次为线程分配一个迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72824256/

相关文章:

C P线程数

c - openmp 排序临界区

c++ - 返回引用

c++ - 使用 g++,如何弃用虚拟类成员函数

python - QObject::connect: 无法对类型为 'QTextCursor' 的参数进行排队

linux - 如何在 linux 集群上查找节点的名称

c# - C# 5.0 async/await vs. Akka actor vs. basic fork/join 的示例?

c# - 从 C# 类库导出函数

c++ - 有没有办法将对象的字段隐式传递给 C++ 中的函数

c++ - 将 std::thread 分配给 vector<std::thread> 时出现段错误