[发明专利]数组相加运算汇编库程序的地址对齐SIMD加速方法有效

专利信息
申请号: 201310036071.2 申请日: 2013-01-30
公开(公告)号: CN103077008A 公开(公告)日: 2013-05-01
发明(设计)人: 迟利华;刘杰;甘新标;晏益慧;徐涵;胡庆丰;龚春叶;冯华;蒋杰 申请(专利权)人: 中国人民解放军国防科学技术大学
主分类号: G06F9/38 分类号: G06F9/38
代理公司: 国防科技大学专利服务中心 43202 代理人: 郭敏
地址: 410073 湖*** 国省代码: 湖南;43
权利要求书: 查看更多 说明书: 查看更多
摘要: 发明公开了一种数组相加运算汇编库程序的地址对齐SIMD加速方法,目的是提高数组相加运算汇编库程序的执行速度。技术方案是首先从目标体系结构中获取SIMD向量宽度w和数据宽度size,然后计算数组X和数组Y的地址对齐偏移量,接下来根据地址对齐偏移量来判断数组X和数组Y的地址是否已经对齐,如果已经对齐,直接对数组X和数组Y进行向量相加运算;否则,对数组X和数组Y进行向量组装与混合运算。即对数组X和数组Y前面部分进行标量运算,对中间部分利用寄存器掩码进行向量组装和向量运算,对尾部不满足向量运算要求的部分采用标量运算。采用本发明可实现汇编库程序数据地址对齐访存,加快SIMD程序运行,提升SIMD计算性能。
搜索关键词: 数组 相加 运算 汇编 程序 地址 对齐 simd 加速 方法
【主权项】:
1.一种数组相加运算汇编库程序的地址对齐SIMD加速方法,其特征在于包括以下步骤:第一步:从目标体系结构信息中获取SIMD向量宽度w和数据宽度size,向量宽度w指SIMD能够同时处理的数据个数,数据宽度size指数据类型占据的字节数;第二步:计算数组X的地址对齐偏移量,具体方法如下:2.1获取X的内存首地址&X;2.2执行求余操作得到地址偏移量offsetX,offsetX=mod(&X,(size*w)),mod(m1,n1)表示m1除以n1得到的余数,“*”为乘法;2.3执行除法操作得到地址对齐偏移量shiftX,shiftX=div(offsetX,size);div(m1,n1)表示m1除以n1得到的结果向下取整;第三步:计算数组Y的地址对齐偏移量,具体方法如下:3.1获取Y的内存首地址&Y;3.2执行求余操作得到地址偏移量offsetY,offsetY=mod(&Y,(size*w));3.3执行除法操作得到地址对齐偏移量shiftY,shiftY=div(offsetY,size);第四步:地址对齐判断,方法是:4.1获取数组X和Y的大小即数组中的元素个数N;4.2如果shiftX=shiftY=0,说明地址已对齐可直接对X和Y进行向量运算,转第五步,否则,转第六步;第五步:对X和Y进行向量运算,具体步骤如下:5.1令变量i=0,j=0;5.2定义向量运算部分循环次数变量m=div(N,w);5.3如果j<m,执行向量运算,转5.4;否则,转5.9;5.4加载X[i],X[i+1],…,X[i+w-1]到向量寄存器VX,加载Y[i],Y[i+1],…,Y[i+w-1]到向量寄存器VY;5.5执行向量运算完成数组相加存入向量寄存器VZ,即,VZ=VX+VY;5.6将向量寄存器VZ中的结果分别赋值给Z[i],Z[i+1],…,Z[i+w-1],如公式(1)所示;Z[i]=VZ[0]Z[i+1]=VZ[1]·········Z[i+w-1]=VZ[w-1]---(1)]]>5.7更新i=i+w,j=j+1;5.8如果j<m,转5.4,否则,转5.9;5.9如果i<N,转5.10执行标量运算;否则,转第七步;5.10执行标量运算完成数组相加,即,Z[i]=X[i]+Y[i];5.11更新i=i+1;5.12如果i<N,转5.10,否则,转第七步;第六步:对X和Y进行向量组装与混合运算,具体方法如下:6.1如果shiftX=shiftY,转6.2;否则,转6.216.2定义头部标量运算部分循环次数变量h=min{w-shiftX,N},其中min{x,y}表示取x,y中的最小值;6.3令k=N-h;6.4定义向量运算部分运算循环次数变量m=div(k,w);6.5令i=0,j=0;6.6如果j<h,转6.7;否则,转6.10;6.7执行头部标量运算,即,Z[i]=X[i]+Y[i];6.8更新i=i+1,j=j+1;6.9如果j<h,转6.7,否则,转6.10;6.10令j=0;6.11如果j<m,转6.12;否则,转6.17;6.12加载X[i],X[i+1],…,X[i+w-1]到向量寄存器VX,加载Y[i],Y[i+1],…,Y[i+w-1]到向量寄存器VY;6.13执行向量运算完成数组相加存入向量寄存器VZ,即,VZ=VX+VY;6.14将向量寄存器VZ中的结果分别赋值给Z[i],Z[i+1],…,Z[i+w-1],如公式(2)所示;Z[i]=VZ[0]Z[i+1]=VZ[1]·········Z[i+w-1]=VZ[w-1]---(2)]]>6.15更新i=i+w,j=j+1;6.16如果j<m,转6.12,否则,转6.17;6.17如果i<N,转6.18;否则,转第七步;6.18执行标量运算完成数组相加,即,Z[i]=X[i]+Y[i];6.19更新i=i+1;6.20如果i<N,转6.18,否则,转第七步;6.21如果shiftX<shiftY,转6.22;否则,转6.48;6.22计算移位偏移量Δshift,Δshift=shiftY-shiftX;6.23定义头部标量运算部分循环次数变量h=min{w-shiftX,N};6.24令k=N-h;6.25定义向量运算部分循环次数变量m=div(k,w);6.26令i=0,j=0;6.27如果j<h,转6.28;否则,转6.31;6.28执行头部标量运算,即,Z[i]=X[i]+Y[i];6.29更新i=i+1,j=j+1;6.30如果j<h,转6.28,否则,转6.31;6.31令j=0;6.32如果j<m,转6.33;否则,转6.44;6.33加载Y[i-□shift],Y[i-□shift+1],…,Y[i-□shift+w-1]到向量寄存器VY1;6.34加载X[i],X[i+1],…,X[i+w-1]到向量寄存器VX;6.35加载Y[i+w-□shift],Y[i+w-□shift+1],…,Y[i+w-□shift+w-1]到向量寄存器VY2;6.36设置向量寄存器掩码有效位:某位的掩码设置为1表示可以将该向量掩码为1的分量赋值给另一向量的指定位;掩码设置为0表示该向量掩码为0的分量在向量赋值过程中无效;设置向量寄存器VY1的掩码有效位为:即,将向量寄存器VY1的后w-Δshift个分量设置为有效位赋值给另一向量的相应位,而其它位无效;6.37设置向量寄存器VY2的掩码有效位为:即,将向量寄存器VY2前Δshift个分量设置为有效位赋值给另一向量的相应位,而其它位无效;6.38基于向量寄存器掩码重组生成新的向量并赋值给向量寄存器VY,即将向量寄存器VY1的后w-Δshift个分量和向量寄存器VY2的前Δshift个分量合并重组生成向量VY,各分量对应赋值关系如公式(3)所示;6.39执行向量运算完成数组相加存入向量寄存器VZ,即,VZ=VX+VY;6.40将向量寄存器VZ中的结果分别赋值给Z[i],Z[i+1],…,Z[i+w-1],如公式(4)所示;Z[i]=VZ[0]Z[i+1]=VZ[1]·········Z[i+w-1]=VZ[w-1]---(4)]]>6.41更新i=i+w,j=j+1;6.42将向量寄存器VY2的值赋给VY1,即VY1=VY2,如公式(5)所示;VY1[0]=VY2[0]VY1[1]=VY2[1]·········VY1[w-1]=VY2[w-1]---(5)]]>6.43如果j<m,转6.34;否则,转6.44;6.44如果i<N,转6.45;否则,转第七步;6.45执行尾部标量运算,即,Z[i]=X[i]+Y[i];6.46更新i=i+1;6.47如果i<N,转6.45;否则,转第七步;6.48计算移位偏移量Δshift,Δshift=shiftX-shiftY;6.49定义头部标量运算部分循环次数变量h=min{w-shiftY,N};6.50令k=N-h;6.51定义向量运算部分循环次数变量m=div(k,w);6.52令i=0,j=0;6.53如果j<h,转6.54;否则,转6.57;6.54执行头部标量运算,即,Z[i]=X[i]+Y[i];6.55更新i=i+1,j=j+1;6.56如果j<h,转6.54,否则,转6.57;6.57令j=0;6.58如果j<m,转6.59;否则,转6.70;6.59加载X[i-□shift],X[i-□shift+1],…,X[i-□shift+w-1]到向量寄存器VX1;6.60加载Y[i],Y[i+1],…,Y[i+w-1]到向量寄存器VY;6.61加载X[i+w-□shift],X[i+w-□shift+1],…,X[i+w-□shift+w-1]到向量寄存器VX2;6.62设置向量寄存器VX1的掩码有效位为:即,将向量寄存器VX1的后w-Δshift个分量设置为有效位赋值给另一向量的相应位,而其它位无效;6.63设置向量寄存器VX2的掩码有效位为:即,将向量寄存器VX2前Δshift个分量设置为有效位赋值给另一向量的相应位,而其它位无效;6.64基于向量寄存器掩码重组生成新的向量并赋值给向量寄存器VX,即将向量寄存器VX1的后w-Δshift个分量和向量寄存器VX2的前Δshift个分量合并重组生成向量VX,各分量对应赋值关系如公式(6)所示;6.65执行向量运算完成数组相加存入向量寄存器VZ,即,VZ=VX+VY;6.66将向量寄存器VZ中的结果分别赋值给Z[i],Z[i+1],…,Z[i+w-1],如公式(7)所示;Z[i]=VZ[0]Z[i+1]=VZ[1]·········Z[i+w-1]=VZ[w-1]---(7)]]>6.67更新i=i+w,j=j+1;6.68将向量寄存器VX2的值赋给VX1,即VX1=VX2,如公式(8)所示;VX1[0]=VX2[0]VX1[1]=VX2[1]·········VX1[w-1]=VX2[w-1]---(8)]]>6.69如果j<m,转6.60;否则,转6.70;6.70如果i<N,执行标量运算,转6.71;否则,转第七步;6.71执行尾部标量运算,即,Z[i]=X[i]+Y[i];6.72更新i=i+1;6.73如果i<N,转6.71;否则,转第七步;第七步:结束。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。

该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国人民解放军国防科学技术大学,未经中国人民解放军国防科学技术大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服

本文链接:http://www.vipzhuanli.com/patent/201310036071.2/,转载请声明来源钻瓜专利网。

×

专利文献下载

说明:

1、专利原文基于中国国家知识产权局专利说明书;

2、支持发明专利 、实用新型专利、外观设计专利(升级中);

3、专利数据每周两次同步更新,支持Adobe PDF格式;

4、内容包括专利技术的结构示意图流程工艺图技术构造图

5、已全新升级为极速版,下载速度显著提升!欢迎使用!

请您登陆后,进行下载,点击【登陆】 【注册】

关于我们 寻求报道 投稿须知 广告合作 版权声明 网站地图 友情链接 企业标识 联系我们

钻瓜专利网在线咨询

周一至周五 9:00-18:00

咨询在线客服咨询在线客服
tel code back_top