本博文由 youngpan1101 出品,转载请注明出处。
文章链接:https://blog.youkuaiyun.com/youngpan1101/article/details/101831696
作者: 宋洋鹏(youngpan1101)
邮箱: yangpeng_song@163.com
ps:该笔记是基于《OpenCL异构并行计算:原理、机制与优化实践, 刘文志等著》的学习笔记
目录
异构并行计算的过去、现状和未来
- 异构:计算单元由不同的多种处理器组成。
- 并行:要发挥异构硬件平台的全部性能必须要使用并行的编程方式。
- 向量化:一种一条指令同时处理多个数据的方法,是一种数据并行技术。
- SIMD(Single Instruction Multiple Data,单指令多数据)
- SIMD操作:对两个长向量寄存器中的数据按元素进行操作,结果向量寄存器和源向量寄存器长度相同。
- SIMT(Single Instruction Multiple Thread,单指令多线程)
- SIMD(Single Instruction Multiple Data,单指令多数据)
- 多核:在一块芯片上,集成多个处理器核心,这多个处理器核心共享或不共享缓存层次结构,多核处理器通常会共享主板上的物理内存。
- 多路:将多个多核处理器互联在同一个主板上,各个多核处理器之间通常共享缓存或内存来交换数据。
现代处理器提升性能的两种主要途径:多核 和 向量化,今天的绝大多数处理器都已经是多核向量化处理器。
单核标量处理器
在2005年之前,单核标量处理器以近似摩尔定律(这里只简单地解释为“单核标量处理器性能每18个月提升一倍”)的方式提升性能,主要通过以下方式:
- 提升处理器的时钟频率:时钟频率表示处理器1秒内可以运行多少个基本操作,这些基本操作需要一个时钟周期运行。提升频率即可以让处理器1秒内执行更多的基本操作,提升了处理器运行的所有指令的执行速度。
- 提升指令级并行能力:没有减少某条指令的延迟,但它提升了处理器能够同时处理的指令数量,即将一条指令拆分成多个阶段来提供性能,如下图的五阶段流水线为例,若没有使用流水线执行,则原来需要5个周期才能完成2个操作,而使用流水线执行后,则每个周期能够完成2个操作。
而在2005年之后,单核标量处理器的性能不能再以摩尔定律的速度提升,主要是因为:
- 功耗限制了频率的继续提升:随之处理器频率的增加,功耗也会随之增加,对散热系统要求越来越高,若再增加频率,硬件组件可能不能正常工作,甚至烧毁。
- 提升指令级并行遇到瓶颈:处理器设计通常会增加硬件流水线的级次,而现在该方法已达到其局限。
多核向量化
为了提供更高性能的处理器,生产商采用了以下两种方法:
- 多核:通过复制处理器核心成倍增加了处理器的计算能力,能支持线程级并行处理,通过将线程映射到硬件核心上,以同时处理多个不同的请求,提高用户体验。
- 向量化:通过增加寄存器的宽度和指令的宽度来同时处理多个数据,另外,许多算法和应用具有向量级并行(数据并行)能力,如一些算法需要对多个不同数据执行同一个操作。
要发挥多核和向量化的计算能力,必须要编写向量化和多线程的代码,比如新出现的C编程语言扩展:CUDA和OpenCL,通过层次化的线程/编程模型使得一份代码同时支持向量化和多核。
- OpenCL支持X86 CPU、GPU 和 ARM-GPU(Mali系列)
OpenCL横空出世
继2007年CUDA的推出,异构并行计算逐渐被认可,异构并行缓解了处理器发展面临的两个主要问题:性能和功耗。
在2008年,OpenCL横空出世,是异构平台并行编程的开放的工业标准,也是一个编程框架,包含以下两部分:
- OpenCL C语言和主机端API;
- 硬件架构的抽象。
OpenCL具有以下特点:
- 高性能:OpenCL是底层API;
- 适用性强:抽象了硬件的不同架构的共性,又兼顾了不同硬件的特点;
- 开放:由开放组织开发、维护的标准;
- 无替代选项:只有OpenCL得到了几乎所有相关主流硬件厂商的支持。
正因以上OpenCL的众多特点,未来OpenCL必将无处不在。