岁月流转,往昔空明

C++博客 首页 新随笔 联系 聚合 管理
  118 Posts :: 3 Stories :: 413 Comments :: 0 Trackbacks
昨天在写MatrixMultiply SIMD优化的时候,由于SSE的资料较多,我想都没想就写了一组SSE加速的程序。结果晚上做Profiler的时候,发现SSE算法的速度太慢,结果见下。

进程/线程优先级最高
D3DX为D3DX9.LIB链接
vc71-Release默认优化。
SSE的测试数据是128bit对齐,使用movaps指令读取。
预先预热了缓存
Athlon XP 1800+, 512M, WD800JB

前面的数字是RDTSC测试出来的。

8255127     MatrixMultiply   D3DX
8079411     MatrixMultiply   3DNow
101563037  MatrixMultiply   SSE
250227542  MatrixMultiply   C

423771291  Normalize        SSE
31882680    Normalize        3DNow
51605359    Normalize        D3DX

从以上数据我们可以看出,Matrix的乘法运算中,C的速度是最慢的,sse次之。
但是两者与3DNow相差了一个数量级的性能。接下来的Normalize测试也可以看出这一点。

ps,不要怀疑代码的质量,因为这三段代码的相关代码都经过类比的测试,大致可以认为这里面所有的代码质量是类似的。(最关键的是,不是我写的,哈哈!)

所以结论很简单,就是,如果你要针对不同CPU做优化,最好送佛送到西,每一种指令集都进行优化,还有就是不要想当然的认为优化的结果一定就很好,因为CPU对常规指令的执行进行了充分的优化,再加上乱序执行的方式,对于小函数来说,SIMD的额外成本太高了,最明显的就是DotProduct。

所以希望大家测试以后再决定优化的启用。

posted on 2005-11-28 21:03 空明流转 阅读(1564) 评论(1)  编辑 收藏 引用 所属分类: Tips,Tricks

评论

# re: 希望自己写SIMD优化的朋友注意了。 2006-12-01 15:24 Optimistic
看不懂 好像非常的专业。。。呵呵  回复  更多评论
  


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理