基于SSE指令集的程序设计简介.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于SSE指令集的程序设计简介

基于SSE指令集的程序设计简介 疯狂代码 / ĵ http://DataBase/Article18649.html SSE技术介绍 Intel公司单指令多数据流式扩展(SSEStreaming SIMD Extensions)技术能够有效增强CPU浮点运算能力Visual Studio .NET 2003提供了对SSE指令集编程支持从而允许用户在C代码中不用编写汇编代码就可直接使用SSE指 令功能MSDN中有关SSE技术主题[1]有可能会使不熟悉使用SSE汇编指令编程初学者感到困惑但是在阅读 MSDN有关文档同时参考下Intel软件Software介绍说明书(Intel Software manuals)[2]会使你更清楚地理解使 用SSE指令编程要点 SIMD(single-instruction, multiple-data)是种使用单道指令处理多道数据流CPU执行模式即在个CPU指令执行 周期内用道指令完成处理多个数据操作考虑下下面这个任务:计算个很长浮点型中每个元素平方根实现这个任务 算法可以这样写: for each f in .gif / //对中每个元素 f = sqrt(f) //计算它平方根 为了了解实现细节我们把上面代码这样写: for each f in .gif / { 把f从内存加载到浮点寄存器 计算平方根 再把计算结果从寄存器中取出放入内存 } 具有Intel SSE指令集支持处理器有8个128位寄存器每个寄存器可以存放4个(32位)单精度浮点数SSE同时提供了 个指令集其中指令可以允许把浮点数加载到这些128位寄存器的中这些数就可以在这些寄存器中进行算术逻辑 运算然后把结果放回内存采用SSE技术后算法可以写成下面样子: for each 4 members in .gif / //对中每4个元素 { 把中这4个数加载到个128位SSE寄存器中 在个CPU指令执行周期中完成计算这4个数平方根操作 把所得4个结果取出写入内存 } C编程人员在使用SSE指令编程时不必关心这些128位寄存器你可以使用128位数据类型“__m128”和系列C来 实现这些算术和逻辑操作而决定使用哪个SSE寄存器以及代码优化是C编译器任务当需要对很长浮点数中元素进 行处理时候SSE技术确实是种很高效思路方法 SSE设计详细介绍 包含头文件: 所有SSE指令和__m128数据类型都在xmmrin.h文件中定义: # xmmrin.h 中用到SSE处理器指令是由编译器决定所以它并没有相关.lib库文件 数据分组(Data Alignment) 由SSE指令处理每个浮点数必须把其中需要处理数每16个字节(128位 2进制)分为组个静态( .gif /)可由 __declspec(align(16))关键字声明: __declspec(align(16)) float m_fArray[ARRAY_SIZE]; 动态(dynamic .gif /)可由_aligned_malloc为其分配空间: m_fArray = (float*) _aligned_malloc(ARRAY_SIZE * (float), 16); 由_aligned_malloc分配空间动态可以由_aligned_free释放其占用空间: _aligned_free(m_fArray); __m128 数据类型 该数据类型变量可用做SSE指令操作数它们不能被用户指令直接存取_m128类型变量被自动分配为16个字节字 长 CPU对SSE指令集支持 如果你CPU能够具有了SSE指令集你就可以使用Visual Studio .NET 2003提供对SSE指令集支持C库了你可以查 看MSDN中个Visual C CPUID例子[4]它可以帮你检测你CPU是否支持SSE、MMX指令集或其它CPU功能 编程例子 以下讲解了SSE技术在Visual Studio .NET 2003下应用例子你可以在 /cpp/ssero/SSE_src.zip下载举例压缩包该压缩包中含有两个项目这两个项目是 基于微软基本类库(MFC)建立Visual C.NET项目你也可以按照下面讲解建立这两个项目 SSE

文档评论(0)

xxj1658888 + 关注
实名认证
文档贡献者

教师资格证持证人

该用户很懒,什么也没介绍

领域认证该用户于2024年04月12日上传了教师资格证

1亿VIP精品文档

相关文档