Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parallel processing 如何使用MPI并行化基本fortran do循环?_Parallel Processing_Fortran_Mpi_Fortran77_Do Loops - Fatal编程技术网

Parallel processing 如何使用MPI并行化基本fortran do循环?

Parallel processing 如何使用MPI并行化基本fortran do循环?,parallel-processing,fortran,mpi,fortran77,do-loops,Parallel Processing,Fortran,Mpi,Fortran77,Do Loops,我是MPI新手。我有一个fortran 77程序,它读取一个大数据文件(~1.7 GB),然后对数据进行一些分析。然后它读入下一个数据文件并再次进行分析。此过程重复“nstep”次(对于我来说,nstep~=1000)。 我附上守则的一些相关章节。分析本身并不耗时。读入大型数据文件非常耗时 注意MN是一个巨大的数字,我正在读取的文件通常有4-470万行(粒子),即整数“I”在每一步都会发生变化 目前,读取1000个数据文件需要几个小时的时间。我想将下面的程序并行化(do循环),这样每个内核都可以

我是MPI新手。我有一个fortran 77程序,它读取一个大数据文件(~1.7 GB),然后对数据进行一些分析。然后它读入下一个数据文件并再次进行分析。此过程重复“nstep”次(对于我来说,nstep~=1000)。 我附上守则的一些相关章节。分析本身并不耗时。读入大型数据文件非常耗时

注意MN是一个巨大的数字,我正在读取的文件通常有4-470万行(粒子),即整数“I”在每一步都会发生变化

目前,读取1000个数据文件需要几个小时的时间。我想将下面的程序并行化(do循环),这样每个内核都可以读入更小的数据块

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

并行化输入可能会导致失望,除非您有硬件(和系统软件)支持多个进程同时读取同一个文件或已拆分成块的大文件。如果只有一个驱动器头,当2个(或多个)进程同时尝试访问磁盘的不同部分时,考虑它的活动。我可以访问一个具有数百个内核和数百个TB硬盘空间的CPU / GPU集群。我想我也可以尝试并行化,这样每个核心只执行一步。。。。如果你有硬件来并行读取一个或多个文件,那么下一个问题是:你的计算并行得令人尴尬吗?您的问题没有明确说明每个步骤的计算取决于前面的步骤或其他前面的步骤。是吗?是的,这个具体的问题是令人尴尬的平行。每一步的计算都是独立的/不依赖于前一步。这样你就不需要麻烦MPI了。只需启动N个程序实例,为每个实例提供1/N的输入即可。您可能可以使用shell脚本来实现这一点。