缓存行 伪共享

当我们要把内存里的数据放进CPU的时候
内存不会只把一个数据放进CPU  而是会将该数据附近?的数据 一批读到CPU
这一批数据叫cache line CPU读取单位为 缓存行 大部分缓存行为64字节

 

 

那么这里会产生一个问题
如果x 和 y 在同一个缓存行里 内存64字节
假如cpu1 只需要x 但是x和y会被同时读进cpu1缓存中
cpu2 只需要y 但是x和y也会同时被镀金cpu2的缓存中
如果CPU1修改了x 但是会通知其他cpu “我整个缓存行都改过了” 已经是Invalid
那么CPU2就会重新把缓存行读取一遍  然后再修改y
如果循环下去 问题就会放大
产生互相影响的伪共享问题

缓存行对其可以提升效率

 

 

这里的cursor  无论是和前面p7 对齐还是个后面p8对齐 能保证他们位于同一缓存行  不和其他数据放在同一缓存行中

这里我们将 x 强制变成缓存行  要么属于p1-p7那一行缓存行
要么属于p9-p15那一缓存行
那么 是要位于同一缓存行  效率会变快

 

 

 

 

 

 

posted @ 2022-04-22 23:23  花心大萝卜li  阅读(76)  评论(0)    收藏  举报