基于nsight_compute进行kernel性能分析

news2024/11/25 6:45:03

当利用nsight进行性能分析时,当涉及到内核级别的性能分析时,nvidia提供了系统级别(nsight system),和内核级别的性能分析工具(nsight compute)。

其中,内核级别的性能分析,可以检查kernel实现的性能好坏及bottleneck。

本次分析参考的kernel实现代码为:

https://github.com/siboehm/SGEMM_CUDA

本次主要对比的是cublas和基于naive cuda实现的kernel性能对比:
cublas的实现可以理解为最优解,而naive cuda的kernel没有进行,global memory。 共享内存或者寄存器相关的优化。

参考下列执行执行nsight compute的分析。。。

step 1: enble the usage of ncu

based on the first reference

step 2; generate report 
```
ncu -o profile_matrix  --set full ./a.out

```

step 3: use nsight compute to watch report


Reference:

[1] https://developer.nvidia.com/nvidia-development-tools-solutions-err_nvgpuctrperm-permission-issue-performance-counters

[2] https://docs.nvidia.com/nsight-compute/NsightComputeCli/index.html


[3] https://www.bilibili.com/video/BV15P4y1R7VG/?share_source=copy_web&vd_source=afbf8b20dbc63173f95b2d83f262a108 
 

 

分析完后,利用系统安装的nsight compute工具进行加载。

可以看到,两个kernel的实现,在block size,grid size上都有所区别。但是,在具体性能上,两者的差别更大,包括计算周期,时间,以及compute throughout 这些参数。

基于这些数据的分析可以发现:

数据传输的throughput相近,但是compute throughput的差别很大,这说明,算力的使用还有很大的优化空间,并且不是因为memory-bound的原因。

我们再来观察核函数的具体参数,对应的就是sgemm_naive,和 volta_sgemm_128x64_nn

Floating Point operations roofline

基于这两张图的对比,可以看到,naive的kernel远远没有达到最优的kernel利用率,并且,纵坐标是指数级别的,所以实际差距更大。

 

Arithmetic intensity

针对naive的kernel,SM busy的百分比只有3.14%。

下图展示了FMA,ALU的利用率同样差别显著。

 

memory workload

值得注意的是,即使是针对cublas的实现,nsight compute也不满意,下面是评估看法

The memory access pattern for loads from L1TEX to L2 is not optimal. The granularity of an L1TEX request to L2 is a 128 byte cache line. That is 4 consecutive 32-byte sectors per L2 request. However, this kernel only accesses an average of 2.1 sectors out of the possible 4 sectors per cache line. Check the  Source Counters section for uncoalesced loads and try to minimize how many cache lines need to be accessed per memory request.

 从上面图的对比可以看到

1. 从global memory传入kernel或者L1 cache中的指令数量存在明显差别

2, 优化的kernel中包含对于共享内存的有效利用

小节

nsight compute为我们提供了详细的内核使用的性能评估工具,但是,理解众多参数的作用,还是需要理解GPU的硬件架构和运作原理,此外,针对cuda 编程,更应该做的就是理解 shared memeory,register的工作方式,从而在写kernel时,就提供好的代码实现,避免之后对于profiler的过度依赖。

参考链接:

1. https://www.alcf.anl.gov/sites/default/files/2022-10/nvidia_profiling_tools_keipert_10_4_22.pdf

2. 2. Kernel Profiling Guide — NsightCompute 12.5 documentation

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

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

相关文章

apollo规划架构

算法的基本架构 我们在最开始直接给出规划决策算法架构框图,然后一一介绍每个框图结构的细节: 模块的入口是 PlanningComponent,在 Cyber 中注册模块,订阅和发布消息,并且注册对应的 Planning 类。Planning 的过程之前…

基于SpringBoot+Vue教材订购系统设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,…

DNF手游攻略:云手机辅助流光星陨刀详细攻略大全!

DNF手游中,流光星陨刀是鬼剑士的专属神器之一,拥有快速的攻击速度和优秀的物理与法术攻击属性,因其出色的性能和未来升级的潜力,成为广大玩家关注的焦点。 流光星陨刀的背景与起源 流光星陨刀作为鬼剑士的标志性武器之一&#xf…

使用 Ubuntu x86_64 平台交叉编译适用于 Linux aarch64(arm64) 平台的 QT5(包含OpenGL支持) 库

使用 Ubuntu AMD64 平台交叉编译适用于 Linux ARM64 平台的 QT5(包含 OpenGL/WebEngine 支持) 库 目录 使用 Ubuntu AMD64 平台交叉编译适用于 Linux ARM64 平台的 QT5(包含 OpenGL/WebEngine 支持) 库写在前面前期准备编译全流程1. 环境搭建2. 复制源码包并解压,创…

论文《Universal Graph Convolutional Networks》笔记

【UGCN】论文提出一个基本问题,即是否不同的网络结构属性应该采用不同的传播机制。通过实验发现,对于完全同配性、完全异配性和随机性的网络,1-hop、2-hop和k-nearest neighbor(kNN)邻居分别更适合作为信息传播的邻域。…

stm32学习笔记---GPIO输出(理论部分)

目录 GPIO通用输入输出口 GPIO的基本结构 I/O端口位的基本结构 输入部分 输出部分 推挽模式 开漏模式 GPIO的8种工作模式 STM32手册GPIO和AFIO大致介绍 STM32外部的设备和电路 声明:本专栏是本人跟着B站江科大的视频的学习过程中记录下来的笔记&#xff0…

CISP-PTE综合靶机-WinServer2003

1.收集网站的地址和开放的端口,完成前期信息收集。10分 2.访问站点,找出站点的敏感文件,利用返回数据找到相关敏感信 息,完成网站结构的信息收集。10分 3.利用文件包含漏洞读取敏感文件,找出数据库连接凭证,利用此 凭证连接数据库。10分 4.网站后台提权:找出后台管理员登…

Attention系列总结-粘贴自知乎

1. 梦想做个翟老师:阿里:Behavior Sequence Transformer 解读48 赞同 7 评论文章 优点:捕捉用户行为历史序列中的顺序信息。w2v也是捕捉用户序列信息的,本质差异在于啥? 添加图片注释,不超过 140 字(可选&#xff0…

STM32CubeIDE提示找不到头文件(No such file or directory)的解决办法

0 前言 最近在使用STM32CubeIDE时,发现为工程添加了头文件路径,但编译的时候还是报错,提示找不到头文件: 1 解决办法 1.1 为工程添加头文件路径 右键我们的工程,然后添加头文件路径(最好是相对路径&am…

Vue3+TypeScript项目实战——打造雨雪交加的智慧城市

个人简介 👀个人主页: 前端杂货铺 ⚡开源项目: rich-vue3 (基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL) 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 &#x1…

C# SerialPort串口通讯

串口通信 在.NET平台下创建C#串口通信程序,.NET 2.0提供了串口通信的功能,其命名空间是System.IO.Ports。这个新的框架不但可以访问计算机上的串口,还可以和串口设备进行通信。 创建C#串口通信程序之命名空间 System.IO.Ports命名空间中最重…

【跟我学RISC-V】(三)openEuler特别篇

写在前面 这篇文章是跟我学RISC-V指令集的第三期,距离我上一次发文已经过去一个多月了,在这个月里我加入了oerv的实习项目组,并且还要准备期末考试,比较忙,所以更新频率不高,不过对于Linux kernel和RISC-V…

vue修改node_modules打补丁步骤和注意事项_node_modules 打补丁

1、vue-pdf问题解决及patch-package简介:https://www.jianshu.com/p/d1887e02f8d6 2、使用“黑魔法”优雅的修改第三方依赖包:https://zhuanlan.zhihu.com/p/412753695 3、使用patch-package定制node_modules中的依赖包:https://blog.csdn.…

macbook配置adb环境和用adb操作安卓手机

(参考:ADB工具包的安装与使用_adb工具箱-CSDN博客) 第一步:从Android开发者网站下载Android SDK(软件开发工具包)。下载地址为: 第二步:解压下载的SDK压缩文件到某个目录中。 进入解…

Python 数据可视化 多色散点图

Python 数据可视化 多色散点图 fig, ax plt.subplots() max_line max([max(merged_df[unif_ref_value]), max(merged_df[unif_rust_value])]) min_line min([max(merged_df[unif_ref_value]), max(merged_df[unif_rust_value])]) ax.plot([min_line, max_line], [min_line, …

基于JSP的教学质量评价系统

开头语: 你好,我是计算机学长猫哥。如果您对教学质量评价系统感兴趣或有相关需求,欢迎随时联系我。 开发语言: Java 数据库: MySQL 技术: JSP技术 Java语言 工具: MyEclipse、Tomcat服…

基于JSP的“塞纳河畔左岸”的咖啡馆管理系统

开头语: 塞纳河畔左岸的咖啡,我手一杯品尝的你美~ 哎哟,不错哦!我们今天来介绍一下咖啡馆管理系统! 你好呀,我是计算机学长猫哥!如果你对咖啡馆管理系统感兴趣或有相关需求,欢迎联…

基于 GoLang 编写的 IOT 物联网在线直播抓娃娃企业级项目

大家好,我是码农先森。 引言 前几年,娱乐物联网的热度很高。我当时所在的公司启动了一个将线下娃娃机的玩法,迁移到线上的项目,因此公司决定开发一个在线直播抓娃娃的项目。近来,娱乐物联网的领域已经进入资本的寒冬…

小白学-WEBGL

第一天&#xff1a; 1.canvas和webgl的区别 Canvas 和 WebGL 都是用于在网页上绘制图形的技术&#xff0c;它们通过浏览器提供的 API 使开发者能够创建丰富的视觉内容&#xff0c;但它们的工作原理和用途有所不同。 Canvas Canvas API 提供了一个通过 JavaScript 和 HTML <…

家政预约小程序14权限配置

目录 1 创建用户2 创建角色3 启用登录4 实现退出总结 我们现在小程序端的功能基本开发好了&#xff0c;小程序开发好之后需要给运营人员提供管理后台&#xff0c;要分配账号、配置权限&#xff0c;我们本篇就介绍一下权限如何分配。 1 创建用户 在微搭中&#xff0c;用户分为内…