我目前正在学习并行计算的入门课程,课程讲师将MPI描述为: -
我不明白MPI究竟是什么。如果它是一组库或API,那为什么它仍然被称为范例?上述3个术语中哪一个最准确地解释了MPI是什么?
答案 0 :(得分:3)
MPI是一种处理数据的方式(通常是普通类型的数组,如int或double)。它是一个API(如接口,而不是库),它描述了可用于在一组计算节点(可能在不同的机器上)中以特定“模式”传输和接收数据的函数。
它还描述了一种启动程序的方法,这些程序以某种方式相互连接,支持上述操作,以及每个启动的进程知道它有多少对等方的方法。
MPI有多个竞争实现,例如OpenMPI和MPICH。如果您根据MPI规范编写程序,则可以将其用于计算平台上可用的任何MPI实现。但是一个作业中的所有进程必须使用相同的MPI实现,因为它只是一个API,并且不承诺在运行时实现之间的互操作性。
MPI可能被称为范式的原因在于它需要以特定的方式思考分布式计算,这对大多数程序员来说并不熟悉。一旦你将它用于一个“真正的”程序,你就会发现它需要一种思考数据结构和算法的方法,这与编程,例如套接字或消息队列不同。
答案 1 :(得分:1)
最纯粹的是,MPI是一个standard,它概述了一个模型(或者实际上是“范例”,如果你愿意的话),用于通过消息传递进行并行计算。所述标准还定义了某些语言的API(C和Fortran,由于历史原因)。然后,第三方可以自由地编写以他们喜欢的任何语言实现所述标准的库,使用他们喜欢的任何实现细节(只要它不与标准冲突)。
这有点类似于C ++语言和C ++编译器之间的区别。语言只是一组规则,用于指定程序在给定某些输入时的行为。编译器是任何可以获取输入并生成语言规范所需的所有结果的程序。同样,MPI实现是您可以链接到项目并用于生成MPI标准规定的所有结果的任何库。
答案 2 :(得分:0)
这是最适合MPI的。最重要的是,MPI是消息传递接口标准。 MPI的大部分是(应用程序编程)接口的定义,以及它的语义。但是,MPI超越了纯API,例如它还指定了MPI应用程序的启动。
有几种与MPI相关的范例。 消息传递作为一种沟通方式。 SPMD 单个程序,多个数据作为最常用的执行方案。虽然MPI也支持 MPMD (多个程序,多个数据)。
MPI 实施,例如 OpenMPI 和 MPICH 是一个库。但是,它们超越了简单的库。例如,它们提供编译器包装器以简化编译和链接以及复杂的启动基础结构。