相关疑难解决方法(0)

Multiprocessing.Pool使Numpy矩阵乘法更慢

所以,我玩弄multiprocessing.PoolNumpy,但似乎我错过了一些重要的一点.为什么pool版本慢得多?我查看了htop,我可以看到创建了几个进程,但它们共享一个CPU,最多可达100%.

$ cat test_multi.py 
import numpy as np
from timeit import timeit
from multiprocessing import Pool


def mmul(matrix):
    for i in range(100):
        matrix = matrix * matrix
    return matrix

if __name__ == '__main__':
    matrices = []
    for i in range(4):
        matrices.append(np.random.random_integers(100, size=(1000, 1000)))

    pool = Pool(8)
    print timeit(lambda: map(mmul, matrices), number=20)
    print timeit(lambda: pool.map(mmul, matrices), number=20)

$ python test_multi.py 
16.0265390873
19.097837925
Run Code Online (Sandbox Code Playgroud)

[更新]

  • 改为timeit基准测试流程
  • init池,包含许多核心
  • 改变计算,以便有更多的计算和更少的内存传输(我希望)

仍然没有变化.pool版本仍然较慢,我可以看到htop,只使用了一个核心,也产生了几个进程. …

python numpy pool multiprocessing

15
推荐指数
3
解决办法
2万
查看次数

标签 统计

multiprocessing ×1

numpy ×1

pool ×1

python ×1