Memory management MPI中并行数字的分布式数组

Memory management MPI中并行数字的分布式数组,memory-management,parallel-processing,mpi,distributed-computing,Memory Management,Parallel Processing,Mpi,Distributed Computing,在许多分布式计算应用程序中,您维护一个分布式对象数组。每个进程管理一组它可以以独占方式读写的对象,以及一组只能读的对象(其内容由其他进程编写并经常从其他进程接收) 这是非常基本的,而且到目前为止可能已经做了无数次——例如,使用MPI。因此,我假设有一个类似MPI的开源扩展,它提供了分布式阵列的基本计算功能 理想情况下,它将用C++编写,并模仿官方MPI标准接口样式。有人知道这样的事吗?谢谢。根据我从您的问题中收集的信息,您正在寻找一种允许全局查看(只读)问题空间的机制,但每个进程都拥有一段数据的

在许多分布式计算应用程序中,您维护一个分布式对象数组。每个进程管理一组它可以以独占方式读写的对象,以及一组只能读的对象(其内容由其他进程编写并经常从其他进程接收)

这是非常基本的,而且到目前为止可能已经做了无数次——例如,使用MPI。因此,我假设有一个类似MPI的开源扩展,它提供了分布式阵列的基本计算功能


理想情况下,它将用C++编写,并模仿官方MPI标准接口样式。有人知道这样的事吗?谢谢。

根据我从您的问题中收集的信息,您正在寻找一种允许全局查看(只读)问题空间的机制,但每个进程都拥有一段数据的所有权(读写)

MPI只是用于并行应用程序进程间通信的API规范,它的任何实现都将在低于您所期望的级别上工作

在HPC应用程序中,以您提到的方式执行数据分解是很常见的,MPI用于将共享数据同步到其他进程。然而,每个应用程序具有不同的共享模式和需求(一些应用程序可能希望仅与相邻节点交换halo区域,并且可能使用非阻塞调用来重叠通信和其他计算),以便通过利用问题域的知识来提高性能

问题是,使用MPI跨进程同步数据很简单,但在其上实现一个层来处理通用分布式阵列同步,该层易于使用,但足够灵活,可以处理不同的用例,这可能会非常缓慢

抱歉花了这么长时间才说到点子上,但要回答您的问题,恐怕没有一个MPI扩展或库可以有效地处理所有用例,同时仍然比简单地使用MPI更容易使用。但是,可以在维护分布式数据的MPI级别之上工作。例如:

  • 使用模型处理数据。然后,可以使用诸如(C、C++、FORTRAN、Python)接口的库或支持PGA的语言,例如或(很快将被包含到FORTRAN标准中)。也有专门为这种并行形式设计的语言,即
  • 你自己滚吧。例如,我曾在一个库中工作过,该库使用MPI来完成所有脏活,但通过为应用程序域创建自定义数据类型和公开API来隐藏复杂性,例如:
    • X\u Create(MODE,t\u X)
      :实例化所有进程调用的数组,并使用
      模式
      指示当前进程是否需要读写或只读访问
    • X\u Sync\u start(t\u X)
      :在后台启动同步的非阻塞调用
    • X\u同步完成(t\u X)
      :需要数据。如果同步尚未完成,则阻塞
    • 。。。以及其他用于删除数据以及执行可能需要MPI调用的特定于域的任务的调用

老实说,在大多数情况下,坚持使用基本MPI或OpenMP,或者如果存在,使用为应用程序域编写的并行解算器通常更简单。当然,这取决于您的需求。

根据我从您的问题中收集到的信息,您正在寻找一种允许全局查看(只读)问题空间的机制,但每个进程都拥有一段数据的所有权(读写)

MPI只是用于并行应用程序进程间通信的API规范,它的任何实现都将在低于您所期望的级别上工作

在HPC应用程序中,以您提到的方式执行数据分解是很常见的,MPI用于将共享数据同步到其他进程。然而,每个应用程序具有不同的共享模式和需求(一些应用程序可能希望仅与相邻节点交换halo区域,并且可能使用非阻塞调用来重叠通信和其他计算),以便通过利用问题域的知识来提高性能

问题是,使用MPI跨进程同步数据很简单,但在其上实现一个层来处理通用分布式阵列同步,该层易于使用,但足够灵活,可以处理不同的用例,这可能会非常缓慢

抱歉花了这么长时间才说到点子上,但要回答您的问题,恐怕没有一个MPI扩展或库可以有效地处理所有用例,同时仍然比简单地使用MPI更容易使用。但是,可以在维护分布式数据的MPI级别之上工作。例如:

  • 使用模型处理数据。然后,可以使用诸如(C、C++、FORTRAN、Python)接口的库或支持PGA的语言,例如或(很快将被包含到FORTRAN标准中)。也有专门为这种并行形式设计的语言,即
  • 你自己滚吧。例如,我曾在一个库中工作过,该库使用MPI来完成所有脏活,但通过为应用程序域创建自定义数据类型和公开API来隐藏复杂性,例如:
    • X\u Create(MODE,t\u X)
      :实例化所有进程调用的数组,并使用
      模式
      指示当前进程是否需要读写或只读访问
    • X\u Sync\u start(t\u X)
      :在后台启动同步的非阻塞调用
    • X\u同步完成(t\u X)
      :需要数据。如果同步尚未完成,则阻塞
    • 。。。和其他打给戴尔的电话