论文部分内容阅读
计算机体系结构领域已大步迈入异构时代,异构架构已广泛存在于服务器、个人电脑、嵌入式终端等系统中,在越来越多的应用领域大显身手。加速器微结构的多样化,是异构时代的重要特征,也同时为软件开发带来了严峻的挑战:异构架构下程序的正确性可移植性和性能可移植性都难以保证。OpenCL是首个跨平台的异构并行编程框架,它具有良好的正确性可移植性,但是其性能可移植性却存在极大的缺陷,仍需针对不同平台手工调优,形成多份代码版本,无法实现“一份代码,多个平台”。 程序的性能可移植性问题,来源于编程视图与实际平台之间的差异。从单核单线程程序、到多核多线程程序、再到异构众核OpenCL程序,编程视图与实际平台之间的差异迅速扩大。然而,随着程序并行度的爆发式增长,线程间代码优化已不可忽视,固化的线程级编译机制已无法匹配巨大的编程视图-实际平台差异,亟需探索线程级编译机制向线程间的扩展方法。 编译机制由线程内扩展到线程间,关键在于线程间执行序的确定。本研究的核心发现是,OpenCL应用中的一组线程,不是并发无序、而是以平台相关的顺序执行在硬件资源上,我们称之为准定序执行。准定序执行为线程级编译机制的扩展带来了机遇和挑战,这其中的关键科学问题是:异构编译机制下,准定序执行的抽象、纳入、和利用。论文对上述科学问题进行深入研究,提出了如下3个创新点: 1)定义了WII(work-item interleave)函数,以描述准定序执行。WII函数以量化的形式给出了OpenCL程序中每个操作的准定序执行序,具有显著的平台差异性,它将编译器对平台差异性的刻画,从硬件特性扩展到了软件层面。 2)提出了host-kernel融合编译机制,将线程级代码分析扩展为全程序级,从而可以纳入WII函数携带的准定序执行信息及其平台差异性。融合编译机制对现有的host-kernel分立的OpenCL编译机制进行了纵向(数据流)融合和横向(控制流)融合,分别提出了KDR(Kernel Data Record)和WII-CFG,以实现数据流和控制流的改进。 3)提出并实现了三种扩展的编译优化准则与方法,使编译器可以充分利用WII函数携带的准定序执行信息及其平台差异性,实施跨平台程序优化。这些编译优化准则与方法包括基于放松重用距离的数据布局优化、基于扩展DU链的线程合并优化、基于细化向量密度的向量化优化,它们解决了在纳入了WII函数的host-kernel融合编译机制下,编译优化准则由程序相关变为WII函数相关的问题。上述优化方法在包括AMD CPU、Tilera、MIC、Intel CPU、AMD GPU、NVIDIA GPU在内的多个平台上分别获得了平均50%、50%和30%的性能提升,达到了手工最优化多版本OpenCL(即“多份代码,多个平台”)优化效果的100%、92%和88%。