首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >高效的并行3D旋转

高效的并行3D旋转
EN

Stack Overflow用户
提问于 2015-07-14 20:15:56
回答 1查看 459关注 0票数 1

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

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2015-07-15 17:05:03

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

  1. 使用多线程BLAS (例如OpenBLAS)编译numpy,因此矩阵乘法在一个节点上是多线程的。好处是你知道这已经经过了广泛的测试和优化,你不需要担心机器的并行scaling.
  2. Assuming,比如说每个节点有32个核心(即总共有32 GB的内存)。我会在每个节点上运行大约4个MPI任务,其中有8个线程/ MPI任务(所以可用的内存/任务是16 GB,这样就消除了低内存constraints).
  3. Do,这是你的数组在MPI任务中的一个域分解。例如,this code (see _mprotate function)使用multiprocessingscipy.ndimage计算旋转,你也可以用mpi4py做类似的事情。

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

这并没有完全回答你的问题,但希望它能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31406329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档