- 浏览: 634582 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (310)
- C&C++ (14)
- Java (52)
- Python (13)
- Web (10)
- Tomcat (2)
- Struts2 (2)
- Spring (3)
- Hibernate (11)
- SWT (1)
- Linux (35)
- WebService (1)
- 工具 (3)
- 数据库 (10)
- 开源项目 (3)
- 搜索技术 (4)
- 链接记录 (3)
- 搜集信息 (12)
- 工作笔记 (16)
- 星星点点 (20)
- 英文片语 (7)
- 读书笔记 (3)
- 自考资料 (3)
- 习题自解 (1)
- 一例一课 (0)
- 运动积累 (1)
- 留档 (0)
- SQL (5)
- JPA (1)
- JSP (3)
- JSON (1)
- Javascript (5)
- Excel (1)
- vbox (3)
- 虚拟机 (1)
- nat (1)
- secureCRT (1)
- centos (1)
- ssh (1)
- ide (1)
- hive (2)
- impala (1)
- ascii (1)
- redis (1)
- seckill (1)
- nginx (2)
- git (0)
- mq (1)
- maven (1)
- java并发包 (1)
- 阅源 (1)
- mybatis (1)
最新评论
-
dotjar:
awk -F "/" '{print $3 ...
@Marked-linux命令使用 cut/sort/uniq -
DEMONU:
直接将要删除的key记下来,遍历完了,在删除
@Marked-Java 遍历Map时 删除元素 -
LeeXiao:
感谢分享
@Marked-Java 遍历Map时 删除元素 -
nicegege:
受益匪浅
mysql char varchar -
nicegege:
受益匪浅
@Maked-mysql使用规范
CPU缓存
多数CPU只有一级缓存和二级缓存,部分还有三级缓存
CPU缓存(Cache Memory)位于CPU与内存之间的临时存储器,它的容量比内存小但交换速度快。在缓存中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可避开内存直接从缓存中调用,从而加快读取速度。
CPU的缓存是提高了CPU对内存反复的数据的处理速度。CPU要运算的数据都是从内存取来的,但是内存速度比CPU慢很多,CPU总是在干等,划
不来,于是在CPU里设计了高速缓存(容量相对内存很小)。事先把CPU可能会用到的数据从内存取到缓存,由于预测机制的作用,在90%以上的情况下,
CPU需要的数据就在缓存里面,很快就可以取到。 这样明显可以大幅提高系统的效率。
而硬盘的缓存是提高CPU与硬盘之间的速度.同 样,内存里面的数据大部分是从硬盘取来的, 内存速度比硬盘要快几十倍,内存等硬盘读盘也等得很烦。
于是在硬盘里面设计了跟内存速度差不多的缓存 事先把内存可能用到的数据从硬盘读到缓存。 然后内存要数据的话,先到硬盘缓存找找,
实在找不到再让硬盘读盘。
高速缓存分为一级缓存(即L1
Cache)和二级缓存(即L2Cache)。CPU在运行时首先从一级缓存读取数据,然后从二级缓存读取数据,然后从内存和虚拟内存读取数据,因此高速
缓存的容量和速度直接影响到CPU的工作性能。
一级缓存都内置在CPU内部并与CPU同速运行,可以有效的提高CPU的运行效率。一级缓存越大,CPU的运行效率越高,但受到CPU内部结构的限制,一
级缓存的容量都很小。
二级缓存对CPU运行效率的影响也很大,现在的二级缓存一般都集成在中,但有分为芯片内部和外部两种,集成在芯片内部的二级缓存与CPU同频率二级缓存
(即全速二级缓存),而集成在芯片外部的二级缓存的运行频率 是CPU的运行频率的一半(即半速二级缓存),因此运行效率较低。
但是一级缓存和二级缓存的大,它究竟有多少好处呢?你得告诉我们经销商,实际上你得用最普通的话跟他讲。所以我们给他们打个比方,说这个就好比你开汽车的
时候,后备箱是整个的一级缓存,假如说扶手里面有一个小箱子,那是你的二级缓存。二级缓存大好在哪里呢?就是你随时开车的时候,随时在里面都可以取东西
了。假如你二级缓存小的话,你还得把车停下来,到后备箱里取东西。
首先我们来简单了解一下一级缓存。目前所有主流处理器大都具有一级缓存和二
级缓存,少数高端处理器还集成了三级缓存。其中,一级缓存可分为一级指令缓存和一级数据缓存。一级指令缓存用于暂时存储并向CPU递送各类运算指令;一级
数据缓存用于暂时存储并向CPU递送运算所需数据,这就是一级缓存的作用(如果大家对上述文字理解困难的话,可参照下图所示)。
那么,二级缓
存的作用又是什么呢?简单地说,二级缓存就是一级缓存的缓冲器:一级缓存制造成本很高因此它的容量有限,二级缓存的作用就是存储那些CPU处理时需要用
到、一级缓存又无法存储的数据。同样道理,三级缓存和内存可以看作是二级缓存的缓冲器,它们的容量递增,但单位制造成本却递减。需要注意的是,无论是二级
缓存、三级缓存还是内存都不能存储处理器操作的原始指令,这些指令只能存储在CPU的一级指令缓存中,而余下的二级缓存、三级缓存和内存仅用于存储CPU
所需数据。
根据工作原理的不同,目前主流处理器所采用的一级数据缓存又可以分为实数据读写缓存和数据代码指令追踪缓存2种,它们分别被AMD和Intel所采用。不同的一级数据缓存设计对于二级缓存容量的需求也各不相同,下面让我们简单了解一下这两种一级数据缓存设计的不同之处。
CPU缓存(Cache
Memory)位于CPU与内存之间的临时存储器,它的容量比内存小但交换速度快。在缓存中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将
访问的,当CPU调用大量数据时,就可避开内存直接从缓存中调用,从而加快读取速度。由此可见,在CPU中加入缓存是一种高效的解决方案,这样整个内存储
器(缓存+内存)就变成了既有缓存的高速度,又有内存的大容量的存储系统了。缓存对CPU的性能影响很大,主要是因为CPU的数据交换顺序和CPU与缓存
间的带宽引起的。
缓存的工作原理是当CPU要读取一个数据时,首先从缓存中查找,如果找到就立即读取并送给CPU处理;如果没有找到,就用相对慢的速度从内存中读取并送给CPU处理,同时把这个数据所在的数据块调入缓存中,可以使得以后对整块数据的读取都从缓存中进行,不必再调用内存。
正
是这样的读取机制使CPU读取缓存的命中率非常高(大多数CPU可达90%左右),也就是说CPU下一次要读取的数据90%都在缓存中,只有大约10%需
要从内存读取。这大大节省了CPU直接读取内存的时间,也使CPU读取数据时基本无需等待。总的来说,CPU读取数据的顺序是先缓存后内存。
最
早先的CPU缓存是个整体的,而且容量很低,英特尔公司从Pentium时代开始把缓存进行了分类。当时集成在CPU内核中的缓存已不足以满足CPU的需
求,而制造工艺上的限制又不能大幅度提高缓存的容量。因此出现了集成在与CPU同一块电路板上或主板上的缓存,此时就把
CPU内核集成的缓存称为一级缓存,而外部的称为二级缓存。一级缓存中还分数据缓存(Data
Cache,D-Cache)和指令缓存(Instruction
Cache,I-Cache)。二者分别用来存放数据和执行这些数据的指令,而且两者可以同时被CPU访问,减少了争用Cache所造成的冲突,提高了处
理器效能。英特尔公司在推出Pentium 4处理器时,用新增的一种一级追踪缓存替代指令缓存,容量为12KμOps,表示能存储12K条微指令。
随
着CPU制造工艺的发展,二级缓存也能轻易的集成在CPU内核中,容量也在逐年提升。现在再用集成在CPU内部与否来定义一、二级缓存,已不确切。而且随
着二级缓存被集成入CPU内核中,以往二级缓存与CPU大差距分频的情况也被改变,此时其以相同于主频的速度工作,可以为CPU提供更高的传输速度。
二级缓存是CPU性能表现的关键之一,在CPU核心不变化的情况下,增加二级缓存容量能使性能大幅度提高。而同一核心的CPU高低端之分往往也是在二级缓存上有差异,由此可见二级缓存对于CPU的重要性。
CPU
在缓存中找到有用的数据被称为命中,当缓存中没有CPU所需的数据时(这时称为未命中),CPU才访问内存。从理论上讲,在一颗拥有二级缓存的CPU中,
读取一级缓存的命中率为80%。也就是说CPU一级缓存中找到的有用数据占数据总量的80%,剩下的20%从二级缓存中读取。由于不能准确预测将要执行的
数据,读取二级缓存的命中率也在80%左右(从二级缓存读到有用的数据占总数据的16%)。那么还有的数据就不得不从内存调用,但这已经是一个相当小的比
例了。目前的较高端的CPU中,还会带有三级缓存,它是为读取二级缓存后未命中的数据设计的—种缓存,在拥有三级缓存的CPU中,只有约5%的数据需要从
内存中调用,这进一步提高了CPU的效率。
为了保证CPU访问时有较高的命中率,缓存中的内容应该按一定的算法替换。一种较常用的算
法是“最近最少使用算法”(LRU算法),它是将最近一段时间内最少被访问过的行淘汰出局。因此需要为每行设置一个计数器,LRU算法是把命中行的计数器
清零,其他各行计数器加1。当需要替换时淘汰行计数器计数值最大的数据行出局。这是一种高效、科学的算法,其计数器清零过程可以把一些频繁调用后再不需要
的数据淘汰出缓存,提高缓存的利用率。
CPU产品中,一级缓存的容量基本在4KB到64KB之间,二级缓存的容量则分为128KB、
256KB、512KB、1MB、2MB等。一级缓存容量各产品之间相差不大,而二级缓存容量则是提高CPU性能的关键。二级缓存容量的提升是由CPU制
造工艺所决定的,容量增大必然导致CPU内部晶体管数的增加,要在有限的CPU面积上集成更大的缓存,对制造工艺的要求也就越高。
CPU的二级缓存是默认开启的,所谓的在注册表中修改相应的secondlevelcache键值来打开二级缓存是不对的,那只是一个映射,如果不开启二级缓存,电脑的性能会很受影响.
Windows XP系统中,默认状态下CPU二级缓存并未打开。为了提高系统性能,我们可以通过修改注册表,或使用“Windows优化大师”等软件来开启它。
运 行注册表编辑器,展开HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session
Manager\Memory
Management分支,双击右侧窗口中的“SecondLevelDataCace”,然后在弹出的窗口中直接填入当前计算机所使用的CPU的二级缓
存容量即可。
赛扬处理器的二级缓存为128KB,应将其值设置为80(16进制,下同)。PⅡ、PⅢ、P4均为512KB二级缓存,应设置为
200;PⅢE(EB)、P4 Willamette只有256KB二级缓存,应设置为100;AMD
Duron只有64KB二级缓存,应设置为40;K6-3拥有256KB二级缓存;Athlon拥有512KB二级缓存;Athlon
XP拥有256KB二级缓存;Athlon XP(Barton核心)拥有512KB二级缓存。
使用Windows优化大师也可以正确设置CPU的二级缓存:启动Windows优化大师,选择“系统性能优化”,在“文件系统优化”中,最上面就是关于CPU二级缓存的设置项。拖动滑块到相应的位置后,保存设置并重新启动计算机即可。
先我们来简单了解一下一级缓存。目前所有主流处理器大都具有一级缓存和二级缓存,少数高端处理器还集成了三级缓存。其中,一级缓存可分为一级指令缓
存和一级数据缓存。一级指令缓存用于暂时存储并向CPU递送各类运算指令;一级数据缓存用于暂时存储并向CPU递送运算所需数据,这就是一级缓存的作用
那么,二级缓存的作用又是什么呢?简单地说,二级缓存就是一级缓存的缓冲器:一级缓存制造成本很高因此它的容量有限,二
级缓存的作用就是存储那些CPU处理时需要用到、一级缓存又无法存储的数据。同样道理,三级缓存和内存可以看作是二级缓存的缓冲器,它们的容量递增,但单
位制造成本却递减。需要注意的是,无论是二级缓存、三级缓存还是内存都不能存储处理器操作的原始指令,这些指令只能存储在CPU的一级指令缓存中,而余下
的二级缓存、三级缓存和内存仅用于存储CPU所需数据。
根据工作原理的不同,目前主流处理器所采用的一级数据缓存又可以分为实数据读写缓存和数据代码指令追踪缓存2种,它们分别被AMD和Intel所采用。不同的一级数据缓存设计对于二级缓存容量的需求也各不相同,下面让我们简单了解一下这两种一级数据缓存设计的不同之处。
一、AMD一级数据缓存设计
AMD
采用的一级缓存设计属于传统的“实数据读写缓存”设计。基于该架构的一级数据缓存主要用于存储CPU最先读取的数据;而更多的读取数据则分别存储在二级缓
存和系统内存当中。做个简单的假设,假如处理器需要读取“AMD ATHLON 64 3000+ IS
GOOD”这一串数据(不记空格),那么首先要被读取的“AMDATHL”将被存储在一级数据缓存中,而余下的“ON643000+ISGOOD”则被分
别存储在二级缓存和系统内存当中(如下图所示)。
需要注意的是,以上假设只是对AMD处理器一级数据缓存的一个抽象
描述,一级数据缓存和二级缓存所能存储的数据长度完全由缓存容量的大小决定,而绝非以上假设中的几个字节。“实数据读写缓存”的优点是数据读取直接快速,
但这也需要一级数据缓存具有一定的容量,增加了处理器的制造难度(一级数据缓存的单位制造成本较二级缓存高)。
二、Intel一级数据缓存设计
自
P4时代开始,Intel开始采用全新的“数据代码指令追踪缓存”设计。基于这种架构的一级数据缓存不再存储实际的数据,而是存储这些数据在二级缓存中的
指令代码(即数据在二级缓存中存储的起始地址)。假设处理器需要读取“INTEL P4 IS
GOOD”这一串数据(不记空格),那么所有数据将被存储在二级缓存中,而一级数据代码指令追踪缓存需要存储的仅仅是上述数据的起始地址(如下图所示)。
由于一级数据缓存不再存储实际数据,因此“数据代码指令追踪缓存”设计能够极大地降CPU对一级数据缓存容量的要求,降低处理器的生产难度。但这种设计的弊端在于数据读取效率较“实数据读写缓存设计”低,而且对二级缓存容量的依赖性非常大。
在了解了一级缓存、二级缓存的大致作用及其分类以后,下面我们来回答以下硬件一菜鸟网友提出的问题。
从 理论上讲,二级缓存越大处理器的性能越好,但这并不是说二级缓存容量加倍就能够处理器带来成倍的性能增长。目前CPU处理的绝大部分数据的大小都在
0-256KB之间,小部分数据的大小在256KB-512KB之间,只有极少数数据的大小超过512KB。所以只要处理器可用的一级、二级缓存容量达到
256KB以上,那就能够应付正常的应用;512KB容量的二级缓存已经足够满足绝大多数应用的需求。
这其中,对于采用“实数据读写 缓存”设计的AMD Athlon
64、Sempron处理器而言,由于它们已经具备了64KB一级指令缓存和64KB一级数据缓存,只要处理器的二级缓存容量大于等于128KB就能够存
储足够的数据和指令,因此它们对二级缓存的依赖性并不大。这就是为什么主频同为1.8GHz的Socket 754 Sempron
3000+(128KB二级缓存)、Sempron 3100+(256KB二级缓存)以及Athlon 64
2800+(512KB二级缓存)在大多数评测中性能非常接近的主要原因。所以对于普通用户而言754 Sempron 2600+是值得考虑的。
反
观Intel目前主推的P4、赛扬系列处理器,它们都采用了“数据代码指令追踪缓存”架构,其中Prescott内核的一级缓存中只包含了12KB一级指
令缓存和16KB一级数据缓存,而Northwood内核更是只有12KB一级指令缓存和8KB一级数据缓存。所以P4、赛扬系列处理器对二级缓存的依赖
性是非常大的,赛扬D 320(256KB二级缓存)与赛扬
2.4GHz(128KB二级缓存)性能上的巨大差距就很好地证明了这一点;而赛扬D和P4 E处理器之间的性能差距同样十分明显。
最 后,如果您是狂热的游戏发烧友或者从事多媒体制作的专业用户,那么具有1MB二级缓存的P4处理器和具有512KB/1MB二级缓存的Athlon
64处理器才是您理想的选择。因为在高负荷的运算下,CPU的一级缓存和二级缓存近乎“爆满”,在这个时候大容量的二级缓存能够为处理器带来5%-10%
左右的性能提升,这对于那些要求苛刻的用户来说是完全有必要的。
目前所有主流处理器大都具有一级缓存和二级缓存,少数高端处理器还集成了三级缓存。其中,一级缓存可分为一级指令缓存和一级数据缓存。一级指令缓存用于暂时存储并向CPU递送各类运算指令;一级数据缓存用于暂时存储并向CPU递送运算所需数据,这就是一级缓存的作用.
二
级缓存就是一级缓存的缓冲器:一级缓存制造成本很高因此它的容量有限,二级缓存的作用就是存储那些CPU处理时需要用到、一级缓存又无法存储的数据。同样
道理,三级缓存和内存可以看作是二级缓存的缓冲器,它们的容量递增,但单位制造成本却递减。需要注意的是,无论是二级缓存、三级缓存还是内存都不能存储处
理器操作的原始指令,这些指令只能存储在CPU的一级指令缓存中,而余下的二级缓存、三级缓存和内存仅用于存储CPU所需数据。
根据工作原理的不同,目前主流处理器所采用的一级数据缓存又可以分为实数据读写缓存和数据代码指令追踪缓存2种,它们分别被AMD和Intel所采用。不同的一级数据缓存设计对于二级缓存容量的需求也各不相同,下面让我们简单了解一下这两种一级数据缓存设计的不同之处。
一级最重要,但是现在CPU的一级缓存几乎都一样,所以忽略。
二级缓存的话对于Intel的CPU是很重要的,Intel的CPU的二级缓存越大性能提升非常明显,而AMD的CPU虽然二级缓存也很重要,但是二级缓存大小对AMD的CPU的性能提升不是很明显。
三级缓存其实只是做了个辅助的作用,除了服务器,其实对我们家庭机没什么用的,内存还是很重要的。
所以说现在衡量CPU性能除了频率外就是二级缓存的大小了
发表评论
-
生活tips_织毛衣
2012-03-01 15:48 812生梨润肺化痰好,苹果止泻营养高. 黄瓜减肥有成效, ... -
CU索引树
2012-02-25 11:44 811CU索引树: http://bbs.chinaunix.ne ... -
牛新庄大侠的简历,我辈后生共勉
2011-09-02 16:47 2311原文链接: http:/ ... -
【转】程序员的人生 [ 从一点不懂到高手的转变]
2011-05-27 12:10 897【转】程序员的人生 [ ... -
@Marked-收藏一段VBA脚本【根据Excel的sheet名排序】
2011-05-13 12:24 3439刚刚遇到一个问题,程序处理完Excel之后,发现sheet的 ... -
[转载]Spring创建Bean的过程
2011-04-12 15:01 12261. beans包提供了以编程 ... -
[转自王垠]完全用GNU/Linux工作,摈弃Windows低效率的工作方式
2011-03-29 16:45 1614ZT (a qinghua student’s art ... -
整理收藏-mysqldump导出数据库
2011-03-28 17:18 13951.(mysqldump命令位于mysql/b ... -
<摘自>飞:jxl简析2 [ http://www.emlog.net/fei ]
2011-01-04 12:48 1199[<摘自>飞:jxl简析:http://www.e ... -
<摘自>飞:jxl简析[ http://www.emlog.net/fei ]
2011-01-04 12:46 1179<摘自>飞:jxl简析:h ... -
@Marked-truncate表的时间
2010-12-19 02:42 1212【摘自itpub论坛】 “一个具有2行数据的表需要多长时间,他 ...
相关推荐
CPU缓存失效导致性能下降:主板BIOS损坏导致CPU缓存失效.pdf
5-3JMM-CPU缓存一致性协议MESI.mp4
从底层数据结构和CPU缓存两方面剖析LinkedList的查询效率为什么比ArrayList低。以前只直到数据结构会影响两者的查询效率,偶然间得知cpu缓存(硬件级别)也会有影响
CPU缓存架构详解&高性能内存队列Disruptor实战
11-线程池 ThreadPoolExecutor 底层原理源码分析(上)-...15、CPU缓存架构详解&高性能内存队列Disruptor 实战 (1).pdf 16、常用并发设计模式精讲 (1).pdf designpattern.zip disruptor.zip forkjoin.zip jmm(1).zip
CJAG 两个位于同一个位置的虚拟机之间基于CPU缓存的通信
浅谈CPU缓存的分级.pdf
浅谈Linux内核之CPU缓存.pdf
CPU缓存浅说[文].pdf
Intel和AMD的CPU缓存有啥不一样.pdf
基于CPU缓存操作模式差异的虚拟机检测方法.pdf
称“芯”快意——深入CPU缓存的世界.pdf
2005,我们“芯芯”相印——双核心CPU缓存数据一致性浅析.pdf
C实现将txt数据读入内存/CPU缓存的函数,不多说,实现如下。 1. 实现代码 #include "stdafx.h" #include #include <stdlib> int filelength(FILE *fp); char *readfile(char *path); int main(void){ ...
这是一个解决编程的效率问题。由于目前各计算机性能能满足要求平时你可能不会主要到程序运行效率。
目前主流CPU都具有一级缓存和二级缓存,一级缓存用于暂时存储各类运算指令,并向CPU递送所需数据,二级缓存就是存储那些CPU处理时需要的,但是一级缓存无法存储的那些数据,以此进一步提高CPU访问速度,那么如何为...
带有高速缓存的CPU执行计算的流程). 程序以及数据被加载到主内存,. 指令和数据被加载到CPU的高速缓存-. CPU执行指令,把结果写到高速缓存.. 高速缓存
本文主要谈谈CPU缓存对Java编程的影响,不涉及具体CPU缓存的机制和实现。 现代CPU的缓存结构一般分三层,L1,L2和L3。如下图所示: 级别越小的缓存,越接近CPU, 意味着速度越快且容量越少。 L1是接近...
使用Golang原语的CPU缓存行无效 介绍 一直是并行性的陷阱。 对于在高速缓存行边界内分配的共享上下文上同时进行读/写更新的应用程序,性能上的损失变得明显。 现代CPU倾向于利用高速缓存来频繁更新内存位置。 CPU...