gpt4 book ai didi

for-loop - 有没有办法控制 OpenMP parallel_for 构造的分区?

转载 作者:行者123 更新时间:2023-12-05 03:15:07 25 4
gpt4 key购买 nike

我使用 OpenMP (OMP) 并行化 for 循环。但是,OMP 似乎会将我的 for 循环划分为相等的间隔大小,例如

for( int i = 0; i < n; ++i ) {
...
}

NUM_THREADS 个 block ,每个 block 大小为 n/NUM_THREADS。不幸的是,我用它来并行化对三角矩阵的扫描,因此最后一个 block 比第一个 block 有更多的工作要做。所以我真正想问的是在这样的场景下如何进行负载均衡。我可以想象,if ( i % THREAD_NUMBER == 0) .. 会很好(换句话说,循环中的每次运行都分配给不同的线程)。我知道这不是最优的,因为缓存会被破坏,但是,有没有办法用 OMP 控制循环分区?

最佳答案

可以将一个子句添加到您的#pragma omp for 构造中,该子句称为schedule

有了它,您可以指定 block (您称之为一个分区)如何在线程上分布

可以找到调度变体的描述 here .对于您的目的,dynamicguided 最适合。

使用 dynamic,每个线程获得相同的迭代次数 (<< total_iterations),并在完成后请求更多迭代。

guided 下几乎完成了相同的操作,但在执行期间迭代次数减少,因此您首先获得大量迭代,然后每个请求的迭代次数较少。

关于for-loop - 有没有办法控制 OpenMP parallel_for 构造的分区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20612970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com