nsightcompute进阶

7 篇文章 0 订阅
3 篇文章 0 订阅

一、定义

1 python 代码测试
2 roofline analysis 屋檐模型分析
3 summary 分析
4 Speed of light throughput 分析
5 带宽分析
6 内存分析

二、实现

  1. python 代码测试
2. >>ncu --version
3. >>ncu --list-sets     #查看set 类型
4. >>ncu --set full -o paged_atten python test.py

在这里插入图片描述

客户端加载
  1. roofline analysis 屋檐模型分析
    知道现在的核函数是计算密集型还是访问密集型。即可以判断下一步优化是提高计算度,计算密度,还是优化访存等。
>>ncu --set roofline -o models python test/test1.py

windows 客户端加载
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
分析结论:

  1. paged attention v1 计算强度4.66<内存强度15.59,属于内存访问密集任务。
  2. paged attention v1 的带宽L1、L2、DRAM 分别为6.43、17.03、15.59。
  3. paged attention v1 位于带宽瓶颈区,模型的计算强度<平台的计算强度。模型的吞吐量<平台的吞吐量。
  4. paged attention v2 计算强度26.04<75.58, 仍然属于访问密集任务。
  5. paged attention v2 的带宽L1、L2、DRAM 分别为20.91、76.81、75.58。
  6. v2 比v1 计算强度与吞吐量均有提高,执行速度降低。
    paged attention v1 优化方向:提高计算强度、提高模型的吞吐速度。
    paged attention v2 优化方向:仍可提高。

3.summary 分析
在这里插入图片描述

  1. 第一行为工具栏,Result表示当前选中的内核名称。Size表示内核的启动参数,即Grid Size 和Block Size。
  2. Time 为GPU执行时间为44.59ms; Cycles 为GPU的周期数47485.245; SM Frequency为SM 频率1.06Ghz; Process 为进程号。
    Estimated Speedup: 估计的加速比,表示如果优化这个函数可能带来的速度提升。
    Function Name: 函数的名称。
    Demangled Name: 去掉修饰符的函数名称。
    Duration: 函数执行时间(以ns为单位)。
    Runtime Improvement: 估计的运行时间提示(以ns为单位),表示如果优化这个函数可能带来的运行时间提升。
    Compute Throughput: 计算吞吐量。
    Memory Throughput: 内存吞吐量。
    Registers: 每个线程使用的寄存器数量。
    GridSize:kernel启动的网格大小
    BlockSize:每个Block的线程数
    Cycles:指令周期。

4 Speed of light throughput 分析
在这里插入图片描述

  1. 判断任务类型(计算密集型、内存密集型)
    Compute Throughput 计算吞吐量99.84%远高于 Memory Throughput 内存吞吐量0.28%,表明是计算密集型任务。

  2. 是否需要优化
    L1/TEX和L2缓存吞吐量相对较低,可能存在优化空间。
    DRAM吞吐量与总体内存吞吐量相同,说明主要的内存操作直接与DRAM交互。

  3. 带宽分析
    在这里插入图片描述
    在这里插入图片描述
    L1/TEX Hit Rate:L1 命中率
    L2 Hit Rate:L2 命中率
    L2 Compression Success Rate: L2 压缩成功率
    Mem Busy:内存利用率
    Mem Pipes Busy: 内存管道忙碌状态
    L2 Compression Ratio: L2压缩率
    memory chart: 内存图表直观的显示了数据访问流向以及命中率。从左向右看,在内核中进行计算。

    优化方向1: 从L1TEX到L2的存储器的存储器访问模式不是最佳的。对L2的L1TEX请求的粒度是128字节的缓存行。即每个L2请求有4个连续的32字节扇区。然而,这个内核平均只访问每个缓存行可能的4个扇区中的1.5个扇区。检查源计数器部分是否有未加密的存储,并尽量减少每个内存请求需要访问的缓存行数。

    优化方向2:从设备存储器加载的存储器访问模式导致从DRAM读取55330588个扇区,这是导致L2缓存中丢失的55318297个扇区的1.0倍。L2中读取未命中的DRAM读取粒度为64字节,即L2缓存行的下半部分或上半部分。尝试更改访问模式,以利用DRAM读取请求返回的两个扇区,从而优化DRAM吞吐量的使用。对于跨步内存读取,避免64字节或更大的跨步,以避免将未使用的扇区从DRAM移动到L2。

6 occupany 内存分析
Wrap是GPU中调度和执行指令的基本单位,它由一组固定数量的线程组成,这些线程在GPU的流多处理器(Streaming Multiprocessor, SM)上同时执行相同的指令,但可以对不同的数据进行操作。
SM(Streaming Multiprocessor):流式多处理器是GPU中的核心计算单元,它包含多个处理核心(CUDA Cores)、寄存器、共享内存等资源,能够同时处理多个warp。
在这里插入图片描述
Theoretical Occupancy: 内存理论占用率
Theoretical active Warps per SM:每个流式处理器中理论激活wraps.
Achieved Occupancy:实际内存占用
Achieved Active Wraps Per SM: 每个流式处理器实际激活Wraps 数。
Block Limit Registers:
Block Limit Shared Mem:
Block Limit SM:
Block Limit Warps:
在这里插入图片描述

  1. wrap occupancy(或通常称为Occupancy)是一个关键的性能指标,用于衡量GPU利用率和并行度。具体来说,Occupancy是指在一个流多处理器(Streaming Multiprocessor,简称SM)中,处于活跃状态(即非等待状态)的warp数量与SM支持的最大活跃warp数量的比值。这里的“warp”是GPU执行线程的基本单位,通常包含多个线程(如32个线程),这些线程在GPU上并行执行相同的指令。
  2. Occupancy直接反映了GPU的硬件利用率。高Occupancy通常意味着GPU的并行处理资源得到了有效利用,可以执行更多的计算任务。
  3. 虽然高Occupancy不总是代表高性能(因为还可能受到其他因素的影响,如内存带宽、缓存效率等),但低Occupancy通常会降低性能,因为它限制了GPU隐藏延迟的能力,导致计算单元在等待数据时处于空闲状态。
  4. Occupancy 是指一个 SM 中 active warps 数量和最大可能的 active warps 数量的比值。
    影响Occupancy的因素
    寄存器使用:每个线程使用的寄存器数量会影响可并发执行的warp数量。如果每个线程使用的寄存器过多,那么SM上能够同时执行的warp数量就会减少,从而降低Occupancy。
    共享内存使用:每个block使用的共享内存也会影响Occupancy。共享内存是有限的资源,如果每个block使用的共享内存过多,那么能够同时执行的block数量就会减少,进而降低Occupancy。
    block和warp的配置:block的大小(即每个block中的线程数)和warp的大小(即每个warp中的线程数)也会影响Occupancy。通过合理配置这些参数,可以在不同场景下优化Occupancy。

如何优化Occupancy
7. 减少寄存器使用:通过优化代码,减少每个线程使用的寄存器数量,可以增加同时执行的warp数量,从而提高Occupancy。
8. 合理配置block和warp:根据具体的应用场景和GPU的硬件特性,合理配置block的大小和warp的大小,以达到最佳的Occupancy。
9. 优化内存访问:通过优化数据布局和访问模式,减少内存访问延迟和冲突,可以提高GPU的缓存效率和内存带宽利用率,从而间接提高Occupancy。

上图分析:attention v1 与attention v2 采用相同的数量的寄存器、Block块,但v1 占用更多的共享内存,从而导致每个GPU 利用率降低。

  • 11
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值