基于线程调度和资源管理的GPU性能优化方法
这是一篇优秀的
软件工程论文范文,主要从基于线程调度和资源管理的GPU性能优化方法展开探究,在本文中,证明了提出的方法 TQDP 确实可以优化系统性能。在测试的大部分基准测试中,TQDP 表现优秀,实验结果表现基本与预期的一致,实验目的基本实现,TQDP相比其他方法都得到了很大的提升,但仍有不足之处,比如算法中对于算子数值的设置,简单的考虑了算子的取值范围,粗略的设定了数值,并没有深入的研究设置不同数值对于算法的影响,以及不同程度大小算子对于线程执行队列的优化效果如何。本论文是
电大作文网精选软件工程论文范文。
摘要:在本文中,证明了提出的方法 TQDP 确实可以优化系统性能。在测试的大部分基准测试中,TQDP 表现优秀,实验结果表现基本与预期的一致,实验目的基本实现,TQDP相比其他方法都得到了很大的提升,但仍有不足之处,比如算法中对于算子数值的设置,简单的考虑了算子的取值范围,粗略的设定了数值,并没有深入的研究设置不同数值对于算法的影响,以及不同程度大小算子对于线程执行队列的优化效果如何。在之后的工作中,将会从这一方面进行考虑,对算子的数值进行优化,探究算子的不同取值对于本算法优化效果影响。
1 绪论
1.1 研究背景与意义
随着大数据、人工智能等领域问题求解的规模越来越大,计算复杂度急剧提升,图形处理器(Graphic Processing Unit, GPU)已经从仅作为帮助 CPU 处理图形渲染效率问题的图形领域,逐渐扩展到对计算能力要求高的领域,例如高性能计算、数据中心、互联网、云计算、大数据、深度学习等领域。GPU 计算的潜力是通过采用功能强大的计算硬件,以较低的成本有效地执行大量并行程序,因此通用计算研究逐渐成为热点,被称之为 GPGPU(General Purpose Computing on Graphics Processing Units)。很多数值计算等通用算法都已经在 GPU 上得到了实现,并且由于 GPU 强大的计算能力,有很好的性能表现。
与 CPU 相比,GPU 具有更强大的计算能力,任务处理模式更为简单。特别是在处理浮点运算方面,单从计算能力上来说,多核 GPU 已经远远超过了多核 CPU。随着计算复杂度逐步提升,通用计算采用的处理系统是由 CPU 和 GPU 组成的异构系统,CPU作为计算机的处理核心,其主要功能是控制逻辑运算、任务调度。GPU 则处理密集的数据任务,复杂的逻辑运算交给 CPU,两者协同工作,提升系统的运算速率。
虽然 GPU 的每个计算核没有 CPU 的每个计算核工作频率高,但是 GPU 的总体性能-芯片面积比以及性能-功耗比比 CPU 高很多,所以在处理多线程并行计算任务时性能高很多。GPU 通过大量并行线程之间的交织运行隐藏系统流水线停滞,掩盖内存延迟,除此之外 GPU 还拥有大量的内存资源,如寄存器、局部存储器和一级缓存、二级缓存等。在传统的计算中,CPU 线程与线程之间切换开销是十分巨大的,针对执行大量并发线程这一情况其算法效率很低,而 GPU 中线程与线程之间切换开销很廉价,因此 GPU对执行大量并发线程算法的效率比 CPU 高。
………………….
1.2 GPU 性能优化研究现状
目前新一代 GPU 体系架构表明,其集成的计算资源越来越多,可以执行多个应用程序,提升计算机信息处理能力。虽然执行多个应用程序可以提升计算并行度、提高资源利用率,优化系统性能,但启动大量线程来增加资源利用率容易造成流水线停滞,损害性能。针对 GPU 的性能优化问题,研究人员已经提出了很多方法来使得 GPU 可以更加高效的工作。
国内外许多学者提出的方法,研究的方向主要分为三个方面:资源管理,线程调度以及缓存管理策略。通过对 GPU 片上资源的整理以及对线程需求的分析,按照不同程序的比例来合理分配资源,最大化片上资源的利用优化性能。GPU 利用大量的线程级并行性来提供高的指令吞吐量,有效地隐藏内存操作的长延迟,来优化性能。多道程序设计也是为了让更多的应用在 GPU 内核上执行,提高作业处理速度以及效率,从而提高性能。缓存管理策略通过对 GPU 上缓存的管理,减少线程束之间的争用,降低缓存抖动现象的发生。
2017 年,Koo 等人[1]提出了访问模式感知的缓存管理(APCM),它通过监视来自一个示例性 warp 的访问来动态检测每个加载指令的局部类型。然后,APCM 使用检测到的局部类型,根据加载指令的局部性特征有选择地应用数据的缓存绕过和缓存固定。Tang 等人[2]提出了 SPAWN,用于控制动态生成的内核,从而直接减少相关的启动开销和排队等待时间。此外,它允许调度程序更好地混合使用动态生成的内核和原始的(父)内核,以有效地隐藏其余开销并提高 GPU 资源的利用率。
…………………..
2 GPU 体系结构及 CUDA 编程模型
2.1 GPU 体系结构
从 2008 年 NVIDIA 发布的第一个 Tesla 到 2020 年发布的最新的 Ampere 架构,每一代 GPU 体系架构集成的计算资源越来越多,但是大致架构改动不大。如图 2.1 是一个基线 GPU 架构图,GPU 有多个流多处理器,在每个 SM 中,计算资源包括算术逻辑单元(Arithmetic and Logic Unit, ALU)以及特殊函数单元(Special Function Unit, SFU),片上内存资源包括寄存器(Reg File)、L1 缓存(L1-cache)和共享内存,片外内存资源包括 L2 缓存(L2-cache)和片外动态随机存储器(DRAM)。在多个 SMs 之间共享统一的一个 L2 缓存。GPU 中有许多的 ALU,有多个处理器核(Streaming Processor, SP),在一个时刻可以并行处理多个数据。SFU 可以进行超越函数和属性插值函数以及其他特殊运算。Reg File是 GPU 内部的存储单元,是有限存储容量的高速存储部件,用来暂存指令、数据和位址。线程束调度程序(Warp Scheduler)负责调度一个 SM 中的线程束(warp)。
图 2.1 基线 GPU 架构图
………………………..
2.2 CUDA 编程模型
随着 GPU 的发展, GPU 的可编程性不断增强,可以借助并行编程模型(例如 CUDA,OpenCL 等)的支持来构建算法模型,进行通用计算。CUDA 能够在 NVIDIA 的 GPU 硬件上运行,OpenCL 是能够对不同种类的硬件给出一个相同的编程模型[25]。由于其拥有统一的开发套件、非常丰富的库以及 NVCC 所具备的 PTX(一种 SSA 中间表示,为不同的 NVIDIA GPU 设备提供一套统一的静态 ISA)代码生成、离线编译等更成熟的编译器特性,CUDA 在开发者这一群体中使用广泛[26]。
图 2.4 CUDA 异步执行模型
2007 年 NVIDIA 推出了统一计算架构(Compute Unified Device Architecture, CUDA),让GPU可以用于图像计算以外的目的。CUDA是一种通用的并行计算平台和编程模型,是在 C 语言基础上扩展的,包含了 CUDA 指令集架构(ISA)以及 GPU 内部的硬件计算引擎,主要针对异构计算资源扩展下大规模并行计算等复杂问题,利用 GPU 中的资源让用户可以进行大规模并行计算[27]。如图 2.4 所示为 CUDA 异步执行模型,主要有两大部分,一个主机(Host)和一个设备(Device),各自拥有独立的内存,存放不同的数据。主机端主要是通过 CPU 负责计算任务的执行,一般负责程序中的串行部分的业务处理、与设备端的交互、调用环境的初始化以及相关数据预处理等工作,主要在于控制逻辑运算、任务调度,而设备端主要是 GPU 用于大量计算任务的处理,一般以多线程的形式执行。执行程序后,代码分为 Host code 和 Parallel code,分别在 CPU 和 GPU 上执行,运行在 Device 上的代码,一般称之为核函数(Kernel),GPU 会启动大量线程来执行核函数,线程并发执行消耗 GPU 资源。
……………………………..
3 基于线程队列动态规划法的 GPU 性能优化 ………………………………. 15
3.1 调度算法 ……………………………………… 15
3.2 线程队列动态规划法(TQDP) ………………….. 16
4 基于资源管理的 GPU 性能优化 ………………………. 21
4.1 资源管理方法 …………………………………. 21
4.2 并发线程束的资源分配方法(RACW) ……………………… 22
5 实验 ……………………………….. 27
5.1 实验平台 …………………………………. 27
5.2 基准测试程序集…………………..27
5 实验
5.1 实验平台
本文所采用的实验环境是 GPGPU-Sim3.2.2[31],配置的相关参数如表 5.1 所示,在类似于 GTX480 架构的基础上出了修改,GPGPU-Sim 能够周期级的模拟运行核函数,可以打印运行中和运行后的性能分析数据,对于分析算法的性能有着很大的帮助。模拟的GPU 架构包含 48 个 warps,每个 warp 中包含 32 个 threads,32KB 的共享存储器,16KB的 L1 缓存空间,8KB 的常量存储器,12KB 的纹理存储器以及 256KB 的 L2 缓存空间等。
表 5.1 GPGPU-Sim 配置参数
………………………………
6 总结与展望
6.1 总结
GPU 强大的并行计算能力为很多计算任务带来了显著的性能提升。由于 GPU 体系结构复杂,并行编程思维难度高等原因,将计算任务合理分配给众多计算资源以充分发挥性能提升是一个挑战。因此,针对 GPU 性能优化的各种研究方向已经成为研究的热点,引起国内外研究学者的极大关注。
国内外许多学者提出的方法,主要是从资源管理,线程调度以及缓存管理策略这三个方面来对 GPU 性能进行提升。在资源管理方面,通过对 GPU 片上资源的整理以及对线程需求的分析,按照不同程序的比例来合理分配资源,最大化片上资源的利用,但是当允许每个应用程序使用不成比例的共享资源,这会导致共享缓存和内存的高争用。在线程调度方面。GPU 利用大量的线程级并行性来提供高的指令吞吐量,并有效地隐藏内存操作的长延迟,但是由于启动大量线程,会导致严重的带宽问题,甚至导致内存争用以及堵塞,而无法及时处理的内存请求有可能会导致流水线暂停,以致降低整体性能。在缓存管理策略方面,通过对 GPU 上缓存的管理,减少线程束之间的争用,降低缓存抖动现象的发生,但是缓存分区不能有效地减少 GPU 上的内存流水线暂停。
本文从线程调度和资源管理两个方面入手,研究 GPU 的性能优化。从线程调度方面切入,优化程序执行时间,提升线程执行数,提升系统吞吐量,优化 GPU 性能。再次考虑到 GPU 的体系架构,深入到 GPU 资源分配管理方面考虑程序执行时的资源利用情况,避免执行周期时的流水线停滞,对 GPU 性能进行优化,分别提出了 TQDP 和 RACW方法。
在线程调度方面,TQDP 对于待执行的 kernel 进行预处理,获取线程执行时间、到达时间、等待时间等相关参数信息,优化执行队列中的线程执行顺序。最后经过实验验证,实验结果表明本文提出的方法比几种对比方法的优化效果好,在系统吞吐量方面TQDP 比 SMK、SMK-(P+W)平均分别提高了 8.5%、1.4%;在平均标准化周转时间方面TQDP 比 SMK、SMK-(P+W)平均分别提高了 15.6%、2.5%;在加权加速比方面 TQDP 比++DynCTAT、Mod+Bypass 分别平均提高了 2.8%、0.6%;在公平性方面 TQDP 比++DynCTAT、Mod+Bypass 分别平均提高了 27.3%、5.2%。
参考文献(略)