- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
您可能关注的文档
最近下载
- 新解读《GB_T 6618-2009硅片厚度和总厚度变化测试方法》最新解读.docx VIP
- 英语专业四级(TEM4)词汇辨析.ppt VIP
- 2016款昂科威使用说明书.pdf VIP
- 三年级上册《体育与健康》全册教案.docx VIP
- YD∕T 2165-2017 通信用模块化交流不间断电源(可复制版).pdf
- 昂科威使用说明!昂科威问题汇总!从小白到高手的一瞬间!.doc VIP
- 2022蓝天消防JB-QB-5SI型火火报警控制器用户手册.docx VIP
- XXX加气站Z职业卫生预评价报告.pdf VIP
- Brunnstrom技术Brunnstrom技术Brunnstrom技术.ppt VIP
- “三全育人”工作实施意见.docx VIP
原创力文档


文档评论(0)