繼this answer,我竟然有三個循環更復雜的代碼:是否有可能「交叉崩潰」並行迴路?
!$omp parallel
!$omp do
do i=1,4 ! can be parallelized
...
do k=1,1000 !to be executed sequentially
...
do j=1,4 ! can be parallelized
call job(i,j)
的外環快速完成,除了i=4
。所以我想在最裏面的循環中啓動線程,但是在每個循環內依次保留k
-loop。實際上,k
在隨機數發生器的變化狀態上循環,所以這不能被並行化。
我怎樣才能摺疊i
和j
循環?我懷疑ordered
子句在這裏很有用,但我擔心它會再次影響內部循環,但仍然不確定語法。
也許未來的OpenMP版本?從技術上講,應該可以在最內層循環中創建新線程,而外層空閒線程釋放CPU容量。 –
是的,這是可能的,使用嵌套並行。 –
或者只是並行化內部循環。我只關心它可能不夠有效,要麼只是從1到4的'j'循環是可並行化的,並且它運行得太頻繁。 (但是嵌套並行也是如此,如果不是更多。) –