內並行的內部「做循環」我有一個代碼,在僞是某事像這樣:一個「do while循環」使用OpenMP
Do while loop
if condition
call subroutinex(In)
else
do i=2,max
ln=i
call subroutinex(ln)
end do
endif
other serial work
end do
我已經設法成功地並行內環像
Do while loop
if condition
call subroutinex(In)
else
!$OMP PARALLEL DEFAULT (SHARED) PRIVATE (pr.variables)
!$OMP DO
do i=2,max
ln=i
call subroutinex(ln)
end do
!$OMP END DO
!$OMP END PARALLEL
endif
other serial work
end do
此代碼適用於我生產正確的結果,並且運行在優化的自動並行化NO-OMP版本(最大= 5)的大約一半時間。我懷疑(雖然不太確定)在「Do while循環」內產生並行區域可能會導致一些不必要的開銷,我可以避免使用不同的方法(產生外部循環之外的並行區域並使用!$ OMP CRITICAL或!$ OMP MASTER)。我似乎無法理解如何正確的語法是這樣的。任何建議都非常受歡迎。
最好的問候, 阿波斯托