gpt4 book ai didi

c - 在 openmp 中按动态调度顺序执行 for 循环迭代

转载 作者:行者123 更新时间:2023-11-30 16:51:31 26 4
gpt4 key购买 nike

我想在 openmp 中使用动态计划运行 for 循环。

#pragma omp for schedule(dynamic,chunk) private(i) nowait
for(i=0;i<n;i++){
//loop code here
}

我想让每个线程执行有序的 block ,这样

例如线程 1 -> 迭代 0 到 k

thread2 -> 迭代 k+1->k+chunk

等等..

静态计划部分地满足了我的要求,但我想动态地平衡迭代的负载。

如果我理解正确的话,这两个子句都不是有序子句。

我的问题是如何确保分配的 block 是有序的 block ?

我正在使用 openmp 3.1 和 gcc

最佳答案

您可以自己实现此功能,而无需求助于 omp for,专家级 OpenMP 程序员认为这是一个方便的函数。

以下内容大致说明了您可能会执行的操作。请仔细检查算术。

#pragma omp parallel
{
int me = omp_get_thread_num();
int nt = omp_get_num_threads();
int chunk = /* divide n by nt appropriately */
int start = me * chunk;
int end = (me+1) * chunk;
if (end > n) end = n;
for (int i = start; i < end; i++) {
/* do work */
}
} /* end parallel */

这不会进行任何动态负载平衡。如果您先验知道成本函数,您可以通过将循环迭代不均匀地分配给线程来自己完成此操作。您可以阅读检查器执行器模型(例如 1 )。

关于c - 在 openmp 中按动态调度顺序执行 for 循环迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41746023/

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