我有一个很大的(1000x1000x5000) 3D numpy数组,我需要在它上面执行许多3D旋转,然后计算一个不对称的距离变换。距离转换是微不足道的并行化,但我需要一种方法来执行旋转本身使用计算集群(没有那么多,例如2 2GB的内存/核心)。有效利用计算集群的好策略是什么?(它没有任何GPU或其他专门的硬件)。是的,我需要旋转的体积-这意味着我不能简单地重新标记坐标,因为非对称距离转换将多次覆盖数据集。我在集群上使用的软件是: python3.4.2,带有scipy、numpy和mpi4py。
谢谢!
发布于 2015-07-15 17:05:03
如果你想在集群上并行执行矩阵运算(例如,可以表示为矩阵乘法的旋转),我会做的是。
_mprotate function)使用multiprocessing用scipy.ndimage计算旋转,你也可以用mpi4py做类似的事情。尽管问题是,除非我弄错了,否则scipy.ndimage.interpolation.rotate并没有在BLAS中使用矩阵运算,而且是一个纯C实现,它最终调用了NI_GeometricTransform函数。因此,除非您使用不同的算法,否则上述方法将不起作用。然后,您必须运行尽可能多的MPI任务,并在它们之间进行域分解(请参阅mpi4py教程)。
这并没有完全回答你的问题,但希望它能有所帮助。
https://stackoverflow.com/questions/31406329
复制相似问题