游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2485|回复: 6

循环中,我只把乘法相关的换成MMX,速度慢了N倍啊!?

[复制链接]

3

主题

101

帖子

101

积分

注册会员

Rank: 2

积分
101
发表于 2009-8-31 14:35:00 | 显示全部楼层 |阅读模式
请前辈指教!

如:

_mm_empty();

while()
{
  if()
  else if()
  else
  {
     //没有帖源码, 源码看起来太???
     _mm_unpacklo();
     _mm_mullo();
     _mm_packbyte();
  }
}

_mm_empty();

为什么会变慢呢....

3

主题

101

帖子

101

积分

注册会员

Rank: 2

积分
101
 楼主| 发表于 2009-9-1 18:03:00 | 显示全部楼层

Re:循环中,我只把乘法相关的换成MMX,速度慢了N倍啊!?

请前辈们指导一下呀,
是数据组织的问题, 还是其它的什么问题呀.

声明:程序结果没有错!!,就是变慢了..

4

主题

69

帖子

205

积分

中级会员

Rank: 3Rank: 3

积分
205
发表于 2009-9-2 17:57:00 | 显示全部楼层

Re:循环中,我只把乘法相关的换成MMX,速度慢了N倍啊!?

每次使用MMX需要EMMS清除下状态的,而MMX好像会影响CPU处理浮点运算的处理,所以在3D游戏中需要大量的浮点运算时使用MMX反而效果不佳,CPU忙着在切换FPU的状态。

最好使用SSE2这类不会影响FPU的指令效果才会好很多

2

主题

50

帖子

50

积分

注册会员

Rank: 2

积分
50
发表于 2009-9-2 21:35:00 | 显示全部楼层

Re: Re:循环中,我只把乘法相关的换成MMX,速度慢了N倍啊!?

luoqi: Re:循环中,我只把乘法相关的换成MMX,速度慢了N倍啊!?

请前辈们指导一下呀,
是数据组织的问题, 还是其它的什么问题呀.

声明:程序结果没有错!!,就是变慢了..


直接写汇编试试会不会慢,应该就算用mmx一次只算1个乘法速度都会快
循环完毕之后再调用emms,不要循环一次调用一下

3

主题

101

帖子

101

积分

注册会员

Rank: 2

积分
101
 楼主| 发表于 2009-9-3 12:29:00 | 显示全部楼层

Re:循环中,我只把乘法相关的换成MMX,速度慢了N倍啊!?

根据上面的代码,emms我只用了两次.
我用SSE2也试了,结果还是一样.
全部用MMX,我也试了,也排除了,向前条件分支,,结果慢一点点,,,郁闷中...

4

主题

42

帖子

96

积分

注册会员

Rank: 2

积分
96
发表于 2009-9-6 17:49:00 | 显示全部楼层

Re:循环中,我只把乘法相关的换成MMX,速度慢了N倍啊!?



if()
else if()
else
{
  _mm_empty();

  while()
  {
     //没有帖源码, 源码看起来太???
     _mm_unpacklo();
     _mm_mullo();
     _mm_packbyte();
  }

  _mm_empty();
}

3

主题

101

帖子

101

积分

注册会员

Rank: 2

积分
101
 楼主| 发表于 2009-9-7 10:12:00 | 显示全部楼层

Re:循环中,我只把乘法相关的换成MMX,速度慢了N倍啊!?

LS,,逻辑是不能改变的,
LSLS->排除了向前条件分支,就是LS的意思.但不是这么写的.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-20 18:42

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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