一种构建高效mpi设备层扩展库的方法

文档序号:10686918阅读:164来源:国知局
一种构建高效mpi设备层扩展库的方法
【专利摘要】本发明涉及一种构建高效MPI设备层扩展库的方法。本方法是利用MPICH3的PMI KVS空间的功能,结合PCI Express互联结构的特点,提出控制和数据双通道的通信模式,通过以太网仅传输必需的控制信息,使用高速的PCI Express来传输数据信息,通过进程PMI put操作保存本地计算节点端口等信息到本地KVS中,同时同步到远程服务端KVS,而其他进程再通过PMI get操作获取各进程所在计算节点端口等信息,从而建立节点间通信关系,实现这种嵌入式混合异构系统运算节点之间高效的数据传输,实现MPI并行程序无缝移植和高效运行。
【专利说明】
一种构建高效MPI设备层扩展库的方法
技术领域
[0001]本发明涉及一种构建高效MPI扩展库的方法,特别是提出了一种控制和数据双通道的通信模式,属于计算机技术领域。
【背景技术】
[0002]随着高效能技术发展,各种高性能总线互联技术层出不穷,包括嵌入式领域的Rapid1技术,针对PC机的PCI Express技术以及面向服务机群的InfiniBand技术。其中PCIExpress作为新一代的总线接口,能够通过交换器实现多台设备之间通信的串行、点对点类型的互联,并能实现高效的数据传输。因此把PCI Express技术应用到高性能计算领域成为当前热门研究方向。目前已提出的PCI Express总线互联结构,该结构通过母板PCIExpress的插槽连接不同的带着FPGA和ARM混合异构的嵌入式子板,这些子板上面运行MPI应用进程,而不同子板上应用进程之间通过PCI Express先把数据传输给PC host,然后再由PC host把数据传输给目的板卡上的应用进程。用PCI Express代替以太网来传输数据,能很好解决网络带宽限制的问题,而且该结构规模较小,能很好应用到工业等领域。然而基于这种互联结构实现并行程序运行,需要设计和实现相应的MPI(消息传递接口)设备层扩展库,实现不同板卡进程之间的相互通信。

【发明内容】

[0003]本发明的目的在于针对已有技术的不足提供一种构建高效MPI设备层扩展库的方法,从而建立节点间通信关系,实现这种嵌入式混合异构系统运算节点之间高效的数据传输,实现MPI并行程序无缝移植和高效运行。为了达到上述目的,本发明采用下述技术方案:一种构建高效MPI设备层扩展库的方法,操作步骤为:虚连接的初始化;控制和数据传输双通道模式的设计;系统基本功能设计与实现。
[0004]所述的虚连接的初始化,主要包括两个步骤,第一是在作业初始化阶段为进程初始化与其他进程之间调用过程、第二是初始化设备层相关数据结构并保存到虚连接内,具体的操作步骤如下:
I)初始化iStartContigMsg、iSendContig、sendNoncontig_fη三个指针函数。
[0005]2)初始化发送队列send_queue。
[0006]3)将文件描述符保存到对应的虚连接结构体中。
[0007]4)得到各个目的进程的business card,通过查询server端得到端口号保存在相应的虚连接结构体中。
[0008]所述的控制和数据传输双通道模式的设计,由于总线互联结构支撑软件提供的操作设备方法无法像传统的TCP—样,以IP地址作为主机标识进行数据传输,而它一般以端口作为主机标识,如PCI Express,而在进程管理部分通过SSH等去进行远程控制访问,另一方面,数据传输是通过PCI Express总线,所以整体数据的流通是以控制和数据相分离的,控制信息主要是进程管理相关的信息通过TCP进行传输,而数据信息,主要是发送,接收等通过PCI Express总线传输。
[0009]所述的系统基本功能设计与实现中主要包括数据包的设计和数据的发送和接收。当发送方向接收方发送数据时:
1)先为本次通信过程分配唯一的序列号,再填充源端口号和目的端口号,源进程号和目的进程号以及数据长度信息,将控制信息数据包发送给PC端;
2)PC端接收到控制信息数据包,得到目的端号和序列号等信息,并等待发送方发送数据;
3)发送方将数据发送给PC端;
4)当PC端接收到所有数据时,将数据发送到目的端号。
[0010]由于一块板卡上运行多个应用进程,而每一个进程会从同一个端口读取数据,从而使得数据读取混乱,所以本文采用为板卡上每一个进程预设内存缓冲池的去存放PC端发送来的数据,当设备层扩展库读取数据时,按进程号读取对应缓冲池上的数据,再拷贝到用户数据区。
[0011]本发明与现有技术相比较,具有如下显而易见的突出实质性特点和显著技术进步:本发明是利用MPICH3的PMI KVS空间的功能,结合PCI Express互联结构的特点,提出控制和数据双通道的通信模式,通过以太网仅传输必需的控制信息,使用高速的PCI Express来传输数据信息,通过进程PMI put操作保存本地计算节点端口等信息到本地KVS中,同时同步到远程服务端KVS,而其他进程再通过PMI get操作获取各进程所在计算节点端口等信息,从而建立节点间通信关系,实现这种嵌入式混合异构系统运算节点之间高效的数据传输,实现MPI并行程序无缝移植和高效运行。
【附图说明】
[0012]图1是本发明的程序框图;
图2是本发明中的控制与数据双通道结构图;
图3是本发明中的数据包格式图;
图4是本发明中的发送和接收数据过程图。
【具体实施方式】
[0013]下面结合说明书附图和具体实施例对本发明作进一步详细的说明。
[0014]参见图1?4,本构建高效MPI设备层扩展库的方法是基于PC1-Express互联结构设计相关的高效的MPI设备层扩展库,包括虚连接的初始化、控制和数据传输双通道模式的设计以及系统基本功能设计与实现,具体实现如下:
I.虚连接初始化的步骤如下:
I)初始化 iStartContigMsg、iSendContig、sendNoncontig_fn三个函数指针,这三个函数是和发送相关的。当应用程序调用MPI_Send时,MPICH根据rank号取到对应的VC,按照参数选择调用以上三个VC中的函数。这三个函数需要在设备层扩展库进行具体实现的,当虚连接初始化时根据进程是节点间还是节点内选择是否对VC的函数指针进行赋值。
[0015]2)初始化发送队列send_queue C3SencLqueue是定义在设备层的消息队列
由于MPI存在非阻塞通信,而且在实际数据发送过程中可能出现信道阻塞,所以需要有缓存,MPICH3设备层缓存和CH3层对接收请求的组织方式相同,都是以请求队列的形式存在的,当出现阻塞时,将消息封装成请求并入队,并等待出队发送,所以设备层需要在虚连接内维护一个请求队列。
[0016]3)将设备文件描述符保存到对应的虚连接结构体中。
[0017]4)得到各个目的进程的business card,通过查询server端得到端口号保存在相应的虚连接结构体中,后面的数据传输需要知道目的进程所在的端口。
[0018]2.参照图2,控制与数据双通道的具体实现如下:
I)将端口号等信息和设定的key,如字符串“endpoint”,通过PMI_KVS_Put方法写入本地KVS中。
[0019]2)从整个树形结构中层层提交到远程的Launch node端KVS中。
[0020]3)其他进程按照这个key值在对应的进程KVS中去查找需要的端口号等信息。因为每一块板卡有一个唯一的IP地址,也对应一个唯一的端口,本地初始化时可以通过kerne I提供的方法获得端口号,然后通过上面的方法去进行保存。
[0021]4)在每个进程虚连接初始化的时候去通过PMI_KVS_Get方法查询每个进程rank值对应的端口号等信息,并保存到虚连接中。
[0022]3.系统基本功能设计与实现包括数据包的设计,发送数据与接收数据的设计与实现,具体实现如下:
参照图3,数据包格式设计如下:
I) ID字段:ID字段只有一位,当ID为O时,表示控制信息数据包,当ID为I时表示用户数据包。
[0023]2)序列号:根据进程号为每个进程分配连续的且不同序列号,保证同时一个端口不同进程向PC端发送数据时,可以以不同的序列号进行区分。
[0024]3)分片号:当数据以分片发送,分片号从I开始,以分片号标识每片数据,当数据不以分片发送,分片号字段为O。
[0025]参照图4,发送数据具体流程:
1)先为本次通信过程分配唯一的序列号,再填充源端口号和目的端口号,源进程号和目的进程号以及数据长度信息,将控制信息数据包发送给PC端;
2)PC端接收到控制信息数据包,得到目的端号和序列号等信息,并等待发送方发送数据;
3)发送方将数据发送给PC端;
4)当PC端接收到所有数据时,将数据发送到目的端号。
[0026]接收数据具体流程:
由于一块板卡上运行多个应用进程,而每一个进程会从同一个端口读取数据,从而使得数据读取混乱,所以本文采用为板卡上每一个进程预设内存缓冲池的去存放PC端发送来的数据,当设备层扩展库读取数据时,按进程号读取对应缓冲池上的数据,再拷贝到用户数据区。
[0027]通过应用中对MPI应用程序接口中初始化、发送、接收方法的调用,来测试设备层扩展库能否正常初始化、发送和接收,从模拟实验的结果得出初始化、发送以及接收接口都能正常使用,即证明了设备层扩展库的可行性。
【主权项】
1.一种构建高效MPI设备层扩展库的方法,其特征在于操作步骤如下: A.虚连接的初始化; B.控制和数据传输双通道模式的设计; C.系统基本功能设计与实现。2.根据权利要求1所述的构建高效MPI设备层扩展库的方法,其特征在于,所述步骤B中控制和数据传输双通道模式的设计如下: 控制信息主要是进程管理相关的信息通过TCP进行传输,而数据信息,主要是发送、接收通过PCI Express总线传输,具体的过程如下: 1)将端口号信息和设定的key,字符串“endpoint”,通过PMI_KVS_Put方法写入本地KVS中; 2)从整个树形结构中层层提交到远程的Launchnode端KVS中; 3)其他进程按照这个key值在对应的进程KVS中去查找需要的端口号信息; 因为每一块板卡有一个唯一的IP地址,也对应一个唯一的端口,本地初始化时可以通过kernel提供的方法获得端口号,然后通过上面的方法去进行保存; 4)在每个进程虚连接初始化的时候去通过PMI_KVS_Get方法查询每个进程rank值对应的端口号信息,并保存到虚连接中。3.根据权利要求1所述的构建高效MPI设备层扩展库的方法,其特征在于,所述步骤C中系统基本功能设计与实现主要包括数据包的设计和数据的发送和接收: 当发送方向接收方发送数据时: 1)先为本次通信过程分配唯一的序列号,再填充源端口号和目的端口号,源进程号和目的进程号以及数据长度信息,将控制信息数据包发送给PC端; 2)PC端接收到控制信息数据包,得到目的端号和序列号信息,并等待发送方发送数据; 3)发送方将数据发送给PC端; 4)当PC端接收到所有数据时,将数据发送到目的端号; 由于一块板卡上运行多个应用进程,而每一个进程会从同一个端口读取数据,从而使得数据读取混乱,所以本文采用为板卡上每一个进程预设内存缓冲池的去存放PC端发送来的数据,当设备层扩展库读取数据时,按进程号读取对应缓冲池上的数据,再拷贝到用户数据区。4.根据权利要求1所述的构建高效MPI设备层扩展库的方法,其特征在于:所述数据包格式设计如下: I )ID字段:ID字段只有一位,当ID为O时,表示控制信息数据包,当ID为I时表示用户数据包; 2)序列号:根据进程号为每个进程分配连续的且不同序列号,保证同时一个端口不同进程向PC端发送数据时,以不同的序列号进行区分; 3)分片号:当数据以分片发送,分片号从I开始,以分片号标识每片数据,当数据不以分片发送,分片号字段为O。
【文档编号】H04L29/08GK106055415SQ201610339916
【公开日】2016年10月26日
【申请日】2016年5月22日
【发明人】雷咏梅, 方铃
【申请人】上海大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1