gpt4 book ai didi

c++ - OpenMP 是否将已完成部分的重用线程用于另一个部分?

转载 作者:行者123 更新时间:2023-11-28 04:20:42 26 4
gpt4 key购买 nike

假设我有 OpenMP 设置来运行多个部分,如下所示:

#pragma omp parallel sections
{
#pragma omp section
{ func a }
#pragma omp section
{ func b }
}

现在假设 func b 首先完成,而 func a 仍在运行。 OpenMP 是否使用在 func a 中使用的线程来进一步并行化 func b?如果没有,有没有办法做到这一点?

编辑:在先前的问题中有人建议先前使用的线程保持空闲状态。是否有办法让他们在仍在运行的部分上工作?

最佳答案

OpenMP 不使用空闲线程来进一步并行化您代码中的其他部分。如果您想在线程之间实现更好的负载平衡,那么您将不得不使用依赖于 OpenMP 任务的更现代的 OpenMP 编程风格。当线程空闲时,空闲线程会自动拾取准备执行的任务。

所以,代码看起来更像这样:

#pragma omp parallel master
{
#pragma omp task
{ func a } // func a needs to generate more tasks
#pragma omp task
{ func b } // func b needs to generate more tasks
}

关于c++ - OpenMP 是否将已完成部分的重用线程用于另一个部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55505878/

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