Python 高效的平行三维旋转
我有一个大的(1000x1000x5000)3D numpy阵列,我需要在其上执行许多3D旋转,然后计算不对称距离变换。距离变换可以简单地并行化,但我需要一种方法来使用计算集群(它没有太多(例如2GB)内存/核心)执行旋转本身。高效利用计算集群的好策略是什么?(它没有任何GPU或其他专用硬件)。 是的,我需要旋转的体积-这意味着我不能简单地重新标记坐标,因为非对称距离变换将多次覆盖数据集。 我在集群上使用的软件:python3.4.2和scipy、numpy和mpi4pyPython 高效的平行三维旋转,python,3d,parallel-processing,rotation,Python,3d,Parallel Processing,Rotation,我有一个大的(1000x1000x5000)3D numpy阵列,我需要在其上执行许多3D旋转,然后计算不对称距离变换。距离变换可以简单地并行化,但我需要一种方法来使用计算集群(它没有太多(例如2GB)内存/核心)执行旋转本身。高效利用计算集群的好策略是什么?(它没有任何GPU或其他专用硬件)。 是的,我需要旋转的体积-这意味着我不能简单地重新标记坐标,因为非对称距离变换将多次覆盖数据集。 我在集群上使用的软件:python3.4.2和scipy、numpy和mpi4py 谢谢 如果您想在集群上
谢谢 如果您想在集群上并行执行矩阵运算(例如,可以表示为矩阵乘法的旋转),我要做的是
scipy.ndimage
进行旋转计算使用多处理
,您可以执行类似的操作,但使用mpi4py
李>
尽管问题是,除非我弄错了,scipy.ndimage.interpolation.rotate
不使用BLAS的矩阵运算,它是一个纯C实现,最终调用该函数。因此,除非使用不同的算法,否则上述方法将不起作用。然后,您必须运行与内核数量相同的MPI任务,并在它们之间进行域分解(请参阅mpi4py
tutorials)
这并不能完全回答您的问题,但希望能有所帮助。您所说的三维旋转是什么意思?因为数据集没有正确的形状来表示三维空间中的点。另外,
np.zero((100010005000),dtype='float64')
是38GB,因此如果每个核有2GB,那么只需要约40个核来容纳输入和输出阵列,更不用说执行操作了。实际上,考虑到临时阵列,此任务可能至少需要128个内核。每个节点有多少个内核?在scipy中有scipy.ndimage.interpolation.rotate,我希望在集群上并行执行。因为我有一台超级计算机,128核是可以处理的。我在如何有效地设置任务方面没有太多经验,我想知道是否有一些并行矩阵操作的“食谱”。