c - MPI协议(protocol)中的MPI_Comm如何实现?

标签 c mpi

我正在尝试在EPOS操作系统中实现MPI协议(protocol)。好吧,事实上我不明白如何实现MPI_Comm。它被定义为“MPI 用于确定哪些进程参与通信的基本对象”。在一些实现中 我在互联网上发现它是作为 typedef int MPI_Comm 实现的,但我怎么知道 使用 int MPI_Comm 进行通信涉及哪些进程?任何想法?

谢谢。

最佳答案

似乎有两种方法,几乎​​相同。

  • 第一个是typedef int MPI_Comm,并使用该值作为维护实际信息的某些内部数据结构的索引。

  • 第二个是 typedef struct comm_info* MPI_Comm,其中通信器(或任何其他 MPI 类型)是指向内部结构的直接指针。 OpenMPI 采用这种方法。

使用 int 的优点是,只要内部数据结构同步,在所有处理器上使用相同的索引可能会更容易。

但是,当 OpenMPI 和 MPICH 已经做了这么多并且开源时,为什么还要重新发明轮子呢? MPICH 许可证尤其非常宽松。以至于相当多的供应商都以此为基础建立了自己的商业 MPI 库。查看their license .

关于c - MPI协议(protocol)中的MPI_Comm如何实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17456525/

相关文章:

c - 将函数定义放在 main() 之后是否比将它们放在 main() 之前有任何优势?

c - 如何以最大速度从硬盘读取/写入。我编码的多线程程序不能超过 15 mb/秒

c - MPI 为什么这个简单的循环不起作用?

c++ - 尝试将 gdb 与 MPI 一起使用时自动加载被拒绝?

c++ - 有没有办法在运行时分析 MPI 应用程序? - 在运行时使用 MPI 调用所花费的时间

parallel-processing - Julia 中的并行编程

c++ - "as-if"规则到底是什么?

C - 无法从 Xcode 创建新的 .txt 文件

mpi - 在 Slurm runscript 中运行 OpenMPI 作业时出现段错误

c++ - 为什么 `printf("%llu\n", 1ull << n) ;` and ` printf ("%llu\n", 1ull << 64);` 的输出在 C++ 中不同?(n=64)