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