我是 MPI 的新手。我有一个 fortran 77 程序,它读取一个大数据文件(~1.7 GB),然后对数据进行一些分析。然后它读入下一个数据文件并再次进行分析。这个过程会重复“nstep”次(对我来说 nstep ~=1000)。我附上了代码的一些相关部分。分析本身并不耗时。大数据文件的读入非常耗时。
注意 MN 是一个大数字,我正在阅读的文件通常有 4 到 470 万行(粒子),即整数“i”在每一步发生变化。
目前在 1 个核心上读取 1000 个数据文件需要几个小时。我想并行化下面的程序(执行循环),以便每个内核都可以读取较小的数据块。
c *** DECLARATIONS ***
integer MN
parameter (MN=4700000)
....etc
c ********************
c *** SELECT INPUT DATA STEP ***/
open(10,file='../ini/ghofile.dat',status='old')
do is=0,nstep-1
read(10,*) step
...
c *** OPEN INPUT DATA FILE (THE DO LOOP BELOW IS TIME CONSUMING) ***/
open(20,file=filename,status='old')
do i=0,MN
read(20,121,end=21) x(i),y(i),z(i),vx(i),vy(i),
& vz(i),m(i).... etc
121 format(17(1pE13.5),2(I10),2(1pE13.5),I10)
enddo
21 ns=i
write(6,*) 'No of particles =',ns
enddo
close(20)
stop
end