0
我已經在使用OpenMP進行某些並行處理,並且希望添加一個阻塞接收的控制線程。大多數時候這個線程會被阻塞,因此我不希望它坐在那裏佔用一個核心。理想情況下,阻塞調用會觸發一個額外的工作線程。 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任務時我很困惑,因爲他們特意聲明對計劃程序事件做出反應,我認爲其他構造函數可能不會。但它看起來像任務使用另一個建立在OS之上的調度器。這看起來正確嗎? – jayjay
是的,或多或少。 OpenMP任務是將工作分配到OpenMP控制的線程的一種方式,因此可以遷移到OpenMP線程,否則OpenMP線程不會執行OpenMP工作(通常是在某種障礙處等待的線程)。這一切都沒有比邏輯CPU更多的OpenMP線程,並且沒有與操作系統調度程序進行任何交互。 –