我的问题对那些长期在场的人来说似乎很愚蠢,但我很感激你耐心为我详细说明。
当他们说MPICH是MPI的“实现”时,它意味着什么?
以下类比是否为真(?): 如果我们将MPI视为FORTRAN编译器的一组标准,那么MPICH和OPENMPI是FORTRAN编译器的不同版本,如Intel.Fortran,Compaq.Fortran,GNU.Fortran等。
答案 0 :(得分:6)
MPI是一种标准:它概述了分布式系统中消息传递的特定模型。但是,它只提供了一系列要求:它实际上并不包含任何代码,也没有说明需要如何完成这些要求。例如,看一下官方MPI 2.2规范(截至今天)的摘录:
有效的MPI实现保证了某些常规属性 点对点通信,在本节中描述。
订单邮件是非超车的:如果发件人连续向同一目的地发送两条邮件,并且两者都匹配相同的邮件 接收,然后此操作无法接收第二条消息 第一个还在等待。
然后继续解释这一要求背后的基本原理并提供一个例子,但没有更多关于要求本身的说明。
MPI实现是一个库,它满足MPI规范中的所有要求 - 如上所述。但是,该标准绝对没有关于什么语言结构,OS调用,第三方库等可以/不能/应该使用的要求。有时,它会向实现者提供建议,如下所示:
然而,这些仍然是模糊的,非常与语言无关,只有建议:实现可以忽略这些建议中的每一个,并且仍然符合标准。对实现者的建议。实现可能会保留引用计数 使用数据类型的活动通信,以便决定 何时释放它。此外,可以实现派生的构造函数 数据类型,以便它们保持指向其数据类型参数的指针, 而不是复制它们。在这种情况下,需要跟踪 活动数据类型定义引用,以便了解数据类型的时间 对象可以被释放。 (对实施者的建议结束。)
所以是的,实质上它与编译器的各种实现类似。如果一个程序获取一种语言的有效源代码,并生成二进制代码,该二进制代码执行语言规范所说的应该使用原始源代码的所有内容,那么它就是该语言的一致编译器。同样,如果您可以使用库以不破坏MPI规范的任何规则的方式传递消息,那么这是一个有效的MPI实现。