Parallel processing 复制某种形式的;“共享内存”;在MPI中

Parallel processing 复制某种形式的;“共享内存”;在MPI中,parallel-processing,shared-memory,mpi,Parallel Processing,Shared Memory,Mpi,我正在尝试使用MPI为我正在使用的模拟包重新编写并行化例程。我正在尝试实现一个特定的功能,但遇到了一些问题。我将用另一个更简单的例子来说明我的问题,这个例子展示了我正在尝试做的事情 我基本上是想让所有MPI线程共享一个计数器。每次该计数器递增时,特定线程都会将其广播给其他所有线程,以便每个线程在想要递增计数器时都有计数器的最新版本。我知道使用具有共享内存的OpenMP很容易做到这一点,但我想知道是否有一种方法可以让MPI在不止一个CPU上工作(例如,在超级计算机上进行500核模拟) 我已经尝试了

我正在尝试使用MPI为我正在使用的模拟包重新编写并行化例程。我正在尝试实现一个特定的功能,但遇到了一些问题。我将用另一个更简单的例子来说明我的问题,这个例子展示了我正在尝试做的事情

我基本上是想让所有MPI线程共享一个计数器。每次该计数器递增时,特定线程都会将其广播给其他所有线程,以便每个线程在想要递增计数器时都有计数器的最新版本。我知道使用具有共享内存的OpenMP很容易做到这一点,但我想知道是否有一种方法可以让MPI在不止一个CPU上工作(例如,在超级计算机上进行500核模拟)


我已经尝试了几乎所有我能想到的MPI\u Bcast、MPI\u Send和MPI\u Recv的组合,但我认为有些东西我可能没有正确理解。

你不能颠倒方案吗?创建一个专用的“计数器服务器”,任何线程都可以在需要计数器值时请求该值


当然,这可能不适合所有场景。

您无法使用上面建议的MPI-1 API来实现这一点。然而,MPI-2允许“远程内存操作”,这允许您执行这样的操作。我在这里回答了一个非常类似的问题,基于
在这里,只实现“计数器增量”。它不做广播;但你真的需要这样的手术吗?其他任务只要在需要时检查计数器的值就足够了吗?

可能重复:非常感谢。对于其他任务来说,检查计数器的值就足够了,实际上我得到的是“剩余的迭代次数”,每个作业都会抓取10000块,直到计数器没有剩余迭代为止。他们所需要的只是一种获得剩余迭代次数的最新计数的方法,并且如果其中一个作业崩溃,则该计数是傻瓜式的(这就是为什么我不能在开始时将迭代次数平均分配,然后让他们做自己的事)。我将查看链接,再次感谢!我认为这种方法可能可行,但在我运行代码的集群上,可用的内核数量非常有限,因此如果只使用一个内核来跟踪计数器,我会感觉很糟糕。除非为计数器提供服务需要大量资源,否则您可以在节点上安全地运行它,并保持正常负载。据我所知,MPI在具有常规操作系统的节点上运行,因此您可以为其运行自定义进程。即使通过一个不断重新连接的TCP套接字来提供一个单一的数字也足够有效,并且不需要太多CPU。