03 MPI数据类型的匹配和数据类型的转换

来源:互联网 发布:监控上显示无网络视频 编辑:程序博客网 时间:2024/06/05 16:01

一 数据类型的匹配

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

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

在这三个阶段,都需要类型匹配:在消息装配时,发送缓冲区中变量的类型必须和相应的发送操作指定的类型相匹配 ;在消息传递时,发送操作指定的类型必须和相应的接收操作指定的类型相互匹配;在消息拆卸时,接收缓冲区中变量的类型必须和接收操作指定的类型相匹配。

MPI中,类型匹配有两个方面的意思:1.宿主语言的类型和通信操作所指定的类型相匹配,2.发送方和接收方的类型相匹配。

上述类型匹配规则的例外是对于MPI提供的MPI_BYTEMPI_PACKED,它们可以和任何以字节为单位的存储相匹配 包含这些字节的类型是任意的 MPI_BYTE用于不加修改地传送内存中的二进制值,MPI_PACK用于数据的打包和解包——MPI_UNPACK。
归纳起来,可以概括为:
1.有类型数据的通信—发送方和接收方均使用相同的数据类型
2.无类型数据的通信—发送方和接收方均以MPI_BYTE作为数据类型
3.打包数据的通信发送方和接收方均使用MPI_PACKED


二 数据类型的转换

所谓的数据转换包括两个方面的意思:数据类型的转换、数据表示的转换。
数据类型的转换是指改变一个值的数据类型,比如将实型转换为整型(通过舍入操作),或将整型转换为实型等。
数据表示的转换是指改变一个值的二进制表示,比如高字节和低字节顺序的改变,将
浮点数从32为表示改变为64为表示等。
由于
MPI严格要求类型匹配,所以在MPI中不存在数据类型转换的问题。但是,MPI必须实现数据表示的转换,这是因为MPI的目的之一是对异构环境的支持,在异构系统中,不同的系统其数据的内部表示往往是不同的,因此MPI必须负责实现这些不同表示之间的相互转换。
MPI中,没有限定数据表示转换的细节,但总的目标是希望这样的转换保留整型,逻辑以及字符值不变,而把浮点值转为在目标系统上能表示的最接近的值。
在浮点转换过程,上溢和下溢可能发生。当一个值能在一个系统中表示而不能在另一个系统中表示时,整型或字符的转换也可导致异常。在表示转换过程中,一个异外发生会导致一个通信失败,在发送操作、接收操作或两者也都发生错误。
如果在一个消息中发送的一个值是无类型的
(例如,MPI_BYTE类型),那么在接收者存储的字节的二进制表示与接收者接收的字节的二进制表示一样,无论发送者和接收者运行在同一环境或不同环境,这都是正确的,不要求表示转换。

原创粉丝点击