关于memcpy的优化问题

ggknight 2006-01-05 02:47:02
项目里有很多memcpy操作,用sse指令改写
mov eax, src
mov edx, dest
mov xmm0, [eax]
mov xmm1, [eax+16]
mov [edx],xmm0
mov [edx+16], xmm1

用vtune测试,有些地方变快了,但有些地方却慢了很多,疑惑中........
...全文
174 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
BadEnglish 2006-01-07
  • 打赏
  • 举报
回复
用movdqa如果没对齐就会非法操作的。
不过memcpy不是这样优化的,值得考虑的因素主要是和CPU缓存管理有关的问题,INTEL有资料专门讲这个问题。
ggknight 2006-01-06
  • 打赏
  • 举报
回复
上面写错了,movaps xmm0,[eax]
已经将内存16对齐了
在该段汇编代码中并没有用到mmx,应该不存在切换问题吧
蒋晟 2006-01-06
  • 打赏
  • 举报
回复
在有些CPU中从SSE切换到MMX的时候很慢
  • 打赏
  • 举报
回复
就用movesq就好了,这种东西还能优化到什么程度。
luozn 2006-01-06
  • 打赏
  • 举报
回复
mov eax, src
mov edx, dest
movaps xmm0, [eax]
movaps xmm1, [eax+16]
movaps [edx],xmm0
movaps [edx+16], xmm1
luozn 2006-01-06
  • 打赏
  • 举报
回复
mov eax, src
mov edx, dest
movaps xmm0, [eax]
movaps xmm1, [eax+16]
mov [edx],xmm0
mov [edx+16], xmm1

看看反汇编成啥了。有问题吧,即使正确,不满才怪。
zara 2006-01-05
  • 打赏
  • 举报
回复
是由于内存地址对齐的因素造成的?

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧