浅析处理器技术与编程模型的发展趋势

1.处理器技术的发展

1971年,全球第一颗通用型微处理器4004推出,由2300个晶体管构成。当时——戈登摩尔(Gordon Moore),就提出后来被业界奉为信条的“摩尔定律”——每过18个月,芯片上可以集成的晶体管数目将增加一倍。

在一块芯片上集成的晶体管数目越多,意味着运算速度主频就更快。到了英特尔的奔腾(Pentium 4)840处理器,晶体管数量已经增加至2.5亿个,相比当年的4004增加了10万倍。其主频也从最初的740kHz(每秒钟可进行74万次运算),增长到现在的3GHz(每秒钟运算30亿次)以上。这一时期,我们称之为单核时代。这一时期的主要特点是通过不断扩充,提升机器的主频,优化单核核心的流水线效率。

但到了2005年,当主频接近4GHz时,单核处理器速度也会遇到自己的极限:那就是单纯的主频提升,已经无法明显提升系统整体性能。此时,多核处理器应运而生。

多核芯片的出现,使处理器开始向“横向扩展”,而非以前单纯地“纵向扩充”,从而更好地提高处理器的性能。多核心的架构实现了“分治法”战略,通过划分任务,线程应用能够充分利用多个执行内核,并可在特定的时间内执行更多任务。多核处理器是单枚芯片(也称为“硅核”),能够直接插入单一的处理器插槽中,但操作系统会利用所有相关的资源,将每个执行内核作为分立的逻辑处理器。通过在两个执行内核之间划分任务,多核处理器可在特定的时钟周期内执行更多任务。多核架构能够使软件更出色地运行,并创建一个促进未来的软件编写更趋完善的架构。

但是,随着多核时代不断发展,到了2010年遇到了同样的问题。此时,处理器的性能曲线变成了频率曲线,这个时候,我们进入了基于CPU+GPU的异构计算的时代。基于CPU+GPU的异构计算系统指的是在传统计算机系统中加入GPU作为加速部件并配合CPU共同承担计算任务的新型系统。相比于传统的单纯以CPU作为计算部件的同构系统,异构系统优势明显。首先,GPU能够更出色的完成某些特殊应用,例如对于追求浮点运算性能的应用来说,目前GPU的浮点运算能力已经远远超过CPU;其次,原先只用于图形处理领域的GPU正在逐渐向通用计算方向发展,在各GPU生产厂商的大力推动下,一些原先制约GPU通用化的障碍(如硬件结构、编程模型)已经不同程度地得到了克服;最后,当今单纯由CPU搭建的高性能计算机系统遇到了许多难以克服的问题,例如扩展性问题、功耗问题等,而使用GPU加速部件可以很好地解决这些问题。

2.编程模型的发展

随着处理器构架的不断发展变化,编程模型也发生着深刻的变化。在单核时代,软件性能随着处理器性能发展可以获得免费的提升,用汇编或者C++编写的程序,基本上都是单并发程序,这个时候编写的软件完成之后,随着硬件升级一次,软件的性能也会得到线性的提升,硬件的性能不断提升,让软件也不断发展。

到了多核时代,这种线性递增的方式已经结束了,程序员不得不去改变思维模式,必须思考如何把多个核心利用起来,编程模型很主要的任务,就是需要发掘应用的并行性,更强调数据的并行,如何把一个大数据集划分,是SPMD的模式,可能是Pipeline的模式,这是需要程序开发者去努力思考的事情,这是对一个算法的设计提出的要求。

而在异构计算的时代,对编程模型提出了更高的要求。所谓异构计算,是指CPU+GPU或者CPU+其它设备(如FPGA等)协同计算。一般情况下,现程序,是在CPU上计算。但是,当大量的数据需要计算时,CPU显得力不从心。那么,是否可以找寻其它的方法来解决计算速度呢?那就是异构计算。例如可利用CPU(Central Processing Unit)、GPU(Graphic Processing Unit)、甚至APU(Accelerated Processing Units,CPU与GPU的融合)等计算设备的计算能力从而来提高系统的速度。异构系统越来越普遍,对于支持这种环境的计算而言,也正受到越来越多的关注。

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

与此同时,当前的CPU和GPU是分立设计的处理器,不能高效率地协同工作,编写同时运行于CPU和GPU的程序也是相当麻烦。由于CPU和GPU拥有独立的地址空间,应用程序不得不明确地控制数据在CPU和GPU之间的流动。

为了充分释放并行处理器的计算能力,架构设计者必须打破既有格局,采用新的思路。设计者必须重塑计算系统,把同一个平台上分立的处理单元紧密整合成为不断演进单颗处理器,同时无需软件开发者的编程方式发生重大的改变。异构系统架构(HSA,Heterogeneous System Architecture)的出现,展现了一种全新的体系架构,可以适应各种特性的计算任务。HSA创造了一种更佳的处理器设计,展示了CPU和GPU被无缝集成后所带来的益处和潜能。通过HSA,程序可以在统一的地址空间中建立数据结构,在最合适的处理器上创建任务。处理器之间的数据交互不过是传递一个指针。多个计算任务之间通过coherent memory,barrier,和atomic等操作来保证数据的同步(和多核CPU的方式相同)。透过HSA中间语言(HSAIL, HSA Intermediate Language),不同的硬件实现向上暴露出统一的软件接口。HSAIL也是所有底层软件模块、开发工具一致的目标平台。同时,HSAIL足够灵活并且接近硬件,各个硬件厂商可以高效地把它映射到自己的硬件设计上。HSAIL也解放了程序员,后者不必为不同硬件平台裁剪自己的代码,同一套代码可以顺利运行在不同CPU/GPU配置的系统上。

3HSA的未来

HSA与传统架构相比,它的优势在于可以发展成统一的内存编制。CPU跟它的CU之间的内存叫做共享内存,也就是说,它处理的东西对于CU单元和计算单元来说是透明同步可见的。,统一的内存设计使所有计算单元访问相同的数据,这里面就避免了一个数据的搬迁,数据不需要搬迁,CPU和GPU计算能够无缝交替进行。

HSA系统的优势在于:第一、统一的功耗效率管理,以前CPU和GPU的电源管理是两套方式,现在对于电源管理来说,是同样的一种电源管理方式。第二、优化的计算效率。在这样一个异构系统当中CPU和GPU可以同时访问内存。第三、访问内存可以一次性访问,CPU在GPU上处理数据一定要保证一致性。

目前,利用GPU进行加速优化应用已经得到实质性应用,这些GPU加速应用涵盖了各个行业领域,包括生物信息学、分子动力学、量子化学、材料科学、可视化和对接软件、数值分析学、物理学、天气与气候预报、国防与情报、计算金融、计算机辅助设计与制造、计算流体动力学、计算结构力学、流体模拟、电子设计自动化、动画建模与渲染、色彩校正与颗粒处理效果、后期合成制作、视频编辑、影音编码与数字发行、广播与新闻、立体3D制作、天气图形、油气矿业等等。例如,AMD与Adobe合作,首次在微软Windows平台上推出支持OpenCL硬件加速视频编辑功能的新版Adobe PremierePro,新版本的Adobe Premiere Pro 经过优化以充分利用AMD旗下各种专业及消费类图形处理器(GPU)和加速处理器(APU)的性能,从而能够在从DV到高清和4K超高清不同格式下以高帧率提供前所未有的实时编辑功能。

与此同时,AMD公司还发表HSA运算架构的新技术:hUMA(heterogeneous Uniform Memory Access),来解决CPU与GPU间的重覆资料拷贝问题。透过hUMA,CPU和GPU能共享同一个存储空间,并且CPU能够直接存取GPU的存储位址,不必像过去得花工夫再将GPU的运算资料复写到CPU上。hUMA像个连贯快取的系统,让CPU和GPU能共享同一个存储空间,让CPU和GPU在存储上看到的数据都能维持一致,如果其中一方上的数据改变,另一方还是能看到更新的数据。换句话说,hUMA能让GPU直接存取CPU的存储位置,当CPU在读写资料时,GPU也能同时读写资料。

在未来的几年,随着HSA架构的逐渐成熟和各厂家相关产品的推出,可以预见更多差异化的应用会在上述平台上大量涌现。这些应用将根本性的改变目前由于操作系统、硬件平台的同质化而产生的应用同质化,并带来大量商机和丰富用户体验。通过异构架构HSA编程,软件公司和开发者能够实现诸多原先CPU体系架构无法得到的计算资源和计算性能,从而催生大量附带的差异化应用,如人脸识别、虚拟实现、手势控制、全天计算、高清图像处理、安全、云计算搜索等领域,并走出国内传统对GPU只在高性能(HPC)计算这一特定领域应用的误区,真正实现广泛应用,合理应用,差异化应用和高质量应用。

虽然异构系统架构目前处于起步阶段,还有许多的工作需要进一步完善,但是异构系统架构仍拥有强大的生命力,凭借其先进的跨平台和跨设备的计算架构,可以创造出更新、更好的用户体验,必将会是未来技术发展的趋势,并为异构计算和编程带来的广阔前景。

你可能感兴趣的:(异构计算)