2014-03-31 74 views
0

我正在使用OpenMP fortran。 我有一個關於調度的問題。OpenMP:調度性能

那麼從這兩個選項哪一個會有更好的表現呢?

!$OMP PARALLEL DO PRIVATE(j) SCHEDULE(STATIC) 
do j=1,l 
    call dgemm("N","N",..) 
end do 
!$OMP END PARALLEL DO 


!$OMP PARALLEL DO PRIVATE(j) 
do j=1,l 
    call dgemm("N","N",..) 
end do 
!$OMP END PARALLEL DO 

回答

0

有三個由OpenMP定義的調度子句:Static,Dynamic和Guided。

  1. 靜態:預先在線程之間均勻分割循環變量(在編譯時);
  2. 動態:在線程在運行時完成時分配塊;引導:作爲動態的,但塊大小隨着每次連續分配而減小;

默認調度是實現獨立的(未在標準中指定)。所以,對於你的問題,取決於編譯器,它可能不會改變(如果默認實現是靜態的)。以下是如果它改變了一些事情:

  • 靜態調度對於常規任務是最好的,這意味着循環的每次迭代都花費相同的時間。它降低了同步任務分配的開銷。
  • 動態調度對於不規則任務是最好的,這意味着你的迭代可能有不同的執行時間。這很有用,因爲一個線程可以處理多個小任務,而另一個線程可以處理更少的任務。
  • 引導式調度通過減少塊的粒度來改善全局負載平衡。在並行結束時分配小任務以減少線程之間的結束時間差異更有效。