芯片的SIMD指令介绍
SIMD(单指令多数据流)能在一条指令内完成多对数据运算,其实质上是通过数据并行的技术,来提高运算效率。
芯片DSP核包含32个向量寄存器,向量寄存器位宽为256位,向量指令主要包括向量运算指令(常见的运算指令都包含)和访存指令,向量运算指令32位,每次进行256位的SIMD运算;向量访存指令为32位,向量访存指令以256位为单位在向量寄存器和存储器之间搬运数据。
芯片向量化设计的基本原则:
• 地址对齐
向量寄存器256位宽,要求输入输出的向量数据地址32字节对齐。对于矩阵结构(我们只考虑行为主情况),如果计算类型与行无关,则可以将此矩阵当作向量进行操作;如果计算类型与行有关,则每行首地址需32字节对齐,所以在此类型计算中,分支满足判断条件需要加上行长度8个单精度浮点对齐或4个单精度复数点对齐
• 流水线
指令处理过程分为5个过程(5级流水线),其中有两个操作占用半个时钟周期,三个操作占用1个时钟周期,一条指令从取指到结束共需要4个时钟周期。
5级流水线分为:
IF:从指令缓存获取中获取指令。
RD:对指令进行解码,并读取所用寄存器的内容。
ALU:算术或逻辑操作,大多指令可以在一个时钟周期内完成,部分指令需要多个时钟周期。
MEM:从数据缓存中读/写内存变量,大多指令在该阶段没有执行操作,只有涉及访存的指令才有实际操作,但每条指令都有该阶段。
WB:操作完成,得到的值保存到寄存器中
计算中需要合理设计一次循环处理数据量,能够让指令尽量充分流水,尽量减少CPU空闲等待时间。
算法向量化
Q1、结合芯片的SIMD指令特性,给出基于QR分解求矩阵特征值和特征向量的向量化算法(伪代码即可),分析算法的性能和优缺点。
Q2、结合芯片的SIMD指令特性,给出基于LU分解求解线性方程组的向量化算法(伪代码即可),分析算法的性能和优缺点。