当前位置:首页 » 硬盘大全 » cpu缓存屏障
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

cpu缓存屏障

发布时间: 2022-12-12 15:27:09

A. CPU的一、二、三级缓存分别有什么用

缓存大小也是CPU的重要指标之一,而且缓存的结构和大小对CPU速度的影响非常大,CPU内缓存的运行频率极高,一般是和处理器同频运作,工作效率远远大于系统内存和硬盘。实际工作时,CPU往往需要重复读取同样的数据块,而缓存容量的增大,可以大幅度提升CPU内部读取数据的命中率,而不用再到内存或者硬盘上寻找,以此提高系统性能。但是从CPU芯片面积和成本的因素来考虑,缓存都很小。x0dx0ax0dx0aL1 Cache(一级缓存)x0dx0a L1 CPU缓存x0dx0aCache(一级缓存)是CPU第一层高速缓存,分为数据缓存和指令缓存。内置的L1高速缓存的容量和结构对CPU的性能影响较大,不过高速缓冲存储器均由静态RAM组成,结构较复杂,在CPU管芯面积不能太大的情况下,L1级高速缓存的容量不可能做得太大。一般服务器CPU的L1缓存的容量通常在32—256KB。x0dx0ax0dx0aL2 Cache(二级缓存)x0dx0a L2 Cache(二级缓存)是CPU的第二层高速缓存,分内部和外部两种芯片。内部的芯片二级缓存运行速度与主频相同,而外部的二级缓存则只有主频的一半。L2高速缓存容量也会影响CPU的性能,原则是越大越好,现在家庭用CPU容量最大的是4MB,而服务器和工作站上用CPU的L2高速缓存更高达2MB—4MB,有的高达8MB或者19MB。x0dx0ax0dx0aL3 Cache(三级缓存)x0dx0a L3 C CPU缓存x0dx0aache(三级缓存),分为两种,早期的是外置,现在的都是内置的。而它的实际作用即是,L3缓存的应用可以进一步降低内存延迟,同时提升大数据量计算时处理器的性能。降低内存延迟和提升大数据量计算能力对游戏都很有帮助。而在服务器领域增加L3缓存在性能方面仍然有显着的提升。比方具有较大L3缓存的配置利用物理内存会更有效,故它比较慢的磁盘I/O子系统可以处理更多的数据请求。具有较大L3缓存的处理器提供更有效的文件系统缓存行为及较短消息和处理器队列长度。 x0dx0ax0dx0a其实最早的L3缓存被应用在AMD发布的K6-III处理器上,当时的L3缓存受限于制造工艺,并没有被集成进芯片内部,而是集成在主板上。在只能够和系统总线频率同步的L3缓存同主内存其实差不了多少。后来使用L3缓存的是英特尔为服务器市场所推出的Itanium处理器。接着就是P4EE和至强MP。Intel还打算推出一款9MB L3缓存的Itanium2处理器,和以后24MB L3缓存的双核心Itanium2处理器。 但基本上L3缓存对处理器的性能提高显得不是很重要,比方配备1MB L3缓存的Xeon MP处理器却仍然不是Opteron的对手,由此可见前端总线的增加,要比缓存增加带来更有效的性能提升。x0dx0ax0dx0a 具体的你到网络上有!!

B. 什么是cpu的缓存

CPU缓存的概念
CPU缓存是位于CPU与内存之间的临时数据交换器,它的容量比内存小的多但是交换速度却比内存要快得多。CPU缓存一般直接跟CPU芯片集成或位于主板总线互连的独立芯片上。

为了简化与内存之间的通信,高速缓存控制器是针对数据块,而不是字节进行操作的。高速缓存其实就是一组称之为缓存行(Cache Line)的固定大小的数据块组成的,典型的一行是64字节。

3. CPU缓存的意义
CPU往往需要重复处理相同的数据、重复执行相同的指令,如果这部分数据、指令CPU能在CPU缓存中找到,CPU就不需要从内存或硬盘中再读取数据、指令,从而减少了整机的响应时间。所以,缓存的意义满足以下两种局部性原理:

时间局部性(Temporal Locality):如果一个信息项正在被访问,那么在近期它很可能还会被再次访问。
空间局部性(Spatial Locality):如果一个存储器的位置被引用,那么将来他附近的位置也会被引用。

C. 电脑CPU所谓的,一级二级三级缓存分别在什么位置

CPU中缓存是为了加快CPU读取数据的速度,也是为了给内存一个缓冲期。因为CPU运算速度太快了,光靠内存读写完全跟不上,而CPU缓存的数据交换比内存快多了,大部分时候CPU可以直接从缓存读取数据,找不到的话再从内存读取,这样可以节省CPU读取内存数据时浪费的时间。

CPU缓存分为三类,一级缓存(L1)、二级缓存(L2)和三级缓存(L3)。CPU在实际数据读取中重要的却是一级缓存,因为一级缓存速度最快,二级缓存其次,三级缓存最慢,只是三级缓存的容量最大。

(3)cpu缓存屏障扩展阅读:

一级缓存虽然速度最快,但容量最小,单位都是KB,不同CPU之间一级缓存没有差距,所以现在不怎么提了,二级缓存容量也不大,基本都是个位数MB,除了一些服务器CPU会有10几MB之外,现在CPU也不怎么提二级缓存。CPU读取缓存时会先从一级缓存开始,然是二级缓存,而读取二级缓存有时候会出现数据未命中的情况,这时候就需要从三级缓存读取。

但是要注意的是三级缓存越大并不一定说这个CPU性能就越强,因为三级缓存的容量还依靠CPU架构和工艺等方面的影响,如果是与架构工艺搭配升级的三级缓存,容量越大才会性能越高。

D. 简述计算机cpu都有哪些新技术

未来的cpu预计会朝着多核、多通道、 集成内存、 集成显卡 、节能、 减小面积、 提高集成度、散热性更好、更满足消费者的需求等方向发展。
CPU是计算机系统的心脏,计算机特别是微机的快速发展过程,实质上是CPU从低级别向高级、从简单向复杂发展的过程。其设计、制造和处理技术的不断更新换代以及处理能力的不断增强。CPU 发展到今天已使微机在整体性能、处理速度、3D图形图像处理、多媒体信息处理及通信等诸多方面达到甚至超过了小型机。

新的通信、游戏及"寓教于乐"等应用程序要求具有视频、3D图形、动画、音频及虚
拟现实等多媒体功能,这些又对CPU提出了新的要求。Intel公司针对这些要求,继386处理
器结构之后提出了CPU的进一步最大升级,这就是将MMX(MutliMedia eXtention多媒体扩
展)技术融入Pentium CPU中。采用MMX技术的处理器在解决了多媒体及通信处理等问题的
同时,还能对其他的任务或应用程序应付自如。
MMX的主要技术特点有以下几点:
(1) 单指令、多数据(Single Instruction Mutli-Data,SIMD)技术是MMX的基础,它
使得多条信息可由一条单一指令来处理,它与IA(InstructionArchitecture)超标量体系
结构相结合,极大地增强了PC机平台的性能。MMX技术执行指令时是将8字节数据作为一个
包装的64位值进入CPU的,全部过程由一条指令立即处理。
(2) MMX指令不具有特许性,其通用性很强,不仅能满足建立在当前及未来算法上的P
C机应用程序的大部分需求,而且可用于编码译码器、算法及驱动程序等。
(3) IA MMX指令系统增加了4种新的数据类型,即紧缩字节(8bit×8bit)、紧缩字(4
bit×16bit)、紧缩双字(2bit×32bit)和四字(1bit×64bit)。其目的是紧缩定点整数,
将多个整数字组成一个单一的64位数据,从而使系统在同一时刻能够处理更多的数据。
(4) 增加了8个64位MMX寄存器,即浮点寄存器的别名映象。
(5) 新增加了57条指令。用这些指令完成音频、视频、图形图像数据处理,使多媒体
、通信处理能力得到大幅度提高。其数学及逻辑指令可支持不同的紧缩整数数据类型,对
于每一种得到支持的数据类型,这些指令都有一个不同的操作码。新的MMX技术指令采用
57个操作码完成,它涉及的功能领域有:基本的算术操作;比较操作;进行新数据类型间的
转换(紧缩数据及从小数据类型向大数据类型解压);逻辑操作;用于MMX寄存器之间的数据
转移(MOV)指令,或内存的64位、32位存取。

可以说09年的整个技术工艺的发展完全是在竞争下展开的。让我们回首一下本年度的技术发展,看一看09年都有哪些处理器技术最具影响力。
睿频技术
从08年11月酷睿i7 900系列处理器的上市开始,睿频技术就已经开始了他的推广,不过由于限定在了高端范围内,并没有使这项技术全面推广。从酷睿i7 900系列的市场占有率来看,Intel似乎对此也并不在意,毕竟酷睿i7 900系列产品的定位较高,因此试探性的测试了解的人数较少是可以理解的。
在今年的9月,Intel正式全球发布了面向主流市场的LGA1156接口酷睿i7/i5系列处理器,虽然在接口方面进行了从新设计,但是新发布的LGA1156接口酷睿i7/i5处理器提供了较为完整的酷睿i7 900系列处理器技术(超线程技术除外),其中就包括了睿频技术。从此,该项技术也正是开始了普及之路。
介绍一下什么是睿频技术,和睿频技术所带来的好处。
●动态超频,核心数量按需分配睿频技术简介
目前上市的所有Nehalem架构处理器都提供了睿频技术(英文为Turbo Boost Mode),该项技术的运用可以帮助处理器在空闲时期将整体功耗降低,从而达到节能的目的,但是节能并不是睿频技术的最大亮点,其最大的亮点就在于可以视平台运行状态而定,选择性的提高一个或多个核心的运行频率,从而做到提高工作效率且降低功耗的目的。
睿频技术可以提高一个或多个核心的频率
我们以大型3D游戏为例,某些游戏可能对主频更为敏感,多核心并不能带来明显的效能提升,对处理器进行超频反而效果更好,如果这个时候开启Turbo模式,并且将TDP设定在用户所采用的散热器允许范围内,那么CPU在这个时侯可以对某颗或某两颗核心进行动态超频来提升性能。
睿频技术让处理器超频智能化,自动化
实现Turbo技术需要在核心内部设计一个功率控制器,大约需要消耗100万个晶体管。但这个代价是值得的,因为在某些游戏中开启Turbo模式可以直接带来10%左右的性能提升,相当于将显卡提升一个档次。值得一提的是,Extreme版本的Core i7处理器最高可以将TDP在BIOS中设定到190W来执行Turbo模式,在个别应用中进一步提升CPU时钟频率,带来效能上的提升。目前,主流的酷睿i7 750处理器在开启该技术后,可在单线程任务是将一颗核心的主频提高至3.2GHz。想必这样高的主频运行单线程任务可以说易如反掌。
超线程技术
超线程,早在2002年Intel便已经推出了这一技术,并且广泛的在奔腾4处理器中大规模应用。采用了超线程技术的奔腾4处理器可以比原产品效能提升10%-15%左右,可见Intel对超线程技术的运用是信心满满的。
但是事实却出乎Intel的意料。首先是来自操作系统端的问题,当时微软已经发布了Windows 2000系统,然而该系统并没有加入对超线程技术的支持,虽然后来出现的Windows XP系统加入了对该技术的支持,但也最终因为应用软件端对超线程技术的优化较少而作罢。另一个问题是来自于Intel自身的奔腾4处理器。基于NetBurst架构的奔腾4处理器由于过分的追求高主频加长了流水线设计,这导致了处理器的主频虽然达到了3GHz以上,却并没有提供3GHz主频相等的性能。由于过高的流水线已经造成数据运算错误率提高,在加上超线程技术的双核模拟容易让CPU在运算时命中失败,且对带宽的惊人需求。超线程技术不但没为处理器带来更高的执行效率,反而在某些情况下降低了奔腾4处理器的性能。所以说超线程技术虽然是一个非常先进且使用的概念,但在那个时代并不适合。
早在奔腾4时代Intel就加入了HT超线程技术
进入酷睿2时代后,由于内存带宽没有获得突飞猛进,而且酷睿2处理器的短流水设计并不适合超线程技术,因此新一代的酷睿架构处理器也就取消了超线程这一概念。
随着技术的进步,Intel已经进入了45nm工艺和Nehalem架构时代,在最新的Nehalem Core i7处理中,由于对DDR3内存控制器的整合,同时引入了三通道内存技术,内存带宽得到了质的飞跃,QPI总线的引入也令处理器的带宽大幅提升。这为超线程技术的回归提供了契机,于是乎Intel在酷睿i7系列以及未来的双核酷睿i5处理器中加入了超线程技术。
Nehalem架构时代超线程技术再次回归
此外,新一代操作系统的推出也给多线程处理器提供了施展拳脚的机会,而3D游戏以及众多的应用软件也针对多线程进行了优化,可以说超线程技术在此时回归时绝对的最佳时机。
可能看到这里依然会有众多的读者朋友会感到奇怪,这超线程技术目前只在高端酷睿i7处理器当中有所运用,并不是普通消费者能够使用到的,为何把它也列为09年最具影响力的技术之一呢?相信了解硬件的读者一定知道,处理器行业中的另一个领军企业AMD一直以来并没有为自身的处理器加入超线程技术。而AMD的高管人士甚至曾经一度认为超线程技术是影响处理器性能发挥的元兇之一。但是在看到Intel为服务器的至强以及桌面高端处理器引入超线程技术得到了超高的执行效能后,AMD内部高层承认,没有早早引入此类技术是一项技术选择上的失误。为了能够尽快弥补这一技术缺陷,AMD已经决定在不久的将来为旗下的服务器用以及桌面级处理器引入超线程技术。可见超线程技术在酷睿i7及未来的酷睿i5中回归,影响的不仅仅是用户,更影响到了对手。在不久的几年里,也许从低端到高端的所有处理器就可以全部应用到超线程技术。
VT虚拟化技术
我们接下来要介绍的这项技术与前边的超线程技术一样,也不是09年才被创新出来的。这项技术诞生于奔腾4处理器时代,两大芯片巨头当时均已这项技术为宣传目标,但都因为受制于技术性能以及软件方面的问题没有推广开(服务器不在我们的讨论范围内)。随着09年2月,新一代操作系统Windows 7测试版的发布,这项技术才被重新挖掘出来,并且被消费者广为了解。这项技术就是虚拟化技术。
其实我们所提到的Windows 7系统下的虚拟化系统,也仅在高级至旗舰版本才提供了,并不是所有的版本都提供了这一技术。但其带来的好处依然被广大的消费者讨论,即使消费者完全用不到这一技术,但在购买处理器的时候依然考虑到了自己所购买的产品能否提供虚拟化技术。
使用虚拟化系统运行的IE6.0浏览器
虚拟化技术到底有什么过人之处竟然让众多消费者都参入其中呢?其实要说虚拟化的用途,对企业级用户来讲实质性较强,对于普通用户来讲,虚拟化的用途目前还并没有被广泛开发。在企业级用户那里,通过虚拟化系统,企业可以集中并且共享资源,实现降低成本、优化利用率的目的。以高性能服务器为例,在系统闲置的过程中,服务器的性能会造成严重的浪费。如果通过虚拟机将服务器分为若干个部分,进行各自所需的工作,这样就可以最大化的利用服务器的全部性能,从而节省企业开支。而在一些情况下,企业甚至可以通过虚拟机出售服务器的剩余性能,从而达到利润最大化。虚拟化所提供的另外一个好处就是安全。用户可以通过虚拟网络进行数据传输,这样可以最大限度的保证网络的加密能力,提高网络环境的安全度。以上两点是对企业级用户来讲最为基本的用途。那么对普通消费者而言又会有哪些好处呢?
我们以操作系统为例。目前微软所提供的Windows操作系统的全球使用人数最多,而黑客也针对Windows系统进行的攻击行为也是最多的。如何能够保证操作系统的安全性就显得尤为重要。在虚拟化系统推出之后,用户在不确定自己手中的数据安全性的前提下,如软件,网页等,可以通过虚拟系统来检测数据的安全性。如果发生了如病毒等问题,仅需简单的关闭虚拟系统就可以保证系统的安全性。此外,现有系统在不支持某款软件的情况下,用户也可以通过虚拟机来实现对该软件的支持。
简单的用一句话来解释虚拟化就是,可以提供最高的安全保障,并最大限度的利用系统所提供的性能的技术。
45nm工艺技术
在2007年年末,Intel正式发布了第一款采用45nm工艺制程的处理器,酷睿四核QX9650。由于运用了当时最先进的工艺技术,这款四核处理器虽然身价过万,但依然吸引了不少人的目光,因为他的出现标志着45nm工艺时代的降临。
QX9650的问世标志着CPU进入了45nm工艺时代
45nm有何本领?竟然让一颗身价过万的CPU也成为了瞩目的焦点。这一切就要从Intel与AMD两家芯片巨头的45nm工艺入手了。
●Intel —— 突破式的45nm
2007年,Intel正式发布了四核心Core 2 Extreme QX9650处理器,由此引领行业抢先来到了45nm的新世界。Intel的45nm采用了突破式的新材料,为晶体管发展四十年来之最大进步。
在过往四十余年的时间中,业内均普遍采用二氧化硅做为制造晶体管栅介质的材料。而在65纳米制程工艺下,Intel公司已经将晶体管二氧化硅栅介质的厚度压缩至1.2纳米,基本上达到了这种传统材料的极限。此时不但使得晶体管在效能增益以及制程提升等方面遭遇瓶颈,过薄的晶体管二氧化硅栅介质亦使得其阻隔上层栅极电流泄漏的能力逐渐降低,漏电率大幅攀升。

SOI是Silicon On Isolator的缩写,即绝缘体上的硅技术。和传统的纯硅晶圆不同,SOI工艺使用的晶圆底部是一层绝缘层。这层绝缘体切断了上方MOS管漏电流的回路,使得基于SOI技术的芯片能够轻松抵抗漏电流。
真正解决AMD在 45纳米技术难题的是多重增强晶体管应变技术,AMD和IBM称,与非应变技术相比,这一新技术能将P沟道晶体管的驱动电流提高80%,将N沟道晶体管的驱动电流提高24%。可见,制程的提升极大地提升了处理器的潜在性能,并同时赋予了产品更强的功耗控制能力。
“整合”技术
从09年起,CPU领域最大的的变化就是连个字“整合”,整合GPU,整合PCIe控制器,整合内存控制器,直至完全整合了北桥。而整合所带来的不仅仅是性能上的提升,同时也带来了平台功耗的进一步降低,可以说整合已经成为了未来CPU的发展趋势。
完全整合了北桥功能的酷睿i5 750处理器
整合之路的开始起于AMD的K8架构时代,从K8架构时代开始,AMD将本来属于北桥部分的内存控制器整合进了处理器当中。其好处就是CPU不在受制于FSB的限制,提高了CPU与内存之间的数据带宽,性能得到了翻倍的提升。
随着工艺制程的提升,整合内存控制器的CPU性能被突显出来,Intel也在全新的Nehalem架构中整合进了内存控制器,放弃了传统的前端总线概念。与老的前端总线处理器相比,酷睿i7处理器的QPI总线所提供的带宽最高可以达到32GB/s,这要比1600MHz前端总线所提供的12.8GB/s提高了两倍有余,可见整合内存控制器后对CPU性能提高的影响。
在整合进了内存控制器大获成功之后,Intel和AMD又将目光放在了PCIe控制器上,双方都针对这一整合技术开展了研发。不过,在进度方面Intel方面走在了前边,率先将PCIe控制器整合进了处理器当中,并且推出了LGA1156接口的酷睿i7/酷睿i5系列处理器。从LGA1156接口产品开始,北桥功能就已经完全被整合进入了CPU当中,传统的三芯片概念已经被双芯片完全取代。这样做的好处一方面是提高CPU与内存,CPU与显卡之间的数据带宽,同时也将平台的整体功耗降至最低。可以说整合的概念是最符合未来芯片领域发展趋势的。这也是为何Intel与AMD都在争相推出整合处理器的缘故。
AMD的Fusion计划就是整合技术的一部分
在不就的未来,用户不仅可以使用到整合了北桥功能的处理器,更可以使用到整合了GPU的处理器,当前Intel与AMD都在着手进行着这一整合技术,用户最早在2010年1月就可以使用到整合GPU的处理器。
整合可以说成为了09年下半年处理器的发展趋势,并且在将来也将继续影响着处理器的发展。整合可以算作是09年最有影响力的处理器技术之一
处理器高度集成化、性能更强、处理器更加智能:

英特尔酷睿i处理器
在传统的处理器构架中,处理器基板上仅仅只有一个单独的处理器芯片。而2010年发布的英特尔酷睿i系列处理器,首次在处理器的基板上集成了显示核心。这项技术表面上看起来并没有特别之处,但是对于笔记本产品来说,意味着高度集成化的处理器,可以把笔记本产品设计的更加轻薄。同时一些搭配独立显卡的机型,可以智能的进行双显卡的切换,解决了笔记本性能和电池续航之间的矛盾。
在英特尔酷睿i系列处理器中,除了英特尔 i3系列处理器以外。众多的英特尔酷睿i系列处理器,都支持睿频加速技术,这项技术可以自动检测系统处理负载,而自动判断是否需要自动提升频率,来加快系统的响应速度。当然睿频加速并不是无限制的加速,也是有一定的频率限制。
笔记本首次加入3D显示技术:
笔记本3D技术
随着2010年火遍全球的电影《阿凡达》的上映,彻底引爆了人们对于3D技术的热情。虽然3D技术已经不是什么新鲜事了,而在笔记本上面大面积的使用还是头一回。而笔记本上的3D技术其实也是分派别的,比如说英伟达使用的3D技术,就是红蓝3D和快门式3D技术,而配备ATI显卡的笔记本则使用偏振式3D技术。对于笔记本来说,3D技术可以让用户拥有更加震撼的视觉享受。
笔记本多点触控技笔记本多点触控板
虽然多点触控技术在苹果电脑上早有应用,但是其他品牌的笔记本并没有采用这一技术。而2010年是大规模采用这项技术的一年,多点触控技术让我们可以抛弃传统的鼠标来进行操作。比如说双指向外拉申,就可以放大图片和放大网页。这项技术的出现,大大提高了笔记本触摸板的使用效率,也提高了人们的操作笔记本的效率。
2010年的应用的技术我们基本上算是盘点完了,接下来我们要来盘点一下2011年,可能要装备我们笔记本的那些新技术。
sandy bridge核心构架术:
说起融合可谓是IT技术的一大趋势,比如说sandy bridge核心的新一代处理器。就是把处理器和显卡成功的融合到一款。而AMD也同样有相同的技术,比如说AMD公司的APU处理器,就是把处理器和显卡成功的融合到单个芯片中。
2011年Sandy Bridge整合GPU图形核心技术
虽然目前的处理器加入了睿频加速和集成显卡设计,但是这次SNB自带的GPU图形核心确实经过了大幅度的重新设计,拥有专门的视频转码硬件模块,性能大约是目前HDGraphics的两倍,目前已经的测试也证明Intel所言非虚。借助第二代Turbo Boost睿频加速技术,SNB的CPU、GPU两部分可以相互独立地动态加速。如果你正在玩的游戏更需要GPU资源,那么CPU部分可能会运行在原始频率甚至降低,GPU则在功率允许范围内尽量提速。
超线程和Turbo Boost动态加速技术
SNB移动版全部开启了超线程和Turbo Boost动态加速技术,而且官方内存频率最高提至1600MHz。特别值得一提的是,SNB移动版所集成的图形核心都会有12个执行单元,两倍于桌面版,而且频率方面也不低,默认均为650MHz,动态加速最高1300MHz或者1150MHz。已知的测试可以证明,Intel集显的性能已经相当惊人,照此推算移动版甚至还会更狠,移动独立显卡的生存空间将受到严重挤压。
通过英特尔官方对睿频加速技术的解释。当启动一个运行程序后,处理器会自动加速到合适的频率,而原来的运行速度会提升10%~20% 以保证程序流畅运行;应对复杂应用时,处理器可自动提高运行主频以提速,轻松进行对性能要求更高的多任务处理;当进行工作任务切换时,如果只有内存和硬盘在进行主要的工作,处理器会立刻处于节电状态。这样既保证了能源的有效利用,又使程序速度大幅提升。通过智能化地加快处理器速度,从而根据应用需求最大限度地提升性能,为高负载任务提升运行主频高达20%以获得最佳性能即最大限度地有效提升性能以符合高工作负载的应用需求:通过给人工智能、物理模拟和渲染需求分配多条线程处理,可以给用户带来更流畅、更逼真的游戏体验。同时,英特尔智能高速缓存技术提供性能更高、更高效的高速缓存子系统,从而进一步优化了多线程应用上的性能。
随着处理器制程和设计越来越先进,笔记本性能也会随着强大。而处理器和显卡的高度融合,笔记本的续航时间会大大延长,而笔记本可能做的越来越轻薄,性能也会越来越强大。
随着宏碁Iconia笔记本的发布,一下打破了我们对于传统笔记本的定义。而传统物理键盘的消失使得笔记本在用户体验方面更近一层。而物理键盘的消失,我们大可不必担心。虚拟键盘的加入使得笔记本,在文字输入方面不会存在任何问题,只不过没有物理键盘那样的手感了,这也是笔记本变革的“阵痛”。

上面的试用视频中我们可以看到。双屏触摸笔记本无论是在浏览照片、看视频还是浏览网页,都显得如此的简单和便捷。这对于传统键盘来说,无疑可以掀起一轮笔记本革新的风暴。这种用户体验的革新,好比Iphone对于手机业的革新一样,明年各大厂商都应该会发布自家的双屏笔记本。
在2010年电影阿凡达的上映,让很多体验到了3D技术的震撼。而笔记本装备有3D显示屏后,笔记本在用户体验会更上一城楼。比如说,一些第一人称射击游戏在3D技术的存托下,让用户临场感觉更加好。而市场上的传统的3D技术是佩戴3D眼睛来实现的。 而大多数用户在长时间观看3D电影和进行3D游戏的时候,会产生晕眩和视力下降的情况。

任天堂即将发售的裸眼3D游戏掌机3DS,把裸眼3D技术推向了3D技术时代浪尖。让大多数人开始渐渐关注起裸眼3D技术。对于裸眼3D技术,大多是人还是很陌生。如今的裸眼3D技术可以分为两派,一个是光屏障式3D技术也被称为视差屏障或视差障栅技术,其原理和偏振式3D较为类似,是由夏普欧洲实验室的工程师十余年的研究成功。光屏障式3D产品与既有的LCD液晶工艺兼容。而这种技术的优点是成本低廉,但是可视角度比较差,而且在显示亮度方面也偏暗。

光屏障碍裸眼3D技术
而如今柱状透镜式裸眼3D正好可以解决光屏障碍裸眼3D的缺陷。其最大的优势便是其亮度不会受到影响。柱状透镜3D技术的原理是在液晶显示屏的前面加上一层柱状透镜,使液晶屏的像平面位于透镜的焦平面上,这样在每个柱透镜下面的图像的像素被分成几个子像素,这样透镜就能以不同的方向投影每个子像素。于是双眼从不同的角度观看显示屏,就看到不同的子像素。不过像素间的间隙也会被放大,因此不能简单地叠加子像素。
http://tech.huanqiu.com/digit/pc/news/2011-01/1394758_6.html
第1页:2011年处理器/主板重大事件点评
-
2011年已经接近年底,在这一年中有诸多新技术新产品给我们留下了深刻的印象,明年也将会有更加值得期待的技术出现,今天我们就来做一个收尾总结。今年一年变化还是不小的,比如集成图形性能还算不错的Sandy Bridge处理器、全新概念的APU、最高端的Sandy Bridge-E架构Core i7、AMD正在进行的大裁员和战略调整等等,这些都给我们带来了不小的影响。
对于厂商来说,今年可以用有喜有忧来形容,一方面DIY产品价格越来越便宜,单价利润并没有增加,另外一方面,DIY消费者总量还在快速成长。当然,今年也碰到了诸如泰国发大水导致硬盘狂涨带来的销量影响,不过整体来说今年表现还是不错的。那么明年会是怎么样?目前还真不好说,希望明年行业发展会更好。对于消费者来说,价格便宜自然可以花更少钱玩到新奇的产品,当然便宜的东西也不一定就是好的,用户还是需要理性选择合适的产品。闲话少说,接下来就让我们来一一回顾今年到来的新产品和新技术以及发生的新鲜事,我用时间倒叙的方式给大家做展示。
不得不提的AMD “Project WIN”(胜利工程)
对于AMD来说,2011年并不是一个高速成长的一年,虽然今年有APU和推土机产品陆续登场,但是依然弥补不了和竞争对手的差距,无奈之下,只能进行这次幅度接近12%的大裁员,其中市场营销部门被砍掉了大约60%,市场营销副总裁Patrick "Pat" Moorhead、品牌副总裁JohnVolkmann、公关总监Dave Kroll等都黯然离去,技术人员也未能独善其身,比如多名关键的Fusion工程师都丢掉了饭碗,大概是APU的表现仍然没有达到让AMD满意的程度,甚至整个产品评测支持团队都不存在了。不过与此同时,AMD已经在准备“Project WIN”(胜利工程)以调整未来公司的重心业务和发展方向。
不管该策略最终如何,都并非Rory Read一个人的主意,而是整个董事会的决定,主要目标就是提高效率、降低成本、增加收入、加快产品开发与上市时间。业界普遍认为,Rory Read将会把AMD更多地带往消费级产品市场,低功耗的“山猫”架构将会扮演重要角色。AMD有可能在最近宣布加入ARM阵营,宣布获得ARM许可。
不管怎么样,AMD都需要进一步明确自己的发展方向,找到真正能给自己带来高速增长的契机,也许未来云计算、低功耗以及发展迅猛的中国市场才是AMD需要重点把守的战场。\微软将在明年推出支持ARM架构处理器的Windows 8,ARM也在加紧近日PC以及服务器领域的步伐。10月底,ARM公司正式宣布,其首个采用64位指令集的处理器架构“ARMv8”正式出炉,在这个64位处理器横行的年代,ARM处理器终于跟上时代的脚步了

E. voliate怎么保证可见性

上次我们学习了volatile是如何解决多线程环境下共享变量的内存可见性问题,并且简单介绍了基于多核CPU并发缓存架构模型的Java内存模型。
详情见文章:

volatile很难?由浅入深怼到CPU汇编,彻底搞清楚它的底层原理

在并发编程中,有三个重要的特性:

内存可见性
原子性
有序性
volatile解决了并发编程中的可见性和有序性,解决不了原子性的问题,原子性的问题需要依赖synchronized关键字来解决。

关于并发编程三大特性的详细介绍,大家可以点击下方卡片搜索查看:

搜更多精彩内容

并发编程三大特性

内存可见性在上一篇文章中已经验证,本文我们继续通过代码学习如下内容:1、volatile为什么解决不了原子性问题?2、缓存行、缓存行填充3、CPU优化导致的乱序执行4、经典面试题:DCL必须要有volatile关键字吗?5、valatile关键字是如何禁止指令重排序的?

以上每一步都会有一段代码来验证,话不多说,开始输出干货!

1、volatile为什么解决不了原子性问题?

如果你对volatile了解的还可以,那么咱们继续往下看,如果不是太熟悉,请先行阅读上一篇文章。

老规矩,先来一段代码:

volatile原子性问题代码验证

这段代码的输出结果是多少?10000?大于10000?小于10000?

程序执行10次输出的结果如下:

join:10000
join:10000
join:10000
join:9819
join:10000
join:10000
join:10000
join:9898
join:10000
join:10000
会有小几率的出现小于10000的情况,因此volatile是无法保证原子性的,那么到底在什么地方出问题了呢?
还是用上篇文章的图来说明一下程序的整体流程:

当线程1从内存读取num的值到工作内存,同时线程2也从内存读取num的值到工作内存了,他俩各自操作自己的num++操作,但是关键点来了:

当线程1、2都执行完num++,线程1执行第五步store操作,通过总线将新的num值写回内存,刷新了内存中的num值,同时触发了总线嗅探机制,告知线程2其工作内存中的num不可用,因此线程2的num++得到的值被抛弃了,但是线程2的num++操作却是执行了。

2、CPU缓存行

写上篇文章的时候,有朋友问到了CPU的三级缓存以及缓存行相关的问题,然后我就找了一些资料学习,形成了下面的一张图:

CPU缓存行

CPU和主内存RAM之间会有三级缓存,因为CPU的速度要比内存的速度要快的多,大概是100:1,也就是CPU的速度比内存要快100倍,因此有了CPU三级缓存,那为什么是三级缓存呢?不是四级、五级呢?四个大字送给你:工业实践!相关概念:

ALU:CPU计算单元,加减乘除都在这里算
PC:寄存器,ALU从寄存器读取一次数据为一个周期,需要时间小于1ns
L1:1级缓存,当ALU从寄存器拿不到数据的时候,会从L1缓存去拿,耗时约1ns
L2:2级缓存,当L1缓存里没有数据的时候,会从L2缓存去拿,耗时约3ns
L3:3级缓存,一颗CPU里的双核共用,L2没有,则去L3去拿,耗时约15ns
RAM内存:当缓存都没有数据的时候,会从内存读取数据
缓存行:CPU从内存读取数据到缓存行的时候,是一行一行的缓存,每行是64字节(现代处理器)
问题来了:

1、缓存行存在的意义?好处是什么?

空间的考虑:一个地址被访问,相连的地址很大可能也被访问;

时间的考虑:最近访问的会被频繁访问好处:比如相连的地址,典型的就是数组,连续内存访问,很快!

2、缓存行会带来什么问题?

缓存行会导致缓存失效的问题,从而导致程序运行效率低下。例如下图:

当x,y两个变量在一个缓存行的时候:

1、线程1执行x++操作,将x和y所在的缓存行缓存到cpu core1里面去,

2、线程2执行y++操作,也将x和y所在的缓存行缓存到cpu core2里面去,

3、线程1执行了x++操作,写入到内存,同时为了保证cpu的缓存一致性协议,需要使其他内核x,y所在的缓存行失效,意味着线程2去执行y++操作的时候,无法从自己的cpu缓存拿到数据,必须从内存获取。

这就是缓存行失效!

一段代码来验证缓存行失效的问题:

缓存行失效例程

耗时:2079ms
这个时候我们做一个程序的改动,在x变量的前面和后面各加上7个long类型变量,如下:

再次运行,看耗时输出:

耗时:671ms
大约三倍的速度差距!

关于缓存行的更多概念,大家也可以点击下方卡片直接搜索更多信息:

搜更多精彩内容

缓存行

3、CPU优化导致的乱序执行

上文在说缓存行的时候,主要是因为CPU的速度大约是内存的速度的100倍,因此CPU在执行指令的时候,为了不等待内存数据的读取,会存在CPU指令优化而导致乱序执行的情况。

看下面这段代码:

cpu乱序执行例程

执行后输出(我执行了900多万次才遇到x=0,y=0的情况,可以试试你的运气哦~):

因为CPU的速度比内存要快100倍,所以当有两行不相关的代码在执行的时候,CPU为了优化执行速度,是会乱序执行的,所以上面的程序会输出:x=0,y=0的情况,也就是两个线程的执行顺序变成了:

x = b;
y = a;
a = 1;
b = 1;
这个时候我们就需要加volatile关键字了,来禁止CPU的指令重排序!

4、DCL单例模式需要加volatile吗?

一道经典的面试题:DCL单例模式需要加volatile字段吗?先来看DCL单例模式的一段代码:

DCL单例模式

DCL全称叫做Double Check Lock,就是双重检查锁来保证一个对象是单例的。

核心的问题就是这个INSTANCE变量是否需要加volatile关键字修饰?答案肯定是需要的。

首先我们来看new一个对象的字节码指令:

查看其字节码指令:

NEW java/lang/Object
DUP
INVOKESPECIAL java/lang/Object.<init> ()V
ASTORE 1
即:

1、创建并默认初始化Object对象;

2、复制操作数栈对该对象的引用;

3、调用Object对象的初始化方法;

4、将变量Object o指向创建的这个对象,此时变量o不再为null;

根据上文描述我们知道因为CPU和内存速度不匹配的问题,CPU在执行命令的时候是乱序执行的,即CPU在执行第3步初始化方法时候如果需要很长的时间,CPU是不会等待第3步执行完了才去执行第4步,所以执行顺序可能是1、2、4、3。

那么继续看DCL单例程序,当线程1执行new DCLStudy()的顺序是先astore再invokespecial,但是invokespecial方法还没有执行的时候,线程2进来了,这个时候线程2拿到的就是一个半初始化的对象。

因此,DCL单例模式需要加volatile关键字,来禁止上述new对象的过程的指令重排序!

valatile关键字是如何禁止指令重排序的

JVM规范中规定:凡是被volatile修饰的变量,在进行其操作时候,需要加内存屏障!

JVM规范中定义的JSR内存屏障定义:

LoadLoad屏障:
对于语句Load1;LoadLoad;Load2;Load1和Load2语句不允许重排序。
StoreStore屏障:
对于语句Store1;StoreStore;Store2;Store1和Store2语句不允许重排序。
LoadStore屏障:
对于语句Load1;StoreStore;Store2;Load1和Store2语句不允许重排序。
StoreLoad屏障:
对于语句Store1;StoreStore;Load2;Store1和Load2语句不允许重排序。
JVM层面volatile的实现要求:

如果对一个volatile修饰的变量进行写操作:

前面加StoreStoreBarrier屏障,保证前面所有的store操作都执行完了才能对当前volatile修饰的变量进行写操作;

后面要加StoreLoadBarrier,保证后面所有的Load操作必须等volatile修饰的变量写操作完成。

如果对一个volatile修饰的变量进行读操作:

后面的读操作LoadLoadBarrier必须等当前volatile修饰变量读操作完成才能读;

后面的写操作LoadStoreBarrier必须等当前的volatile修饰变量读操作完成才能写。

上篇文章我们通过一定的方式看到了程序执行的volatile修饰的变量底层汇编码:

0x000000010d3f3203: lock addl $0x0,(%rsp) ;*putstatic flag
; - com.java.study.VolatileStudy::lambda$main$1@9 (line 31)
也就是到CPU的底层执行的命令其实就是这个lock,这个lock指令既完成了变量的可见性还保证了禁止指令充排序:

LOCK用于在多处理器中执行指令时对共享内存的独占使用。它的作用是能够将当前处理器对应缓存的内容刷新到内存,并使其他处理器对应的缓存失效;另外还提供了有序的指令无法越过这个内存屏障的作用。
end

至此,对volatile的学习就到这里了,通过两篇文章来对volatile这个关键字有了一个系统的学习。

学无止境,对volatile的学习还只是一个基础学习,还有更多的知识等待我们去探索学习,例如:

什么是as-if-serial?什么是happens-before?
Java的哪些指令可以重排序呢?重排序的规则是什么?
我们下期再见!

1372阅读
搜索
java自学一般要学多久
volatile底层原理
汇编111条指令详解
java必背100源代码
volatile架构图
嵌入式volatile详解

F. 内存屏障

内存屏障(Memory barrier)

每个CPU都会有自己的缓存(有的甚至L1,L2,L3),缓存的目的就是为了提高性能,避免每次都要向内存取。但是这样的弊端也很明显:不能实时的和内存发生信息交换,分在不同CPU执行的不同线程对同一个变量的缓存值不同。

用volatile关键字修饰变量可以解决上述问题,那么volatile是如何做到这一点的呢?那就是内存屏障,内存屏障是硬件层的概念,不同的硬件平台实现内存屏障的手段并不是一样,java通过屏蔽这些差异,统一由jvm来生成内存屏障的指令。

硬件层的内存屏障分为两种:Load Barrier 和 Store Barrier即读屏障和写屏障。

内存屏障有两个作用:

对于Load Barrier来说,在指令前插入Load Barrier,可以让高速缓存中的数据失效,强制从新从主内存加载数据;

对于Store Barrier来说,在指令后插入Store Barrier,能让写入缓存中的最新数据更新写入主内存,让其他线程可见。

java的内存屏障通常所谓的四种即LoadLoad,StoreStore,LoadStore,StoreLoad实际上也是上述两种的组合,完成一系列的屏障和数据同步功能。

LoadLoad屏障:对于这样的语句Load1; LoadLoad; Load2,在Load2及后续读取操作要读取的数据被访问前,保证Load1要读取的数据被读取完毕。

StoreStore屏障:对于这样的语句Store1; StoreStore; Store2,在Store2及后续写入操作执行前,保证Store1的写入操作对其它处理器可见。

LoadStore屏障:对于这样的语句Load1; LoadStore; Store2,在Store2及后续写入操作被刷出前,保证Load1要读取的数据被读取完毕。

StoreLoad屏障:对于这样的语句Store1; StoreLoad; Load2,在Load2及后续所有读取操作执行前,保证Store1的写入对所有处理器可见。 它的开销是四种屏障中最大的。在大多数处理器的实现中,这个屏障是个万能屏障,兼具其它三种内存屏障的功能

  volatile的内存屏障策略非常严格保守,非常悲观且毫无安全感的心态:

由于内存屏障的作用,避免了volatile变量和其它指令重排序、线程之间实现了通信,使得volatile表现出了锁的特性。

对于final域,编译器和CPU会遵循两个排序规则:

总之上面规则的意思可以这样理解,必需保证一个对象的所有final域被写入完毕后才能引用和读取。这也是内存屏障的起的作用:

写final域:在编译器写final域完毕,构造体结束之前,会插入一个StoreStore屏障,保证前面的对final写入对其他线程/CPU可见,并阻止重排序。

读final域:在上述规则2中,两步操作不能重排序的机理就是在读final域前插入了LoadLoad屏障。

X86处理器中,由于CPU不会对写-写操作进行重排序,所以StoreStore屏障会被省略;而X86也不会对逻辑上有先后依赖关系的操作进行重排序,所以LoadLoad也会变省略。

G. CPU的缓存是干什么用的

CPU缓存是改善CPU运行速度的,理论上缓存越大性能越好,但是核心没有那么高的话,即使大缓存,也不见得处理器的性能会很高
第一个问题,你开QQ、MSN、旺旺用的都是内存,和CPU缓存没有关系,CPU缓存是在处理数据的时候才会被应用,一半这类IM软件的时候,CPU几乎是不怎么工作的,缓存多大也没多大的用
第二个问题,浏览网站,和CPU有关系嘛?
同样用的还是浏览器,除非你的网页上有大量的图片和视频文件,这个时候CPU才会介入,CPU要解码的自然会浪费CPU资源的
第三个问题,对CPU缓存要求大小,我觉得还是处理数据的时候,文件转码、解压缩文件、做渲染的时候才会浪费的,但是前面也提到了,缓存只是CPU的一个参数而已,就像AMD和INTEL两家的处理器一样的原理,AMD的缓存都是很低的,相反INTEL越是强大的处理器缓存就越大,不同架构不同核心处理器的缓存不同。CPU缓存一般1M够多了

H. CPU的缓存是什么,为什么作用这么大

请看来自于网络的引用:
CPU缓存简介
CPU缓存(Cache
Memory)是位于CPU与内存之间的临时存储器,它的容量比内存小的多但是交换速率却比内存要快得多。缓存的出现主要是为了解决CPU运算速率与内存读写速率不匹配的矛盾,因为CPU运算速率要比内存读写速率快很多,这样会使CPU花费很长时间等待数据到来或把数据写入内存。在缓存中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可避开内存直接从缓存中调用,从而加快读取速率。由此可见,在CPU中加入缓存是一种高效的解决方案,这样整个内存储器(缓存+内存)就变成了既有缓存的高速率,又有内存的大容量的存储系统了。缓存对CPU的性能影响很大,主要是因为CPU的数据交换顺序和CPU与缓存间的带宽引起的。
顺便说一下,我们现在使用的CPU都有几个级别的缓存,分别是一级缓存(L1
cache),二级缓存(L2
cache),三级缓存(L3
cache)(AMD处理器有些没有三级缓存)。在CPU的其他参数都相同的情况下,缓存越大其性能也就越高。CPU缓存的读取速率是非常高的,能达几十万MB/s.

I. CPU的缓存有什么作用

CPU缓存:(Cache Memory)是位于CPU与内存之间的临时存储器,它的容量比内存小的多但是交换速度却比内存要快得多。高速缓存的出现主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾,因为CPU运算速度要比内存读写速度快很多,这样会使CPU花费很长时间等待数据到来或把数据写入内存。在缓存中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可先缓存中调用,从而加快读取速度。

J. 内存屏障笔记

https://www.researchgate.net/publication/228824849_Memory_Barriers_a_Hardware_View_for_Software_Hackers

这是阅读这篇文章的一个笔记。该文从CPU乱序执行和缓存实现的角度来说明内存屏障是怎么回事。

CPU为了优化性能会同时执行多条指令,有可能后面的指令会先完成。CPU会保证从软件的角度来看,这个乱序执行和顺序执行的可观察结果是一样的,但这个仅仅限于单个CPU的情况。多个CPU的时候乱序执行有时不是程序想要的,而CPU没有相关的信息做判断,这时要软件通过内存屏障强制CPU做些特殊处理。

CPU(或者CPU核,下同)有自己的缓存(Cache)。但是也要让所有CPU看到一个一致的内存数据,各个CPU和内存控制器通过共享的总线运行一套协议(MESI协议及变种)来实现这点。

最主要的是当一个CPU要写数据的时候,发送Invalidate消息给所有的其他CPU,其他的CPU要回应InvalidateAck,当所有的InvalidateAck都收到的时候,就可以写数据到自己缓存。收到Invalidate的CPU要把这个数据从它自己的缓存中清除出去(如果有的话),这样当这个CPU要读取这个数据的时候,会发出Read消息,刚才写数据的CPU会响应最新的数据。

但是上面的协议有两个性能上的问题需要进行优化,而这两个优化导致需要内存屏障。

性能问题1 - 引入Store Buffer
写数据的CPU要等所有的InvalidateAck收到是需要等很久的,所以它先把数据暂时写到Store Buffer里面,然后继续执行后面的指令。在Store Buffer里面的数据别人都读不到,只有它自己能读。等收到所有InvalidateAck的时候再把Store Buffer里面的数据更新到自己缓存,此时别的CPU才能通过Read消息读到。
有了Store Buffer之后下面的程序会表现奇怪:

设想CPU1执行foo,CPU2执行bar。CPU1执行完成b=1的时候(InvalidateAck b都收到),a=1的执行结果还在Store Buffer中(有的InvalidateAck还没有收到)。而CPU2此时没有收到Invalidate a(或者收到Invalidate a,但还没有从缓存清除数据a),那么第10行的assert会fail。CPU2先观察到b==1,退出循环,但是此时第10行读取的a还是初始值0。
解决方法是在a=1和b=1之间插入写内存屏障smp_wmb,其作用就是等待内存屏障之前Store Buffer清空,就是说所有的InvalidateAck a要收到,然后把a的最新值写到缓存。而CPU2执行assert的时候必然已经发过InvalidateAck,再读取a时需要时发送Read请求,CPU1可以响应a的最新值1。

性能问题2 - 引入Invalidate Queue
CPU在收到Invalidate后,要把数据从缓存中清除出去这个操作很慢,从而发送InvalidateAck延迟,进而导致写操作变慢。解决方法是收到Invalidate之后立刻回应InvalidateAck,但是把Invalidate请求放在Invalidate Queue中慢慢处理。这时候上面的程序还有问题(尽管加了写内存屏障),尽管在执行第10行的时候,CPU2收到了Invalidate a,但是还放在队列中没有执行,读到的还是之前缓存的初始值0。解决方法是在第9行和第10行之间插入读内存屏障smp_rmb,其作用是执行所有Invalidate Queue中的请求,从而对于smp_rmb之后的读取时总是要发出Read请求,从而得到最新的数据。程序中执行第10行的时候,数据a已经从缓存清除出去了,再次发出Read时读取到最新值1。