CN103077008B - 数组相加运算汇编库程序的地址对齐simd加速方法 - Google Patents

数组相加运算汇编库程序的地址对齐simd加速方法 Download PDF

Info

Publication number
CN103077008B
CN103077008B CN201310036071.2A CN201310036071A CN103077008B CN 103077008 B CN103077008 B CN 103077008B CN 201310036071 A CN201310036071 A CN 201310036071A CN 103077008 B CN103077008 B CN 103077008B
Authority
CN
China
Prior art keywords
shift
turn
vector
array
vector registor
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN201310036071.2A
Other languages
English (en)
Other versions
CN103077008A (zh
Inventor
迟利华
刘杰
甘新标
晏益慧
徐涵
胡庆丰
龚春叶
冯华
蒋杰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
National University of Defense Technology
Original Assignee
National University of Defense Technology
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by National University of Defense Technology filed Critical National University of Defense Technology
Priority to CN201310036071.2A priority Critical patent/CN103077008B/zh
Publication of CN103077008A publication Critical patent/CN103077008A/zh
Application granted granted Critical
Publication of CN103077008B publication Critical patent/CN103077008B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Complex Calculations (AREA)

Abstract

本发明公开了一种数组相加运算汇编库程序的地址对齐SIMD加速方法,目的是提高数组相加运算汇编库程序的执行速度。技术方案是首先从目标体系结构中获取SIMD向量宽度w和数据宽度size,然后计算数组X和数组Y的地址对齐偏移量,接下来根据地址对齐偏移量来判断数组X和数组Y的地址是否已经对齐,如果已经对齐,直接对数组X和数组Y进行向量相加运算;否则,对数组X和数组Y进行向量组装与混合运算。即对数组X和数组Y前面部分进行标量运算,对中间部分利用寄存器掩码进行向量组装和向量运算,对尾部不满足向量运算要求的部分采用标量运算。采用本发明可实现汇编库程序数据地址对齐访存,加快SIMD程序运行,提升SIMD计算性能。

Description

数组相加运算汇编库程序的地址对齐SIMD加速方法
技术领域
本发明涉及数组相加运算的地址对齐SIMD(Single Instruction Multiple Data,单指令多数据)加速计算方法,尤指数组相加运算汇编库程序的地址对齐SIMD加速方法。
背景技术
传统的CPU标量浮点计算部件,每个时刻只能进行一个浮点运算,而SIMD功能部件每个时刻可以完成多个浮点运算,是提高微处理器速度的重要部件,发挥SIMD部件性能需要设计SIMD运算程序。
现有的SIMD扩展处理机对数据访存地址行为非常敏感。通常,SIMD扩展仅支持连续访存数据加载和存储,并且只支持地址对齐的访存数据加载和存储。如PowerPC处理器的AltiVec扩展,Alpha处理器的MVI扩展等。另外一些指令集如MAX-1/2、VIS、3DNow!、VMX采用软件方式实现非对齐地址访存;Intel的AVX、MMX和SSE系列指令集则在硬件上直接支持对非对齐地址访存,但是对齐地址访存和非对齐地址访存的SIMD程序性能差异显著。在许多实际工程应用程序中,循环内的数组引用通常是非对齐地址访存,严重影响了SIMD程序性能。
SIMD地址对齐访存就是SIMD程序访问的一片连续存储空间的首地址必须是SIMD向量宽度w的整数倍,即:Addr/w=size*k,其中:k为整数;Addr表示SIMD程序访问的一片连续存储空间的首地址,w表示SIMD向量宽度,即SIMD能够同时处理的数据个数。size表示向量中每个分量的数据类型占据的字节数。
非对齐地址访存将严重影响程序性能,因此,高级语言编写程序时通常使用对齐命令aligned来完成数据的对齐访存。而在汇编语言库程序设计中,涉及的地址是由外部调用程序传入的,无法修改,如果数据地址非对齐将严重影响程序性能甚至出错。SIMD加速的前提就是地址对齐的连续访存,因此基于地址对齐的SIMD加速技术一直以来都是学术界研究的热点。
Shahbahrami等人在Intel实验平台上进行了实验,评估了非对齐访存造成的性能损失;
李玉祥设计了一种面向向量化的局部数据重组,在循环之前对数据进行重新布局,等待向量化之后再对数据进行恢复,但是这种局部数据重组代价比较大,往往难以取得理想的收益;
Larsen等人讨论了如何在过程间对数组引用进行连续性分析,并综合循环剥离、循环多版本、数组填充等方法使得能够对更多的数组引用进行地址对齐访问。采用动态剥离的方法分析指针引用的地址对齐信息,并应用在Intel的C++编译器中;
Fridman等人则利用冗余的系数存储来解决常数数组引用的对齐访存问题。
上述方法从不同的侧面强调了地址对齐访存对SIMD程序设计的重要性,并且面向特定应用提出了具体的解决方案,但是上述解决方案局限于采用高级语言编程方式对数组进行预处理以提高编译器的优化性能,优化效果不明显并且实际推广应用困难。因此,如何以汇编库程序为目标提供一种面向数组相加运算的地址对齐SIMD加速方法是本领域技术人员极为关注的技术问题。
发明内容
本发明要解决的技术问题在于:提供一种数组相加运算汇编库程序的地址对齐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(m,n)表示m除以n得到的结果向下取整(例如div(3,2)=1)由2.2和2.3可知,ShiftX<w;
第三步:计算数组Y的地址对齐偏移量,具体方法如下:
3.1获取Y的内存首地址&Y;
3.2执行求余操作得到地址偏移量offsetY,offsetY=mod(&Y,(size*w));
3.3执行除法操作得到地址对齐偏移量shiftY,shiftY=div(offsetY,size),由3.2和3.3可知,ShiftY<w;
第四步:地址对齐判断,具体方法如下:
4.1获取数组X的大小即数组中的元素个数N,获取数组Y的大小N;
4.2如果shiftX=shiftY=0,说明地址已对齐可直接进行向量运算,转第五步,否则,转第六步;
第五步:对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 ] = V Z [ 0 ] Z [ i + 1 ] = V Z [ 1 ] . . . . . . . . . Z [ i + w - 1 ] = V Z [ 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.21
6.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 ] = V Z [ 0 ] Z [ i + 1 ] = V Z [ 1 ] . . . . . . . . . Z [ i + w - 1 ] = V Z [ 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)所示;
V Y [ 0 ] = V Y 1 [ Δshift ] V Y [ 1 ] = V Y 1 [ Δshift + 1 ] . . . . . . . . . V Y [ w - Δshift - 1 ] = V Y 1 [ w - 1 ] V Y [ w - Δshift ] = V Y 2 [ 0 ] V Y [ w - Δshift + 1 ] = V Y 2 [ 1 ] . . . . . . . . . V Y [ w - 1 ] = V Y 2 [ Δshift - 1 ] - - - ( 3 )
6.39执行向量运算完成数组相加存入向量寄存器VZ,即,VZ=VX+VY
6.40将向量寄存器VZ中的结果分别赋值给Z[i],Z[i+1],…,Z[i+w-1],如公式(4)所示;
Z [ i ] = V Z [ 0 ] Z [ i + 1 ] = V Z [ 1 ] . . . . . . . . . Z [ i + w - 1 ] = V Z [ w - 1 ] - - - ( 4 )
6.41更新i=i+w,j=j+1;
6.42将向量寄存器VY2的值赋给VY1,即VY1=VY2,如公式(5)所示;
V Y 1 [ 0 ] = V Y 2 [ 0 ] V Y 1 [ 1 ] = V Y 2 [ 1 ] . . . . . . . . . V Y 1 [ w - 1 ] = V Y 2 [ 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)所示;
V X [ 0 ] = V X 1 [ Δshift ] V X [ 1 ] = V X 1 [ Δshift + 1 ] . . . . . . . . . V X [ w - Δshift - 1 ] = V X 1 [ w - 1 ] V X [ w - Δshift ] = V X 2 [ 0 ] V X [ w - Δshift + 1 ] = V X 2 [ 1 ] . . . . . . . . . V X [ w - 1 ] = V X 2 [ Δshift - 1 ] - - - ( 6 )
6.65执行向量运算完成数组相加存入向量寄存器VZ,即,VZ=VX+VY
6.66将向量寄存器VZ中的结果分别赋值给Z[i],Z[i+1],…,Z[i+w-1],如公式(7)所示;
Z [ i ] = V Z [ 0 ] Z [ i + 1 ] = V Z [ 1 ] . . . . . . . . . Z [ i + w - 1 ] = V Z [ w - 1 ] - - - ( 7 )
6.67更新i=i+w,j=j+1;
6.68将向量寄存器VX2的值赋给VX1,即VX1=VX2,如公式(8)所示;
V X 1 [ 0 ] = V X 2 [ 0 ] V X 1 [ 1 ] = V X 2 [ 1 ] . . . . . . . . . V X 1 [ w - 1 ] = V X 2 [ 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;否则,转第七步;
第七步:结束。
与现有技术相比,采用本发明可实现汇编库程序数据地址对齐访存,加快SIMD程序运行,提升SIMD计算性能。
附图说明
图1为向量寄存器格式示例。
图2为本发明的总流程图。
具体实施方式
图1为向量寄存器格式示例
图示向量寄存器包括w个双精度浮点分量,即向量宽度为w,数据宽度size为双精度浮点类型占据的字节数。
图2是本发明的总流程图。本发明包括以下步骤:
第一步:从目标体系结构信息中获取SIMD向量宽度w和数据宽度size。
第二步:计算数组X地址对齐偏移量。
第三步:计算数组Y地址对齐偏移量。
第四步:根据地址对齐偏移量来判断数组X和数组Y的地址是否已经对齐,如果已对齐,执行第五步,否则执行第六步。
第五步:对X和Y进行向量运算。
第六步:对X和Y进行向量组装与混合运算。
第七步:结束。

Claims (1)

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的大小即数组中的元素个数N,获取数组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 ] = V Z [ 0 ] Z [ i + 1 ] = V Z [ 1 ] . . . . . . . . . Z [ i + w - 1 ] = V Z [ 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.21
6.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 ] = V Z [ 0 ] Z [ i + 1 ] = V Z [ 1 ] . . . . . . . . . Z [ i + w - 1 ] = V Z [ 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)所示;
V Y [ 0 ] = V Y 1 [ Δshift ] V Y [ 1 ] = V Y 1 [ Δshift + 1 ] . . . . . . . . . V Y [ w - Δshift - 1 ] = V Y 1 [ w - 1 ] V Y [ w - Δshift ] = V Y 2 [ 0 ] V Y [ w - Δshift + 1 ] = V Y 2 [ 1 ] . . . . . . . . . V Y [ w - 1 ] = V Y 2 [ Δshift - 1 ] - - - ( 3 )
6.39执行向量运算完成数组相加存入向量寄存器VZ,即,VZ=VX+VY
6.40将向量寄存器VZ中的结果分别赋值给Z[i],Z[i+1],…,Z[i+w-1],如公式(4)所示;
Z [ i ] = V Z [ 0 ] Z [ i + 1 ] = V Z [ 1 ] . . . . . . . . . Z [ i + w - 1 ] = V Z [ w - 1 ] - - - ( 4 )
6.41更新i=i+w,j=j+1;
6.42将向量寄存器VY2的值赋给VY1,即VY1=VY2,如公式(5)所示;
V Y 1 [ 0 ] = V Y 2 [ 0 ] V Y 1 [ 1 ] = V Y 2 [ 1 ] . . . . . . . . . V Y 1 [ w - 1 ] = V Y 2 [ 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)所示;
V X [ 0 ] = V X 1 [ Δshift ] V X [ 1 ] = V X 1 [ Δshift + 1 ] . . . . . . . . . V X [ w - Δshift - 1 ] = V X 1 [ w - 1 ] V X [ w - Δshift ] = V X 2 [ 0 ] V X [ w - Δshift + 1 ] = V X 2 [ 1 ] . . . . . . . . . V X [ w - 1 ] = V X 2 [ Δshift - 1 ] - - - ( 6 )
6.65执行向量运算完成数组相加存入向量寄存器VZ,即,VZ=VX+VY
6.66将向量寄存器VZ中的结果分别赋值给Z[i],Z[i+1],…,Z[i+w-1],如公式(7)所示;
Z [ i ] = V Z [ 0 ] Z [ i + 1 ] = V Z [ 1 ] . . . . . . . . . Z [ i + w - 1 ] = V Z [ w - 1 ] - - - ( 7 )
6.67更新i=i+w,j=j+1;
6.68将向量寄存器VX2的值赋给VX1,即VX1=VX2,如公式(8)所示;
V X 1 [ 0 ] = V X 2 [ 0 ] V X 1 [ 1 ] = V X 2 [ 1 ] . . . . . . . . . V X 1 [ w - 1 ] = V X 2 [ 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;否则,转第七步;
第七步:结束。
CN201310036071.2A 2013-01-30 2013-01-30 数组相加运算汇编库程序的地址对齐simd加速方法 Expired - Fee Related CN103077008B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310036071.2A CN103077008B (zh) 2013-01-30 2013-01-30 数组相加运算汇编库程序的地址对齐simd加速方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310036071.2A CN103077008B (zh) 2013-01-30 2013-01-30 数组相加运算汇编库程序的地址对齐simd加速方法

Publications (2)

Publication Number Publication Date
CN103077008A CN103077008A (zh) 2013-05-01
CN103077008B true CN103077008B (zh) 2014-12-03

Family

ID=48153547

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310036071.2A Expired - Fee Related CN103077008B (zh) 2013-01-30 2013-01-30 数组相加运算汇编库程序的地址对齐simd加速方法

Country Status (1)

Country Link
CN (1) CN103077008B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104166852A (zh) * 2013-05-20 2014-11-26 南京壹进制信息技术有限公司 利用simd提高lbp的提取速度
GB2516995B (en) * 2013-12-18 2015-08-19 Imagination Tech Ltd Task execution in a SIMD processing unit
CN106371808B (zh) * 2015-07-22 2019-07-12 华为技术有限公司 一种并行计算的方法及终端
CN109388677B (zh) * 2018-08-23 2022-10-11 顺丰科技有限公司 集群之间数据同步方法、装置、设备及其存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1842779A (zh) * 2003-09-08 2006-10-04 飞思卡尔半导体公司 用于执行simd运算的数据处理系统及其方法
CN101084483A (zh) * 2004-05-03 2007-12-05 硅奥普迪思公司 用于simd阵列处理机的位串行处理元件
WO2010040977A1 (en) * 2008-10-08 2010-04-15 Arm Limited Apparatus and method for performing simd multiply-accumulate operations

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1842779A (zh) * 2003-09-08 2006-10-04 飞思卡尔半导体公司 用于执行simd运算的数据处理系统及其方法
CN101084483A (zh) * 2004-05-03 2007-12-05 硅奥普迪思公司 用于simd阵列处理机的位串行处理元件
WO2010040977A1 (en) * 2008-10-08 2010-04-15 Arm Limited Apparatus and method for performing simd multiply-accumulate operations

Non-Patent Citations (6)

* Cited by examiner, † Cited by third party
Title
Optimal Matrix Computing Using Vector Division with Sub-word Parallel;xin-biao gan el at;《IEEE Computer Society》;20081231;第3-6页 *
xin-biao gan el at.Optimal Matrix Computing Using Vector Division with Sub-word Parallel.《IEEE Computer Society》.2008,page3-6. *
基于CUDA编程模型的稀疏对角矩阵向量乘优化;秦晋 等;《计算机工程与科学》;20121231;第34卷(第7期);第78-83页 *
多群粒子输运问题在多核集群系统上的混合并行计算;迟利华 等;《计算机工程与科学》;20091231;第31卷(第11期);第94-97页 *
秦晋 等.基于CUDA编程模型的稀疏对角矩阵向量乘优化.《计算机工程与科学》.2012,第34卷(第7期),第78页-第83页. *
迟利华 等.多群粒子输运问题在多核集群系统上的混合并行计算.《计算机工程与科学》.2009,第31卷(第11期), *

Also Published As

Publication number Publication date
CN103077008A (zh) 2013-05-01

Similar Documents

Publication Publication Date Title
Tomov et al. Towards dense linear algebra for hybrid GPU accelerated manycore systems
Levesque et al. A Guidebook to FORTRAN on Supercomputers
Govindaraju et al. Dyser: Unifying functionality and parallelism specialization for energy-efficient computing
US9355061B2 (en) Data processing apparatus and method for performing scan operations
EP3436928B1 (en) Complex multiply instruction
CN103077008B (zh) 数组相加运算汇编库程序的地址对齐simd加速方法
Rodríguez et al. Hardware acceleration of multibody simulations for real-time embedded applications
Dzafic et al. High performance power flow algorithm for symmetrical distribution networks with unbalanced loading
EP2354939A1 (en) Method and apparatus providing cobol decimal type arithmetic functions with improved performance
Zhong et al. Using arm scalable vector extension to optimize open mpi
Yih et al. Fpga versus gpu for speed-limit-sign recognition
Bîră et al. OPINCAA: A Light-Weight and Flexible Programming Environment For Parallel SIMD Accelerators
Glossner et al. HSA-enabled DSPs and accelerators
CN111400013B (zh) 一种多核处理器的数据流的处理方法及系统
Smart et al. CPU Parallelization and GPU Acceleration of SUAVE: Advancements in Sampling and Optimization
US9606779B2 (en) Data processing system and data simulation method in the system
US20070074186A1 (en) Method and system for performing reassociation in software loops
Saidani et al. Parallelization schemes for memory optimization on the Cell processor: A case study of image processing algorithm
US20050055394A1 (en) Method and system for high performance, multiple-precision multiply-and-add operation
Krużel Vectorized implementation of the FEM numerical integration algorithm on a modern CPU
Gilani et al. Energy-efficient floating-point arithmetic for digital signal processors
Singh An Empirical Study of Programming Languages from the Point of View of Scientific Computing
CN110134437B (zh) 一种软件流水优化方法及装置
CN116089785A (zh) 基于ft2000+的单精度低阶矩阵乘分块算法优化方法及系统
Dong et al. A Translation Framework for Virtual Execution Environment on CPU/GPU Architecture

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20141203

Termination date: 20210130