/var/spool/torque/mom_priv/jobs/775.head.cluster.SC: line 22: 28084 Segmentation fault ./a.out
我在Fortran語言新,這是我第一次與HPC和OpenMP工作。 在我的代碼中,我有一個應該平行的循環。我使用了一些動態變量,它們都是並行循環中的虛擬變量。forrtl:嚴重(151):分配數組已經allocated-
我分配動態變量並聯迴路
!$OMP PARALLEL DO
do 250 iconf = 1,config
allocate(randx(num),randy(num),randz(num),unit_cg(num), &
& x(nfftdim1),y(nfftdim2),z(nfftdim3),fr1(num), &
& fr2(num),fr3(num),theta1(order,num), &
& theta2(order,num),theta3(order,num), &
& Q(nfftdim1,nfftdim2,nfftdim3))
... call some subroutines and do calculations ...
deallocate(randx,randy,randz,unit_cg,fr1,fr2,fr3,theta1,theta2, &
& theta3,x,y,z,Q)
250 continue
!$OMP END PARALLEL DO
我被遺漏的代碼無關的一些部分。當執行程序,出現此錯誤:
forrtl: severe (151): allocatable array is already allocated
我分配的並行區域外的變量,它適用於小數據,但對於大數據出現此錯誤:
/var/spool/torque/mom_priv/jobs/775.head.cluster.SC: line 22: 28084 Segmentation fault ./a.out
我使用的私有動態變量(虛擬變量)子句:
!$OMP PARALLEL DO DEFAULT(SHARED) PRIVATE(randx,randy,randz, &
!$OMP& unit_cg,fr1,fr2,fr3,theta1,theta2,theta3,x,y,z,Q, &
!$OMP& dir_ene,rec_ene,corr_ene,energy_final,plproduct_avg, &
!$OMP& correlation_term)
和並行循環內分配的變量,但同樣的錯誤, 最後我改變了鱈魚e到:
allocate(randx(num),randy(num),randz(num),unit_cg(num), &
& x(nfftdim1),y(nfftdim2),z(nfftdim3),fr1(num), &
& fr2(num),fr3(num),theta1(order,num), &
& theta2(order,num),theta3(order,num), &
& Q(nfftdim1,nfftdim2,nfftdim3))
!$OMP PARALLEL DO DEFAULT(SHARED) PRIVATE(randx,randy,randz, &
!$OMP& unit_cg,fr1,fr2,fr3,theta1,theta2,theta3,x,y,z,Q, &
!$OMP& dir_ene,rec_ene,corr_ene,energy_final,plproduct_avg, &
!$OMP& correlation_term)
do 250 iconf = 1,config
... call some subroutines and do calculations ...
250 continue
!$OMP END PARALLEL DO
deallocate(randx,randy,randz,unit_cg,fr1,fr2,fr3,theta1,theta2, &
& theta3,x,y,z,Q)
它在運行時失敗。它啓動N(線程數)循環,但不能完成它們,並再次出現此錯誤:
/var/spool/torque/mom_priv/jobs/775.head.cluster.SC: line 22: 28084 Segmentation fault ./a.out
任何想法?
您想要在循環'private'中分配的所有變量。或者你不想在循環內部但是在外部分配它們。 –
你的意思是我應該使用'!$ OMP PARALLEL DO PRIVATE()'並將所有可分配的變量放在括號中?如果我在循環之外分配內存不足,不是嗎? –
這取決於你正在嘗試做什麼。也許你應該試着把它放在循環之外。你確定你的串行代碼按預期工作嗎?我們不知道'num','order'和'iconf'的值是從哪裏來的。 –