我有一个大的(1000x1000x5000)3D numpy阵列,我需要在其上执行许多3D旋转,然后计算非对称距离变换。距离变换可以简单地并行化,但是我需要一种方法来使用计算集群(它没有那么多[例如2GB]内存/核心)来执行旋转。什么是有效利用计算集群的好策略? (它没有任何GPU或其他专用硬件)。 是的,我需要旋转的音量 - 这意味着我不能简单地重新标记坐标,因为非对称距离变换会多次覆盖数据集。 我在集群上使用的软件:python3.4.2,scipy,numpy和mpi4py。
谢谢!
答案 0 :(得分:1)
如果你想在集群上并行执行矩阵运算(例如,你可以表示为矩阵乘法的旋转),我会做的是。
_mprotate
function)使用scipy.ndimage
使用multiprocessing
计算轮换,您可以使用mpi4py
执行类似的操作。 虽然问题在于,除非我弄错了,scipy.ndimage.interpolation.rotate
不使用BLAS的矩阵运算,并且是纯C实现,最终调用NI_GeometricTransform
函数。因此,除非您使用不同的算法,否则上述方法将无效。然后,您必须运行与核心一样多的MPI任务,并在它们之间进行域分解(请参阅mpi4py
教程)。
这并不能完全回答你的问题,但希望有所帮助。