2015-05-31 43 views
4

我有一個程序加速了openMP,在並行區域內部,函數如std::nth_element,std::sort,std::partition被調用。實際上,這些函數用於處理每個openmp線程對應的數組部分。我應該在openMP並行區域內使用gnu並行模式函數(for循環,任務)

最近,我發現g ++已經實現了上述函數的並行版本,所以我不知道是否應該在#pragma omp task#pragma omp for區域內使用像__gnu_parallel::nth_element這樣的函數?如果我使用並行模式,線程總數是否會超過omp_set_num_threads()設置的限制,導致加速性能下降?

回答

0

瑣碎(最好)答案:基準併發布你的發現。

較不明確:根據我的經驗,大多數算法的並行版本效率低於類似的串行算法,而是依靠多個並行處理器來補償壁時間。關於線程數量,我不認爲OMP會在極限情況下產生新線程。我記得嵌入式#pragma omp for區域實際上並沒有導致每個外部線程產生更多「內部線程」而沒有特定的標誌(我不記得我的頭頂)。