MPI自定义数据类型
自定义数据类型
1.数据类型辅助函数
- MPI_Type_commit
int MPI_Type_commit(
MPI_Datatype *datatype
);
在通信中使用数据类型对象之前,必须提交数据类型对象。提交的数据类型仍可用作数据类型构造函数中的参数。无需提交基本数据类型。它们是"预先承诺的"。
- MPI_Type_free
int MPI_Type_free(
MPI_Datatype *datatype
);
标记与处理数据的数据类型关联的数据类型对象,并将数据类型设置到MPI_DATATYPE_NULL。当前使用此数据类型的任何通信都将正常完成。从释放的数据类型定义的派生数据类型不受影响。
- MPI_Type_extent(已弃用,由替换MPI_Type_get_extent)
int MPI_Type_extent(
MPI_Datatype datatype,
MPI_Aint *extent
);
此例程既具有线程安全,也具有中断安全。这意味着此例程可能安全地由多个线程使用,也可以在信号处理程序中使用。
- MPI_Address
int MPI_Address(
void *location,
MPI_Aint *address
);
获取内存中的某位置的地址,返回指定变量内存中的“绝对”地址。
2.Contiguous数据类型
- MPI_Type_contiguous
int MPI_Type_contiguous(
int count,
MPI_Datatype old_type,
MPI_Datatype *new_type_p
);
连续复制:将原数据类型oldtype按顺序依次连续复制后,得到一个新的数据类型。比如定义连续的2个实数为一个新的数据类型。
MPI_Type_contiguous( 2, MPI_CHAR, &type );
3.Vector数据类型
- MPI_Type_vector
int MPI_Type_vector(
int count,
int blocklength,
int stride,
MPI_Datatype old_type,
MPI_Datatype *newtype_p
);
创建向量(步幅)数据类型。先连续复制blocklength个oldtype类型的数据,形成一个数据块;再通过等间隔的复制count个该数据块形成新的数据类型;相邻两个数据的的起始位置的位移相差stride乘extent(oldtype)个字节。
例如有oldtype数据
1,2,3,4,5,6,7,8
现在要求新的数据类型3个,每连续2个作为一个新的数据类型,间隔为1.
MPI_Type_vector(3,2,1,old,new)
- MPI_Type_hvector
int MPI_Type_hvector(
int count,
int blocklen,
MPI_Aint stride,
MPI_Datatype old_type,
MPI_Datatype *newtype_p
);
功能同MPI_Type_vector相同,唯一区别就是stride的单位是字节。
4.Index数据类型
- MPI_Type_indexed
int MPI_Type_indexed(
int count,
int blocklens[],
int indices[],//位移,和首地址的位移
MPI_Datatype old_type,
MPI_Datatype *newtype
);
创建索引数据类型:该函数生成的新数据类型有count个数据块构成,第i个数据块包含blocklens[i]个连续存放的oldtype,第i个数据块与首地址的偏移量(字节数)为indices[i]乘extent(oldtype)。
可以看作是MPI_Type_vector的扩展,区别是买个数据块的长度可以不同,数据块之间的间隔也可以不同。
- MPI_Type_hindexed
int MPI_Type_hindexed(
int count,
int blocklens[],
MPI_Aint indices[],
MPI_Datatype old_type,
MPI_Datatype *newtype
);
功能同MPI_Type_vector相同,唯一区别就是indices数组存放的数据单位是字节。
- MPI_Type_struct
int MPI_Type_struct(
int count,
int blocklens[],
MPI_Aint indices[],
MPI_Datatype old_types[],
MPI_Datatype *newtype
);
创建结构数据类型:与MPI_Type_indexed的区别在于每个数据块的数据类型可以不同,这里的indices数组存访的单位是字节。
该函数时最一般的新数据类型的构造函数,也是最广泛的一个。
MPI的数据打包与拆包
打包(Pack)和解包(Unpack)操作是为了发送不连续的数据, 在发送前显示地把数据包装大一个连续的缓冲区, 在接收之后从连续的缓冲区中解包。
- MPI_Pack
int MPI_Pack(
void *inbuf,
int incount,
MPI_Datatype datatype,
void *outbuf,
int outcount,
int *position,
MPI_Comm comm
);
MPI_PACK把由inbuf,incount, datatype指定的发送缓冲区中的incount个datatype类型的消息放到起始为 outbuf 的连续空间,该空间共有 outcount 个字节。 输入缓冲区可以是 MPI_Send 允许的任何通信缓冲区。入口参数 position 的值是输出缓冲区中用于打包的起始地址,打包后它的值根据打包消息的大小来增加,出口参数 position 的值是被打包的消息占用的输出缓冲区后面的第一个地址。通过连续几次对不同位置的消息调用打包操作, 就将不连续的消息放到了一个连续的空间。comm参数是将在后面用于发送打包的消息时用的通信域。 (NOTE:这里要连续多次调用打包操作)
- MPI_Unpack
int MPI_Unpack(
void *inbuf,
int insize,
int *position,
void *outbuf,
int outcount,
MPI_Datatype datatype,
MPI_Comm comm
);
MPI_UNPACK 和 MPI_PACK 对应, 它从 inbuf 和 insize 指定的缓冲区空间将不连续的消息解开,放到 outbuf, outcount, datatype 指定的缓冲区中。 输出缓冲区可以是 MPI_RECV 允许的任何通信缓冲区。 输入缓冲区是一个连续的存储空间,大小为insize字节, 开始地址为 inbuf。入口参数 position的初始值是输出缓冲区中被打包消息占用的起始地址, 解包后它的值根据打包消息的大小来增加,因此出口参数 position的值是输出缓冲区中被解包的消息占用空间后面的第一个地址。 通过连续几次对已打包的消息调用与打包时相应的解包操作,就可以将连续的消息解开放到一个不连续的空间。comm参数是用于接收消息的通信域。
- MPI_Pack_size
int MPI_Pack_size(
int incount,
MPI_Datatype datatype,
MPI_Comm comm,
int *size
);
描述MPI_Pack和MPI_Unpack的最大值。
MPI自定义数据类型的更多相关文章
- MPI 派生数据类型 MPI_Type_create_struct(),MPI_Type_contiguous(),MPI_Type_vector(),MPI_Type_create_hvector(),MPI_Type_indexed()
▶ 使用 MPI 派生数据类型,减少数据在传输过程中的耗时 ● MPI_Type_create_struct() 范例代码 { ; int globalDataInt[globalSize], glo ...
- 通过SQL Server自定义数据类型实现导入数据
写在前面 在看同事写的代码时看到了SQL Server中可以自定义数据类型,而且定义的是DataTable类型的数据类型. 后我想起了以前我们导入数据时要么是循环insert写入,要么是SqlBulk ...
- hadoop的自定义数据类型和与关系型数据库交互
最近有一个需求就是在建模的时候,有少部分数据是postgres的,只能读取postgres里面的数据到hadoop里面进行建模测试,而不能导出数据到hdfs上去. 读取postgres里面的数据库有两 ...
- OSG 自定义数据类型 关键帧动画
OSG 自定义数据类型 关键帧动画 转自:http://blog.csdn.net/zhuyingqingfen/article/details/12651017 /* 1.创建一个AnimManag ...
- Oracle存储过程-自定义数据类型,集合,遍历取值
摘要 Oracle存储过程,自定义数据类型,集合,遍历取值 目录[-] 0.前言 1.Packages 2.Packages bodies 3.输出结果 0.前言 在Oracle的存储过程中,可能会遇 ...
- Oracle自定义数据类型 1
原文 oracle 自定义类型 type / create type 一 Oracle中的类型 类型有很多种,主要可以分为以下几类: 1.字符串类型.如:char.nchar.varchar2.nva ...
- Hadoop-MapReduce之自定义数据类型
以下是自定义的一个数据类型,有两个属性,一个是名称,一个是开始点(可以理解为单词和单词的位置) MR程序就不写了,请看WordCount程序. package cn.genekang.hadoop.m ...
- Sql Server 自定义数据类型
SQLServer 提供了 25 种基本数据类型: ·Binary [(n)] 二进制数据 既可以是固定长度的(Binary),也可以是变长度的.其中,n 的取值范围是从 1 到 8000.其存储窨 ...
- 初识Haskell 五:自定义数据类型和类型类
对Discrete Mathematics Using a Computer的第一章Introduction to Haskell进行总结.环境Windows 自定义数据类型 data type de ...
随机推荐
- Python os.isatty() 方法
概述 os.isatty() 方法用于判断如果文件描述符fd是打开的,同时与tty(-like)设备相连,则返回true, 否则False.高佣联盟 www.cgewang.com 语法 isatty ...
- PDOStatement::fetchAll
PDOStatement::fetchAll — 返回一个包含结果集中所有行的数组(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0)高佣联盟 www.cgewang.c ...
- 7.28 NOI模拟赛 H2O 笛卡尔树 并查集 贪心 长链剖分
LINK:H2O 这场比赛打的稀烂 爆蛋. 只会暴力.感觉暴力细节比较多不想写. 其实这道题的难点就在于 采取什么样的策略放海绵猫. 知道了这一点才能确定每次放完海绵猫后的答案. 暴力枚举是不行的.而 ...
- 在新的线程中使用session 出现的问题
Exception in thread "Thread-15" java.lang.IllegalStateException: No thread-bound request f ...
- 利用描述符自定制property
利用描述符自定制property class Lazyproperty: def __init__(self,func): # print('==========>',func) self.fu ...
- Windows包管理工具-Chocolatey
Chocolatey是一款专为Windows系统开发的.基于NuGet的包管理器工具,类似于Node.js的npm,MacOS的 brew,Ubuntu的 apt-get,简称为 choco. Cho ...
- 付费?是不可能的!20行Python代码实现一款永久免费PDF编辑工具
PDF(Portable Document Format),中文名称便携文档格式是我们经常会接触到的一种文件格式,文献.文档…很多都是PDF格式.它以格式稳定的优势,使得我们在打印.分享.传输过程中能 ...
- 秦九韶算法 & 三分法
前言 今天考试出了一个题 郭郭模拟退火骗了75分 于是再次把咕咕了好久的模退提上日程 如果进展顺利 明后天应该会开爬山算法和模退的博客笔记 今天先把今天考试的正解学习一下--三分法 引入 老规矩上板子 ...
- redis(二)redis的主从模式和集群模式
redis(二)redis的主从模式和集群模式 主从模式 集群模式 主从模式 redis的主从模式,指的是针对多台redis实例时候,只存在一台主服务器master,提供读写的功能,同时存在依附在这台 ...
- SpringMVC4——视图、视图解析器、国际化
视图.视图解析器.国际化 视图的顶级接口:View 视图解析器:ViewResolver 常见的视图和解析器: InternalResourceView.InternalResourceViewR ...