MPI是一个库,而不是一门语言。

MPI是一种标准或规范的代表,而不特指某一个对它的具体实现。

MPI是一种消息传递编程模型,并成为这种编程模型的代表和事实上的标准。

所有MPI的名字都有前缀 MPI_ 不管是常量,变量还是过程或函数调用的名字都是如此。

int MPI_Init(int *argc, char ***argv)

MPI_COMM_SIZE(comm,size)

返回给定的通信域中所包括的进程的个数,不同的进程通过这一调用得知在给定的通信域中一共有多少个进程在并行执行。

MPI_SEND(buf,count,datatype,dest,tag,comm)

MPI_SEND将发送缓冲区中的count个datatype数据类型的数据发送到目的进程,目的进程在通信域中的标识号是dest,本次发送的消息标志是tag,使用这一标志,就可以把本次发送的消息和本进程向同一目的进程发送的其它消息区别开来。

MPI_RECV(buf,count,datatype,source,tag,comm,status)

MPI_RECV从指定的进程source接收消息 并且该消息的数据类型和消息标识和本接收进程指定的datatype和tag相一致 接收到的消息所包含的数据元素的个数最多不能超过count。

MPI的消息传递过程可以分为三个阶段:

  1. 消息装配,将发送数据从发送缓冲区中取出 加上消息信封等形成一个完整的消息。
  2. 消息传递,将装配好的消息从发送端传递到接收端。
  3. 消息拆卸,从接收到的消息中取出数据送入接收缓冲区。

类型匹配规则可以概括为:

  1. 有类型数据的通信,发送方和接收方均使用相同的数据类型。
  2. 无类型数据的通信,发送方和接收方均以MPI_BYTE作为数据类型。
  3. 打包数据的通信, 发送方和接收方均使用MPI_PACKED。

信封: <源/目,标识,通信域>
数据: <起始地址,数据个数,数据类型>

MPI允许发送者=接收者,即一个进程可以给自己发送一个消息。