使用制作SSE4电子相册-体系结构大作业.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
使用制作SSE4电子相册-体系结构大作业

高等计算机体系结构实验报告 姓名: 学院:软件学院 班级: 学号: 实验内容 制作电子相册,并使用SSE技术实现图片的淡入淡出。 实验原理 MMX与SSE MMX(MultiMediaExtensions) 多媒体增强指令集实现了单道指令多道数据流(SIMD,single-instruction, multiple-data)的执行模式,是第六代CPU芯片的重要特点。MMX技术是在CPU中加入了特地为视频信号(Video Signal),音频信号(Audio Signal)以及图像处理(Graphical Manipulation)而设计的57条指令,因此,MMX CPU极大地提高了电脑的多媒体(如立体声、视频、三维动画等)处理功能。 MMX采用处理器的80位的浮点寄存器的低64位作为MMX寄存器,一共有8个,从mm0到mm7,因为是“借用”浮点寄存器的低64位所以每次在用完MMX指令后一定要用EMMS指令将寄存器清空,MMX主要是针对整数运算进行优化,一个64位的MMX寄存器可以同时存入8个8位或者4个16位的整数,估计一次性就可以完成8次8位运算或者4次16位运算,要注意的MMX指令不能直接对32位数进行2次运算,但可以把32位拆分成两个16位再进行运算。MMX技术还有一个非常有用的特性是饱和运算,比如两个8位数相加:128+129相加后很明显超过了8位的最大值256,但是进行饱和运算相加的结果将是最大值256,饱和运算将运算结果控制在相应位数的范围内。 SSE(Streaming SIMD Extensions)单指令多数据流式扩展就是扩展了MMX支持的SIMD,它包括70条指令,其中包含单指令多数据浮点计算、以及额外的SIMD整数和高速缓存控制指令。其优势包括:更高分辨率的图像浏览和处理、高质量音频、MPEG2视频、同时MPEG2加解密;语音识别占用更少CPU资源;更高精度和更快响应速度。支持SSE指令集的处理器有八个128位的寄存器XMM0~XMM7。SIMD指令的数据格式分别是: 压缩的64位双精度浮点数*2 压缩8位整形数*16 压缩16位整形数*8 压缩32位整形数*4 压缩64位整形数*2 MMX和SSE都是INTEL开发的基于SIMD(单指令多数据流)的技术。所谓单指令多数据流是指可以用一条指令可以完成多个数据的操作。虽然64位系统已经推出,但是我们大部分都是使用32位系统,所以如果要完成两个128位的相加运算,用普通32位指令很明显要执行4条相加指令,而基于64位的MMX指令只需要执行两次即可完成,更强大的SSE能一次处理128位,故一次就可以完成操作,所以采用MMX及SSE优化能够大幅度提升程序性能。 实验环境 Visual Studio 2012 实验任务 本次实验实现了一个简单的基于MFC的电子相册,利用MMX和SSE多媒体指令加快图像渐变处理。 实验过程 要实现两幅图间的渐变,应该以一种加权平均组合: Result_pixel=A_pixel*fade +B_pixel*(1-fade) 对A,B两图的每个像素点完成以上计算。当fade值从1逐渐变为0时,则产生一系列的图像帧,实现了由A图像淡化到B图像的过程。 本次实验在VisualStudio2012下完成,利用Windows API和Intel SSE指令内联编译完成。 实验代码如下: 1.利用CImage类,先加载文件到内存 // 加载文件到内存 img1=new CImage(); img2=new CImage(); img3=new CImage(); img4=new CImage(); img5=new CImage(); out1=new CImage(); out2=new CImage(); out3=new CImage(); out4=new CImage(); out5=new CImage(); img1-Load(_T(1.bmp)); img2-Load(_T(2.bmp)); img3-Load(_T(3.bmp)); img4-Load(_T(4.bmp)); img5-Load(_T(5.bmp)); out1-Load(_T(1.bmp)); out2-Load(_T(2.bmp)); out3-Load(_T(3.bmp)); out4-Load(_T(4.bmp)); out5-Load(_T(5.bmp)); 2.获得图像基本数据,GetPixelAddress获取制定像素的内存地址,因为每次处理2个像素8个字节,故得循环次数。 3.本次图像渐变分为2

文档评论(0)

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

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

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档