论文部分内容阅读
本文认为为异构并行系统提供统一的编程环境是提高软件生产率的必然选择。我们将异构系统分为两类来研究统一编程环境设计中的关键问题。第一类是系统中异构的计算部件都可以同样的方式进行编程。由于异构编程的困难,开发人员提出了Open CL编程框架,尝试统一不同类型计算设备的编程方法。目前Open CL已得到多个芯片生产厂商的普遍支持,包括Intel、AMD、NVIDIA、Apple等。虽然用户可以使用Open CL对不同计算部件进行编程,但用户仍然需要通过Open CL分别的控制每个计算设备,同时Open CL虽然具备功能可移植性,性能可移植性尚有很大欠缺。本文前三个研究内容围绕该类型系统的这些问题展开。1.研究将多个Open CL计算设备虚拟为单个Open CL计算设备。为了简化异构体系结构的并行编程,我们提出和实现了在概念上将多个异构设备合并为一个的高级Open CL运行时VHCD。同时,我们采用了基于离线Profiling的技术来进行设备间负载均衡,并设计了用于定义Work-group数据访问范围的设备无关的编程制导语句。在VHCD的支持下,为单个Open CL设备设计的程序在添加少量制导语句以后就可以在任意的异构并行计算平台上高效的运行。VHCD运行时通过虚拟Cache管理来最小主机设备间的数据传输以确保性能。我们通过一组Open CL测试程序对VHCD运行时进行了评估,结果表明该运行时在不同配置的异构系统上均能获得很好的性能。2.研究自动细粒度管理多个Open CL计算设备间的虚拟共享存储。我们提出了分布式共享Open CL存储(Distributed Shared Open CL Memory,DSOM),来支持多个Open CL设备的共享存储。DSOM可以使用户从繁琐的设备间数据传输控制中解脱出来。DSOM在系统主存中分配共享Buffer,并将设备存储看做软件管理的虚拟Cache Buffer。为了支持细粒度共享Buffer管理,我们在DSOM中设计了一个Kernel解析器来进行Buffer访问范围分析。DSOM采用基本的修改、共享、无效的Cache一致性管理协议来管理Cache Buffer之间的一致性。同时我们提出了一种自适应的更新策略来最小化设备间数据传输,同时尽早的启动必需的数据传输操作。该策略可以使得数据传输和Kernel执行尽可能的重叠。虽然DSOM以软件运行时方式实现,但是它是以符合Open CL标准的运行时方式实现,而不会引入额外的编程接口。这使得DSOM与以往的软件运行时分布式共享存储系统相比对用户更加友好。DSOM使用一种编译器辅助的方式来获取用户对共享Buffer的访问范围。大部分工作都通过静态分析的方式完成,降低了运行时时间开销。我们选择了大量的测试程序来验证DSOM运行时访存模式分析方法的实用性,结果表明该方法在绝大多数情况下均可以高效工作。同时我们选择了一组测试程序对DSOM运行时的性能进行了评估,实验结果也表明性能逼近手写优化代码的性能。3.研究Open CL程序的性能可移植性问题。尽管Open CL具备很好的功能可移植性,但是性能可移植性却较差。实现一个在任意平台上都具备良好性能可移植性的Open CL运行时是非常困难的,因为不同硬件体系结构差异非常大。作为提高性能可移植性的一个尝试,我们提出了NOCL。NOCL是一个面向CPU的Open CL运行时实现,它的特点是可以高效的执行面向GPU优化的Open CL程序。在CPU上调度大量的Work-item会耗费大量时间开销,而为了维护Work-item对本地数组访问的一致性,Kernel内需要大量同步,更加使得调度开销的问题恶化。本文基于本地数组在Kernel中总是作为临时变量的观察,尝试将所有本地数组访问都替换为相应的全局数组访问。NOCL在进行依赖性检测,确认Work-item之间不存在依赖关系的前提下,自动消除Kernel中的Barrier以进行激进的Work-item串行化。在串行化以后,NOCL将Kernel的每个Work-group看做一个普通的三重循环,并通过自动向量化和Cache管理的方法来对该循环进行优化。我们的实验表明在执行面向GPU优化的Open CL程序时,与Intel Open CL CPU运行时相比,NOCL在CPU上获得了相当大的性能提升。本文研究的第二类系统是指不同计算部件无法以相同方式编程时。虽然Open CL试图统一所有类型计算部件的编程方法,但总有新型或是特殊类型的硬件无法使用Open CL进行编程,典型的就是FPGA。由于硬件逻辑设计的复杂度非常高,目前使用高级语言对FPGA进行编程仍然难以获得理想的性能,所以常常仍然需要使用硬件描述语言进行应用开发。在由FPGA和CPU构成的可重构计算系统中,软硬件协同是一个困扰应用开发人员的难题,因为这两者采用完全不同的方式编程。本文最后一个研究内容探讨了如何在操作系统层面为由CPU和FPGA构成的可重构计算系统的应用开发提供支持,面向用户提供软硬件统一的编程环境。1.基于BORPH的硬件进程概念,实现软硬件进程高效率的进程间通信机制。我们将BORPH移植到了普通用户最易获得的由FPGA板和通用PC构成的可重构计算平台上,设计了BORPH的扩展系统BORPH-N。BORPH-N对硬件进程概念进行了扩展,降低了硬件进程设计难度。硬件进程设计难度的降低体现在两个方面。一方面是与系统交互部分通过软件接口而不是硬件接口,编写软件程序来调用系统接口,显然比设计硬件逻辑来连接硬件接口更为容易。另一方面是功能逻辑部分,由于接口为标准FPGA片上总线接口,有大量厂商提供的库支持方便了设计。同时基于独立执行的基本思想,BORPH-N为硬件进程提供基于共享存储、符合Unix语义的高性能进程间通信支持:共享存储和信号量。基于独立执行基本思路的优化策略,大大提高了进程间通信的效率,该系统可用于支持可重构计算平台高级编程模型和运行时系统的设计。