gpt4 book ai didi

c - 线程中的 OpenMP 阻塞调用

转载 作者:行者123 更新时间:2023-11-30 15:00:04 24 4
gpt4 key购买 nike

我已经在使用 OpenMP 进行一些并行处理,并且想添加一个具有阻塞接收的控制线程。大多数时候这个线程会被阻塞,因此我不希望它坐在那里占用一个核心。理想情况下,阻塞调用会触发额外工作线程的让出。 OpenMP 将如何处理阻塞调用?

类似这样的事情:

#include <omp.h>

int main()
{
int cores = omp_get_num_procs();
#pragma omp parallel num_threads(cores + 1)
if (omp_get_thread_num() == 0) {
send();
blockingReceive();
}
else
{
work();
}
}

最佳答案

这实际上并不是一个关于 OpenMP 的问题,或者,当然不是关于标准的问题。一般来说,OpenMP 实现不太可能知道执行 blockingReceive() 的线程已被阻塞,因为它无法轻易发现它可以在编译时阻塞,并且无法在编译时看到它。运行时除非它拦截所有系统调用。

相反,这是一个关于当线程多于逻辑CPU(超额订阅)时操作系统如何调度线程的问题。如果我们假设您的 blockingReceive() 变成阻塞 read() 系统调用,那么操作系统就知道该线程处于空闲状态,并且应该将另一个线程调度到该逻辑 CPU 上,这就是你想要的。

关于c - 线程中的 OpenMP 阻塞调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42356220/

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