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
vector registor
array
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
CN109661647B (zh) 数据处理装置和方法
Waidyasooriya et al. OpenCL-based FPGA-platform for stencil computation and its optimization methodology
CN108885550B (zh) 复数乘法指令
US20080109795A1 (en) C/c++ language extensions for general-purpose graphics processing unit
JP2008530689A (ja) 効率的なデジタル信号処理に適用するデータプロセッサとその方法
CN103077008B (zh) 数组相加运算汇编库程序的地址对齐simd加速方法
CN103473168B (zh) 一种热点程序的统计方法
TW201723812A (zh) 用於以亂序載入來排列之指令及邏輯
Dzafic et al. High performance power flow algorithm for symmetrical distribution networks with unbalanced loading
TW201729080A (zh) 用於排列序列之指令及邏輯
CN114461277A (zh) 一种电力专用dsp指令集的设计及应用方法
CN104699449B (zh) 一种基于gmp的大整数加法和减法多核并行化实现方法
CN109408867B (zh) 一种基于mic协处理器的显式r-k时间推进加速方法
Villa et al. Effects of floating-point non-associativity on numerical computations on massively multithreaded systems
CN119127308A (zh) 一种基于gpu的risc-v指令集的优化方法及系统、装置、介质
CN118626145A (zh) 指令转换方法、装置及相关设备
CN110673877B (zh) 一种基于手动向量化的并行计算方法
Christ et al. PIMSys: A Virtual Prototype for Processing in Memory
Glossner et al. HSA-enabled DSPs and accelerators
Wu et al. Research on OpenMP model of the parallel programming technology for homogeneous multicore DSP
Singh An Empirical Study of Programming Languages from the Point of View of Scientific Computing
Bira et al. Functional virtual prototyping environment for a family of Map-Reduce embedded accelerators
Huang et al. Dynamic streamization model execution for SIMD engines on multicore architectures
CN116089785A (zh) 基于ft2000+的单精度低阶矩阵乘分块算法优化方法及系统
Mego et al. Instruction mapping techniques for processors with very long instruction word architectures

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

Granted publication date: 20141203

Termination date: 20210130

CF01 Termination of patent right due to non-payment of annual fee