2
對OpenMP中私有變量和共享變量的基本疑問。代碼看起來如下所示。數組arr包含從1到10的變量,它是全局的。在openmp中,默認情況下fortran子例程中的局部變量是私有的嗎?
PROGRAM TEST
IMPLICIT NONE
INTEGER :: i,j
DO i=1,10
call check()
END DO
END PROGRAM TEST
SUBROUTINE CHECK()
IMPLICIT NONE
INTEGER :: testvar,i
!$OMP PARALLEL DO
DO i = 1,10
testvar = a(i)-1
print testvar
END DO
!$END PARALLEL DO
END SUBROUTINE CHECK
問題:是對變量testvar
其是本地默認子程序私有?這裏的一個主要區別是!$OMP PARALLEL
只在子程序內部啓動,因此這不是孤兒指令。任何幫助是極大的讚賞。
但是當我試圖在一個子程序中使用一個變量時,即使沒有聲明它是私有的,例如** testvar **在上面的例子中它的行爲就好像它是私有的。爲什麼這樣? – Vaidyanathan
你怎麼知道?用1到10的數字填充「a」。如果'testvar'確實是私人的,那麼不可能發生一個數字被打印兩次 - 但它確實! –
它不是爲我打印出來的。它只打印一次。我不確定它是否依賴於編譯器 – Vaidyanathan