【发布时间】:2016-10-08 22:14:35
【问题描述】:
这里有一个小基准代码来说明我的问题:
import numpy as np
import multiprocessing as mp
# allocate memory
%time temp = mp.RawArray(np.ctypeslib.ctypes.c_uint16, int(1e8))
Wall time: 46.8 ms
# assign memory, very slow
%time temp[:] = np.arange(1e8, dtype = np.uint16)
Wall time: 10.3 s
# equivalent numpy assignment, 100X faster
%time a = np.arange(1e8, dtype = np.uint16)
Wall time: 111 ms
基本上,我希望在多个进程之间共享一个 numpy 数组,因为它很大并且是只读的。 This method 效果很好,没有制作额外的副本,并且进程的实际计算时间很好。但是创建共享数组的开销是巨大的。
This post 提供了一些关于为什么某些初始化数组的方法很慢的深刻见解(请注意,在上面的示例中,我使用的是更快的方法)。但这篇文章并没有真正描述如何真正提高速度到类似 numpy 的性能。
有人对如何提高速度有任何建议吗?一些 cython 代码对分配数组有意义吗?
我正在使用 Windows 7 x64 系统。
【问题讨论】:
标签: python multiprocessing shared-memory