﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-酱坛子-文章分类-5. 硬件</title><link>http://www.cppblog.com/sunraiing9/category/2819.html</link><description>专注C++技术  在这里写下自己的学习心得 感悟 
和大家讨论 共同进步（欢迎批评！！！）</description><language>zh-cn</language><lastBuildDate>Tue, 20 May 2008 12:10:54 GMT</lastBuildDate><pubDate>Tue, 20 May 2008 12:10:54 GMT</pubDate><ttl>60</ttl><item><title>CPU基础知识</title><link>http://www.cppblog.com/sunraiing9/articles/13742.html</link><dc:creator>@王一伟</dc:creator><author>@王一伟</author><pubDate>Mon, 16 Oct 2006 00:49:00 GMT</pubDate><guid>http://www.cppblog.com/sunraiing9/articles/13742.html</guid><wfw:comment>http://www.cppblog.com/sunraiing9/comments/13742.html</wfw:comment><comments>http://www.cppblog.com/sunraiing9/articles/13742.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/sunraiing9/comments/commentRss/13742.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sunraiing9/services/trackbacks/13742.html</trackback:ping><description><![CDATA[
		<p>(注释：引用)<br /><br />AMD公司设计，可以在同一时间内处理64位的整数运算，并兼容于X86-32架构。其中支持64位逻辑定址，同时提供转换为32位定址选项；但数据操作指令默认为32位和8位，提供转换成64位和16位的选项；支持常规用途寄存器，如果是32位运算操作，就要将结果扩展成完整的64位。这样，指令中有“直接执行”和“转换执行”的区别，其指令字段是8位或32位，可以避免字段过长。 　　</p>
		<p>　　x86-64（也叫AMD64）的产生也并非空穴来风，x86处理器的32bit寻址空间限制在4GB内存，而IA-64的处理器又不能兼容 x86。AMD充分考虑顾客的需求，加强x86指令集的功能，使这套指令集可同时支持64位的运算模式，因此AMD把它们的结构称之为x86-64。在技术上AMD在x86-64架构中为了进行64位运算，AMD为其引入了新增了R8-R15通用寄存器作为原有X86处理器寄存器的扩充，但在而在32位环境下并不完全使用到这些寄存器。原来的寄存器诸如EAX、EBX也由32位扩张至64位。在SSE单元中新加入了8个新寄存器以提供对SSE2的支持。寄存器数量的增加将带来性能的提升。与此同时，为了同时支持32和64位代码及寄存器，x86-64架构允许处理器工作在以下两种模式：Long Mode(长模式)和Legacy Mode(遗传模式)，Long模式又分为两种子模式(64bit模式和Compatibility mode兼容模式)。该标准已经被引进在AMD服务器处理器中的Opteron处理器。 　　</p>
		<p>　　而今年也推出了支持64位的EM64T技术，再还没被正式命为EM64T之前是IA32E，这是英特尔64位扩展技术的名字,用来区别X86 指令集。Intel的EM64T支持64位sub-mode，和AMD的X86-64技术类似，采用64位的线性平面寻址，加入8个新的通用寄存器（GPRs），还增加8个寄存器支持SSE指令。与AMD相类似，Intel的64位技术将兼容IA32和IA32E，只有在运行64位操作系统下的时候，才将会采用IA32E。IA32E将由2个sub-mode组成：64位sub-mode和32位sub-mode，同AMD64一样是向下兼容的。 Intel的EM64T将完全兼容AMD的X86-64技术。现在Nocona处理器已经加入了一些64位技术，Intel的Pentium 4E处理器也支持64位技术。 　　</p>
		<p>　　应该说，这两者都是兼容x86指令集的64位微处理器架构，但EM64T与AMD64还是有一些不一样的地方，AMD64处理器中的NX位在Intel的处理器中将没有提供。</p>
		<p>　　11.超流水线与超标量</p>
		<p>　　在解释超流水线与超标量前，先了解流水线(pipeline)。流水线是Intel首次在486芯片中开始使用的。流水线的工作方式就象工业生产上的装配流水线。在CPU中由5-6个不同功能的电路单元组成一条指令处理流水线，然后将一条X86指令分成5-6步后再由这些电路单元分别执行，这样就能实现在一个CPU时钟周期完成一条指令，因此提高CPU的运算速度。经典奔腾每条整数流水线都分为四级流水，即指令预取、译码、执行、写回结果，浮点流水又分为八级流水。 　　</p>
		<p>　　超标量是通过内置多条流水线来同时执行多个处理器，其实质是以空间换取时间。而超流水线是通过细化流水、提高主频，使得在一个机器周期内完成一个甚至多个操作，其实质是以时间换取空间。例如Pentium 4的流水线就长达20级。将流水线设计的步(级)越长，其完成一条指令的速度越快，因此才能适应工作主频更高的CPU。但是流水线过长也带来了一定副作用，很可能会出现主频较高的CPU实际运算速度较低的现象，Intel的奔腾4就出现了这种情况，虽然它的主频可以高达1.4G以上，但其运算性能却远远比不上AMD 1.2G的速龙甚至奔腾III。</p>
		<p>　　12.封装形式</p>
		<p>　　CPU封装是采用特定的材料将CPU芯片或CPU模块固化在其中以防损坏的保护措施，一般必须在封装后CPU才能交付用户使用。CPU的封装方式取决于CPU安装形式和器件集成设计，从大的分类来看通常采用Socket插座进行安装的CPU使用PGA(栅格阵列)方式封装，而采用Slot x槽安装的CPU则全部采用SEC(单边接插盒)的形式封装。现在还有PLGA(Plastic Land Grid Array)、OLGA(Organic Land Grid Array)等封装技术。由于市场竞争日益激烈，目前CPU封装技术的发展方向以节约成本为主。</p>
		<p>　　13、多线程</p>
		<p>　　同时多线程Simultaneous multithreading，简称SMT。SMT可通过复制处理器上的结构状态，让同一个处理器上的多个线程同步执行并共享处理器的执行资源，可最大限度地实现宽发射、乱序的超标量处理，提高处理器运算部件的利用率，缓和由于数据相关或Cache未命中带来的访问内存延时。当没有多个线程可用时，SMT 处理器几乎和传统的宽发射超标量处理器一样。SMT最具吸引力的是只需小规模改变处理器核心的设计，几乎不用增加额外的成本就可以显著地提升效能。多线程技术则可以为高速的运算核心准备更多的待处理数据，减少运算核心的闲置时间。这对于桌面低端系统来说无疑十分具有吸引力。Intel从3.06GHz Pentium 4开始，所有处理器都将支持SMT技术。</p>
		<p>　　14、多核心</p>
		<p>　　多核心，也指单芯片多处理器（Chip multiprocessors，简称CMP）。CMP是由美国斯坦福大学提出的，其思想是将大规模并行处理器中的SMP（对称多处理器）集成到同一芯片内，各个处理器并行执行不同的进程。与CMP比较， SMT处理器结构的灵活性比较突出。但是，当半导体工艺进入0.18微米以后，线延时已经超过了门延迟，要求微处理器的设计通过划分许多规模更小、局部性更好的基本单元结构来进行。相比之下，由于CMP结构已经被划分成多个处理器核来设计，每个核都比较简单，有利于优化设计，因此更有发展前途。目前， IBM 的Power 4芯片和Sun的 MAJC5200芯片都采用了CMP结构。多核处理器可以在处理器内部共享缓存，提高缓存利用率，同时简化多处理器系统设计的复杂度。</p>
		<p>　　2005年下半年，Intel和AMD的新型处理器也将融入CMP结构。新安腾处理器开发代码为Montecito，采用双核心设计，拥有最少18MB片内缓存，采取90nm工艺制造，它的设计绝对称得上是对当今芯片业的挑战。它的每个单独的核心都拥有独立的L1，L2和L3 cache，包含大约10亿支晶体管。</p>
		<p>　　 15、SMP 　　</p>
		<p>　　SMP（Symmetric Multi-Processing），对称多处理结构的简称，是指在一个计算机上汇集了一组处理器(多CPU),各CPU之间共享内存子系统以及总线结构。在这种技术的支持下，一个服务器系统可以同时运行多个处理器，并共享内存和其他的主机资源。像双至强，也就是我们所说的二路，这是在对称处理器系统中最常见的一种（至强MP可以支持到四路，AMD Opteron可以支持1-8路）。也有少数是16路的。但是一般来讲，SMP结构的机器可扩展性较差，很难做到100个以上多处理器，常规的一般是8个到16个，不过这对于多数的用户来说已经够用了。在高性能服务器和工作站级主板架构中最为常见，像UNIX服务器可支持最多256个CPU的系统。　　</p>
		<p>　　构建一套SMP系统的必要条件是：支持SMP的硬件包括主板和CPU；支持SMP的系统平台，再就是支持SMP的应用软件。</p>
		<p>　　为了能够使得SMP系统发挥高效的性能，操作系统必须支持SMP系统，如WINNT、LINUX、以及UNIX等等32位操作系统。即能够进行多任务和多线程处理。多任务是指操作系统能够在同一时间让不同的CPU完成不同的任务；多线程是指操作系统能够使得不同的CPU并行的完成同一个任务。　　</p>
		<p>　　要组建SMP系统，对所选的CPU有很高的要求，首先、CPU内部必须内置APIC（Advanced Programmable Interrupt Controllers）单元。Intel 多处理规范的核心就是高级可编程中断控制器（Advanced Programmable Interrupt Controllers--APICs）的使用；再次，相同的产品型号，同样类型的CPU核心，完全相同的运行频率；最后，尽可能保持相同的产品序列编号，因为两个生产批次的CPU作为双处理器运行的时候，有可能会发生一颗CPU负担过高，而另一颗负担很少的情况，无法发挥最大性能，更糟糕的是可能导致死机。 　　</p>
		<p>　　16、NUMA技术 　　</p>
		<p>　　NUMA即非一致访问分布共享存储技术，它是由若干通过高速专用网络连接起来的独立节点构成的系统，各个节点可以是单个的CPU或是SMP系统。在NUMA中，Cache 的一致性有多种解决方案，需要操作系统和特殊软件的支持。图2中是Sequent公司NUMA系统的例子。这里有3个SMP模块用高速专用网络联起来，组成一个节点，每个节点可以有12个CPU。像Sequent的系统最多可以达到64个CPU甚至256个CPU。显然，这是在SMP的基础上，再用 NUMA的技术加以扩展，是这两种技术的结合。</p>
		<p>　　17、乱序执行技术　　</p>
		<p>　　乱序执行（out-of-orderexecution），是指CPU允许将多条指令不按程序规定的顺序分开发送给各相应电路单元处理的技术。这样将根据个电路单元的状态和各指令能否提前执行的具体情况分析后，将能提前执行的指令立即发送给相应电路单元执行，在这期间不按规定顺序执行指令，然后由重新排列单元将各执行单元结果按指令顺序重新排列。采用乱序执行技术的目的是为了使CPU内部电路满负荷运转并相应提高了CPU的运行程序的速度。分枝技术：（branch）指令进行运算时需要等待结果，一般无条件分枝只需要按指令顺序执行，而条件分枝必须根据处理后的结果，再决定是否按原先顺序进行。</p>
		<p>　　18、CPU内部的内存控制器　　</p>
		<p>　　许多应用程序拥有更为复杂的读取模式（几乎是随机地，特别是当cache hit不可预测的时候），并且没有有效地利用带宽。典型的这类应用程序就是业务处理软件，即使拥有如乱序执行（out of order execution）这样的CPU特性，也会受内存延迟的限制。这样CPU必须得等到运算所需数据被除数装载完成才能执行指令（无论这些数据来自CPU cache还是主内存系统）。当前低段系统的内存延迟大约是120－150ns，而CPU速度则达到了3GHz以上，一次单独的内存请求可能会浪费200 －300次CPU循环。即使在缓存命中率（cache hit rate）达到99％的情况下，CPU也可能会花50％的时间来等待内存请求的结束－比如因为内存延迟的缘故。　　</p>
		<p>　　你可以看到Opteron整合的内存控制器，它的延迟，与芯片组支持双通道DDR内存控制器的延迟相比来说，是要低很多的。英特尔也按照计划的那样在处理器内部整合内存控制器，这样导致北桥芯片将变得不那么重要。但改变了处理器访问主存的方式，有助于提高带宽、降低内存延时和提升处理器性能。<br /></p>
<img src ="http://www.cppblog.com/sunraiing9/aggbug/13742.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sunraiing9/" target="_blank">@王一伟</a> 2006-10-16 08:49 <a href="http://www.cppblog.com/sunraiing9/articles/13742.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>