Python混合多处理/MPI在同一nod中共享内存

2024-06-03 11:53:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Python应用程序需要加载同样大的 数组(~4 GB)并在 此数组的块。阵列从保存到磁盘开始。在

我通常在群集计算机上使用 比如说,10个节点,每个节点有8个 计算核心和总内存约32GB。在

最简单的方法(行不通)是 n=80万吨/年。它不起作用的原因是 每个MPI内核将加载4GB映射,这将耗尽 32GB内存导致MemoryError。在

另一种方法是,rank=0是唯一加载的进程 4GB阵列,它将阵列的块分块分发给其他阵列 但由于网络的原因,这种方法速度很慢 带宽问题。在

最好的方法是每个节点只加载一个核 4GB阵列和此阵列可用作共享内存 (通过multiprocessing?)对于每个剩余的7个核心 节点。在

我怎样才能做到这一点?如何让MPI知道节点 并使其与multiprocessing协调?在


Tags: 方法内存应用程序核心节点计算机原因数组
2条回答

multiprocessing模块没有共享内存。在

您可以看看joblib共享大型numy数组的方法,使用内存视图。您可以使用manual memory mapping来避免重复数据。在

为了找到一种只在每个节点上传递一次数据的方法,我会先为每个节点启动一个MPI进程,然后使用joblib进行剩余的计算,因为它会自动使用memmaping作为大型numpy数组输入。在

MPI-3有一个共享内存设施,正好适合您的场景。你可以通过mpi4py使用MPI。。。。 使用MPI_Comm_split_type将通信器拆分为位于节点上的组。对节点上的窗口使用MPI_Win_allocate_shared;只在一个列组上指定非零大小。使用MPI_Win_shared_query获取指向该窗口的指针。在

相关问题 更多 >