学位论文 > 优秀研究生学位论文题录展示

面向CPU-GPU异构并行系统的编程模型与编译优化关键技术研究

作 者: 唐滔
导 师: 杨学军
学 校: 国防科学技术大学
专 业: 计算机科学与技术
关键词: GPU 异构并行系统 编程模型 可扩展性 重用 局部性 cache分析 编译器 通信调度
分类号: TP391.41
类 型: 博士论文
年 份: 2012年
下 载: 287次
引 用: 0次
阅 读: 论文下载
 

内容摘要


随着超大规模集成电路技术的不断进步,单芯片上集成了越来越多的晶体管,目前已达到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之间的冗余数据通信。

全文目录


摘要  10-13
ABSTRACT  13-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
参考文献  155-171
作者在学期间取得的学术成果  171-172

相似论文

  1. 基于函数动态重用的处理器性能优化研究,TP332
  2. 基于面向对象技术的植物根系模拟仿真基础类库研究,TP391.41
  3. 基于视觉反馈与行为记忆的GPU并行蚁群算法,TP301.6
  4. 一种高性能可扩展公钥密码协处理器的研究与设计,TN918.1
  5. 构建分布式系统的关键技术研究与实现,TP338.8
  6. 高速网络环境下的入侵检测系统的研究,TP393.08
  7. 基于GPU的有限元方法研究,O241.82
  8. 微放电通道的径向扩展与放电均匀性的研究,TM83
  9. 基于OVM的SoC功能验证系统的设计与实现,TN47
  10. 盘阵列中基于分组的缓存优化技术研究与实现,TP333
  11. 高性能存储系统的关键技术研究,TP333
  12. 基于图形处理器的SIFT算法研究,TP391.41
  13. 基于VHDL的可编程逻辑器件虚拟实验平台的设计与实现,TP311.52
  14. 分布式内存数据库存储研究,TP311.13
  15. 基于GPU图像搜索中文本检索的关键技术研究,TP391.1
  16. 车库管理系统线路生成与重复利用方法研究,TP315
  17. 互联网文件存储服务系统研究,TP393.09
  18. 对等游戏平台的可扩展性与状状一致性的研究,TP393.09
  19. 基于运动控制卡的开放式数控系统设计及应用,TG659
  20. 产品设计过程中的任务建模及知识获取机制研究,TB472
  21. 基于GPU/CPU多级并行CFD优化策略的研究,V221

中图分类: > 工业技术 > 自动化技术、计算机技术 > 计算技术、计算机技术 > 计算机的应用 > 信息处理(信息加工) > 模式识别与装置 > 图像识别及其装置
© 2012 www.xueweilunwen.com