POPPUR爱换

 找回密码
 注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

搜索
楼主: Edison
打印 上一主题 下一主题

PhysX 被踢爆在 cpu 代码上采用 x87。更新:NVIDIA 否认劣化/ Havok 同样以 x87 为主

[复制链接]
221#
发表于 2010-7-10 19:20 | 只看该作者
现测的。icc优化版12秒,未优化版40秒
yokuz3 发表于 2010-7-10 19:02


asm used?貌似这是两个版本的源码编译出来的吧。。。上面那个是作者在写代码的时候自己处理打包并写成汇编形式的,需要花很多心机去优化(真正的SSE优化)。。。与普通C代码版本相比快3倍多这个我相信。。。

如果都是用普通C代码版本,ICC相比VS的优势可以看看这里测试:http://topic.csdn.net/u/20080702 ... 5-7af75b186343.html

ICC优势只有23%。
回复 支持 反对

使用道具 举报

头像被屏蔽
222#
发表于 2010-7-10 19:43 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

223#
发表于 2010-7-10 20:05 | 只看该作者
谁吃多了没事才会去重写lame的代码。放出icc编译版的人也说了,他只是用icc编译优化而已。你贴那个23 ...
yokuz3 发表于 2010-7-10 19:32


呵呵,吃多了没事的就是作者本人。
建议看看lame源码中.lamelibmp3lamevector中的几个文件,作者是使用SSE intrinsics重写了fft等几个函数的。当CPU支持SSE时,程序会选择SSE intrinsics版本的函数取代原有的C代码版本函数,并且在界面中输出“SSE (ASM Used)”等字样。

要注意的是,SSE intrinsics的那几个函数是去年才加上的。旧版本的用C代码去实现,当然比新版本慢3倍。光靠ICC的编译优化,是达不到这个境界的。
回复 支持 反对

使用道具 举报

224#
发表于 2010-7-10 20:26 | 只看该作者
请你先看清楚截图,是同版本号比较的, 不存在你说的新旧版本函数区别。
yokuz3 发表于 2010-7-10 20:12


那就是编译设置等原因导致没有使用SSE intrinsics那几个文件。
你也看清楚截图,快3倍的那个是显示SSE (ASM used)的,慢的那个没有显示。
在看看lame.c的代码:

#ifdef HAVE_NASM
         if (gfc->CPU_features.AMD_3DNow) {
             fft_asm_used = 1;
         }
         else if (gfc->CPU_features.SSE) {
             fft_asm_used = 2;
         }
         else
#endif

...

#if defined(HAVE_XMMINTRIN_H)
             MSGF(gfc, ", SSE (ASM used)");
#else
             if (fft_asm_used == 2) {
                 MSGF(gfc, ", SSE (ASM used)");
             }
             else {
                 MSGF(gfc, ", SSE");
             }
#endif

也就是说只有当HAVE_XMMINTRIN_H或者gfc->CPU_features.SSE表明支持SSE才会有"ASM used"的显示

再看看fft.c:

#ifdef HAVE_NASM
     if (gfc->CPU_features.AMD_3DNow) {
         gfc->fft_fht = fht_3DN;
     }
     else if (gfc->CPU_features.SSE) {
         gfc->fft_fht = fht_SSE;
     }
     else {
         gfc->fft_fht = fht;
     }
#else
#ifdef HAVE_XMMINTRIN_H
#ifdef MIN_ARCH_SSE
     gfc->fft_fht = fht_SSE2;
#endif
#endif

也就是说同样的条件下,才会使用SSE intrinsics版本的函数,否则就是普通C代码版本。

那结论很明显了,慢的那个版本没有显示"ASM used"字样,根本就是普通C代码版本。

PS:我06年开始用lame的代码。
回复 支持 反对

使用道具 举报

225#
发表于 2010-7-10 20:39 | 只看该作者
回复  hpctech

这只是你的推测了
yokuz3 发表于 2010-7-10 20:35


并非推测。我100%肯定,这完全是两个版本的函数而非编译器差异造成。我是根据lame源代码来推断的,而lame本身也是开源,有证有据。
回复 支持 反对

使用道具 举报

226#
发表于 2010-7-10 20:46 | 只看该作者
代码的部分,我并不懂

只能引述编译者的原话“前幾日弄到個Intel C++ compilers 11的授權,于是試著編 ...
yokuz3 发表于 2010-7-10 20:43


那就是他用VS2008编译的时候由于种种原因导致程序使用了普通C版本的函数,并非编译器本身造成的差异。
回复 支持 反对

使用道具 举报

westlee 该用户已被删除
227#
发表于 2010-7-11 10:36 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

228#
发表于 2010-7-11 11:30 | 只看该作者
回复 276# westlee

你应该单独发个贴,才能引起轰动嘛
回复 支持 反对

使用道具 举报

头像被屏蔽
229#
发表于 2010-7-12 12:12 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

230#
发表于 2012-4-4 15:03 来自手机 | 只看该作者
这文章还真应该顶回来
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

广告投放或合作|网站地图|处罚通告|

GMT+8, 2025-8-19 06:25

Powered by Discuz! X3.4

© 2001-2017 POPPUR.

快速回复 返回顶部 返回列表