您的位置:首页 > 其它

论文阅读笔记1

2012-12-06 15:01 253 查看
l 论文一摘要

n 题目:a quantitative performance analysis model for GPU architectures(GPU架构上的一个定量的性能分析模型)

n 摘要:

u 提出了一个吞吐量模型(5-15%错误率),用于衡量三个主要组成部分:指令流水线,共享内存访问,全局内存访问

u 测试的实验例子:稠密矩阵乘法,三对角线性方程组求解(优化60%),稀疏矩阵向量乘(优化18%)

u 展望:对硬件资源分配提出建议,避免bank conflict,块调度,内存传输粒度

n 内容:

u 介绍

l 目前的GPU编程工具中能够用于测试性能的太少,只有ATI的Stream Profile和NVIDIA的Parallel Nsight,只能够测试程序的统计数字,无法跟程序性能联系起来,本文将提出一个小的标准性能测试模型,有助于分析分析性能,给硬件设计者提供建议。

l 使用到的工具:barra simulator(输入:cubin文件,收集GPU相关的统计数据,用于掌握数据依赖的应用,计算动态指令数目)

u GPU架构和编程模型

l GPU分成两个层次:顶层的向量化处理器,底层的具体实现(N卡的SM,A卡的SIMD cores)

l CUDA和OpenCL接口对应一致,NVIDIA的warp和AMD的wavefront,性能模型将对所有的GPU结构都适用(尽管实验用的是N卡)

u 性能建模和分析方法

l 分析传统性能分析的弱点:分成“内存限制/计算限制”两类计算过程,忽略了指令的类型,片上共享内存和bank conflict,可以用“指令吞吐量限制/内存层次限制”代替,将性能分析的层次从模糊的高层(算法,计算量等)降为清晰的底层(指令吞吐量,内存分层等)

l 新模型的组成部分:指令流水线,global memory,shared memory

n 指令:对指令按照执行代价的高低进行分类,然后将一般化的代码在不同数量的warp并行层次上进行测试,估算每一类指令的流水线吞吐量

n Shared memory:对一般化的代码,利用bank conflict信息更正内存事务的数量,然后在一定数量的warp并行层次上利用吞吐量估算时间

n Global memory:使用一个内存事务模拟器来计算硬件层次上的事务数目

n 总过程:Barra生成一个关于指令执行次数的动态程序执行信息,然后使用这个信息来生成每一类动态指令的数目,共享内存事务的数目,全局内存事务的数目,被同步所分开的阶段数目

l 模型的作用

n 能够定量地分析每一种部分性能如何,找出性能瓶颈,检测瓶颈是否消除,新的瓶颈是什么,给出确切的瓶颈原因

n 指令:计算密集度低,高代价的指令,低效的warp并行

n Shared memory:bank conflict,簿记指令引起的内存拥堵,低效的warp并行

n Global memory:并行化隐藏延迟的效率过低,非级联的内存访问和内存事务粒度大

l 数据展示

n 指令分成四类,图形展示每一类随着单个SM中warp数目增长所呈现出的吞吐量变化趋势,图形展示共享内存随着单个SM中warp数目增长所呈现出的带宽变化趋势

u 性能建模过程

l 使用到的工具:decuda(cubin反编译软件)

l 模型的处理过程:内建一个工具来修改原有的二进制指令,将修改后的指令重新编译成二进制代码,最后将修改后的二进制代码嵌入到执行文件中

l 指令流水线:

n 指令的低效来源于warp的低效,warp的低效来源于资源的限制(每个SM):16384 Registers,16KB shared memory,512 threads,8 blocks,32 warps

n 指令的执行峰值取决于该类指令有多少个Function Unit可用,FU可用的越多,则峰值越高(四类指令,峰值可由公式算出)

n 调整block的大小和数目可以决定warp的个数,从而影响指令的吞吐量,FU越多的指令,吞吐饱和所要求的warp数也越高

l Shared memory

n 每个SM有16K的shared memory,其峰值吞吐量可以达到1420GB/s,通过调整SM中warp的数目,能够找出带宽饱和最少需要多少warp(内存流水线更长)

n Bank conflict(4B/bank,16bank/SM):写一个自动程序来导出不同程度bank conflict所对应的有效内存事务数目

l Global memory:与三个因素有关(block个数,block中thread个数,每个thread的内存事务数目),其中每个thread在指令级别的内存事务可能在硬件级别上被分成几个内存事务(由于内存的级联访问规则)

n 内存的级联访问规则:

u 在每个内存事件中,找出(最小线程)被要求的内存段

u 找出其他相关线程(该线程的地址请求也在上述的内存段中)

u 尽可能压缩内存段的大小

u 重复上述过程直到所有同一个half-warp中的线程都被处理过

u 案例研究

l 稠密矩阵乘法(使用volkov Demmel算法)

n 目的:体现性能模型中检测瓶颈的功能,并且对硬件设计提出建议

n 为什么16*16的块大小是最优的

u 32*32在warp数目方面降低了,8*8在shared memory方面降低了

n 为什么性能只能达到峰值的56%

u 指令吞吐只有峰值的80%(有其他控制,取址,内存操作)

n 硬件建议

u 增大每个SM的block插槽,将有更多的并行warp束,达到更好的指令和shared memory吞吐量

u 增加每个SM的register和shared memory,将能够使32*32的情形达到更高的计算密度(warp数目不会因为前面两个因素而降低)

l 三对角线性方程组求解

n 目的:体现了性能模型对于shared memory吞吐量的改进,量化了bank conflict的影响,估算消除bank conflict的潜在收益,提出硬件设计的建议

n 使用了cyclic reduction

u 为了减少bank conflict,使用了padding technique,将shared memory的限制转换成了instruction的限制(更复杂的寻址方式)

u 存在的问题:在warp层次的并行度不足

n 硬件建议

u 将bank数目改为质数,避免bank conflict

u 当一个块使用的线程越来越少的时候,引入一个机制来释放未使用的硬件资源

u 利用以上两个改进,可以增加warp层次的并行度

l 稀疏矩阵向量乘法

n 体现性能模型预估硬件事务数目的能力,小的事件粒度有利于提高性能

n 稀疏矩阵的存储方式和线程的映射方式

u 存储元素以列为主,线程分配元素以行为主,使得连续的线程访问连续的内存

u Straightforward ELL & Interleave ELL(uncoalesced memory access & coalesced memory access)

n SpMV性能的关键因素:

u Global memory access

u Interleaved stored way of vector entry(should be decided by the interleaved stored of the matrix)

u Texture cache:加速

u 总结

l 模型优点:找出GPU程序或者结构上潜在的改进之处,定位瓶颈,提出建议,优化程序

l 模型扩展:考虑内存模型;一般化的bank conflict检测;对同步栅栏的影响进行建模;对指令执行中的不完善重叠,shared memory,global memory进行建模

n 关键点:

u 定位瓶颈,改进程序,提出硬件设计建议

u 对三个主要考虑因素进行建模:instruction pipeline,shared memory,global memory

u 对三个案例进行分析:稠密矩阵乘法,三对角求解,稀疏矩阵向量乘法

u 提出进一步可以拓展的工作

n 能否扩展:

u 对memory model的进一步研究(global memory,texture memory,constant memory,shared memory等)

u 对栅栏同步的影响建模(synchronization barrier),一般化bank conflict的检测

u 对warp数目与block数目还有register数目之间关系的建模

n 疑问:

u 完全没有对warp divergence进行,这样的性能衡量可靠么?如何联系起来?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: