如何在Python中使用共享内存乘以3个矩阵?

时间:2015-06-09 14:58:10

标签: python numpy matrix multiprocessing

我想在多处理方法中使用共享内存乘以3个矩阵(如E = AxBxC)。我可以用2个矩阵来做,但是当我想为第三个矩阵重复相同的程序时,我陷入困境并且不知道如何处理共享数组。 我知道我必须使用多处理阵列,但不知道如何管理它。 这是我在代码中使用数组的方式:

mp_arr_one = multiprocessing.Array(ctypes.c_int, 3*3)

然后在我的函数中:

arr = numpy.frombuffer(mp_arr_one.get_obj(), dtype=ctypes.c_int)
res = arr.reshape((3,3))

对于第一部分(D = AxB),一切都很好但是当我想计算E = DxC时,代码出错并且结果完全不正确。

提前致谢。

1 个答案:

答案 0 :(得分:0)

只需将numpy与支持多线程的优化BLAS(例如OpenBLAS,BLAS ATLAS,MKL)一起使用即可。

矩阵乘法将被并行化,并且因为它包含广泛的体系结构相关优化,所以这种方法比用multiprocessing.Array显式管理Python中的共享内存要快。顺便说一句,你应该使用numpy的优化BLAS实现,如果速度是一个问题,即使在单线程执行中也是如此,所以没有办法解决它。