【问题标题】:FORTRAN MPI Memory allocationFORTRAN MPI 内存分配
【发布时间】:2015-06-09 04:09:28
【问题描述】:

我正在 F77 中编写一个小测试问题(是的,我知道它已经过时了,不,由于我不打算进入的原因,我不能移动到 F90),并且我正在尝试将它与MPI。我对 SMP(特别是 OpenMP)比较熟悉,但我对 MPI 如何分配内存缺乏了解。我当前的代码结构在程序开始时占用了一大块内存,然后分割出一个静态维度的数组(一种在不动态分配内存的情况下解决动态内存分配问题的方法)。我的问题是:我在程序开始时分配了 很多 内存(通常是大部分可用 RAM)。如果我尝试这样做,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 数组吗?

【问题讨论】:

    标签: arrays memory fortran mpi


    【解决方案1】:

    在 MPI 程序中,每个进程都执行相同的程序。如果您因对 FORTRAN77 的喜爱而受限于静态分配,那么您将受限于每个进程在程序启动时获取相同数量的内存。有时这不是问题——例如,当 MPI 程序在分布式内存机器上运行时,每个进程都可以访问单独的本地内存。有时这是一个问题——例如,当同一台计算机(可能是多核桌面)上运行的八个 MPI 进程各自尝试获取所有可用内存时。

    所以,就您的问题而言——是的,每个 MPI 进程都会尝试获取整个可用内存,然后会出现不好的事情。

    【讨论】:

    • 谢谢,这正是我想要的。我正计划开发一种混合架构(跨节点的 MPI,节点上的 SMP),因此在每个节点上获取本地内存应该不会给我带来太多问题。
    猜你喜欢
    • 2012-02-01
    • 1970-01-01
    • 2015-11-04
    • 2014-01-06
    • 2014-10-27
    • 1970-01-01
    • 2019-12-27
    • 1970-01-01
    • 2021-08-10
    相关资源
    最近更新 更多