cuter

【嵌入式】再谈异构计算

0
阅读(4224)

引言:

上一赛季曾经提到异构融合的问题,没有深入研究,现在详细了解了相关知识,做下笔记。

所谓异构融合,或者说异构集成,本质上是为了构建异构计算的硬件平台,关于这个词的准确定义,没有查到,个人认为就是字面意思:将不同架构的计算核心融合到一起。APU(Accelerated Processing Unit,加速处理单元)就是异购融合的产物之一。

异构计算

关于异构计算定义不止一种。

百度百科上的解释是这样的:异构计算技术从80年代中期产生,由于它能经济有效地获取高性能计算能力、可扩展性好、计算资源利用率高、发展潜力巨大,目前已成为并行/分布计算领域中的研究热点之一。

而维基百科是这么说的:异构计算(Heterogeneous computing)主要是指使用不同类型指令集和体系架构的计算单元组成系统的计算方式。常见的计算单元类别包括CPU、GPU等协处理器、DSP、ASIC、FPGA等。

对于第一种说法,不是太明白,看后续的一些内容(例如,网络异构计算系统等),感觉像是偏向软件的异构计算;而第二种和我自身的想法和理解是差不多的,是偏向硬件的异构计算,也和我对异构融合的定义是相一致的。

异构计算近年来得到更多关注,主要是因为通过提升CPU时钟频率和内核数量而提高计算能力的传统方式遇到了散热和能耗瓶颈。而与此同时,GPU等专用计算单元虽然工作频率较低,具有更多的内核数和并行计算能力,总体性能-芯片面积比和性能-功耗比都很高,却远远没有得到充分利用。

广义上,不同计算平台的各个层次上都存在异构现象,除硬件层的指令集、互联方式、内存层次之外,软件层中应用二进制接口、API、语言特性底层实现等的不同,对于上层应用和服务而言,都是异构的。

从实现的角度来说,异构计算就是制定出一系列的软件与硬件的标准,让不同类型的计算设备能够共享计算的过程和结果。同时不断优化和加速计算的过程,使其具备更高的计算效能。

异构计算的出现是计算手段不断发展的结果。

从32bit到x86-64,到双核、多核,再到通用计算GPGPU(通用图形处理器,General-purpose computing on graphics processing units,GPGPU)的出现,特别是GPGPU的出现对异构融合的推进力是十分巨大的:除了对GPGPU的惊人计算能力惊叹之外,处理器厂商也察觉到使用GPGPU计算时,CPU得到了冷落,因此他们希望CPU和GPU能够协作运算,从而实现对计算量有苛刻要求的应用,将计算机的处理能力再推上一个新的高峰。

个人认为在这一点上AMD做的更加成功一些——AMD成功收购ATI,并大力推进异构计算,推出APU……对于异构计算,Intel有相关产品,比如,Knights Corner加速器,但是NVIDIA公司首席科学家David Kirk表示他并不认为Knights Corner加速器能够打造出切实可行的异构多核心平台。种种迹象表明,在异构计算方面,AMD是不落后于,甚至是领先于Intel的,至于是不是有所保留就不得而知了。

新的计算架构需要全新的软件标准

对于异构计算来说,更重要的软件。虽然现在我们看到许多计算机中都应用了GPGPU的通用计算,使用显卡来进行大规模的并行计算任务,但是在这个过程中,处理器就被闲置了。例如许多转码程序在运行的时候,仅仅是显卡在跑,而处理器并未参与到转码加速中来。将异构的运算部件,全部有效的调用起来,这是一件困难的编程工作。

wps_clip_image-21186

2008年6月的WWDC大会上,苹果提出了OpenCL规范,旨在提供一个通用的开放API,在此基础上开发GPU通用计算软件。随后,Khronos Group宣布成立GPU通用计算开放行业标准工作组,以苹果的提案为基础创立OpenCL行业规范。

OpenCL (Open Computing Language,开放计算语言) 是一个为异构平台编写程序的框架,此异构平台可由CPU,GPU或其他类型的处理器组成。OpenCL由一门用于编写kernels(在OpenCL设备上运行的函数)的语言(基于C99)和一组用于定义并控制平台的API组成。OpenCL提供了基于任务分区和数据分区的并行计算机制。

OpenCL类似于另外两个开放的工业标准OpenGL和OpenAL,这两个标准分别用于三维图形和计算机音频方面。OpenCL扩展了GPU用于图形生成之外的能力。OpenCL由非盈利性技术组织Khronos Group掌管。

OpenCL最初苹果公司开发,拥有其商标权,并在与AMD,IBM,英特尔和nVIDIA技术团队的合作之下初步完善。随后,苹果将这一草案提交至Khronos Group。2011年11月15日,OpenCL 1.2发布。

虽然苹果制定OpenCL的私心路人皆知,希望通过OpenGL来让自家的Mac电脑可以顺利的使用两个显卡巨头的产品做GPGPU运算。但是苹果的这一举措却为未来的x86平台异构计算奠定了坚实的基础。因为无论是CUDA还是FireStream,无论是CUDA核心还是流处理器,软件开发人员都可以通过OpenCL来支持。

APU

概念了解了一些,对实际的东西也就产生了兴趣,所以就了解了一下AMD A系列APU的微架构。

wps_clip_image-24356


A系列APU(Llano)微架构

AMD A系列APU微架构由五大部分融合而成:CPU、GPU、北桥、内存控制器和输入输出控制器。如何用这些部件、尤其是CPU和GPU协调工作,AMD下了不少功夫:整合北桥芯片作为枢纽,CPU通过北桥访问内存;采用Fusion Compute Link来将北桥、GPU、IO连接在一起,同时在GPU和北桥之间搭建Radeon Memory Bus,目的是让GPU与内存进行高速数据交换,从而提升3D性能与并行计算性能。

wps_clip_image-31678

毕竟GPU没有内置显存或高速缓存,与内存的交互非常重要。当然,CPU与GPU争夺内存资源也是在所难免的,因此理论上用高速内存能获得更好的性能,而官方的内存支持度也提高到DDR3-1866。

结语

对于未来计算,个人认为CPU中心论和GPU中心论或许都不是那么有说服力,CPU的逻辑控制,GPU的并行计算,都是不可或缺的。因此,异构计算架构确实是处理各种类型数据的最有效的解决方案。

Baidu
map