关于Pld预取的问题

ZlZtung 2020-04-26 07:31:22
while(n--)
{
asm ("PLD [%0, #32]"::"r" (src));
*dst++ = *src++;
}

对于这个循环(n=1280*1280 ), 编译时加了-fprefetch-loop-arrays 选项,并未起到网上所说的提速的作用,请问如何才能正确使用预取,预取是否真的提前把内存搬运到cache中,迷惑Ing...
...全文
183 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
预取放在后面
ZlZtung 2020-04-28
  • 打赏
  • 举报
回复
引用 1 楼 早打大打打核战争 的回复:
试试: *dst++ = *src++; asm ("PLDW [%0, #32]"::"r" (dst)); asm ("PLD [%0, #32]"::"r" (src)); #32还是#64取决于cache line大小,一般64字节或者32字节,需要查一下具体处理器手册
pldw不支持,但是pld预取src至少可以减少src的cache冷miss吧。。 难道是执行asm语句的开销大于用预取的节省的时间?
  • 打赏
  • 举报
回复
试试:
*dst++ = *src++;
asm ("PLDW [%0, #32]"::"r" (dst));
asm ("PLD [%0, #32]"::"r" (src));
#32还是#64取决于cache line大小,一般64字节或者32字节,需要查一下具体处理器手册

21,459

社区成员

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

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