我面臨的問題是概述如下:OpenMP的子程序調用線程中
module k
integer :: l,m
end module k
program p4
use k
integer :: i,j,omp_get_thread_num,cr
i = 2
j = 3
!$omp parallel num_threads(2) shared(l,m) private(i,j,cr)
cr = omp_get_thread_num()
if (cr == 0) goto 1111
call sub1(i)
write(*,*) l
goto 2222
1111 call sub2(j)
write(*,*) m
2222 continue
!$omp end parallel
end program p4
subroutine sub1(a)
use k
integer :: a
l = a**2
write(*,*) 'entered sub1'
end subroutine sub1
subroutine sub2(b)
use k
integer :: b
m = b**2
write(*,*) 'entered sub2'
end subroutine sub2
我試圖並行串行,(其中並行後看起來就像上面寫的)。我基本上需要執行兩次相同的操作。所以,理想的情況是,我所要的輸出是
entered sub1
4
enterer sub2
9
但輸出
entered sub2
0
entered sub1
923239424
我新的並行編程,(我的實際問題是一個我有一個更復雜的版本概括)。任何人都可以指出錯誤並提出改進建議。由於
與上述同意。你有什麼是不可讀的。它是Haskell嗎? – Adam
@亞當:哈斯克爾?不,它顯然是Fortran。關鍵線索:「繼續」聲明。 –
@IraBaxter啊是的,我也看到了GOTO。謝謝你的提示。也許我應該停止做這麼好的避免Fortran和Haskell的工作。 – Adam