我正在按顺序对 3 个不同的 numpy 2D 数组执行一些大型计算。阵列很大,每个 25000x25000。每次计算都需要大量时间,因此我决定在服务器上的 3 个 CPU 内核上并行运行其中的 3 个。我遵循标准的多处理指南并创建 2 个进程和一个工作函数。两个计算通过 2 个进程运行,第三个计算在本地运行,没有单独的进程。我将巨大的数组作为过程的参数传递,例如:
p1 = Process(target = Worker, args = (queue1, array1, ...)) # Some other params also going
p2 = Process(target = Worker, args = (queue2, array2, ...)) # Some other params also going
Worker 函数在附加在队列中的列表中发回两个 numpy 向量(一维数组),例如:
queue.put([v1, v2])
我没有使用multiprocessing.pool
但令人惊讶的是我没有得到加速,它实际上运行速度慢了 3 倍。传递大型数组需要时间吗?我无法弄清楚发生了什么。我应该使用共享内存对象而不是传递数组吗?
如果有人可以提供帮助,我将不胜感激。
谢谢你。