假设您有一个包含不同迭代次数和 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/