欢迎光临IT007!请 [登录][注册]

大秀场

SIMD指令在MP3编码中的作用

[复制链接]

主题

好友

1万

积分

打工小熊

该用户从未签到

会员网龄
17.0年
分享到:
发表于 2002-5-14 07:15 |显示全部楼层
马上注册,结交更多好友,享用更多功能,让你轻松玩转IT007 - 品质实惠生活。 立即注册  已有账号?点击登录   新浪微博登陆 关闭
前言:

在x86的多媒体指令中MMX,3D Now!,SSE等都被一般人看起来那么的相似,而且很多人还认为这种指令到底有没有存在的必要。但是,几乎所有的软件厂商都开始支持最新的指令集,虽然支持的方式不同,但至少证明一点多媒体指令集在目前的处理器发展中是必须的。不过众多指令集中,真正被最广泛支持的指令集恐怕不多,但其中也不乏叫好但不叫座指令集。在K6-2推出的时候,AMD为了让自己的处理器今后拥有完全独立的设计,因此开始开发出全新的3D Now!指令,而这个时候Intel全新的SSE指令集还没有开发出来。在当时这可以算得上是一个非常不错的多媒体指令集了,不过由于缺少厂商的支持,3D Now!并没有获得多大的成功,从而也让Intel在Pentium III处理器中的SSE指令很快就得到了大家的认可。因此,AMD看到了3D Now!的不足,推出了增强型3D Now!,不过虽然技术上不错,不过由于当时,AMD还是非主流的CPU厂商,因此这种全新的指令集也没有获得更多的支持。

当然AMD看到自己的处理器因为种种原因而无法在很多应用中获得更高的效率,开始在Athlon XP处理器中增加对SSE指令集的支持,从而弥补在一些支持SSE指令集应用中不足,而在即将推出的Hammer处理器中又将增加对SSE 2指令集的支持。其实,这些显现很容易告诉我们,现在的处理器你光光有一个好的架构还不行,在软件应用中多媒体指令集也是不可忽视的地方。

但是,对于普通用户来说,似乎这种多媒体指令集的真正作用还没有看到,今天我们就一起来看看多媒体指令集可以给我们带来的好处。从目前来MP3编码(也就是MP3压缩)是普通用户平时经常进行的处理了,而这项应用却可以很好的来体现多媒体指令集从中所起到的作用。

测试:

MP3编码的时候我们选择了GOGO codec作为核心算法,这款编码软件针对MMX、3D Now!、增强型3D Now!、SSE 和多处理器优化过。并且在编码的时候手动打开或者关闭对多媒体指令集的优化,因此可以方便的检测出不同处理器在使用不同多媒体指令时可以达到的性能,这显然是我们最需要的,并且软件也会显示压缩时间以及速度(1x  =150  KBytes/s )等基本信息,我们使用的GOGO版本是2.39c。

测试的时候,首先关闭所有指令集进行测试,然后仅打开MMX指令集进行测试,由于目前基本上所有的处理器都支持MMX多媒体指令集,所以今后的测试MMX指令集总是默认打开的。第三次进行的是3D Now!指令集+MMX指令集的测试,第四次则是打开增强型3D Now!/MMX2指令集。第五次进行的是SSE指令测试。

另外,测试的时候我们对比了其它的写MP3编码软件,看看同GOGO相比谁的效率更高一些。对比的编码软件选择了最新的LAME 3.89,LAME虽然有不错的速度和质量但,但是没有真正对一些特定的多媒体指令集做过优化(仅仅支持SSE和MMX)并且也没有办法设置是否打开多媒体指令集的支持。不过LAME在默认状态下的速度和质量确实好好于GOGO。

压缩的音频文件则是使用EAC抓取一共751MB的WAV文件,然后使用128/320 Kbit/s两种压缩比进行压缩,所有压缩测试进行3次,然后取平均值。压缩时间和速度的比值取小数点后的一位。

测试配置方面,处理器是AMD  Athlon  XP 1800+,主板则是Soltek  SL-75DRV(KT266),256MB PC2100  DDR  SDRAM内存,硬盘则是Fujitsu  MPG3204AH-E硬盘(20GB,UDMA100),操作系统则是Windows 2000专业版。

测试结果:

128  Kbit/s速率编码测试:

编码软件 模式 耗时:分 速度:X  
GOGO  不进行优化  4:00   18.6  
MMX   3:50   19.4  
MMX+3D Now!  2:46   26.9  
MMX+增强型3D Now!/MMX2   2:36   28.7  
MMX+SSE   2:40   27.9  
进行所有的优化  2:36   28.7  
Lame 速度模式  2:12   
普通模式  3:30   
高品质模式  7:39   

很有意思的是,在MP3编码模式下,仅使用MMX指令集显然并不能达到什么好的性能提高,因为MMX指令集牵涉到的全部都是整数指令,对于象MP3压缩这样的浮点密集式运算中并不能起到多大的帮助。而3D Now!同增强型3D Now!之间的区别也不是很大。另外增强型3D Now!是所有指令集中效率最高的,并超过了Intel的SSE指令集。

LAME的测试比较有意思,在最快模式下速度比较快,但这是以损耗质量为前提的,在普通模式下LAME的效率普遍要比GOGO加3D Now!或者SSE指令集来得慢,而这个时候LAME同GOGO编码出来的MP3质量是差不多的,但是从效率来看显然是GOGO来得更高,在为所有指令集优化的前提下GOGO要比LAME提前50秒完成编码。所以这很显然就打破了用户普遍认为LAME的压缩速度更快的思想。

另外,测试再次证明了,在进行浮点运算的时候如果不启用SIMD指令的话,所有处理工作都会压在处理器的浮点单元上,即使连Athlon  XP 1800+这样快速的处理器也不能达到很高的效率,但是如果启用SIMD指令集的话,系统可以在不增加任何配置的情况下大大提高浮点处理能力,也就是说我们在进行类似的浮点处理的时候启用多媒体指令集显然可以提高更多的效率。

320Kbit/s速率编码测试:

编码软件 模式 耗时:分 速度:X  
GOGO  不进行优化  2:51   26.1  
MMX   2:41   27.8  
MMX+3D Now!  1:58   38.0  
MMX+增强型3D Now!/MMX2   1:51   40:1  
MMX+SSE   1:54   39.4  
进行所有的优化  1:51   40.1  
Lame 速度模式  2:24   
普通模式  2:29   
高品质模式  4:34   

由于使用320Kbit/s这样更低的压缩比,显然完成MP3编码的速度就更快了当然从测试的结果来看同128Kbit/s下的情况是类似增强型3D Now!的效率显然是最高的,而其后就是Intel的SSE指令集,但是这里需要指出的是目前仅支持3D Now!指令集的处理器已经很少见了(K6-2/III),因此AMD的主流处理器都支持增强型3D Now!技术,所以说目前在这类应用中AMD的处理器更占优势。

结论:

当然,测试的目的并不是研究哪种多媒体指令集的效率更高,而是研究多媒体指令集在当前应用中的重要性,在使用支持多媒体指令集的情况下,如果软件支持我们可以得到事半功倍的效果。同时测试也反应出多媒体指令集对软件优化的必要性,即使处理器支持好的多媒体指令集,如果软件不支持也没有办法提高系统的性能。是 non-intergral  SIMD 指令被要求,软件优化也是必要的。最后给出一个并不是很重要的结论,但确可以让Intel处理器的用户感到一丝欣慰,那就是SSE指令集的效率确实要比3D Now!来得高,从而让很多人认为SSE指令集效率并不高的论调所破灭。

当然今天的测试还并不是很完善的,因为由于软件的限制,目前还无法把Intel更强大的SSE 2指令集的效率体现出来,这是本文的一个不小的遗憾。

   


 

回复

使用道具 举报

主题

好友

105

积分

托儿所小熊

该用户从未签到

会员网龄
16.7年
发表于 2002-5-14 07:59 |显示全部楼层
回复

使用道具 举报

使用高级模式(可批量传图、插入视频等)快速回复

您需要登录后才可以回帖 登录 | 注 册 新浪微博登陆

  Ctrl + Enter 快速发布 

发帖时请遵守我国法律,网站会将有关你发帖内容、时间以及发帖IP地址等记录保留,只要接到合法请求,即会将信息提供给有关政府机构。