我在MPI中寻找一个类似于allgather的函数,除了它只从所有处理器的特定子集收集数据。
此外,我想结合数据的顺序,不依赖于处理器的排名。
有这样的功能吗如果没有,如何才能有效地实现这一点?
谢谢您!
最佳答案
我不认为有任何方法可以改变MPI调用本身的顺序(尽管如果愿意,您可以在之后自己轻松地重新排序),但是解决第一个问题相对容易。
在MPI中,并不要求所有的集合调用都发生在MPI COMM_WORLD上(它包含在执行开始时启动的所有进程)您可以创建新的通讯器,其中包含您喜欢的原始进程组的任何子集执行此操作的调用是MPI-COMM-CREATE。
要使用MPI-COMM-u-CREATE,需要使用适当的函数(MPI-Group-EXCL、MPI-Group-INCL、MPI-Group-INTERSECTION等)操作要放入新通信器中的进程的MPI-u组在网上通常有很多教程,如果不是很明显的话,你可以在那里找到如何做这些事情。