2017-02-03 44 views
2

在我的追求,學習OpenMP的我遇到的例子有主,看起來像這樣:爲什麼「omp parallel」和「omp single」互相取消? (OpenMP的)

int main(){ 
    #pragma omp parallel 
     #pragma omp single 
     some_function(1,2); 
return 0; 
} 

糾正我,如果我錯了,但是從我的理解parallel創建線程和single只讓一個線程通過。

那麼,這兩個不會互相抵消?如果你只打算使用線程,那麼創建線程有什麼意義?

some_function遞歸調用本身在#pragma omp task如果這有什麼區別。

回答

2

omp parallel創建的線程團隊在omp single期間仍然存在,他們只是不參與執行並等待工作。然後omp task會產生所有差異(這就是爲什麼總是在您的問題中包含一個完整示例非常重要的原因)!此時將創建一個任務(最有可能)由等待工作的線程之一執行。這就是OpenMP中通常使用的任務。團隊中的任何線程都可以創建任務,運行時會將其分配給團隊中的線程(可能包括產生該線程的線程)。