2017-09-22 61 views
0

這可能是一個愚蠢的問題,但我剛剛開始使用OpenMP,原因是數據量增加。嵌套的OpenMP並行區域不按預期迭代

我正在通過Miguel Hermanns的「使用OpenMP進行Fortran 95並行編程」,並且本書很早。早期的例子之一顯示了使用嵌套的平行區域,並指出它應該產生N行輸出。過程是這樣的:

program helloworld 
    !$OMP PARALLEL 
     write(*,*) "Hello" 
     !$OMP PARALLEL 
      write(*,*) "Hi" 
     !$OMP END PARALLEL 
    !$OMP END PARALLEL 
end program helloworldcode 

我希望12個招呼,然後144他,而是我得到的每一個12:

$ ./helloworld.exe 
Hello 
Hello 
Hello 
Hi 
Hi 
Hello 
Hello 
Hello 
Hello 
Hello 
Hello 
Hi 
Hi 
Hello 
Hello 
Hi 
Hi 
Hi 
Hi 
Hi 
Hello 
Hi 
Hi 
Hi 

爲什麼我沒有得到156線輸出的,我會期望?

+0

所有Fortran問題的Ues標籤[tag:fortran]。您可以爲特定於版本問題添加版本標記(這個版本不是特定的Fortran版本)。甚至你所引用的書是F95而不是F90 ... –

回答

0

默認情況下,OpenMP會序列化所有嵌套的並行區域,以防止在創建N^2工作線程時發生二次超額預訂的最壞情況。如果處理器數量足夠多(例如> = 16),那麼當請求的線程數量無法創建時,二次超額訂閱可能會導致惡夢開銷或者造成資源耗盡問題。請參考omp_set_nested和相應的環境變量OMP_NESTED

+0

啊,好的,謝謝。如果我想,是否有一個標誌告訴它在寫入時運行嵌套平行區域? – Vorticity