首页 > 未分类 > (转)从CPU架构和技术的演变看GPU未来发展
2019
11-29

(转)从CPU架构和技术的演变看GPU未来发展

泡泡网显卡频道5月28日 自从AMD提出Fusion(融聚)的概念、NVIDIA加大力度推广GPU通用计算、Intel率先将CPU和GPU整合在一起之后,大家就会发现CPU和GPU从没如此亲密无间过,CPU和GPU之间有着太多的共同点使得它们的界限也开始模糊了起来。

(转)从CPU架构和技术的演变看GPU未来发展 - 第1张  | 逗分享开发经验

    喜欢研究IT硬件技术的朋友应该知道,CPU和GPU都是由整数运算单元、浮点运算单元、一级缓存、二级缓存、内存控制器等等模块组成的,但最终它们的应用领域又是截然不同的。

    到底是GPU取代CPU进行并行计算呢?还是CPU整合GPU成为大势所趋?这两种说法显然是相互对立的,均有不少支持者。但这只是表像,真正产生这一现状的原因依然隐藏在CPU和GPU的架构之中,通过笔者后文中的分析您会发现这两种说法不但不矛盾,反而代表了Intel、AMD和NVIDIA三大巨头已经达成的共识,他们正在以各自不同的方式去实现相同的目标。

(转)从CPU架构和技术的演变看GPU未来发展 - 第2张  | 逗分享开发经验

CPU和GPU的整体结构相似,但侧重点不同

    事实上,CPU和GPU都保持着一套相对固定的趋势,按照各自的轨迹在不停的发展、演变,两者在技术和架构方面有着很多不谋而合的共同点,而且最终也因为相同的目的而走到了一起。那么,CPU和GPU的碰撞将会亮出什么样的火花,未来的发展方向会朝向何处呢?下面我们就通过CPU和GPU的发展史来推测未来产品应该具备什么样的特征。

CPU篇:整合浮点运算协处理器


 

 

    首先我们来重拾一个几乎快要被遗忘的名词——协处理器,它是一种芯片,用于减轻系统微处理器的特定处理任务,早些年协处理器主要是用以辅助进行浮点运算。

最初的CPU只能进行整点运算,浮点运算效率极低

    CPU最基本的运算就是“加减乘除”,但实际上计算机只能用加法器来完成整数以及固定小数点位置(整点)的算术运算,而不能处理小数点可以浮动的数值(浮点)。对于小数多采用的是二进制的科学计数法、也就是浮点数表示法:尾数、阶数符号位各占一位,然后再对其余数位尾数、阶数的有效数位合理分配。

    在CPU运算时,浮点数的运算量远比整数复杂,因为不仅尾数要参与运算,阶数也要参与,并且需要对尾数和阶数的符号位都进行处理,所以,最早的CPU并没有能力进行浮点运算(8088/8086,80286,80386SX),需要浮点运算时,由CPU通过软件模拟来实现,所以,进行浮点运算时就会慢很多。

协处理器诞生,专门处理浮点运算

(转)从CPU架构和技术的演变看GPU未来发展 - 第3张  | 逗分享开发经验

8086处理器和它的协处理器8087

    8086是当今CPU的鼻祖,所谓X86架构也就是指8086处理器所开创的指令集体系。为了弥补8086在进行浮点运算时的不足,Intel与1980年设计了8087数学协处理器,并且为X86体系推出了第一个浮点格式IEE754。8087提供两个基本的32/64bit浮点资料形态和额外的扩展80bit内部支援来改进复杂运算之精度。除此之外,8087还提供一个80/17bit封装BCD (二进制编码之十进制)格式以及16/32/64bit整数资料形态。

(转)从CPU架构和技术的演变看GPU未来发展 - 第4张  | 逗分享开发经验

386处理器和它的协处理器387

    X87协处理器新增约60个指令给程序员,所有的指令都是以“F”开头跟其他的标准8086整数运算指令有所区别,举例来说,相对于ADD/MUL,8087提供FADD/FMUL。

    8087是于1980年发布,然后被80287、80387DX/SX和487SX所取代。

协处理器被整合进入CPU内部

    以往,协处理器都是可选配件,在主板上X86处理器旁边一般都会为X87设计一个空的插槽,只有当用户确实有需要时才会专门购买相应的X87协处理器插进去,来加速浮点运算。

(转)从CPU架构和技术的演变看GPU未来发展 - 第5张  | 逗分享开发经验

486DX是第一颗整合了浮点运算协处理器的产品,相当于486SX+487SX

    随着时代的发展,越来越多的程序要求使用更高精度的浮点运算,X87协处理器几乎成为必备品。于是在制造工艺日趋成熟之后,Intel在486一代将X86和X87整合在了一起,浮点运算成为了CPU的一项基本功能,而且重要性越来越大。

    Intel 486DX、Pentium之后的CPU都内含了协处理器,AMD K5、K6之后的CPU都内建了协处理器,所以此后就很少有人会提及协处理器的概念了。

CPU篇:扩展指令集加速浮点运算


 

 

    所谓X86架构的处理器就是采用了Intel X86指令集的处理器,X86指令集是Intel公司为其第一块16位处理器i8086所专门开发的。而IBM在1981年所推出的第一台PC机上所使用的处理器i8088(i8086的简化版)也是使用的X86指令集,但是为了增强计算机的浮点运算能力,增加了X87数学协助处理器并引入了X87指令集,于是就将采用了X86指令集和X87指令集的处理器统称为X86架构的处理器。

    X86基本指令集包括了:数据传输、算术运算、逻辑运算、串指令、程序转移、伪指令、寄存器、位操作、控制指令和浮点运算指令等十大类无数条。而Intel和AMD桌面级处理器在X86指令集的基础上,为了提升处理器各方面的性能,所以又各自开发新的指令集,它们被称为处理器扩展指令集。

(转)从CPU架构和技术的演变看GPU未来发展 - 第6张  | 逗分享开发经验

    扩展指令集能够大幅提高CPU在某些特定应用下的性能,如多媒体、3D、浮点运算等,其设计初衷与协处理器是异曲同工的,但协处理器需要增加额外的运算单元,而扩展指令集只需要加入新的指令和算法即可,无需设计新的运算单元,但必须要软件支持才能发挥功效。

★ MMX指令集:增强多媒体性能

  MMX(Multi Media eXtension 多媒体扩展指令)指令集是Intel公司在1996年为旗下的Pentium系列处理器所开发的一项多媒体指令增强技术。MMX指令集中包括了57条多媒体指令,通过这些指令可以一次性处理多个数据,在处理结果超过实际处理能力的时候仍能够进行正常处理,如果在软件的配合下,可以得到更强的处理性能。

    MMX指令集非常成功,在之后生产的各型CPU都包括这些指令集。据当年Tom's Hardware测试,即使最慢的Pentium MMX 166MHz也比Pentium 200MHz普通版要快。

(转)从CPU架构和技术的演变看GPU未来发展 - 第7张  | 逗分享开发经验

Intel Pentium With MMX,首次支持MMX

    但是,MMX指令集的问题也是比较明显的,MMX指令集不能与X86的浮点运算指令同时执行,必须做密集式的交错切换才可以正常执行,但是这样一来,就会造成整个系统运行速度的下降。

★ 3DNow!指令集:

    3DNow!指令集最由AMD公司所推出的,该指令集应该是在SSE指令之前推出的,被广泛运用于AMD的K6-2和K7系列处理器上,拥有21条扩展指令集。在整体上3DNow!的SSE非常相相似,它们都拥有8个新的寄存器,但是3DNow!是64位的,而SSE是128位。

(转)从CPU架构和技术的演变看GPU未来发展 - 第8张  | 逗分享开发经验

AMD K62加入3DNow!指令集

    所以3DNow!它只能存储两个浮点数据,而不是四个。但是它和SSE的侧重点有所不同,3DNow!指令集主要针对三维建模、坐标变换和效果渲染等3D数据的处理,在相应的软件配合下,可以大幅度提高处理器的3D处理性能。AMD公司后来又在Athlon系列处理器上开发了新的Enhanced 3DNow!指令集,新的增强指令数达了52个,以致目前最为流行的Athlon 64系列处理器还是支持3DNow!指令的。

SSE指令集:加强浮点和3D性能

  SSE是Streaming SIMD Extension(SIMD扩展指令集)的缩写,而其中SIMD的为含意为Single Istruction Multiple Data(单指令多数据),所以SSE指令集也叫单指令多数据流扩展。该指令集最先运用于Intel的Pentium III系列处理器,其实在Pentium III推出之前,Intel方面就已经泄漏过关于KNI(Katmai New Instruction)指令集的消息。这个KNI指令集也就是SSE指令集的前身,当时也有不少的媒体将该指令集称之为MMX2指令集,但是Intel方面却从没有发布有关MMX2指令集的消息。

(转)从CPU架构和技术的演变看GPU未来发展 - 第9张  | 逗分享开发经验

奔腾3正式加入SSE指令集

  最后在Intel推出Pentium III处理器的时候,SSE指令集也终于水落石出。SSE指令集是为提高处理器浮点性能而开发的扩展指令集,它共有70条指令,其中包含提高3D图形运算效率的50条SIMD浮点运算指令、12条MMX整数运算增强指令、8条优化内存中的连续数据块传输指令。理论上这些指令对当时流行的图像处理、浮点运算、3D运算、多媒体处理等众多多媒体的应用能力起到全面提升的作用。SSE指令与AMD公司的3DNow!指令彼此互不兼容,但SSE包含了3DNow!中的绝大部分功能,只是实现的方法不同而已。SSE也向下兼容MMX指令,它可以通过SIMD和单时钟周期并行处理多个浮点数据来有效地提高浮点运算速度。

★ SSE2指令集:进一步优化浮点运算

  在Pentium III发布的时候,SSE指令集就已经集成在了处理器的内部,但因为各种原因一直没有得到充分的发展。直到Pentium 4发布之后,开发人员看到使用SSE指令之后,程序执行性能将得到极大的提升,于是Intel又在SSE的基础上推出了更先进的SSE2指令集。

(转)从CPU架构和技术的演变看GPU未来发展 - 第10张  | 逗分享开发经验

奔腾4初代就加入了SSE2指令集(AMD直到Athlon64才加入SSE2)

  SSE2包含了144条指令,由两个部分组:SSE部分和MMX部分。SSE部分主要负责处理浮点数,而MMX部分则专门计算整数。SSE2的寄存器容量是MMX寄存器的两倍,寄存器存储数据也增加了两倍。在指令处理速度保持不变的情况下,通过SSE2优化后的程序和软件运行速度也能够提高两倍。由于SSE2指令集与MMX指令集相兼容,因此被MMX优化过的程序很容易被SSE2再进行更深层次的优化,达到更好的运行效果。

    SSE2对于处理器的性能的提升是十分明显的,虽然在同频率的情况下,Pentium 4和性能不如Athlon XP,但由于Athlon XP不支持SSE2,所以经过SSE2优化后的程序Pentium 4的运行速度要明显高于Athlon XP。而AMD方面也注意到了这一情况,在随后的K-8系列处理器中,都加入SSE2指令集。

★ SSE3指令集:加强并行数据处理能力

  SSE3指令是目前规模最小的指令集,它只有13条指令。它共划分为五个应运层,分别为数据传输命令、数据处理命令、特殊处理命令、优化命令、超线程性能增强五个部分,其中超线程性能增强是一种全新的指令集,它可以提升处理器的超线程的处理能力,大大简化了超线程的数据处理过程,使处理器能够更加快速的进行并行数据处理。

(转)从CPU架构和技术的演变看GPU未来发展 - 第11张  | 逗分享开发经验

    SSE3中13个新指令的主要目的是改进线程同步和特定应用程序领域,例如媒体和游戏。这些新增指令强化了处理器在浮点转换至整数、复杂算法、视频编码、SIMD浮点寄存器操作以及线程同步等五个方面的表现,最终达到提升多媒体和游戏性能的目的。

    Intel是从Prescott核心的Pentium 4开始支持SSE3指令集的,而AMD则是从2005年下半年Troy核心的Opteron开始才支持SSE3的。但是需要注意的是,AMD所支持的SSE3与Intel的SSE3并不完全相同,主要是删除了针对Intel超线程技术优化的部分指令。

SSSE3(SSE3S)指令集:加强多媒体图形图像处理

    SSSE3(Supplemental Streaming SIMD Extensions 3)是Intel命名的SSE3指令集的扩充,不使用新的号码是因为SSSE3比较像是加强版的SSE3,以至于推出SSSE3之前,SSE4的定义容易被混淆。在公开Intel的Core微架构之时,SSSE3出现在Xeon 5100与Intel Core 2移动版与桌面型处理器上。

(转)从CPU架构和技术的演变看GPU未来发展 - 第12张  | 逗分享开发经验

65nm Core 2 Duo引入SSSE3指令集

    SSSE3包含了16个新的不同于SSE3的指令。每一个都能够运作于64位的MMX寄存器或是128位XMM寄存器之中。因此,有些Intel的文件表示有32个新指令。SSSE3指令集增强了CPU的多媒体、图形图象处理、多媒体编码、整数运算和Internet等方面的处理能力。

SSE4.1指令集:大幅提升浮点运算,优化CPU和GPU数据共享

    SSE4.1指令集被认为是2001年以来Intel最重要的指令集扩展,包含54条指令。Intel在Penryn处理器中加入了对SSE4.1的支持,共增加了47条新指令,令处理器的多媒体处理能力得到最大70%的提升。SSE4加入了6条浮点型点积运算指令,支持单精度、双精度浮点运算及浮点产生操作,且IEEE 754指令 (Nearest, -Inf, +Inf, and Truncate) 可立即转换其路径模式,大大减少延误,这些改变将对游戏及3D内容制作应用有重要意义。

    此外,SSE4加入串流式负载指令,可提高以图形帧缓冲区的读取数据频宽,理论上可获取完整的快取缓存行,即每次读取64Bit而非8Bit,并可保持在临时缓冲区内,让指令最多可带来8倍的读取频宽效能提升,对于视讯处理、成像以及GPU与CPU之间的共享数据应用,有着明显的效能提升。

(转)从CPU架构和技术的演变看GPU未来发展 - 第13张  | 逗分享开发经验

45nm Core 2 Duo引入SSE4.1指令集

  SSE4指令集让45nm Penryn处理器增加了2个不同的32Bit向量整数乘法运算单元,并加入8位无符号(Unsigned)最小值及最大值运算,以及16Bit及32Bit有符号 (Signed) 运算。在面对支持SSE4指令集的软件时,可以有效的改善编译器效率及提高向量化整数及单精度代码的运算能力。同时,SSE4改良插入、提取、寻找、离散、跨步负载及存储等动作,令向量运算进一步专门。

★ SSE4.2指令集:优化XML和交互式应用性能

    在Nehalem架构的Core i7处理器中,SSE4.2指令集被引入,加入了STTNI(字符串文本新指令)和ATA(面向应用的加速器)两大优化指令。STTNI包含了四条具体的指令。STTNI指令可以对两个16位的数据进行匹配操作,以加速在XML分析方面的性能。Intel表示,新指令可以在XML分析方面取得3.8倍的性能提升。

(转)从CPU架构和技术的演变看GPU未来发展 - 第14张  | 逗分享开发经验

    ATA包括冗余校验的CRC32指令、计算源操作数中非0位个数的POPCNT指令,以及对于打包的64位算术运算的SIMD指令。CRC32指令可以取代上层数据协议中经常用到的循环冗余校验,Intel表示其加速比可以达到6.5~18.6倍;POPCNT用于提高在DNA基因配对、声音识别等包含大数据集中进行模式识别和搜索等操作的应用程序性能。

CPU篇:整合片上二级缓存


 

 

    缓存的基本作用是用来加速数据的传输。在电脑当中,由于内存和硬盘本身的速度较慢,都需要一个可以加速指令执行和数据预取的缓冲区,这个零时缓存就相当于部队里的集结待命区,它里边的内容是不断的在变化的。

http://www.yourdictionary.com/images/computer/SWFCACH2.SWF

缓存的作用和原理

    一级缓存(L1)是内置在CPU芯片内部的一个存储区。二级缓存(L2)是第2块“集结待命区”(Staging Areas),它的用处就是给L1喂数据。L2可能内置于CPU之中,也可能是MCP(Multichip Package Module)里的一个独立芯片中,还可能是在主板上的一块独立存储芯片里。

    典型的,缓存一般是SRAM(Static RAM,静止随机存储器,不需要刷新电路即能保存它内部存储的数据),而主内存通常是DRAM(Dynamic RAM,动态随机存储器,需要刷新电路)。SRAM非常消耗晶体管、成本高昂而且容量不可能做很大,因此最早的CPU都是没有缓存的,后来才开始加入缓存芯片。

插在主板上的二级缓存(或者整合在主板上)

(转)从CPU架构和技术的演变看GPU未来发展 - 第15张  | 逗分享开发经验

最后编辑:
作者:搬运工
这个作者貌似有点懒,什么都没有留下。