SSE体系结构与编程探索.ppt

  1. 1、本文档共29页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
本课程得到 Intel?大学合作计划支持 课程网站: /multicore/index.html SSE编程 华南理工大学 陈虎 博士 tommychen74@ 什么是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) 嵌入汇编语言 四种方式的比较 自动矢量化 C++类库 内嵌原语 汇编语言 代码可读性 好 好 中等 差 效率 编译器不一定能识别 无法使用所有指令 可以使用所有指令,不能直接访问数据寄存器 直接控制所有指令和寄存器 兼容性 好 好 差 差 VC8.0的内嵌原语(intrinsics) 什么内嵌原语: 一条或一组汇编指令 内嵌原语格式 _mm_opcode_suffix opcode:指令类别(add、sub) suffix:指令操作数的类型 内嵌原语的数据类型 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) 作用:转置一个4×4的单精度或双精度元素矩阵 混洗操作 例:_MM_SHUFFLE(z, y, x, w) (z6) | (y4) | (x2) | w 说明: 从第一个操作数中选取两个数,从第二个操作数中选取两个数,形成一个结果字 Shuffle指令 支持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模式

文档评论(0)

***** + 关注
实名认证
内容提供者

我是自由职业者,从事文档的创作工作。

1亿VIP精品文档

相关文档