SSE体系结构与编程.ppt_第1页
SSE体系结构与编程.ppt_第2页
SSE体系结构与编程.ppt_第3页
SSE体系结构与编程.ppt_第4页
SSE体系结构与编程.ppt_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

SSE编程,华南理工大学 陈虎 博士 ,什么是SIMD,SIMD(Single Instruction Multiple Data): 单指令流多数据流) 用一个控制器对一组数据(又称“数据向量”)中的每一个分别执行相同的操作来实现空间上的并行性 典型实例: Intel的MMX或SSE AMD的3D Now!,Intel的SSE技术,SSE指令集出现在Pentium III处理器中 包括了70条指令,其中50条SIMD浮点运算指令、12条MMX 整数运算增强指令、8条内存连续数据块传输指令。 SSE2指令集: 使用了144个新增指令 从64位扩展到了128 位 提供双精度操作支持,Intel的SSE技术,SSE3指令集 增加13条指令 超线程性能增强指令可以提升处理器的超线程处理能力 SSE4指令集 共包括16条指令 AVX (Advanced Vector Extensions),预计2010年发布 数据宽度从128位扩展为256位 操作数从两个增加到三个,SSE2的寄存器结构,IA32 Basic Architecture:图10-1,SSE1、2的数据类型,数据总宽度为128位,可以表示成: 四个单精度浮点数 两个双精度浮点数 16个字节整数 8个16位整数 4个32位整数 2个64位整数,SSE指令,SSE指令按功能可以分成四组: 封装和标量单精度浮点指令 64位的SIMD整数指令 状态管理指令 缓存控制,预取和内存命令指令,浮点指令,数据移动指令(标量、成组) 寄存器到存储器 存储器到寄存器 寄存器之间 算术运算指令(标量、成组) 加、减、乘、除、平方根、最大、最小 比较指令(标量、成组) 混洗指令 转换指令 逻辑操作指令,整数指令,算术指令 最大、最小、平均值 数据移动指令 混洗指令 MXCSR管理指令 Cache和存储器控制指令,使用SSE指令的四种方法,编译器的自动矢量化 使用C+类库 使用编译器的内嵌原语(Intrinsics) 嵌入汇编语言,四种方式的比较,VC8.0的内嵌原语(intrinsics),什么内嵌原语: 一条或一组汇编指令 内嵌原语格式 _mm_ :指令类别(add、sub) :指令操作数的类型,内嵌原语的数据类型,p: 紧密,指令对寄存器中的每个元素进行运算 ep: 扩充紧密 s: 标量,只将寄存器中的第一个元素参与运算,其他说明数据类型的关键字有: s 单精度浮点数 d 双精度浮点数 i128 带符号128位整型 i64 带符号64位整型 u64 无符号64位整型 i32 带符号32位整型 u32 无符号32位整型 i8 带符号8位整型 u8 无符号8位整型,内嵌原语的类别,矩阵变换 读写控制寄存器 混洗 Cache控制 数据整型操作 存储操作,置位运算 读取运算 转换运算 比较操作 逻辑运算 算术运算,矩阵变换 例:_MM_TRANSPOSE4_PS(row0, row1, row2, row3) 作用:转置一个44的单精度或双精度元素矩阵,混洗操作 例:_MM_SHUFFLE(z, y, x, w) (z6) | (y4) | (x2) | w 说明: 从第一个操作数中选取两个数,从第二个操作数中选取两个数,形成一个结果字,支持Cache控制 _mm_prefetch:预取稍后运行需要的数据 _mm_stream_pi:把指定位置的数据存储到指定的地址,而不替换cache 整型原语 _mm_extract_pi16: 从4个字中提取一个字 _mm_insert_pi16: 插入一个字 _mm_max_pi16: 计算出最大值 _mm_min_pi16: 计算最小值 读写控制寄存器 _MM_SET_EXCEPTION_STATE:设置异常状态寄存器 _MM_GET_EXCEPTION_STATE:读取异常状态寄存器 可以操作寄存器还包括:EXCEPTION_MASK(异常屏蔽寄存器)、ROUNDING_MODE(舍入模式寄存器)、FLUSH_ZERO_MODE(清0模式寄存器),存储操作 _mm_store_ss: 存储低位值 _mm_store_ps: 存储4个值,位址对齐 _mm_storer_ps: 存储4个值,顺序相反 读取运算 _mm_load_ss: 读取低值,同时清空其他3个高值 _mm_loadr_ps: 以相反的顺序读入4个值 设置运算 _mm_set_ss: 设置低位为1,同时清空其余三个高位值 _mm_set1_ps: 设置所有4个值为同一值 _mm_setzero_ps: 把所有4个值清零,转换运算 _mm_cvtss_si32:转换单精度浮点数为32位整数 _mm_cvttss_si32:转换单精度浮点数为32位整数(带截断操作) _mm_cvtpi16_ps :转换16位有符号整数为单精度浮点数 比较原语 _mm_cmpeq_ss:是否相等 _mm_cmplt_ps:是否小于 _mm_cmpgt_ps:是否大于 逻辑运算 _mm_and_ps:与运算 _mm_or_ps:或运算 算术运算 _mm_add_ss:加法 _mm_sub_ps:减法 _mm_mul_ps:乘法,SSE程序实例,双精度三维变换原理,SSE程序实例,两种不同的数据结构 数组-结构(the array-of-structures format(AoS) ) 结构-数组(the structures-of-arrays data format(SoA) ),数组-结构(AoS ),结构-数组(SoA),SSE程序实例,for (int i = 0; i dm00); / 取出y(i)和y(i+1) ty = _mm_load_pd(vertex.y + i); mx1 = _mm_mul_pd(ty, WM-dm01); / 取出z(i)和z(i+1) tz = _mm_load_pd(vertex.z + i); mx2 = _mm_mul_pd(tz, WM-dm02); /x(i)=x(i)*m00+y(i)*m01+z(i)*m02+m03 /x(i+1)=x(i+1)*m00+y(i+1)*m01+z(i+1)*m02+m03 mx0 = _mm_add_pd(mx0, _mm_add_pd(mx1, _mm_add_pd(mx2, WM-dm03); /写入结果x(i),x(i+1) _mm_store_pd(vertex.x + i, mx0);,/ 计算y(i)和y(i+1) mx0 = _mm_mul_pd(tx, WM-dm10); /tx, ty, tz已经事先读入 mx1 = _mm_mul_pd(ty, WM-dm11); mx2 = _mm_mul_pd(tz, WM-dm12); mx0 = _mm_add_pd(mx0, _mm_add_pd(mx1, _mm_add_pd(mx2, WM-dm13); _mm_store_pd(vertex.y + i, mx0); / 计算z(i)和z(i+1) mx0 = _mm_mul_pd(tx, WM-dm20); mx1 = _mm_mul_pd(ty, WM-dm21); mx2 = _mm_mul_pd(tz, WM-dm22); mx0 = _mm_add_pd(mx0, _mm_add_pd(mx1, _mm_add_pd(mx2, WM-dm23); _mm_store_pd(vertex.z + i, mx0); /计算z(i)和z(i+1) mx0 = _mm_mul_pd(tx, WM-dm30); mx1 = _mm_mul_pd(ty, WM-dm31); mx2 = _mm_mul_pd(tz, WM-dm32); mx0 = _mm_add_pd(mx0, _mm_add_pd(mx1, _mm_add_pd(mx2, WM-dm33); _mm_store

温馨提示

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

评论

0/150

提交评论