簡體   English   中英

c openmp parallel 用於並行區域內

[英]c openmp parallel for inside a parallel region

我的問題是這樣的一個 但我想做一些不同的事情......

例如,在我的並行區域內,我想在 4 個線程上運行我的代碼。 當每個線程進入 for 循環時,我想在 8 個線程上運行我的代碼。 就像是

#pramga omp parallel num_threads(4)
{
    //do something on 4 threads
    #pragma omp parallel for num_threads(2)
    for(int i=0;i<2;i++){
        //do something on 8 threads in total
    }
}

那么,有沒有辦法將每個(4)正在運行的線程“拆分”為兩個(新)線程,以便在 for 循環內有更多(8)線程正在運行?

您在此處擁有的內容 - 嵌套 parallelism ,一個並行部分在另一個中 - 由大多數當前啟用 OpenMP 的編譯器支持,但默認情況下通常是關閉的。 您需要將OMP_NESTED環境變量設置為TRUE ,或者在您的程序中調用omp_set_nested(1) 參見,例如,這個答案

要在評論中回答您的后續問題,您不需要在 OpenMP 並行 for 循環末尾設置障礙; 除非你使用nowait子句,否則在你的for循環結束時已經有一個隱式的同步障礙。 你不能有內部的for循環的障礙; 如果循環迭代沒有被線程平均划分會發生什么? 您最終會“卡住”一些線程,等待其他線程都無法到達的障礙。

是的,正確的方法是您選擇的方法:第二個 for 循環將被每 4 個線程拆分,以便 8 個線程可以同時執行最內部的循環。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM