继续各种处理器简介 - II

来源:互联网 发布:网络创世纪 不列颠之王 编辑:程序博客网 时间:2024/05/14 09:32
 
继续我的读书笔记,没想到处理器这里真的是博大精深啊,这么多的内容,看来可以和OS合称双璧了。
 
概念4Register Remapping
 
抽丝拨茧寻根问源,一个个找到制约处理器性能的因素,这里就有一个 – RegisterRegister的问题可以归纳为多重调用,形成等待;在一个处理器里面,Register的数目是影响成本、性能的一个关键因子,需要一个很好的Trade Off - Register Remapping。就是说,为了降低成本、降低制造难度,减少了Register的数量(假设有6Register),当程序占用R1~R4的时候,因为程序的需要,又需要使用3Register的资源,这时候Register的数量不够了,就调用R1~R3,但是前面R1~R4正在被占用,怎么办呢?——loading and unloading,参见下面的文字:
This was necessary so that if function “Red” used register r3, and it called function “Yellow” which also used register r3, the value of r3 wouldn’t change from when “Red” called “Yellow” to when it returned from “Yellow”, even though “Yellow” modified r3 several times.(我认为这就是loading and unloading
Now this took immense amounts of time, loading and unloading those registers. And the processor was just sitting idle while that was going on. No matter how much you cranked up the clock speed, the old joke is right: all processors wait at exactly the same rate.
中间的环节怎样呢,r3的值被固定了(我理解的是OS看来),即便中间过程Yellow调用r3的时候,需要很多次修改r3的数值,显然这需要在每次r3的数值修改的时候,通过loading from cache and unloading to cache,这就是多重调用,形成等待。这也是单线程的缺点,每个环节都要等待前一个环节完成之后才能开始执行,更不用说有些环节还需要复杂的交互(与Cache交互,与I/O交互等)。
 
解决之道,Register Remapping
The more modern way of doing things is to have a large number of registers, in some cases a *very* large number of registers. And the compiler is free to use those registers, instead of allocating variables on the stack in main memory, in order to get higher performance without memory stalls. But in many cases, functions still use only a very small number of registers at a time. What you can do, in addition to using more registers, is to avoid the loading and unloading of register values every time you make a call to another function.
我再试着用通俗的语言表达一下Register Remapping:增加了Register的数量,当出现Function多重调用Register的情况时,避免了loading and unloading Data between Register and Cache/Memory。如此一来,使单线程的瓶颈多发地带变成了类似多线程的并发执行状态。
 
概念5Multi-Threading || Simultaneous Multi-Threading (IBM POWER)
 
关于多线程,这里从题目就开始区别,多线程和并发多线程,说到这里,先回顾一下历史:“IBM / POWER5 / 2004HP / PA-RISC / N/ASUN / US-IV+ / 2005Intel / Montecito / 2006”可以看到,IBM依然是多线程这一概念的最早提出者和首个实现者;就在刚刚,我以为Multi-ThreadingSimultaneous Multi-Threading之间存在区别,但是仔细研究之后发现,只是名称的区别而已;IBM Simultaneous Multi-Threading,然后是Sun CoolThreadIntel Montecito Paralleling Thread。这里暂时有一个猜测,是不是“如果CPUN核,那么就可以实现并发N线程呢(而且是每个核都是N线程,整个CPU 就是N*N线程了)。注意这里不是CPU板,所谓CPU,必须是这N个核集成在同一块共享HyperTransport上(HyperTransportFirmWare,借用AMD的概念;也可以建立在共享L2上,总之呢这里需要有一个共享的调度中心)”。
 
From the perspective of THREAD, CPU的优化历程:
1.       General purpose “arithmetic logical units”, or ALUs,在时间纬度上看来,运算的进展只有一条线,就是在单一的ALU上依次展开,由于ALU的特殊性,各种类型的运算都可以在ALU上面执行,所以,ALU上面的运算模式如下,运算subFunction1 >> Wait >> subFunction2… 这样做有显而易见的缺点,就是,But a very common case is when the next instruction has a dependency on the results of a previous instruction,统计如下,在每个subFunction之间的等待时间通常要占据50%~80%CPU时间。
2.       Super ScalarThe solution for this is called “super-scalar”, where there are many different types of execution units. 也就是说,有各种专业类型的处理单元,例如INT(整形),FP(浮点)。——对于第一种类型的CPU,缺点不仅仅是CPU运算单元执行时间的浪费,更重要的是业务处理时间的漫长,因为只有一个ALU,假设一个作业/业务需要如下的操作(INT1 >> FP1 >> FP2 >> INT2 >> FP3)那么,在每个作业执行之前都要先等待上一个作业完成。而采用了Super Scalar之后,就可以有INTFP的并行业务线,每个FPINT)业务执行之前,只要其他的INTFP)业务已经完成,就不需要再继续等待。By duplicating the functional units, the red thread can execute an integer instruction at the same time it is executing a floating point instruction, and in a few cycles later it can do two other floating point instructions, then two cycles later it can execute another floating point instruction and another integer instruction. 这个时候,“在恰当的时间送给CPU运算单元恰当的指令(Instruction)”非常重要,This is one of the reasons that RISC doesn’t really stand for Reduced Instruction Set Computing, but instead for Relegate the Important Stuff to the Compiler. :^) 呵呵,一个蛮好的RISC定义啊。
3.       后来又出现了双核CPU,最大的特色在于The two cores usually share their data lines to memory and often share L3 cache, 共享L3,共享CPU到内存的通道。对于Super Scalar带来的好处,有下面的评价,以及新的拓展,这就是双核的出现。And this is pretty good, but Moore’s Law kicked in again, and we found that we could shrink even a super-scalar processor down, which lets us duplicate the functional units even more, so we have a whole extra set of not only floating point and integer units, but also registers, what we old-timers call program counters but you youngsters call instruction pointers, processor status lines, pipelines, etc, which are presented to the programs as separate processorS, even though they are in a single chip. 这样子,产生了下面的疑问So what if there was a way for a process to do two different things at once?对于双核CPU的情形,最简单的一种应用是,在core1中执行 red thread,在core2中执行blue thread,然后拓展,在上述thread执行的同时,red thread 同时在core2中执行,blue thread同时在core1中执行,这样子就相当于在core1core2中都执行red blue两个threadThis approach, where one thread of the process runs on one core and the other thread of the same process runs on the other core, is called Chip Multi Threading
4.       然后还可以继续扩展,Quad-Core Module,这就是在一个CPU 中有2个双核模块,然后每个core都是执行2个线程,——Multi-Thread Multi-Core
 
概念6Multi-Thread Approaching
 
2core放在一个单独的处理器中,每个core执行单一Thread,这就是Non Shared Resource,例如UltraSPARC IVHP PA-8800 and PA-8900,这仅仅是chip level multithreading。然后就是Multi-Thread在一个core内部执行,这时候最重要的就是“Thread Schedule机制——How to Schedule the threads”有三种选择,第一,Single Thread temporally;第二, Single Thread by event——传说中的Itanium2 Montecito就是这个类型,特点是容易实现缺点是利用率不够高;第三,multi-ThreadPOWER4 / 4+ / 5 / 5+Simultaneous Multi-Threading)是这个类型,但是实现的技术复杂,可以达到最高的利用率,SunUltraSPARC T1(Fine Grained Multi-Threading)也是这个类型。
 
这里需要清楚一个单独的概念“HyperThreading”,看看下面的说明,同时还有HyperTransport
HyperTransport是为了提高多处理器系统的可扩展性而开发的总线技术,是一项点对点的汇流排技术,其前身也就是被称为快速数据传输LDT的技术。HyperTransport技术通过为系统(例如从内存控制器到硬盘控制器、或PCI汇流排控制器)提供高速通信所需的带宽,力求减少系统内总线的数量;同时它也为嵌入式的应用方案提供高性能的联系方式,以及为可灵活变化的多处理器系统提供支持。这种通信技术可确保个人电脑芯片、网络及通信设备之间的数据传输峰值速度提高到过去的24倍。理论上,HyperTransport的总线速度可达6.4Gbps,这相当于32-bit33MHz PCI总线速度的48倍,或者说比64-bit66MHz PCI总线速度快12倍。HyperTransport支持许多外部总线标准(如外围设备互连规范)和诸如Infiniband的新一代技术,HyperTransport将为新的Infiniband标准提供所需的带宽,确保电信业中枢backbone结构所采用的新一代服务器及设备可以支持系统存储器及器件进行互相通信。与允许多台设备共享同一条总线的PCI规范不同,HyperTransport只允许一台设备在线工作,但它能与系统中其它总线结合在一起,共同组成一条多设备总线通道。
 
HyperTransport可以应用在服务器、工作站、网络交换器与内嵌式应用系统中。另外,HyperTransport还具有可菊环 daisy-chainable 连接的特性,它可将多个HyperTransport输入/输出桥接芯片连接至一条通道。HyperTransport可支持每通道高达32颗芯片,并可因应不同的总线带宽及速度而搭配不同的器件。值得一提的是,AMD将在其x86-64体系的下一个开发代号为Hammer的微处理器中采用HyperTransport技术。
 
超线程技术
CPU生产商为了提高CPU的性能,通常做法是提高CPU的时钟频率和增加缓存容量。不过目前CPU的频率越来越快,如果再通过提升CPU频率和增加缓存的方法来提高性能,往往会受到制造工艺上的限制以及成本过高的制约。
 
尽管提高CPU的时钟频率和增加缓存容量后的确可以改善性能,但这样的CPU性能提高在技术上存在较大的难度。实际上在应用中基于很多原因,CPU的执行单元都没有被充分使用。如果CPU不能正常读取数据(总线/内存的瓶颈),其执行单元利用率会明显下降。另外就是目前大多数执行线程缺乏ILPInstruction-Level Parallelism,多种指令同时执行)支持。这些都造成了目前CPU的性能没有得到全部的发挥。因此,Intel则采用另一个思路去提高CPU的性能,让CPU可以同时执行多重线程,就能够让CPU发挥更大效率,即所谓“超线程(Hyper-Threading,简称“HT”)”技术。超线程技术就是利用特殊的硬件指令,把两个逻辑内核模拟成两个物理芯片,让单个处理器都能使用线程级并行计算,进而兼容多线程操作系统和软件,减少了CPU的闲置时间,提高的CPU的运行效率。
 
采用超线程及时可在同一时间里,应用程序可以使用芯片的不同部分。虽然单线程芯片每秒钟能够处理成千上万条指令,但是在任一时刻只能够对一条指令进行操作。而超线程技术可以使芯片同时进行多线程处理,使芯片性能得到提升。
 
超线程技术是在一颗CPU同时执行多个程序而共同分享一颗CPU内的资源,理论上要像两颗CPU一样在同一时间执行两个线程,P4处理器需要多加入一个Logical CPU Pointer(逻辑处理单元)。因此新一代的P4 HTdie面积比以往的P4增大了5%。而其余部分如ALU(整数运算单元)、FPU(浮点运算单元)、L2 Cache(二级缓存)则保持不变,这些部分是被分享的。
 
虽然采用超线程技术能同时执行两个线程,但它并不象两个真正的CPU那样,每个CPU都具有独立的资源。当两个线程都同时需要某一个资源时,其中一个要暂时停止,并让出资源,直到这些资源闲置后才能继续。因此超线程的性能并不等于两颗CPU的性能。
 
英特尔P4 超线程有两个运行模式,Single Task Mode(单任务模式)及Multi Task Mode(多任务模式),当程序不支持Multi-Processing(多处理器作业)时,系统会停止其中一个逻辑CPU的运行,把资源集中于单个逻辑CPU中,让单线程程序不会因其中一个逻辑CPU闲置而减低性能,但由于被停止运行的逻辑CPU还是会等待工作,占用一定的资源,因此Hyper-Threading CPU运行Single Task Mode程序模式时,有可能达不到不带超线程功能的CPU性能,但性能差距不会太大。也就是说,当运行单线程运用软件时,超线程技术甚至会降低系统性能,尤其在多线程操作系统运行单线程软件时容易出现此问题。
 
 
原创粉丝点击