gpt4 book ai didi

c - OpenMP 如何重用线程

转载 作者:行者123 更新时间:2023-12-02 07:31:57 25 4
gpt4 key购买 nike

我认为线程创建和删除的成本可能很高。 OpenMP 是否尝试重用现有线程?例如,

#pragma omp parallel sections num_threads(4)
{
#pragma omp section
{ ... worker A ... }
#pragma omp section
{ ... worker B ... }
}
#pragma omp parallel sections num_threads(4)
{
#pragma omp section
{ ... worker C ... }
#pragma omp section
{ ... worker D ... }
}

在执行过程中,OpenMP 分配 5 个线程还是 3 个线程(其中 C 和 D 复用 A 和 B 使用的线程)?

最佳答案

在您的示例中,在进入第一个并行部分时,将创建/激活由 4 个“工作”线程组成的团队,其中 2 个将执行某些工作:一个执行 A,另一个执行 B。另外 2 个将执行在该部分的末尾空闲等待。然后,4 个线程在退出该部分时被销毁/停用。然后,在进入第二个并行部分时,将创建/激活一个由 4 个线程组成的新团队,同样的情况也会发生...现在我说创建/激活,因为正如您所猜测的,创建线程的成本很高,标准允许编译器创建线程一次,并且仅在需要时才将线程置于并行部分之间的 sleep 状态。但这是一个对程序员来说应该透明的实现细节。

最终,无法知道哪个线程将处理 A、B、C 和 D...您只能确定 A 和 B 将由 2 个不同的线程处理,而 C 和也由两个不同的线程 D。

关于c - OpenMP 如何重用线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32572043/

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