0
我有一段與串行編譯和執行完美配合的實驗代碼。當我在ifort(在Ubuntu上)上用openmp選項編譯它時,編譯進行得很好,但執行突然停止。代碼如下:fortran90中的數組和子程序幫助
!!!!!!!! module
module array
implicit none
real(kind=8),allocatable :: y(:)
end module array
module nonarray
implicit none
real(kind=8):: aa
end module nonarray
use nonarray; use array
implicit none
integer(kind=8):: iter,i
integer(kind=8),parameter:: id=1
real(kind=8),allocatable:: yt(:)
allocate(y(id)); allocate(yt(id)); y=0.d0; yt=0.d0
aa=4.d0 !!A SYSTEM PARAMETER
!$OMP PARALLEL PRIVATE(y,yt,iter,i)
!$OMP DO
loop1: do iter=1,20 !! THE INITIAL CONDITION LOOP
call random_number(y)!! RANDOM INITIALIZATION OF THE VARIABLE
loop2: do i=1,10000 !! ITERATION OF THE SYSTEM
call evolve(yt)
y=yt
enddo loop2 !! END OF SYSTEM ITERATION
write(1,*)aa,yt
enddo loop1 !!INITIAL CONDITION ITERATION DONE
!$OMP ENDDO
!$OMP END PARALLEL
stop
end
recursive subroutine evolve(yevl)
use nonarray; use array
implicit none
integer(kind=8),parameter:: id=1
real(kind=8):: xf
real(kind=8),intent(out):: yevl(id)
xf=aa*y(1)*(1.d0-y(1))
yevl(1)=xf
end subroutine evolve
編譯我用下面的命令: ifort -openmp -fpp test.f90。
test.f90是程序的名稱。 任何建議或幫助,高度讚賞。
非常感謝您的評論。問題與您的建議完全相同。代碼運行良好。我會看到還有什麼其他問題出現(如果他們顯示出來的話)並且保持這個討論主題更新。此外,也許我對ifort12.1.6的問題有了一個想法。舊版本缺少一些我認爲可分配數組的特性(儘管我可以通過閱讀不同的論壇來理解),問題源於此。我只是將我的版本更新到ifort 13.1.0,它似乎運行良好。再次感謝你的回答。這是一個很大的幫助。 – legol18 2013-03-14 10:28:57
根據Stackoverflow的習慣,你不應該在這個線程中討論更多(不同的)問題。每個線程通常只包含一個問題。如果你認爲這個問題已經完全回答了任何答案,你應該考慮在某個時候接受它作爲最終答案。如果你遇到其他問題,你應該把它作爲一個單獨的問題。有關詳細信息,請參閱[Stackoverflow FAQ](http://stackoverflow.com/faq)。 – 2013-03-14 10:43:35