nsightcompute进阶

news2024/9/22 15:28:16

一、定义

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 利用率降低。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1921563.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IP 地址:优化网络游戏

IP地址和网络游戏 在现代网络游戏中&#xff0c;IP地址不仅用于服务器分配&#xff0c;还能针对性进行玩家匹配与优化网络延迟。本文将探讨IP地址在网络游戏中的具体应用。 *服务器分配* 全球服务器分布&#xff1a; 网络游戏需要在全球范围内提供快速、稳定的连接&#xff…

3D工艺大师快速生成装配动画,驱动汽车工业装配流程革新

在现代制造业的一般生产流程中&#xff0c;车间装配环节是产品由蓝图迈向市场前至关重要的一道工序。随着产品结构的日益复杂化和个性化需求的不断增长&#xff0c;车间装配工作面临着前所未有的挑战。高精密度的装配要求、错综复杂的组件关系以及频繁变更的生产计划&#xff0…

flutter 列表下拉框加搜索

1.使用控件搜索加下拉框dropdown_search: ^0.4.9和获取中文拼音lpinyin: ^1.1.1 2.加入中文查询和首字查询 在当中找到相应的packages&#xff0c;再在SelectDialog.dart当中加入引入拼音搜索 import package:lpinyin/lpinyin.dart; 更改匹配方法manageItemsByFilter使其可…

一文读懂DNS和CDN

一.什么是DNS DNS&#xff08;Domain Name System&#xff09;全称为域名系统&#xff0c;是一个将域名和IP地址相互映射的分布式服务&#xff0c;他的作用就是把一个域名解析成为IP地址。我们平时输入的网址&#xff08;或者域名&#xff09;不能被计算机直接识别&#xff0c;…

oracle控制文件详解以及新增控制文件

文章目录 oracle控制文件1、 控制文件包含的主要信息如下&#xff1a;2、查看目前系统的控制文件信息&#xff0c;主要是查看相关的字典视图 oracle新增控制文件 oracle控制文件 控制文件是一个很小的二进制文件(10MB左右)&#xff0c;含有数据库结构信息&#xff0c;包括数据…

数据结构(Java):单链表面试OJ题

1、题一&#xff1a;获取链表倒数第k个节点 . - 力扣&#xff08;LeetCode&#xff09; 1.1 思路解析 此题我们使用双指针法求解。 首先&#xff0c;我们要知道&#xff0c;倒数的第k个节点&#xff0c;距离倒数第一个节点还需要移动k-1次。 1.那么我们可以定义出两个指针&a…

设计模式-工厂模式的完整代码示例及测试验证

工厂模式 工厂模式 什么是工厂模式&#xff1f; 工厂模式是一种创建对象的设计模式&#xff0c;用来替代传统的 如 A anew A() 创建对象的方式&#xff0c;提供了一种 统一的接口来创建对象&#xff0c; 封装创建的过程&#xff0c;达到解耦的目的。 优缺点 优点 封装对象的创…

pytorch官网examples 实现

Getting started with transforms v2 — Torchvision 0.18 documentation (pytorch.org) 官网我导入包都报错官网代码如下&#xff1a; 不太理解所以我自己写了一段修改之后的代码&#xff0c;效果是一样的 import torch from torchvision.io import read_image import mat…

X用户最多的国家排名统计报告

数据为DataReportal发布的Twitter在各个国家的用户数统计。 2022年&#xff0c;Twitter用户最多的国家是美国&#xff0c;有7690万用户。 数据统计单位为&#xff1a;万人 数据说明&#xff1a; 数据截止时间为2022年1月 Twitter在各个国家的用户情况 2022年&#xff0c;Twit…

【TES807】 基于XCKU115 FPGA的双FMC接口万兆光纤传输信号处理平台

板卡概述 TES807是一款基于千兆或者万兆以太网传输的双FMC接口信号处理平台。该平台采用XILINX的Kintex UltraSacle系列FPGA&#xff1a;XCKU115-2FLVF1924I作为主处理器&#xff0c;FPGA外挂两组72位DDR4 SDRAM&#xff0c;用来实现超大容量数据缓存&#xff0c;DDR4的最高数据…

RIP路由协议概述

RIP【Routing Information Protocol】 RIP是为TCP/IP 环境中开发的第一个路由选择协议标准 RIP是一个【距离——矢量】路由选择协议 当路由器的更新周期为30s到来时&#xff0c;向邻居发送路由表 RIP以跳数作为唯一度量值 RIP工作原理 RIP路由协议向邻居发送整个路由表信息RI…

《昇思25天学习打卡营第1天|QuickStart》

说在前面 曾经接触过华为的910B服务级显卡&#xff0c;当时基于910B做了一些开发的工作&#xff0c;但是总感觉做的事情太低层&#xff0c;想要能自顶向下的了解下&#xff0c;因此开始了MindSpore的学习。另外也想给予提供的显卡&#xff0c;简单尝试下llm模型的训练&#xf…

2.2 类型转换与 printf 函数深度解析

1 类型转换 1.1 隐式类型转换 1.2 显式类型转换 1.3 应用&#xff1a;整除除法 2 printf 函数 2.1 语法格式 2.2 格式说明符 2.2.1 浮点数的规范性输出 2.2.2 格式说明符不匹配错误 2.3 修饰符 2.3.1 对齐方式 2.3.2 宽度 2.3.3 精度 2.3.4 填充字符 2.3.5 其他修…

【硬件调试】示波器探头一碰芯片引脚板子就短路或者闪小火花

问题: 今天拿示波器探头准备测量芯片引脚输出波形,有的引脚正常输出信号,有的会打小火花,但输出波形正常,还有一个引脚最离谱,示波器一碰,板子就立马短路,电流达到最大值,电源电压都被拉下来了,直到示波器探头拿开,板子才自动恢复,此时这个引脚测得波形如下: 根…

C++的链接指示extern “C“

目录 链接指示extern "C"A.What&#xff08;概念&#xff09;B.Why&#xff08;extern "C"的作用&#xff09;C.How &#xff08;如何使用链接指示extern "C"&#xff09; 链接指示extern “C” A.What&#xff08;概念&#xff09; extern&quo…

100 个网络基础知识普及,看完成半个网络高手!

1&#xff09;什么是链接&#xff1f; 链接是指两个设备之间的连接。它包括用于一个设备能够与另一个设备通信的电缆类型和协议。 2&#xff09;OSI 参考模型的层次是什么&#xff1f; 有 7 个 OSI 层&#xff1a;物理层&#xff0c;数据链路层&#xff0c;网络层&#xff0…

ElasticSearch第一天

学习目标&#xff1a; 能够理解ElasticSearch的作用能够安装ElasticSearch服务能够理解ElasticSearch的相关概念能够使用Postman发送Restful请求操作ElasticSearch能够理解分词器的作用能够使用ElasticSearch集成IK分词器能够完成es集群搭建 第一章 ElasticSearch简介 1.1 什么…

javaweb个人主页设计(html+css+js)

目录 1 前言和要求 1.1 前言 1.2 设计要求 2 预览 2.1 主页页面 2.2 个人简介 2.3 个人爱好 2.4 个人成绩有代码&#xff0c;但是图片已省略&#xff0c;可以根据自己情况添加 2.5 收藏夹 3 代码实现 3.1 主页 3.2 个人简介 3.3 个人爱好 3.4 个人成绩&#xff…

shell 字符串列表操作

我的需求是这样的&#xff1a;编译多个模块的时候&#xff0c;把失败的模块添加到列表里&#xff0c;最后输出。这个列表类似这样&#xff1a;failModuleList"a b c d e" 先定义一个空的字符串列表&#xff1a; failModuleList"" 然后利用字符串的拼接方…

CVPR`24 | 又快又好!渲染速度比ENeRF快30倍!4K4D:实时4K分辨率4D视图合成

文章链接&#xff1a;https://arxiv.org/pdf/2310.11448 git链接&#xff1a; https://zju3dv.github.io/4k4d/ 本文旨在实现动态3D场景在4K分辨率下的高保真和实时视图合成。最近&#xff0c;一些动态视图合成方法在渲染质量方面表现出色。然而&#xff0c;在渲染高分辨率图像…