论文部分内容阅读
半导体工艺的持续进步和流编程模型的提出是推动众核流处理器体系结构向前发展的两个重要因素。为了充分利用摩尔定律发展带来的丰富廉价的晶体管资源,片上多处理器已经成为工业界所接受的新一代处理器体系结构的解决方案之一。另一方面,流编程模型的提出为解决应用程序并行性表示和开发提供了有利的工具,业已成为程序并行化的一般方法。但是流应用程序本身的运行时特性对处理器资源的灵活可配置提出了新的要求。一方面,不同程序对于计算,存储和控制的硬件资源需求是千差万别的;另一方面,有的程序对于硬件资源的需求还表现出阶段性特征,不同阶段所需的硬件资源也不尽相同。为了解决这一问题,近年来可重构众核处理器体系结构受到广泛关注,期望以同构的轻量级物理核来构建不同粒度的逻辑处理器,自适应地调整硬件资源,最大化串行程序的性能。我们基于以上认识,提出了可重构的众核流处理器体系结构TPA-S,旨在为流应用程序提供片上资源灵活可重构的硬件衬底。本文围绕这一体系结构,研究了以CUDA为代表的流编程模型在TPA-S上的编译和程序优化技术,分别从可重构流处理器的执行模型,指令集扩展,编译系统设计,以及程序优化技术等方面展开研究。主要的研究内容包括:(1)研究流编程模型与可重构流体系结构的执行模型,探索流应用程序在可重构流处理器TPA-S上的映射方案。流编程模型的实质在于控制和计算的分离:流程序中的计算密集部分以核心函数的形式被抽取出来,使用多个计算线程来开发数据级并行性;而控制线程专注于计算之外的控制流程序,为核心函数组织数据以及开发生产者-消费者局部性。我们设计了主从式和分阶段式两种程序映射方案,分别以异步和同步的方式将计算线程和控制线程映射到TPA-S的多个逻辑处理器上。另外,我们还提出了单一线程和组合线程这两种核心函数的组织方式,在单线程性能和系统吞吐率之间寻求最佳平衡点。(2)研究流编程模型对TPA-S指令集体系结构产生的设计需求,提出扩展的类数据流EDGE指令集DISC-S。TPA-S流处理器基于显式数据流图执行(EDGE)指令集,将程序的每个线程组织为原子执行和提交的超块序列,在超块内部按照类数据流方式执行。EDGE指令集中特殊的目标域编码方式是TPA-S处理器实现物理核可重构的基础之一。然而流编程模型为TPA-S微结构带来了一些不包括在EDGE指令集中的新特性,例如:多个计算线程需要依靠只读的特殊寄存器来快速地获取线程索引信息;计算线程需要访问软件管理的片上共享存储器数据;另外,多个线程之间需要实现高效的栅栏同步机制。DISC-S扩展指令集针对以上新特性,增加了对特殊寄存器读写,软件管理的片上共享存储层次以及线程间同步的指令支持,为实现流编程模型的映射带来了方便。(3)设计并实现面向CUDA编程语言的TPA-S编译器系统。本文基于NVCC编译框架将编译器系统分为核心级与流级两条编译链。我们参考scale编译器设计了核心级编译器Ptx2EDGE,将PTX汇编语言形式的计算线程源代码程序编译成DISC-S扩展指令集的二进制目标代码。在流级,我们实现了CUDA C语法扩展和API函数接口以及运行时库的移植,并复用scale串行编译器产生控制线程代码。编译器系统设计的主要工作由一系列编译模块与工具软件的代码实现组成,包括PTX和CUDA语法的前端识别,中间表示形式转换,超块生成和优化,资源分配与指令调度,汇编器与链接器等。另外,为了实现CUDA控制线程中设备管理,线程管理,执行控制和存储器管理等功能模块,我们移植了CUDA运行时库并实现了软件运行时系统Mpsim。编译系统的正确性和执行效率通过实验在一组基准测试程序上进行了验证与评测。(4)研究了不规则程序在流处理器上的程序优化方法。本文主要分析了众核流处理器上不规则程序的性能瓶颈问题,并对GPU平台上的图广度优先搜索算法进行了实例研究,希望找到不规则程序在流处理器上进行性能调优的一般性方法。我们针对不规则程序中复杂多变的无组织数据并行性提出了基于并行性反馈的FlexBFS高效实现方法,并针对不规则访存带来的动态队列访存效率问题以及不规则输入引起的负载平衡问题,分别提出了相应的程序优化技术。这些实现方法和优化技术都能够被应用到其它的不规则程序当中。本文获得了以下重要认识:(1)流编程模型能够驱动指令集体系结构的设计,ISA需要反映编程模型带来的新特性;(2)流程序的多线程映射需要软件运行时库的协同工作,在将来的操作系统中可以增加对流编程模型的支持;(3)编译系统设计环节需要使用合适的编程模式和软件工程方法来增强程序的模块化与可读性,例如访问者模式;(4)不规则程序的并行性开发需要准确的并行性度量,使用在线剖析技术能够指导计算资源的合理划分。