论文部分内容阅读
随着半导体工艺的发展越来越逼近物理极限,以及大数据和人工智能等新型应用不断涌现,为了获得更好的计算能效比,微处理器芯片也越来越朝着专用化的方向发展,各种新型的领域专用加速芯片层出不穷。随着加速硬件的多样性不断增加,高性能计算系统也由早期的简单异构变为更加复杂的异构结构。如何将这些异构的加速器硬件有机地融合在统一的软件生态系统里,缩小它们在编程效率和运行效率方面的差异,实现高效能的计算,是一个极为挑战的问题。特别地,在高度异构系统里,硬件的多样性将导致同步和数据移动的代价十分昂贵。如果采用整体同步这样的粗粒度并行计算模型,需要依靠大量的同步操作来协同计算,无法组织起高效的计算;如果采用数据流模型来组织细粒度的并行计算,以一种点到点的方式表达任务之间的依赖,不仅可以消除在异构系统中代价高昂的全局同步操作,还可以最大限度地消除由于任务划分不均匀和硬件多样性带来的性能瓶颈。但是,数据流计算模型在实际应用中仍然面临诸多问题,包括:对应用和异构平台进行一般化的抽象、系统资源分配、在新场景下高效地调度任务,以及在与实际应用结合的过程中如何保证各层次的计算效率等。对这些问题的研究和解决,有助于我们重新思考超异构计算时代的程序执行模型,为今后在大规模复杂异构平台上实现应用程序的统一编程和高效计算提供借鉴和参考。本文旨在从运行时的角度研究数据流模型在异构平台上的若干关键问题,重点研究数据流程序执行模型如何更有效地组织异构计算。通过对程序和异构平台进行一般化的抽象,构建数据流运行时模拟器和性能模型。在此基础上,基于异构平台上数据流运行时系统的软硬件特点,提出具有更高调度效率的细粒度任务调度算法。在实际系统的研究中,则重点讨论了面向深度学习的数据流运行时软件系统。本文的主要研究工作和成果主要包括以下四个方面:1.在总结了目前已有的数据流程序执行模型的基础上,本文提出了更一般化的抽象机器模型和基于有向无环图的抽象程序模型,并构建出一个通用的数据流运行时模型,同时设计了数据流运行时模拟器TripletRun。在模拟器中一方面实现了多种异构系统上主流的启发式任务调度算法,为新调度算法的实现提供了扩展接口;另一方面也为新数据流模型的探索提供了新视角。TripletRun对程序执行过程中任务的不同行为进行了明确定义,这保证了在运行时层面对程序行为的精确模拟,另外它也为程序性能评估提供了不同衡量指标。2.在异构平台上的数据流运行时中,任务调度问题更为复杂,在研究了异构系统上主流的任务调度算法之后,本文结合数据流程序执行模型与异构系统的特点,提出了基于任务节点加权出度的任务调度算法:DONF算法。首先,在数据流程序执行模型中,任务数量更多,且任务间依赖关系更复杂,DONF调度算法采用加权出度这种更简单的方式计算任务优先级,在降低了任务选择阶段时间复杂度的情况下,还避免了对程序有向无环图的遍历,以支持动态调度;其次,异构系统中不同硬件之间差异大,通信在程序执行过程中扮演着更重要的角色,DONF调度算法考虑了通信链路冲突的情况,构建了通信模型以更好地为被调度任务选择处理器。与参与实验评估的异构系统上主流调度算法HEFT、CPOP、PEFT和HSIP相比,DONF系列算法的调度长度比降低了 34.6%-65.8%,并行效率提高了 19%-137%。3.TensorFlow是一个流行的深度学习软件框架,它基于数据流程序执行模型构建。本文在神威超级计算机上,基于TensorFlow构建了数据流深度学习框架swFLOW。经过性能分析与热点优化后,swFLOW在单核组上的性能加速比达到10.42倍。在大规模分布式深度学习中,本文重点就运行时中的通信和数据读取进行了讨论与优化,使得swFLOW在512进程时达到81.01%的并行效率。作为神威系统上最早支持分布式深度学习的框架之一,swFLOW对神威系统上深度学习软件生态的发展以及未来针对深度学习的软硬件协同设计具有重要的参考意义。4.作为理论研究与实际系统相结合的尝试,本文融合TripletRun与Tensor-Flow/swFLOW,提出了一种统一的调度框架。统一调度框架隐藏了实际系统中任务调度策略的实现细节,便于新调度算法的快速实现和效果验证,也允许采用空间搜索等方法实现任务调度或映射;而且统一调度框架可以令TensorFlow/swFLOW自动实现并行计算,免去了由用户对神经网络进行手动分割及反复试验寻找最佳分配方案之虞;再次,通过统一调度框架确定的映射策略可以打破一些紧耦合算子被绑定到一起的限制,在更大解空间内寻找并行策略。初步的实验结果表明了统一调度框架的可行性与实用价值。本文的研究以异构平台上的数据流运行时系统为中心,以任务调度为主线,以通信、数据读取等为重点,涵盖理论研究与实际系统实践,对异构平台上数据流运行时系统的关键问题进行了深入研究与讨论。本文设计的数据流运行时系统模型很好地抽象了异构融合平台上数据流程序的执行过程,提出的任务调度算法与异构系统上主流调度算法相比具有更好的效果。swFLOW框架的设计与实现则为类似平台上数据流深度学习框架的构建提供了有益借鉴,也对神威系统上深度学习软件生态的发展具有重要的参考意义。