存储层次结构、cache、编译
2010-09-29 19:35
260 查看
先给出计算机存储层次结构一组数据:
计算机使用TLB,L1
cache,L2 cache,虚存把虚拟地址空间映射为物理地址空间。接下来,我们看看计算机是如何做到的:
首先,把64位的虚拟地址逻辑上分成虚拟页号和页內偏移量。前者发送到TLB,转换为物理地址;后者的高几位送到L1
cache中,作为查询索引。如果TLB命中,物理页号会发送到L1
cache中作为标签来检测是否和cache中标签匹配。如果匹配,L1 cache命中。然后页內偏移量的后几位作为cache中的偏移量,选择cache中对应的内容,返回给处理器。
如果L1 cache缺失,内存地址会继续用来查找L2
cache,查找L2 cache使用虚拟页号的后几位和页內偏移量组成的地址。该地址会被分成L2
cache标签、L2 cache索引和L2
cache偏移量三部分,如果L2 cache标签,L2
cache索引在L2 cache中存在,就使用L2
cache偏移量直接取对应内容返回给处理器。
如果L1和L2
cache都没有命中,则接着访问内存。因为实际CPU中,访存的延时比cache访问延时大很多,而cache的命中率一般都很高。在90%-95%左右。所以在访存之前,加点cache不算什么。
现在的通用微处理,和cache有关的部分已经占据了芯片面积的50%左右,Cache功耗的也几乎占据了整个CPU功耗的一半。多核的微处理器,甚至增加了L3
cache。下图就是IBM的Power7处理器的版图.L1,L2,L3
cache的面积几乎占了芯片面积的60%。
IBM
Power 7处理器的芯片版图
虽然cache在X86系列处理器中出现的初衷是减小访存延时,对程序员不可见。但若程序的局部性不好,cache 缺失率高,那性能的下降将会非常明显。所以高性能的编译器开发者都会和cache做一翻斗争。诸多的循环优化,结构体优化几乎都是为了增加访存局部性。
《See
MIPS Run Linux》上对cache和X86有些不同,X86的cache为了保持兼容性,所以推崇在对程序员屏蔽的情况下提高性能。而MIPS的商用处理器中,没有cache就不能称之为RISC。而cache的设计初衷是为了提高访存速度而非帮助系统程序员,所以没必要非得不可见。所以MIPS的cache可以作为SPM,一种可控的cache,你可以把一部分内容锁定到cache中,强制它不会被替换出去。比如当程序中有数组时,当然这是极端的优化方法。
参考:
§ Computer
Architecture: a quantitative approach 4ed. John L. Hennessy, David
A. Patterson.
§ See
MIPS Run Linux 2ed. Dominic Sweetman
PS:上图来自张晓东教授在中国科大龙星课程的ppt。
存储层级 | 1 | 2 | 3 | 4 |
名称 | 寄存器 | 高速缓存(cache) | 主存 | 硬盘 |
一般容量 | <1KB | <16M | <512GB | >1TB |
实现技术 | CMOS, | CMOS/SRAM | CMOS/DRAM | 磁盘 |
访问时间(ns) | 0.25-0.5 | 5-25 | 50-250 | 5000000 |
带宽 | 50000-500000 | 5000-20000 | 2500-10000 | 50-500 |
控制方式 | 编译器 | 硬件 | 操作系统 | 操作系统 |
备份方式 | 高速缓存 | 主存 | 硬盘 | 光盘/磁带 |
cache,L2 cache,虚存把虚拟地址空间映射为物理地址空间。接下来,我们看看计算机是如何做到的:
首先,把64位的虚拟地址逻辑上分成虚拟页号和页內偏移量。前者发送到TLB,转换为物理地址;后者的高几位送到L1
cache中,作为查询索引。如果TLB命中,物理页号会发送到L1
cache中作为标签来检测是否和cache中标签匹配。如果匹配,L1 cache命中。然后页內偏移量的后几位作为cache中的偏移量,选择cache中对应的内容,返回给处理器。
如果L1 cache缺失,内存地址会继续用来查找L2
cache,查找L2 cache使用虚拟页号的后几位和页內偏移量组成的地址。该地址会被分成L2
cache标签、L2 cache索引和L2
cache偏移量三部分,如果L2 cache标签,L2
cache索引在L2 cache中存在,就使用L2
cache偏移量直接取对应内容返回给处理器。
如果L1和L2
cache都没有命中,则接着访问内存。因为实际CPU中,访存的延时比cache访问延时大很多,而cache的命中率一般都很高。在90%-95%左右。所以在访存之前,加点cache不算什么。
现在的通用微处理,和cache有关的部分已经占据了芯片面积的50%左右,Cache功耗的也几乎占据了整个CPU功耗的一半。多核的微处理器,甚至增加了L3
cache。下图就是IBM的Power7处理器的版图.L1,L2,L3
cache的面积几乎占了芯片面积的60%。
IBM
Power 7处理器的芯片版图
虽然cache在X86系列处理器中出现的初衷是减小访存延时,对程序员不可见。但若程序的局部性不好,cache 缺失率高,那性能的下降将会非常明显。所以高性能的编译器开发者都会和cache做一翻斗争。诸多的循环优化,结构体优化几乎都是为了增加访存局部性。
《See
MIPS Run Linux》上对cache和X86有些不同,X86的cache为了保持兼容性,所以推崇在对程序员屏蔽的情况下提高性能。而MIPS的商用处理器中,没有cache就不能称之为RISC。而cache的设计初衷是为了提高访存速度而非帮助系统程序员,所以没必要非得不可见。所以MIPS的cache可以作为SPM,一种可控的cache,你可以把一部分内容锁定到cache中,强制它不会被替换出去。比如当程序中有数组时,当然这是极端的优化方法。
参考:
§ Computer
Architecture: a quantitative approach 4ed. John L. Hennessy, David
A. Patterson.
§ See
MIPS Run Linux 2ed. Dominic Sweetman
PS:上图来自张晓东教授在中国科大龙星课程的ppt。
相关文章推荐
- 计算机系统的层次存储结构详解
- 深入理解计算机系统 1.6 存储设备形成层次结构
- 数据结构与算 5:C++ 顺序/链式存储,栈 模板类实现,编译模板类问题解决
- 4.1 Cache层次结构的引入
- 编译原理结构框架9运行时的存储组织
- 数据结构与算法简记:按层次顺序遍历和存储二叉树
- Linux文件系统详解(文件系统层次、分类、存储结构、存储介质、文件节点inode)
- 计算机组成第七周:存储层次结构
- 计算机系统层次存储结构
- 计算机中层次结构的存储设备
- 浅谈大数据背景下的计算机体系结构存储层次结构研究
- 深入shared pool 存储结构 library cache dictionary cache 解析SQL语句 硬解析 软解析
- 存储过程不能编译(Library cache pin)问题的解决
- 浅谈大数据背景下的计算机体系结构存储层次结构研究
- 用于层次结构数据库批量导入(Insert)的存储过程
- SQL数据库 高效存储层次结构数据
- 主存-辅存结构存储体系(页式虚拟存储器)与Cache-主存结构存储体系的不同
- 存储系统的层次结构
- 系统级程序设计笔记(unit6——存储设备层次结构、高速缓存、虚拟内存)
- 在多级存储体系中,“Cache-主存”结构的作用是解决( )的题目。----腾讯2014研发笔试卷