【随写笔记】循环展开和cache

由数组移位引发的思考:

 

看代码里有用数组实现FIFO的移位,使用了for循环前向移位

 

本来猜测是否使用memcpy类的函数会更快一些。后来发现memcpy也不是直接对内存块进行操作。

cpu的快速执行非常依赖于cache,如果cache不命中,cpu会浪费一些时钟周期在等待内存上。(cpu缓存和内存的读取速度要快一个数量级)。小段循环结构容易命中cache。

 

所以有人开发xmemcpy,https://aigo.iteye.com/blog/2299702

 

深入浅出 cache策略

 

在多核CPU中每个核拥有独立的L1和L2两级cache,L1一般把指令和数据分布存放。为了保证所有的核看到正确的内存数据,一个核在写入L1后,CPU会执行Cache一致性算法把对应的cacheline同步到其他核(us级别),相比之下,写入L1cache只需要ns级别。当很多线程频繁修改某字段的啥时候,这个字段所在的cacheline就不停被同步到其他核,这种现象叫做cache bouncing。三级cache由所有的核共有。

内存数据加载到cache后,要写回内存有五种策略:写通,写回,写一次,wc,uc(内存中一块无法cache的区域)

 

 

 

 

__pure 函数优化,对于没有的读/写全局变量的函数,进行优化。(有点像)???但是好像用处并不大

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值