l 论文三摘要
n 题目:An Analytical Model for a GPU Architecture with Memory-level and Thread-level Parallelism Awareness
n 摘要:
u 提出一个衡量程序运行时间的模型:主要从运行时线程数量(#running threads)和存储带宽(memory bandwidth)两个方面来考虑,从而估算出并行访存的数量(#parallel memory requests)
u 基于存储warp的并行度,该模型估算出内存请求的消耗,从而估算出程序整体的执行时间
n 内容:
u 介绍
l 许多GPU的编程语言并不能有效地指导人们找出性能瓶颈,所以,本文将建立一个分析模型来测试性能瓶颈
l 模型基本观点:在并行的GPU应用中,估算性能的时候,其最主要的组成部分为内存操作的消耗
l 主要衡量标准:MWP(memory warp parallelism):同时访问内存的最大warp数目,和CWP(computation warp parallelism):一个warp访问内存的周期中,同时执行计算的最大warp数目
l 总体模型:使用MWP和CWP可以建立一个有效估算消耗的性能模型,给出一个程序的运行时间
l 性能准确性:对于micro-banchmark和merge-banchmark,其绝对误差的集合均值分别为5.4%和13.3%
l 本文的特殊贡献:1,提出了第一个GPU架构上的分析型模型,该模型可以被轻易地扩展到其他的多线程架构上;2,提出了两个新的标准:MWP和CWP,代表了warp层次的并行化程度,这个就是识别性能瓶颈的关键因素
u 背景和动力
l CUDA编程模型的背景
n CUDA提供了三个关键的抽象:线程组的层次,共享存储器,栅栏同步
l GPU架构的背景
n SM作为主要的处理中心,同时执行多个block和多个warp,对memory的访问加以区分(global和shared)
l 级联和非级联的存储访问
n 由于DRAM的特性,级联的访问可以提高存储访问效率
l 初始的例子
n SVM的banchmark,对比三种实现的性能:1,直接使用global memory;2,使用constant memory作为缓冲;3,优化了global memory的访问(级联)并且使用constant memory作为缓冲
n 改进了global memory访问的算法性能最好,使用constant memory作为缓冲也提高了性能,另一方面,SM的占用程度也不能够直接与性能联系上,需要进一步分析其他标准
u 分析型模型
l MWP和CWP的简介
n MWP:代表了从SM开始执行一个warp中的存储请求命令,到warp中所有的请求都被满足的这个时间段中,每个SM中能够同时访问内存的最大warp数目
n A memory warp:一个正在等待内存值的warp
n One memory warp waiting period:从一个warp发送完其内存请求直到该warp中所有的内存请求都被满足的这个时间段
n CWP:代表了在one memory warp waiting period时间内,某个SM能够执行的warp数目加1
n MWP关联着系统中内存的并行化程度
n CWP关联着程序的特性:越高的CWP意味着越低的算术密度(高的CWP意味着每个内存访问对应着的计算更少了),判断执行时间的主要消耗是计算还是内存访问
l GPU架构中执行多个warps的消耗
n CWP大于MWP时
u 属于访存为主的程序,执行的时钟周期数目由(23)式算出
n MVP大于CWP时
u 属于计算为主的程序,执行的时钟周期数目由(24)式算出
n Warp运行不充分
u 属于MWP=CWP=N的情况,执行的始终周期数目由(22)式算出
l 计算warp并行度
n 存储warp并行化(MWP)
u Mem_L,Departure_delay,可以算出MWP的上界之一为Mem_L/Departure_delay,再与每个SM中活跃的warp数目比较,小者为没打到峰值的MWP值,再与达到峰值时候的MWP值比较,取最小者即为最终的MWP值
u Mem_L:计算的是一个warp发送出所有内存请求到其所有请求被满足的时间段
u Departure_delay:计算的是两个接连完成内存请求的warp之间相差的时间段(因访存方式不同而不同,可以去权值加以平衡)
n 计算warp并行化(CWP)
u CWP的计算比较直观:算出Mem_cycles/Comp_cycles + 1的值,然后对比每个SM中的warp活跃数目,取其小者即可
l 将所有东西放进CUDA中
n 每个SM的warp数目
u SM中的warp数目是由GPU本身决定的,而N*Rep则为每个SM总共执行的warp数目(Rep为每个SM处理不同批block的次数,如40个block,每个SM每批处理2个block,有4个SM,则能够得出Rep=40/2/4=5)
n 总共执行的时钟周期
u 分不同的情况进行计算:MWP=CWP=N;CWP>MWP;MWP>CWP,对应于式子(22)(23)(24),需要用到指令数目来计算
n 动态的指令数目
u 将PTX汇编出来的指令进行统计,得到的指令数目会有一定误差
n 每个指令的时钟周期(CPI)
u 代表每个指令的消耗,计算过程直接使用:总的消耗时钟周期/总的指令数目 即可
n 级联/非级联的存储访问
u 取决于内存访问方式,一个warp中的内存请求能否以级联的方式实现,取决于内存系统的为架构和warp内部的内存访问模式
n 同步的影响
u 同步之后会有额外的开销:Departure_delay * (MWP-1)
l 分析型模型的局限性
n 未分析的几个方面:cache miss(I-cache,texture,constant cache),没有建立一个cache模型,没有分析分支的代价
l 代码演示
n 从汇编出来的PTX代码中找出计算的指令数目:含有shared的指令也作为计算指令,因为其速度与register一致
u 实验方法
l GPU特性
l Micro-benchmark
l 合并benchmark
u 结果
l Micro-benchmark
l 合并benchmark
u 相关工作
l 分析型模型
n 需要在存储并层次的并行化甚至cache miss上做出更多的工作
n 其他人的工作:
u 建立一个一阶模型来对长延迟的cache miss和其他主要性能瓶颈事件进行分析
u 建立一个一阶模型来计算 未知命中,数据预取和MSHR的消耗
u 随机模型:内存延迟,切换开销,线程交错执行和线程间切换开销
u 分析型模型:计算处理器在共享内存系统中的吞吐量,估算了处理器由于cache miss或者其他资源限制产生的等待时间,整个模型基于统计模型
l GPU性能建模
n 本文的工作是最早对存储层次和线程层次并行化的分析
n Ryoo 提出了两个标准缩小程序员能够提高的应用的利用率和优化空间,专注于非存储的密集工作负载上
n Bakhoda 实现了一个GPU模拟器,使用其模拟输出数据对CUDA应用的性能进行了分析
u 总结
l 本模型的关键思想:找出访存warp能够并行执行的最大数目,估算CPI
n 关键点:
u MWP和CWP两个标准,对访存为主或者计算为主的应用进行不同的分析,得到整个应用所需要的时钟周期
n 能否扩展:
u 加入对warp divergence的分析,对bank conflict的分析
n 疑问:
u 没有对texture memory和constant memory进行讨论,少了warp divergence的分析,少了bank conflict的分析