我正在尝试使用MPI为我正在使用的模拟包重新编写paralellization例程。我正在尝试实现一个特定的功能,并一直遇到麻烦。我将使用另一个更简单的示例来说明我的问题,该示例显示了我正在尝试做的事情。
我基本上试图拥有一个可由所有MPI线程共享的计数器。每次该计数器递增时,特定线程就会将其广播给其他所有人,以便每个线程在他们想要递增时都具有最新版本的计数器。我知道使用OpenMP和共享内存很容易实现这一点,但我想知道是否有办法让MPI不仅仅在一个CPU上运行(例如,在超级计算机上进行500核仿真)。
我已经尝试了很多我能想到的MPI_Bcast,MPI_Send和MPI_Recv的组合,但我认为我可能无法正确理解。
答案 0 :(得分:2)
您将无法使用上面建议的MPI-1 API执行此操作。但是,MPI-2允许“远程内存操作”,允许您执行此类操作。我在此基于MPI-2 book及其online examples回答了一个非常相似的问题: Creating a counter that stays synchronized across MPI processes在那里,只实施了“计数器增量”。它不做广播;但你真的需要这样的操作吗?只要在需要时检查计数器的值,其他任务是否足够?
答案 1 :(得分:0)
你不能反转这个计划吗?创建一个专用的“计数器服务器”,任何线程一旦需要该值就可以请求计数器值。
当然,这可能不适合所有场景。