CPU高速缓存行

简介:

CPU 为了更快的执行代码。于是当从内存中读取数据时,并不是只读自己想要的部分。而是读取足够的字节来填入高速缓存行。根据不同的 CPU ,高速缓存行大小不同。如 X86  32BYTES ,而 ALPHA  64BYTES 。并且始终在第 32 个字节或第 64 个字节处对齐。这样,当 CPU 访问相邻的数据时,就不必每次都从内存中读取,提高了速度。 因为访问内存要比访问高速缓存用的时间多得多。

 

但是,多核发达的年代。情况就不能那么简单了。试想下面这样一个情况。

1、      CPU1 读取了一个字节,以及它和它相邻的字节被读入 CPU1 的高速缓存。

2、      CPU2 做了上面同样的工作。这样 CPU1  CPU2 的高速缓存拥有同样的数据。

3、      CPU1 修改了那个字节,被修改后,那个字节被放回 CPU1 的高速缓存行。但是该信息并没有被写入 RAM 

4、      CPU2 访问该字节,但由于 CPU1 并未将数据写入 RAM ,导致了数据不同步。

 

为了解决这个问题,芯片设计者制定了一个规则。当一个 CPU 修改高速缓存行中的字节时,计算机中的其它CPU 会被通知,它们的高速缓存将视为无效。于是,在上面的情况下, CPU2 发现自己的高速缓存中数据已无效,CPU1 将立即把自己的数据写回 RAM ,然后 CPU2 重新读取该数据。 可以看出,高速缓存行在多处理器上会导致一些不利。

 

从上面的情况可以看出,在设计数据结构的时候,应该尽量将只读数据与读写数据分开,并具尽量将同一时间访问的数据组合在一起。这样 CPU 能一次将需要的数据读入。

 

如:

Struct __a

{

   Int id; // 不易变

   Int factor;// 易变

   Char name[64];// 不易变

   Int value;// 易变

} 

这样的数据结构就很不利。

 X86 下,可以试着修改和调整它

Struct __a

{

   Int id; // 不易变

Char name[64];// 不易变

Char __Align[32 – sizeof(int)+sizeof(name)*sizeof(name[0])%32]

   Int factor;// 易变

   Int value;// 易变

Char __Align2[32 –2* sizeof(int)%32]

 

} 

 

32 – sizeof(int)+sizeof(name)*sizeof(name[0])%32

看起来很不和谐, 32 表示 X86 中,高速缓存行为 32BYTES 大小。 __Align 用于显式对齐。

 

 

作者:码瘾少年·麒麟子 
出处:http://www.cnblogs.com/geniusalex/ 
蛮牛专栏:麒麟子 
简介:09年入行,喜欢游戏和编程,对3D游戏和引擎尤其感兴趣。 
版权声明:本文版权归作者和博客园共有,欢迎转载。转载必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载:http://www.cnblogs.com/geniusalex/archive/2010/07/02/1940483.html

目录
相关文章
|
7月前
|
存储 缓存
百度搜索:蓝易云 ,CPU、内存、缓存的关系详细解释!
总结起来,CPU、内存和缓存之间的关系可以概括为:CPU是计算机的处理器,内存是用于存储数据的设备,缓存则是位于CPU和内存之间的高速存储器,用于提高数据的读取速度。它们共同协作,以提供高效的计算机性能。
79 0
|
12天前
|
存储 缓存
CPU缓存简介
CPU缓存简介
18 1
|
3月前
|
存储 缓存 Linux
CPU高速缓存架构
CPU高速缓存架构
|
5月前
|
缓存 Java 知识图谱
1.什么是CPU多级缓存模型?
1.什么是CPU多级缓存模型?
56 0
1.什么是CPU多级缓存模型?
|
6月前
|
存储 缓存 编译器
从CPU缓存结构到原子操作-2
从CPU缓存结构到原子操作
102 0
|
6月前
|
存储 缓存 算法
从CPU缓存结构到原子操作-1
从CPU缓存结构到原子操作
94 0
|
6月前
|
存储 缓存 Linux
高效利用CPU缓存一致性:优化技巧与策略分析
高效利用CPU缓存一致性:优化技巧与策略分析
|
9月前
|
消息中间件 存储 缓存
计算机操作系统学习笔记(3)——CPU缓存一致性
计算机操作系统学习笔记(3)——CPU缓存一致性
159 0
|
10月前
|
缓存
CPU缓存一致性协议动态表示
CPU缓存一致性协议动态表示
58 0
|
10月前
|
存储 缓存 数据可视化
CPU缓存读写以及一致性问题,你大学课堂睡过去的现在再温习下,绝对受益颇多
CPU缓存读写以及一致性问题,你大学课堂睡过去的现在再温习下,绝对受益颇多