Linux下Fortran openmp并行线程设置数量导致服务器死机

DANELCHENG 2018-07-03 09:56:11
高人帮忙看一下openmp程序问题,Fortran openmp并行程序,服务器16个CPU,线程设置超过8个,运行到并行后服务器就死机,不知道是不是程序,求指点,谢谢
allocate(XR(obs_num))
allocate(YR(obs_num))
allocate(ZR(obs_num))
allocate(XS(obs_num))
allocate(YS(obs_num))
allocate(ZS(obs_num))
allocate(ion(obs_num))


do j=1,obs_num
read(20,"(19x,f18.4,f18.4,f18.4,3f18.4,28x,f14.6,4x)",iostat=stat)xs(j),ys(j),zs(j),XR(j),yr(j),zr(j),ion(j)
if(stat/=0)exit
enddo
do i=1,num
ini_ne0(i)=grid_ne(i)*0.8
enddo
write(*,*)'ini_ne=:',ini_ne0(2321)
N=obs_num/NUM_THREADS
!$OMP PARALLEL
!$OMP DO SCHEDULE(STATIC,N)
do j=1,obs_num
call func(j,num,alt,lat,lon,inter_lat,inter_lon,inter_alt,grid_id,XR(j),yr(j),zr(j),xs(j),ys(j),zs(j),&
ion(j),ini_ne0)
enddo
!$OMP END DO
!$OMP END PARALLEL
! NOWAIT
etime=OMP_GET_WTIME()
write(*, "(' running on 2 ',' time=',f20.5)")etime-stime
close(60)
deallocate(XR)
deallocate(YR)
deallocate(ZR)
deallocate(XS)
deallocate(YS)
deallocate(ZS)
deallocate(ion)
deallocate(lon)
deallocate(lat)
deallocate(alt)
deallocate(grid_id)


subroutine func(j,num,alt,lat,lon,inter_lat,inter_lon,inter_alt,grid_id,x0,y0,z0,x1,y1,z1,&
tec,ini_ne)
implicit none
integer ::num,j,i
real(kind=8)::x0,y0,z0,x1,y1,z1,tec,dsum,inter_lat,inter_lon,inter_alt,lat(num),lon(num),alt(num),ini_ne(num),ini_ne0(num)
integer(kind=4) grid_id(num)
real(kind=8),allocatable:: dist0(:)
allocate(dist0(num))
dist0=0.0
do i=1,num
ini_ne0(i)=ini_ne(i)
enddo
dsum=0.0
do i=1,num
call cube_dist(j,alt(i),lat(i),lon(i),inter_lat,inter_lon,inter_alt,grid_id(i),x0,y0,z0,x1,y1,z1,tec,&
dist0(i))
dsum=dsum+dist0(i)*dist0(i)

enddo

dsum=sqrt(dsum)
! write(*,*)'output:',j,dsum,dist0(2321),ini_ne(2321)
call tomo(j,tec,dist0,ini_ne0,dsum,num)

deallocate(dist0)

end subroutine
...全文
453 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复

23,223

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧