测量多处理的峰值内存使用 - 令人困惑的结果

时间:2015-03-11 16:06:00

标签: python bash python-2.7 multiprocessing python-multiprocessing

我写了这个:

from multiprocessing import Pool
import time

import numpy.random as nr

def f(vec_size):
  """Create a big vector and wait"""
  x = nr.randint(0, pow(10, 10), vec_size)
  time.sleep(10)

n_proc = 5
vec_size = pow(10, 6)
pool = Pool(n_proc)
for _ in pool.imap_unordered(f, [vec_size] * n_proc):
  pass

然后我检查了峰值内存使用情况(“平均常驻设置大小”),如下所示:

/usr/bin/time -v python run.py

结果如下:

  1. n_proc = 5,vec_size = 10 ^ 6,峰值记忆= 80,000 kb
  2. n_proc = 10,vec_size = 10 ^ 6,峰值记忆= 80,000 kb
  3. n_proc = 5,vec_size = 10 ^ 7,峰值记忆= 360,000 kb
  4. n_proc = 10,vec_size = 10 ^ 7,峰值记忆= 360,000 kb
  5. 我的理解是父进程不创建任何数据,而[n_proc]子进程正在创建大向量。但那时:

    • 从5个进程到10个进程不会更改峰值内存使用量。这表明仅报告父进程的峰值内存使用情况。但是,单独的父流程80,000 kb似乎太高了
    • 从10 ^ 6个元素到10 ^ 7个元素增加了峰值内存使用量。这表明测量了所有过程(父+ N子过程)的峰值记忆。但是,不应该将峰值内存使用量乘以10?

    我误解了什么?

0 个答案:

没有答案