您的位置: turnitin查重官网> 下载中心 >面向CPUGPU异构并行系统编程模型和编译优化关键技术

面向CPUGPU异构并行系统编程模型和编译优化关键技术

收藏本文 2024-04-19 点赞:6409 浏览:17948 作者:网友投稿原创标记本站原创

摘要:超大规模集成电路技术的不断进步,单芯片上集成了越来越多的晶体管,已达到10亿的量级。,受到CMOS工艺特征尺寸的限制,芯片的主频在达到4GHz之后继续提升的空间有限,多核并行逐渐提升处理器计算性能,同时也是充分利用丰富的片上资源的主要技术途径。4-8核的通用CPU已市场主流,而一些专用的处理器如流处理器则包含数十到数百个处理核心。选取非常流行也极具发展潜力的一种商用流处理器体系结构——GPU(Graphics Processing Unit)展开的研究。GPU最初仅用于加速图形计算,因此其结构较通用CPU相对简单,不包含诸如分支预测、乱序执行等耗费芯片资源的复杂逻辑功能,而将晶体管资源更地用于增加并行执行的计算核心,以提升计算性能。GPU的峰值计算性能也因此远高于同时期的通用CPU。GPU指令级功能的逐步完善以及其编程界面的不断改进,GPU被越来越多地应用到非图形领域的计算,出现了一个全新的研究领域——GPGPU(General Purpose Computation on GPUs)。利用CPU和GPU构建异构并行系统,以CPU通用的基础计算环境,GPU作为加速阵列强大的峰值计算能力,已高性能计算领域一个非常的发展趋势。,GPU已在高性能计算、桌面计算嵌入式计算等多个领域了非常广泛的应用,因此有关CPU-GPU异构系统以及GPU本身的一系列研究课题也广泛关注,诸如编程模型、编译优化、可靠性优化以及低功耗优化等等。本课题从编程和编译的角度展开,研究了CPU-GPU异构并行系统的编程模型,然后GPU的存储访问展开了深入的分析和优化研究,给出了所研究模型的编译实现和优化。编程模型是计算系统与程序员之间的界面,是衡量系统易用性的指标,其优劣影响了系统被用户接纳的。近年来面向GPU的编程模型逐步从底层的图形API发展到了抽象级别较高的Brook+、CUDA和OpenCL,正是编程模型的大幅改进促使了GPU向通用计算方向的发展。,相对于传统CPU而言,GPU的编程环境仍然比较复杂,大量已有的应用被继承,因而带来了巨大的软件开发和移植的开销。问题,从传统的、已被广泛接受的OpenMP编程模型入手,从并行原语的角度分析其与GPU的流编程模型之间内在的可转化性,论证了使用类OpenMP编程模型为CPU-GPU异构结点开发程序的可行性;基于思想,设计了一种类OpenMP编程模型,在传统的OpenMP模型中添加了一组带有流处理特征的编译指导命令,形成了OpenStream编程模型。随后,从存储访问的角度展开GPU的性能分析和优化方法研究。“存储墙”问题是限制GPU发挥的其计算性能的一个瓶颈,而cache是一种对于缓解“存储墙”问题具有的存储层次。早期的GPU中并不包含传统上的数据cache,其片上存储层次仅用于缓存与图形处理的数据。在面向通用计算的需求驱动下,近年来GPU中开始出现和传统CPU中类似的通用数据cache,因此研究cache的及优化方法对于提升GPU的计算效率具有。为此,面向GPU众核体系结构建立了存储感知的可扩展加速比模型,分析了其性能的可扩展性与存储层次访问之间的关系,从理论上了优化核心私有cache的使用对其性能可扩展性的性。然后,展开对GPU程序cache分析和优化的研究。GPU特殊的程序执行模型使得传统的cache分析和优化方法不能应用到GPU上。因此,GPU核心的执行模型对GPU程序的重用了度量,给出重用向局部性转化的条件并给出相应的局部性优化方法;,为更精确地对GPU程序的cache建模,基于栈距离图分析方法建立了GPU程序的cache失效分析模型,为未来评估其他GPU cache优化方法奠定了基础。,讨论了OpenStream编程模型的编译实现问题,将上述讨论的分析和优化方法纳入一个统一的编译框架中并给出一个基本的编译实现。在基本实现中,讨论了一种CPU-GPU异构系统芯片级数据流调度方法,将数据在GPU存储空间内的生存期尽可能延长,充分开发GPU端数据的局部性,从而减少CPU与GPU芯片间的冗余数据通信,提高程序性能。的主要创新点包含以下几个:1.为解决CPU-GPU异构并行系统编程复杂的问题,分析总结了面向异构并行计算结点的编程模型所需具备的要素,从并行机制的角度论证了OpenMP编程模型与GPU编程模型的内在可转化性,为基于OpenMP扩展的GPU编程模型研究奠定了理论基础;基于OpenMP模型扩展了一组带有流处理特征的编译指导命令,形成了一种新的基于编译指导的CPU-GPU异构并行系统编程模型OpenStream,简化了面向CPU-GPU异构并行系统的程序开发和程序移植;2.为指导GPU程序面向片上存储层次的优化,面向类GPU众核体系结构建立了一种存储感知的可扩展加速比模型,分析了GPU性能的可扩展性与片上存储层次之间的关系,从可扩展的角度了未来众核体系结构的设计原则和GPU程序面向片上存储层次优化的重心;3.为提高GPU程序的数据局部性,基于经典的重用分析理论,对GPU核心程序迭代序的分析,将经典的串行程序的重用和局部性分析方法扩展到GPU的并行执行模型上去,了GPU核心程序的局部性量化分析模型;同时局部性求解的给出了两种优化GPU核心程序数据局部性的方法:重用的迁移和局部性收益优化,地降低了GPU程序的cache失效率,提升了程序性能;4.为精确建模GPU程序的cache失效,基于经典的cache失效方程和cache冲突分析方法建立了一种精确的GPU程序cache失效分析方法,将cache失效分析问题分解为线程块的栈距离图求解和线程块间的cache冲突分析两个子问题,为GPU程序cache优化方法的评估奠定了基础;5.为验证编程模型和优化方法的性,设计了OpenStream编程模型的源到源编译框架并给出了一个基本的编译实现;在编译器中实现了一种启发式的通信调度算法,在保持数据一致性的前提下尽可能延长GPU端数据的生命周期,开发生产者——消费者局部性,减少CPU和GPU之间的冗余数据通信。关键词:GPU论文异构并行系统论文编程模型论文可扩展性论文重用论文局部性论文cache分析论文编译器论文通信调度论文

    摘要10-13

    ABSTRACT13-17

    章 绪论17-39

    1.1 研究背景18-22

    1.1.1 GPU 与异构系统18-20

    1.1.2 面临的技术挑战20-22

    1.2 工作22-33

    1.2.1 异构系统编程模型23-29

    1.2.2 性能优化研究29-33

    1.3 研究内容33-37

    1.3.1 OpenStream 编程模型34

    1.3.2 存储感知的可扩展性分析34-35

    1.3.3 GPU 程序局部性分析与优化35-36

    1.3.4 基于栈距离图的GPU 程序cache 失效分析36

    1.3.5 OpenStream 编译框架及基本实现36-37

    1.4 主要创新37-38

    1.5 论文组织38-39

    章 OpenStream 异构系统并行编程模型39-67

    2.1 异构系统编程问题的39-43

    2.1.1 OpenMP 编程模型40-41

    2.1.2 流编程模型41-42

    2.1.3 问题描述与求解思路42-43

    2.2 异构结点编程模型的要素43-44

    2.3 OpenMP 模型描述能力分析44-56

    2.3.1 并行机制映射45-52

    2.3.2 映射效率分析52-53

    2.3.3 BenchMarks 案例分析53-56

    2.4 OpenStream 编程模型的设计56-64

    2.4.1 语言机制的扩充56-61

    2.4.2 编程案例61-64

    2.5 小结64-67

    章 存储层次感知的GPU 可扩展加速比模型67-91

    3.1 GPU 片上存储层次与可扩展加速比67-71

    3.1.1 GPU 片上存储层次67-69

    3.1.2 可扩展加速比模型69-71

    3.2 存储层次感知的加速比模型71-82

    3.2.1 体系结构模型71-73

    3.2.2 存储层次感知的加速比73-77

    3.2.3 可扩展性分析77-81

    3.2.4 设计与优化原则81-82

    3.3 实验验证82-90

    3.3.1 实验平台与测试用例82-84

    3.3.2 加速比84-86

    3.3.3 容量和带宽的影响86-90

    3.4 小结90-91

    章 GPU 程序局部性分析与优化91-113

    4.1 问题的和思路92-98

    4.1.1 kernel 执行模型92-93

    4.1.2 基本93-96

    4.1.3 局部性分析方法96-98

    4.2 基于迭代序的局部性分析98-103

    4.2.1 重用距离98-101

    4.2.2 重用的可局部化条件101

    4.2.3 局部性求解101-103

    4.3 GPU 程序局部性优化103-107

    4.3.1 重用的迁移103-106

    4.3.2 优化局部性收益106-107

    4.4 实验验证107-111

    4.4.1 实验平台与测试用例107-108

    4.4.2 实验结果108-111

    4.5 小结111-113

    第五章 基于栈距离图的GPU 程序cache 失效分析113-135

    5.1 问题的与分解113-118

    5.1.1 分析难点113-114

    5.1.2 问题分解114-118

    5.2 cache 失效分析模型118-128

    5.2.1 线程块栈距离图分析118-127

    5.2.2 线程块间cache 冲突访问分析127-128

    5.3 实验验证128-132

    5.3.1 测试用例及平台128-129

    5.3.2 单线程块栈距离图129-131

    5.3.3 cache 失效率131-132

    5.4 小结132-135

    第六章 OpenStream 编译框架及实现135-151

    6.1 编译框架及基本实现135-140

    6.1.1 编译框架135-136

    6.1.2 基本实现136-140

    6.2 编译器优化140-147

    6.2.1 stream 级优化140-147

    6.2.2 kernel 级其他优化147

    6.3 实验验证147-150

    6.4 小结150-151

    第七章 与展望151-153

    7.1 论文工作总结151-152

    7.2 课题研究展望152-153

    致谢153-155

copyright 2003-2024 Copyright©2020 Powered by 网络信息技术有限公司 备案号: 粤2017400971号