【基于SIMD技术的代码优化分析案例3800字】_第1页
【基于SIMD技术的代码优化分析案例3800字】_第2页
【基于SIMD技术的代码优化分析案例3800字】_第3页
【基于SIMD技术的代码优化分析案例3800字】_第4页
【基于SIMD技术的代码优化分析案例3800字】_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于SIMD技术的代码优化分析案例基于SIMD技术的代码优化分析案例 11.1算法模块优化实现 11.1.1数据类型 11.1.2轮函数 21.1.2.1轮常数异或 2 21.1.2.3S盒操作 21.1.2.4非线性变换A 3 6 61.2.2数据切片与合并模块优化 6 8由于算法基于海绵结构,吸收阶段与压缩阶段是迭代运算,所以利用SIMD前文中数据数组定义为unsignedchar类型的,因此在SSE指令中使用 m128i,该数据类型的变量可用做SSE2指令的操作数,也可称作向量,它是不能被用户指令直接存取的。_m128i类型的变量被自动分配为16个字节的字长。可以通过调用m128i_mm_set1_epi8或者m128i_mm_set1_ep16等对其进行赋8个16bits的整型值。在进入轮函数之前数据已经进行了分割,128bit有效数据分为左右64bit数据输入。因为轮常数异或为高16位操作,且输入数据每字节为高4位为0、低4位有效。所以需要将16位轮常数的值,也按4位有效数据分割排列。利用SSE指令实现128bit数据的并行异或,即实现64bit有效输入数据的异或运//将输入数据加载到寄存器内left=_mm_loadu_si12right=_mm_loadu_si128((m128i*)inputrig1.1.2.2P置换_m128iPbox=_mm_setr_epi8(Ox3,0x6,0x9,0xC,0x7,0xA,0xD,0x0,0xB,OxE,0x1,0x1/1轮p置换S盒操作利用SSE指令集进行优化,可以实现128bit数据操作并输出。按照之前C语言代码实现的思想,也是将T变换中的S盒操作作为单独步骤进行运算操作。具体方法为:在S盒操作中需要_mm_shuffle_epi8()指令进行输出,但需要注意的是第一个参数为S盒,第二个参数入数据的值决定输出,最终输出经过S盒操作后的数据。 m128iSbox=_mm_setr_epi8(OxE,0x9,0xF,0x0,0xD,0x4,0xA,0xB,0x1,0x2非线性变换A等价于四次线性变换B的迭代,针对四次线性变换迭代运算进行SSE指令集优化,能够极大程度上提高代码的并行性。由于四次线迭代运算,流程为64bit数据分为四组16bit数据进行相同的四次线性变换迭代操再拆分为4组数据,具体迭代流程简化为4次×2运算、4次×4运算、8次异或 m128ix0,x1,x2,x3,x4,temp0,temp1,temp2,temp3,c1,c2,c3//P置换数据 m128iP=_mm_setr_epi8(0x0,0x4,0x8,0xc,Ox1,0x5,0x9,0x0=_mm_loadu_si128(m128i*/1分组将线性变换每一位分组(04812,15913,261014,371115) m128ial=_mm_setr_epi8(0xf,Oxf,Oxf,Oxf,Ox80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, 0x80,0x80,0x80,0x80,0x80, 0x80,0x80,0x80,0x80,0x80, x1=_mm_and_si128(x0,a1);//048x2=_mm_shuffle_epi8(x0,a2);//15x3=_mm_shuffle_epi8(x0,a3);//26ae0...0x4=_mm_shuffle_epi8(x0,a4);//37b//有限域上常数乘法结果数据 m128iyx2=_mm_setr_epi8(0x0,0x2,0x4,0x6, m128iyx4=_mm_setr_epi8(0x0,0x4,0x8,0xc,1.数据重组合并。由于数据按照每16位对应位置的4位数据经过了重新分 m128ib2=_mm_setr_epi8(Ox80,0x80,0x80,0x80,0x0,0x1,0x2,0x3,0x80,0x80,0 m128ib3=_mm_setr_epi8(0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x1,0 m128ib4=_mm_setr_epi8(0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x2=_mm_shuffle_epi8(x2,b2);//将第二组数x3=_mm_shuffle_epi8(x3,b3);//将第三组数x4=_mm_shuffle_epi8(x4,b4);//将第四组数据11数据合并x0=_mm_shuffle_epi8(x0,P);/将128位数据重新_mm_storeu_si128((_m128i*)inputleft1,xO);1.2利用nibble-slice技术优化方案一变换B的具体单个输入数据都为4bit(半字节),因此为了简便操作将8个8bit数分割为16个4bit有效数,即将输入数据按半字节长度进行切片。0x01,0x23,0x45,0x67,0x8位置0)1.每字节的高4位数据放入低4位中。即将输入64bit有效数据存入寄存使高4位为0,使最终有效数据为原始数据的高4位。2.将1中生成的数据排列移位。利用移位函数将生成数据隔位排列,空位用于存放原始数据的低4bit。3.每字节低4位数据排列移位。先将原始数据和0xOf按位进行与运算,保留原始数据低4位,再利用移位函数排列方便后续插入。//数据切片所需掩码数据 m128ia1,a2,b1,b2,b3a1=_mm_loadu_si128(_m128i*)b1=_mm_srli_epi16(a1,4);/b1=_mm_and_si128(b1,con);/每字节高b1=_mm_shuffle_epi8(b1,c1);/b2=_mm_and_si128(a1,con);//原始数据每字节高b²=_mm_shuffle_epi8(b_mm_store_si128(_m128i*)inputleft0,b1);即将128位数据中每字节低4位合并重组为64bit有效数据。节对齐)0x01,0x23,0x45,0x67,0x89,0xab,Oxcd,Oxef,0x00……(按位异或,实现合并)1.每字节的低4位数据放入高4位中。将数据按每组16位进行4位的逻辑左移,实现低4位移位至高4位,并低位补0。2.将1中生成的数据排列移位,利用移位函数将生成数据隔位排列,空位用于存放原始数据的低4bit。 m128ic1=_mm_setr_epi8(Ox0,0x2,0x4,0x6,0x8,0xa,Oxc,0xe,0x1,0x3,0x m128ic2=_mm_setr_epi8(0x1,0x3,0x5,0x7,0x9,0xb,Oxd,Oxf,Ox80,0x80,0x80, _m128ial,a2,a3,a4,bal=_mm_loadu_si128(m128i*)b1=_mm_xor_si128(b1,a2b1=_mm_and_si128(b1,c3);//将寄存器的后64位数据置0_mm_storeu_si128(_m128i*)inputleft,b1可以使数据在进入轮函数之后就进行切片分割成4组数据。即将每32位中位置对应的4位进行分组。与上述方式区别主要变化在轮常数异或和P置换。轮常数异或需要4个指令,轮常数值将每4位分别拆开进行加载。000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000根据位置置换结果可知,置换后的第一组数据b1为第四组b4数据;第二组数据b2为第三组b3移位后将n2替换为n8;第三组数据b3为第二组b2移位结果;第四组数据b4为第一组移位后将n8替换为n2结果。_m128i_m128id3=_mm_setr_epi8(0x4,0x80,0x80,0x80,0x8,0x80,0x80,0x80,m128id2=_mmsetr_epi8(0x8,0x80,0x80,0x80,Oxc,0x80,0x80m128id1=_mm_setr_epi8(Oxc,Ox80,0x80,0x80,0x0,0x80,0x80,0x_m128istatel=_mm_setr_epi8(Oxf,Ox80,0x80,0x80,Oxf,_m128istate2=_mm_setr_epi8(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论