异构计算(Heterogeneous computing)
摘要
异构计算(Heterogeneous computing)技术从80年代中期产生,由于它能经济有效地获取高性能计算能力、可扩展性好、计算资源利用率高、发展潜力巨大,目前已成为并行/分布计算领域中的研究热点之一。本文主要介绍了CPU+GPU基础知识及其异构系统体系结构(CUDA)和基于OpenCL的异构系统,并且总结了两种结构的特点,从而对异构计算有了更深的理解。
关键词:异构计算 CUDA OpenCL
1、引言
异构计算主要是指使用不同类型指令集和体系架构的计算单元组成系统的计算方式。常见的计算单元类别包括CPU、GPU等协处理器、DSP、ASIC、FPGA等。我们常说的并行计算正是异构计算中的重要组成部分异构计算近年来得到更多关注,主要是因为通过提升CPU时钟频率和内核数量而提高计算能力的传统方式遇到了散热和能耗瓶颈。而与此同时,GPU等专用计算
单元虽然工作频率较低,具有更多的内核数和并行计算能力,总体性能/芯片面积的比和性能/功耗比都很高,却远远没有得到充分利用。CPU的设计让其比较擅长于处理不规则数据结构和不可预测的存取模式,以及递归算法、分支密集型代码和单线程程序。这类程序任务拥有复杂的指令调度、循环、分支、逻辑判断以及执行等步骤。而GPU擅于处理规则数据结构和可预测存取模式。而APU的设计理念则正是让CPU和GPU完美合作,集合两者的长处,用异构计算来达到整体性能的最佳化。
目前,已经有50款领先的应用能够利用AMD APU进行加速,而后续的应用也将陆续到来——异构计算普及的一刻应该是近在咫尺了。
1.1 CPU和GPU的本质区别
(1) CPU特点
a) CPU的目标是快速执行单一指令流;
b) CPU将其用于乱序执行、寄存器重命名、分支预测以及巨大的cache上,这些设计都是为了加速单一线程的执行速度
c) CPU利用cache来降低内存访问延迟
d) CPU通过大量的cache和分支预测来降低延迟,这些机制消耗了大量的晶体管的电能;
e) CPU每个核心支持1~2个线程;
f) CPU切换线程的代价是数百个时钟周期;
g) CPU通过SIMD(单指令多数据)来处理矢量数据;
h)Intel的CPU没有集成内存控制器
(2)GPU特点
a) GPU的目标是快速执行大量的并行指令流。
b)GPU将晶体管用于处理器阵列、多线程管理、共享内存、内存控制器,这些设计并不着眼于提高单一线程的执行速度,而是为了使GPU可以同时执行成千上万的线程,实现线程间通信,并提供极高的内存带宽。
c) GPU使用cache来放大内存带宽
d) GPU通过同时运行上千个线程来隐藏延迟,等待内存访问的线程会被切换掉,e) GPU切换线程不耗时间。
f)对于支持CUDA的GPU,每个流处理器可以同时处理1024个线程。
g) GPU切换线程的代价是0,事实上GPU通常每个时钟周期都切换线程。
h) GPU则使用SIMT(单指令多线程),SIMT的好处是无需开发者费力把数据凑成合适的矢量长度,并且SIMT允许每个线程有不同的分支。
j) 支持CUDA的GPU集成有8个内存控制器,GPU的内存带宽通常是CPU的十倍
1.2 GPU计算模型
内核是执行模型的核心,能在设备上执行。当一个内核执行之前,需要指定一个N-维的范围(NDRange)。一个NDRange是一个一维、二维或三维的索引空间。还需要指定全局工作节点的数目,工作组中节点的数目。如图NDRange所示,全局工作节点的范围为{12, 12},
工作组的节点范围为{4, 4},总共有9个工作组。如果定义向量为1024维,特别地,我们可以定义全局工作节点为1024,工作组中节点为128,则总共有8个组。定义工作组主要是为有些仅需在组内交换数据的程序提供方便。当然工作节点数目的多少要受到设备的限制。如果一个设备有1024个处理节点,则1024维的向量,每个节点计算一次就能完成。而如果一个设备仅有128个处理节点,那么每个节点需要计算8次。合理设置节点数目,工作组数目能提高程序的并行度。
图1.GPU计算模型
CPU的长项是整数计算,GPU的优势则是浮点计算。对于整机性能而言,CPU和GPU都是性能的保障,合理的搭配才是重中之重,才能给用户带来最强的综合性能。
1.3异构计算分类及发展方向
目前的趋势,增加并行的性能,而不是时钟频率。我们的重点是在一个节点,几乎是充分利用指令级并行性。这意味着,提高性能,必须来自多芯片,多核或多上下文并行。Flynn的分类法在硬件定义了四个级别的并行:(1)单指令单数据(SISD)(2)单指令多数据流(SIMD)(3)多指令单数据(MISD)(4)多指令多数据(MIMD)
此外,两个细分MIMD单程序多数据(SPMD),以及多个程序多数据(MPMD),我们使用这些术语来描述架构。
图2.架构
单芯片CBEA,如图所示(a),由一个传统的CPU核心和8个SIMD加速器核心。这是一个非常灵活的架构,每个核心可以运行单独MPMD时尚和沟通方案,快速通过片上总线。其主要设计标准得到了最大限度降低消耗的功率。图中(b)显示了多线程SIMD加速器结合一个标准的多核CPU核心的GPU。GPU具有优异的带宽和计算性能,对很少或根本没有同步运行的SPMD方案进行了优化。它是专为高性能的图形,其中的数据吞吐量是关键。最后,图中(c)显示了FPGA逻辑块阵列组成和一个标准的多核心CPU的组合。FPGA的片上,也可以纳入正规的CPU核心,使得它本身就是一个异构芯片。 FPGA可视为用户定义的应用程序
的专用集成电路(ASIC)的可重构。他们提供充分确定性的表现,是专为高吞吐量,例如,在电信方面的应用。并行计算框架
目前异构并行计算向着以下几个方向发展:(1)集计算。这是传统高性能计算的领域。但是今天高性能计算已经演变成了异构并行计算的一部分,越来越多的高性能计算集使用GPU、MIC、FPGA等。(2)单机计算。推动单机计算向异构并行计算发展的主要动力是游戏、计算机辅助设计等,而主要表现是GPU+CPU的异构计算。(3)移动计算。近几年发展表明,人们对手机的需求比对PC的需求更大。目前几乎所有的移动芯片解决方案都是异构的,除了有CPU、GPU之外,还有视频编解码单元、音频处理单元。倾向于把更多工作内容转移到手机上,但是为了保证续航时间,移动处理器的设计一开始就不是以高性能为目标,这使得要在移动处理器上获取高性能是比较困难的。(4)嵌入式计算。在一些恶劣工作环境下,只有DSP和FPGA能够满足要求。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论