AMS对内存的使用

内存的使用,是一个比较有意思的事情。在*.out文件的头部,会有内存使用的情况,例如:

 Parallel Execution: Process Information
 ==============================================================================
 Rank   Node Name                              NodeID   MyNodeRank  NodeMaster
    0   ibnode13                                  0          0          0
    1   ibnode13                                  0          1         -1
    2   ibnode13                                  0          2         -1
    3   ibnode13                                  0          3         -1
    4   ibnode13                                  0          4         -1
    5   ibnode13                                  0          5         -1
    6   ibnode13                                  0          6         -1
    7   ibnode13                                  0          7         -1
    8   ibnode13                                  0          8         -1
    9   ibnode13                                  0          9         -1
   10   ibnode13                                  0         10         -1
   11   ibnode13                                  0         11         -1
   12   ibnode13                                  1          0          1
   13   ibnode13                                  1          1         -1
   14   ibnode13                                  1          2         -1
   15   ibnode13                                  1          3         -1
   16   ibnode13                                  1          4         -1
   17   ibnode13                                  1          5         -1
   18   ibnode13                                  1          6         -1
   19   ibnode13                                  1          7         -1
   20   ibnode13                                  1          8         -1
   21   ibnode13                                  1          9         -1
   22   ibnode13                                  1         10         -1
   23   ibnode13                                  1         11         -1
   24   ibnode13                                  0         12         -1
   25   ibnode13                                  0         13         -1
   26   ibnode13                                  0         14         -1
   27   ibnode13                                  0         15         -1
   28   ibnode13                                  0         16         -1
   29   ibnode13                                  0         17         -1
   30   ibnode13                                  0         18         -1
   31   ibnode13                                  0         19         -1
   32   ibnode13                                  0         20         -1
   33   ibnode13                                  0         21         -1
   34   ibnode13                                  0         22         -1
   35   ibnode13                                  0         23         -1
   36   ibnode13                                  1         12         -1
   37   ibnode13                                  1         13         -1
   38   ibnode13                                  1         14         -1
   39   ibnode13                                  1         15         -1
 ==============================================================================


May use up to 15625MB of RAM as shared memory on node 0
May use up to 15517MB of RAM as shared memory on node 1

这段文字说明的内容是:

  1. CPU的颗数、编号:该作业,使用了节点 ibnode13 的 2 颗 CPU(当然更严格的说,叫做逻辑 CPU,下同),在 NodeID 那一列,列出的就是每个进程用的核心所在的 CPU 编号,分别为 0、1。最后 2 行的 node 0 和 node 1,也是指这个。
  2. 内存占用量:本作业使用的内存总数估计为:15625MB + 15517MB
  3. 同一颗CPU会共用内存:在同一颗 CPU 里面的全部进程,共用同一块内存空间,在这颗 CPU 内,使用的核数多一些、少一些,内存消耗都是一样的。因此,假如这个作业只用 20 核心,则只需要 1 颗 CPU,因此只需要约 15600MB 内存,如果使用1、2、8、10……19核心,占用的内存也都是这么大。
  4. 内存占用量正比于调用 CPU 颗数:
    • 例如这里使用了 2 个 CPU,内存大致上就是1 颗 CPU 的 2 倍。
    • 假如:“这个节点有 4 颗 CPU,每个 CPU 有 20 个核心(严格的说,叫逻辑核心)”,那么如果我们使用 41 核心运行本作业,第三颗 CPU 也得参与进来,计算机就需要单独为第三颗 CPU 开辟大约 15600MB 内存,从而占用总内存就是大约 15600MB × 3。
    • 假如“该节点,它的一颗 CPU 就有 40 核心”,那么我们现在这个40核心的作业,需要的内存就只需要约15625MB。
  5. 该节点还有其他作业,其他作业占用掉的核心,正常情况下,就不会分配给本作业了。其他作业也会占用内存。

综上,同一个作业,哪怕使用相同的核心数,如果使用的CPU不同,那么内存的占用也非常不相同,单颗 CPU 核数越多,一般消耗内存越少