我在F77中写了一个小测试问题(是的,我知道它已经过时了,不是因为我不打算进入的原因我不能移动到F90),而且我正在尝试将其与MPI并行化。我对SMP(特别是OpenMP)比较熟悉,但是我对MPI如何分配内存缺乏了解。我当前的代码结构在程序开始时捕获了大量内存,然后分割出静态维度的数组(一种避免动态内存分配问题而不动态分配内存的方式)。我的问题是这样的:我在程序开始时分配很多内存(通常是大量的可用RAM)。如果我尝试这样做MPI,它会尝试为每个进程分配相同的大数组吗?FORTRAN MPI内存分配
例如
Program MPI_SUM
Implicit Real*8(A-H,O-Z)
Include '/usr/include/mpi/mpif.h'
Parameter (MDV = MAX_MEM) ! Let's say I have MAX_MEM defined here
Dimension V(MDV)
Call MPI_Init(IErr)
Call MPI_WORLD_RANK(MPI_COMM_WORLD,myID,IErr)
Call MPI_WORLD_SIZE(MPI_COMM_WORLD,nProc,IErr)
等...等...让我们说max_mem的是一个值,以使它们的分配分配两个将超过可用的RAM。每个进程都会尝试分配一个维度为MDV的新V数组吗?
谢谢,那就是我一直在寻找的。我正在计划开发混合体系结构(节点上的MPI,节点上的SMP),因此抓取每个节点上的本地内存不应该给我太多问题。 – 2015-04-08 14:18:43