gpt4 book ai didi

python - 高效的平行 3D 旋转

转载 作者:太空宇宙 更新时间:2023-11-03 17:34:27 27 4
gpt4 key购买 nike

我有一个大型 (1000x1000x5000) 3D numpy 数组,我需要在其上执行许多 3D 旋转,然后计算不对称距离变换。距离变换基本上是可并行的,但我需要一种方法来使用计算集群(没有太多[例如2GB]内存/核心)来执行旋转本身。有效利用计算集群的好策略是什么? (它没有任何 GPU 或其他专用硬件)。是的,我需要旋转的体积 - 这意味着我不能简单地重新标记坐标,因为不对称距离变换将多次覆盖数据集。我在集群上使用的软件:python3.4.2 与 scipy、numpy 和 mpi4py。

谢谢!

最佳答案

如果您想在集群上并行执行矩阵运算(例如,可以表示为矩阵乘法的旋转),我会做的是。

  1. 使用多线程 BLAS(例如 OpenBLAS)编译 numpy,以便矩阵乘法在节点上是多线程的。优点是您知道这已经过广泛的测试和优化,并且您无需担心并行扩展。
  2. 假设机器每个节点有 32 个核心(即总共 2*32=64 GB RAM)。我将在每个节点上运行约 4 个 MPI 任务,其中包含 8 个线程/MPI 任务(因此可用 RAM/任务为 16 GB,从而消除了低 RAM 限制)。
  3. 在 MPI 任务之间对数组进行域分解。例如,this code (see _mprotate function) 使用 multiprocessing 使用 scipy.ndimage 进行旋转计算,您可以使用 mpi4py 执行类似的操作。

虽然问题是,除非我弄错了,否则 scipy.ndimage.interpolation.rotate 不会使用 BLAS 的矩阵运算,并且是一个纯 C 实现,最终调用 NI_GeometricTransform功能。因此,除非您使用不同的算法,否则上述方法将不起作用。然后,您必须运行与核心数量一样多的 MPI 任务,并在它们之间进行域分解(请参阅 mpi4py 教程)。

这并不能完全回答您的问题,但希望对您有所帮助。

关于python - 高效的平行 3D 旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31406329/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com