面向异构计算系统的跨步数据传输优化方法技术方案

技术编号:10960760 阅读:138 留言:0更新日期:2015-01-28 13:03
本发明专利技术公开了一种面向异构计算系统的跨步数据传输优化方法,目的是解决跨步数据结构传输严重影响异构计算系统效率的问题。技术方案是先创建内存缓冲区1st,将整个画布map数据读入内存缓冲区1st,依据跨步数据大小创建内存缓冲区2nd,将跨步数据内各连续分量依次拷贝至2nd内重组为一片连续存储的数据区域;将2nd中连续存储的跨步数据以数据报文的形式传输至加速器端内存;最后释放内存缓冲区2nd和内存缓冲区1st。采用本发明专利技术可以提高异构系统数据传输带宽并提升异构计算系统效率。

【技术实现步骤摘要】
面向异构计算系统的跨步数据传输优化方法
本专利技术涉及跨步数据传输优化方法,尤指面向异构计算系统的跨步数据传输优化方法。
技术介绍
异构计算系统是由主处理器和加速器两种不同体系结构处理器搭建的计算机系统。目前,主流的异构计算系统有CPU+GPU(GraphicsProcessingUnits)和CPU+MIC(ManyIntegratedCore)组成异构计算系统。通常,异构计算系统中主处理器与加速器之间通过PCIE通道以数据报文的形式完成数据传输和通信,加速器内部的全局通信必须在加速器全局存储空间中进行,部分局部通信借助加速器内的共享存储空间完成,基本通信模式如图1所示。随着异构计算系统计算能力的不断攀升,相对滞后的数据通信能力逐渐成为异构计算系统性能进一步提升的瓶颈。如何避免主处理器和加速器之间频繁的数据通信、提高PCIE数据传输效率是异构计算系统高效协同及性能优化的关键。跨步数据(Strideddata)是一种特殊的向量数据结构,跨步数据本身属于非连续的数据结构,但是其内部各分量(一段连续存储的数据片段)却是连续的,如选取数组A[128][128]的第1列、第3列、…、和第127列所组成的数据结构StridedA[128][1:3:…(2n″+1):…127]{n″∈N,0≤n″≤63}就是一种典型跨步数据类型,如图2所示。目前,异构计算系统中主处理器与加速器之间的数据传输优化方法主要有以下几种:(1)零拷贝。该方法指加速器端独立完成待处理数据集的生成和存储,避免数据在主处理器和加速器之间的来回传输。但是,该方法对加速器端的存储层次和存储空间容量要求高,并且加速器端支持的数据结构类型有限。因此,零拷贝方法虽然能够最小化主处理器与加速器之间的数据传输,但是适用范围受限。(2)数据传输与数据计算重叠。该方法的核心思想为将主处理器与加速器之间的数据传输延迟隐藏于数据计算之中,可以显著提升异构计算系统的效率。该方法通常要求数据计算时间远大于数据传输时间,只有这样才能将数据传输时间很好的重叠与数据计算之中,才能提升异构计算系统效率。但是,该方法对数据传输操作并无优化,对于数据传输时间接近甚至超过数据计算时间的情形,该方法很难将数据传输重叠于数据计算之中。上述两类异构计算系统中主处理器与加速器之间的数据传输优化方法在一定程度上,面向具体的大规模应用加速都可以提高异构计算的执行效率。但是,上述两类优化方法以通用数据结构传输为出发点,忽略了跨步数据数据结构的特殊性和实用性,跨步数据已经广泛应用于图像渲染和大规模存储系统中,对跨步数据的操作会严重影响系统的传输访问性能。异构系统中主处理器与加速器之间的数据传输必须以数据报文的形式一次只能传输一段连续存储的数据,整体非连续的跨步数据传输必须以报文碎片的形式启动多个数据报文完成传输,因此,跨步数据传输将严重影响异构计算系统的传输访问性能,面向异构计算系统的跨步数据传输优化是提高异构系统数据传输效率的有效途径。如何从跨步数据结构的具体特征出发,解决因为跨步数据传输导致的数据传输效率低的难题是本领域技术人员关注的重要技术问题。
技术实现思路
本专利技术要解决的技术问题在于:针对跨步数据结构传输严重影响异构计算系统效率的问题,提出一种面向异构计算系统的跨步数据传输优化方法,以提高异构系统数据传输带宽和提升异构计算系统效率。为了解决上述技术问题,本专利技术的具体技术方案为:第一步、依据待缓存数据大小创建内存缓冲区1st,具体步骤如下:1.1定义跨步数据画布map,即包围跨步数据的最小数据结构体,如数组A[128][128]就是StridedA[128][1:3:…(2n″+1):…127]的画布,n″为自然数,0≤n″≤63;1.2获取map内的基本数据类型Tm0,Tm1,…,Tmi,…,Tmn表示Tmi第i种基本数据类型(基本数据类型指整型、单精度浮点或双精度型、字符型和布尔型中的任何一种数据类型)。1.3统计map内对应的基本数据类型的元素数目m0,m1,…,mi,…,mn,其中mi为map内基本数据类型Tmi的数目,0≤i≤n,n为自然数;1.4定义缓冲区1st的大小为size1;1.5sizeof(Tmi)表示基本数据类型Tmi的存储长度,单位为字节;1.6调用内存分配函数(如Malloc)创建大小为size1的内存缓冲区1st;第二步、利用数据读写函数(如Read)将整个画布map数据读入内存缓冲区1st。第三步、依据跨步数据大小创建内存缓冲区2nd,将跨步数据内各连续分量依次拷贝至内存缓冲区2nd内重组为一片连续存储的数据区域,具体方法如下:3.1创建内存缓冲区2nd,具体步骤如下:3.1.1获取map内跨步数据包含的基本数据类型Ts0,Ts1,…,Tsi′,…,Tsp,Tsi″表示第i'种基本数据类型;3.1.2统计map内对应的基本数据类型的元素数目s0,s1,…,si',…,sp,其中si'为跨步数据内基本数据类型Tsi'的数目,1≤i'≤p,p∈N;3.1.3定义缓冲区2nd的大小为size2;3.1.4sizeof(Tsi')表示基本数据类型Tsi'的存储长度,单位为字节;3.1.5调用内存分配函数(如Malloc)创建大小为size2的内存缓冲区2nd;3.2将跨步数据内各连续分量依次拷贝至2nd内重组为一片连续存储的数据区域,具体步骤如下:3.2.1获取内存缓冲区2nd的首地址H2,即,内存缓冲区创建函数的返回值;3.2.2获取跨步数据的首地址head和尾地址tail,方法如下:3.2.2.1定义map的首地址Hm;3.2.2.2定义跨步数据第一个元素与跨步数据画布首地址的偏移为offset-f;head=Hm+offset-f;3.2.2.3定义跨步数据最后一个元素与跨步数据画布首地址的偏移为offset-l;3.2.2.4tail=Hm+offset-l;3.2.3定义跨步数据当前分量的首地址为cur=NULL;3.2.4cur=head,当前分量地址指向将跨步数据第一段连续存储的分量首地址;3.2.5获取当前分量与下一分量之间的步长strided(即当前分量与下一分量之间的地址偏移量),方法如下:3.2.2.5.1获取分量首地址与跨步数据画布首地址的偏移为offsetcur;3.2.2.5.2获取下一分量首地址与跨步数据画布首地址的偏移为offsetnext;3.2.2.5.3strided=offsetnext-offsetcur;3.2.2.5.4获取当前分量内的基本数据类型Tss0,Tss1,…,…,Tssr;表示第i0种基本数据类型;3.2.6统计当前分量内基本数据类型的元素数目ss0,ss1,…,…,ssr,其中为跨步数据内基本数据类型的数目,1≤i0≤r,r∈N;3.2.7计算当前分量的存储长度表示基本数据类型的存储长度,单位为字节;3.2.8利用内存拷贝函数(如Memcpy)将缓冲区1st内首地址为cur,长度为len个字节的数据区域缓存至缓冲区2nd中以地址H2开始的一片连续区域;3.2.9H2=H2+len;3.2.10当前分量指针移动到下一分量,即,cur=cur+strided;3.2.11如果(cur+len)≤tail,本文档来自技高网
...
面向异构计算系统的跨步数据传输优化方法

【技术保护点】
一种面向异构计算系统的跨步数据传输优化方法,其特征在于包括以下步骤:第一步、依据待缓存数据大小创建内存缓冲区1st;第二步、利用数据读写函数将整个画布map数据读入内存缓冲区1st;第三步、依据跨步数据大小创建内存缓冲区2nd,将跨步数据内各连续分量依次拷贝至内存缓冲区2nd内重组为一片连续存储的数据区域,具体方法如下:3.1创建内存缓冲区2nd;3.2将跨步数据内各连续分量依次拷贝至2nd内重组为一片连续存储的数据区域,具体步骤如下:3.2.1获取内存缓冲区2nd的首地址H2,即,内存缓冲区创建函数的返回值;3.2.2获取跨步数据的首地址head和尾地址tail,方法如下:3.2.2.1定义map的首地址Hm;3.2.2.2定义跨步数据第一个元素与跨步数据画布首地址的偏移为offse‑t;head=Hm+offset‑f;3.2.2.3定义跨步数据最后一个元素与跨步数据画布首地址的偏移为offset‑l;3.2.2.4tail=Hm+offset‑l;3.2.3定义跨步数据当前分量的首地址为cur=NULL;3.2.4cur=head,当前分量地址指向将跨步数据第一段连续存储的分量首地址;3.2.5获取当前分量与下一分量之间的步长strided即当前分量与下一分量之间的地址偏移量,方法如下:3.2.2.5.1获取分量首地址与跨步数据画布首地址的偏移为offsetcur;3.2.2.5.2获取下一分量首地址与跨步数据画布首地址的偏移为offsetnext;3.2.2.5.3strided=offsetnext‑offsetcur;3.2.2.5.4获取当前分量内的基本数据类型表示第i0种基本数据类型;3.2.6统计当前分量内基本数据类型的元素数目其中为跨步数据内基本数据类型的数目,1≤i0≤r,r∈N;3.2.7计算当前分量的存储长度len=Σi0=0rssi0×sizeof(Tssi0),]]>sizeof(Tssi0)]]>表示基本数据类型的存储长度,单位为字节;3.2.8利用内存拷贝函数将缓冲区1st内首地址为cur,长度为len个字节的数据区域缓存至缓冲区2nd中以地址H2开始的一片连续区域;3.2.9H2=H2+len;3.2.10当前分量指针移动到下一分量,即,cur=cur+strided;3.2.11如果(cur+len)≤tail,转3.2.5,否则,转第四步;第四步、将缓冲区2nd中连续存储的跨步数据以数据报文的形式经外围器件扩展接口通道即PCIE通道传输至加速器端内存,方法是:利用异构系统中提供的数据传输函数将首地址为H2,长度为size2个字节的数据区域一次性传输至加速器段存储空间;第五步、利用内存释放函数释放内存缓冲区2nd和内存缓冲区1st;第六步、结束。...

【技术特征摘要】
1.一种面向异构计算系统的跨步数据传输优化方法,其特征在于包括以下步骤:第一步、依据待缓存数据大小创建内存缓冲区1st;第二步、利用数据读写函数将整个画布map数据读入内存缓冲区1st;第三步、依据跨步数据大小创建内存缓冲区2nd,将跨步数据内各连续分量依次拷贝至内存缓冲区2nd内重组为一片连续存储的数据区域,具体方法如下:3.1创建内存缓冲区2nd;3.2将跨步数据内各连续分量依次拷贝至2nd内重组为一片连续存储的数据区域,具体步骤如下:3.2.1获取内存缓冲区2nd的首地址H2,即,内存缓冲区创建函数的返回值;3.2.2获取跨步数据的首地址head和尾地址tail,方法如下:3.2.2.1定义map的首地址Hm;3.2.2.2定义跨步数据第一个元素与跨步数据画布首地址的偏移为offset-f;head=Hm+offset-f;3.2.2.3定义跨步数据最后一个元素与跨步数据画布首地址的偏移为offset-l;3.2.2.4tail=Hm+offset-l;3.2.3定义跨步数据当前分量的首地址为cur=NULL;3.2.4cur=head,当前分量地址指向将跨步数据第一段连续存储的分量首地址;3.2.5获取当前分量与下一分量之间的步长strided即当前分量与下一分量之间的地址偏移量,方法如下:3.2.2.5.1获取分量首地址与跨步数据画布首地址的偏移为offsetcur;3.2.2.5.2获取下一分量首地址与跨步数据画布首地址的偏移为offsetnext;3.2.2.5.3strided=offsetnext-offsetcur;3.2.2.5.4获取当前分量内的基本数据类型表示第i0种基本数据类型;3.2.6统计当前分量内基本数据类型的元素数目其中为跨步数据内基本数据类型的数目,1≤i0≤r,r∈N;3.2.7计算当前分量的存储长度表示基本数据类型的存储长度,单位为字节;3.2.8利用内存拷贝函数将缓冲区1st内首地址为cur,长度为len个字节的数据区域缓存至缓冲区2nd中以地址H2开始的一片连续...

【专利技术属性】
技术研发人员:甘新标刘杰迟利华晏益慧徐涵胡庆丰蒋杰李胜国苏博周怀哲王庆林皇甫永硕崔显涛周陈
申请(专利权)人:中国人民解放军国防科学技术大学
类型:发明
国别省市:湖南;43

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1