摘要:在2005年之后,单核标量处理器的性能基本上达到顶峰,很难进一步大幅度(超过10%)提升性能。
本文分享自华为云社区《高性能计算(1)——读史知兴替》,作者: 我是一颗大西瓜 。
并行的崛起
在2005年之前,大多数处理器都是单核的,一些处理器已经开始 支持向量化(如X86处理器支持的MMX(多媒体扩展)和SSE(流式SIMD扩展)指令集),处理器生产商通过提升单核标量处理器的频率和指令级并行处理能力(即提升指令流水线性能)来提升处理器的计算性能。
在2005年之前,单核标量处理器的性能基本上是每18个月近似提升一倍,这称为摩尔定律,如下图所示。单核标量处理器性能提升能满足摩尔定律的时期称为提升软件性能的“免费午餐”时期,因为单核标量代码的性能可以满足摩尔定律描述的速度提升。
在2005年之后,单核标量处理器的性能基本上达到顶峰,很难进一步大幅度(超过10%)提升性能——为什么?
单核标量处理器以近似摩尔定律的方式提升性 能,其主要通过以下几种方式提升性能:
- 提升处理器的时钟频率:处理器的时钟频率表示处理器1秒内可以运行多少个基本操作。功耗限制了频率的继续提升:从物理定理来看,随着处理器工艺制程的推进,处理器的最大功耗(主要是漏电功耗)越来越大(处理器的功耗和处理器的频率的三次方近似成正比),THINK: 降温、超导计算机、量子计算机
- 提升指令级并行能力:单核标量处理器上具有许多不同的部件,每个部件执行不同的指令操作。要利用好处理器的指令级并行能力需要代码优化人员、编译器作者和处理器设计师共同努力。处理器设计通常会增加硬件流水线的级次,而现在这一方法也达到其局限。硬件设计师通过增加硬件寄存器的长度提升性能。例如,原来寄存器长度为32位,现在提升到128位,THINK: 增加寄存器数量?主流为啥是32位和64位?https://www.zhihu.com/question/21641577
因此,由于散热导致处理器的频率不能接着提升,硬件生产商转而采用将多个处理器组成到一个芯片上,这称为多核;为了提供更高性能的处理器,处理器硬件生产商通过增加寄存器的宽度和指令的宽度来同时处理多个数据,这称为向量化。
多核和向量化的难点:
- 依据Amdahl定律,程序中的串行代码比例限制了并行化代码能够取得的最好效果。
- 多核向量处理器(尤其是X86)为了减少获取数据的延迟, 使用了大量的缓存来保存多次重复访问的数据。但是缓存并不贡献硬件的原生计算能力。
- 有些代码不能使用多核并行化或向量化。
- 要发挥向量化和多核的计算能力,可能需要多份代码,这增加了代码维护代价。
- 在一些应用严格的应用场景下,限制了其不能允许向量化和多线程导致的计算结果出现偏差。
异构并行的崛起
异构并行时代的崛起是从2007年NVIDIA推出CUDA(Computing Unified Device Architecture,计算统一设备架构)开始的。异构并行包含两个子概念:
- 异构(Homogenerous)。异构是指异构并行计算需要同时处理多个不同架构的计算平台 的问题,如目前主流的异构并行计算平台X86+GPU、X86+FPGA,以及目前正在研发中的ARM/Power+GPU
- 并行(Parallel)。并行是指异构并行计算主要采用并行的编程方式,无论是X86处 理器,还是ARM和GPU处理器以及DSP,这里所有的处理器都是多核向量处理器
当前CPU的发展已经落后于摩尔定律,但GPU仍然在快速发展中。CPU和GPU都是具有运算能力的芯片。 其中,CPU不但擅长于指令运算,而且擅长于各类数值运算;而GPU是专门为处理图形任务而产生的芯片,仅擅长于图形函数类
数值计算。从硬件设计上来讲,CPU由专为顺序串行处理而优化的几个核心组成。另一方面, GPU则由数以千计的更小、更高效的核心组成,这些核心专为同时处理多任务而设计。
总之,GPU是面向适合于矩阵类型图形函数的数值计算而设计的。它利用大量重复设计的运算单元建立大量数值运算的线程,擅长无逻辑关系的大量平行数据的高度并行数值计算。 而CPU是根据兼顾 “指令并行执行” 和 “数据并行运算” 的思路进行设计,擅长处理拥有复杂指令调度、循环、分支、逻辑判断以及执行等的程序任务。