CUDA编程 - Nsight system Nsight compute 的安装和使用 - (1) 学习记录

2024-02-24 03:44

本文主要是介绍CUDA编程 - Nsight system Nsight compute 的安装和使用 - (1) 学习记录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Nsight system & Nsight compute

  • 安装和下载地址
  • 一、Nsight Systems
    • 1.1、主要应用
    • 1.2、比较常用的分析
      • 1.2.1、情况一
      • 1.2.2、情况二
  • 二、Nsight Compute
    • 2.1、主要应用
    • 2.2、比较常用的分析
      • 2.2.1、情况一
      • 2.2.2、情况二
  • 三、两者的比较
    • 3.1、Nsight systems
    • 3.2、Nsight compute
  • 四、参考使用途径
      • 方法一
      • 方法二
      • 方法三
      • 方法四

在 cuda 编程中,经常会用到 Nsight system 和 Nsight compute 进行性能分析等,下面做个学习总结。

本篇包括安装和常用分析思路总结,具体实践操作总结会放在下一篇博客。

安装和下载地址

Nsight Systems

Nsight Compute

汇总下载地址

一、Nsight Systems

1.1、主要应用

主要倾向于观察全局的 Profiling,比如 核函数读写情况,核函数之间的调度情况,SM占有率,CPU和GPU之间的异步执行的情况等。

在这里插入图片描述

1.2、比较常用的分析

1.2.1、情况一

可以对 kernel 执行 和 memory 进行 timeline 分析,尝试寻找是否可以优化

常用的优化角度:

  • 隐藏 memory access
  • 多流调度
  • 删除冗长的 memory access
  • 融合kernel减少 kernel launch的overhead
  • CPU与GPU的 overlapping

一、比如核函数与核函数之间的执行情况,是根据 timeline 进行分析的

比如下面的 timeline 可以发现核函数与核函数之间有延迟,或者是核函数的启动延迟等,都是可以展示出来的
在这里插入图片描述

二、 在多个 stream 的时候,可以查看调度情况和 Overlap 等,从而分析出如何进行更高效的调度

在这里插入图片描述

1.2.2、情况二

分析 DRAM 以及 PCIe 带宽的使用率 ,分析 SM 中 warp 的占有率

一、可以从中分析到哪些带宽没有被充分利用,从而进行优化

在这里插入图片描述

二、可以从中知道一个 SM 中资源是否被用满

在这里插入图片描述

二、Nsight Compute

官方使用说明链接

2.1、主要应用

主要分析核函数的内部的操作,比如显示不同block size核函数的执行时间,执行的吞吐量,带宽分析等。
在这里插入图片描述

2.2、比较常用的分析

2.2.1、情况一

一、roofline analysis

对核函数进行 roofline analysis,可以知道现在的核函数是计算密集型还是仿真密集型。即可以判断下一步优化是提高计算度,计算密度,还是优化访存等。

并且根据 base line 进行优化比较,比如设置两个核函数,对比核函数对性能的影响

在这里插入图片描述

比如在下图 蓝色在绿色的上方
在这里插入图片描述

2.2.2、情况二

二、occupancy analysis (占有率)

对核函数的各个指标进行估算一个warp的占有率的变化

在这里插入图片描述

三、memory bindwidth analysis

针对核函数中对各个memory的数据传输的带宽进行分析。可以比较好的理解memory架构

在这里插入图片描述

四、shared memory analysis

针对核函数中对 shared memory 访问以及使用效率的分析

在这里插入图片描述

三、两者的比较

3.1、Nsight systems

偏重于可视化application的整体的profiling以及各个细节指标

  • PCIe bindwidth
  • DRAM bindwidth
  • SM Warp occupancy
  • 所有核函数的调度信息
  • 所有核函数的执行时间,以及占用整体时间的比例
  • 多个Stream之间的调度信息
  • 同一个stream中的多个队列的调度信息
  • CPU和GPU之间的数据传输耗时
  • Application整体上的各个核函数以及操作的消耗时间排序
  • 捕捉同一个stream中的多个event

整体上会提供一些比较全面的信息,我们一般会从这里得到很多信息进而进行优化

3.2、Nsight compute

偏重于可视化每一个CUDA kernel的profiling以及各个细节指标

-SM中计算吞吐量
-L1 cache数据传输吞吐量
-L2 cache数据传输吞吐量
-DRAM数据传输吞吐量
-当前核函数属于计算密集型还是访存密集型
•Roofline model分析
-核函数中的L1 cache的cache hit几率, cache miss几率的多少
-核函数中各个代码部分的延迟
•精确到代码部分进行highlight
-核函数的load bandwidth, store bandwith, load次数, store次数
-L1 cache/shared memory, L2 cache, global memory中的memory access scheduling
-设置baseline,来进行核函数的优化前后的效率对比

整体上能够得到一个针对某一个kernel的非常精确的profiling,源码级别的性能捕捉,以及优化推荐

四、参考使用途径

方法一

在 host 端使用 Nsight 进行 ssh 远程 profiling

方法二

在 remote 端使用 Nsight 进行直接 profiling

方法三

在 remote 端通过CUI获取statistics之后传输到host端进行查看

***在当host端的nsight不能够直接ssh到 target device 情况下使用。比如说Jetson的profiling

方法四

在 remote 端直接使用CUI进行分析

***在当host端的nsight不能够直接ssh到 target device 情况下使用。比如说 Jetson 的profiling

在wsl中配置的问题参考链接

这篇关于CUDA编程 - Nsight system Nsight compute 的安装和使用 - (1) 学习记录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/740852

相关文章

Pandas使用SQLite3实战

《Pandas使用SQLite3实战》本文主要介绍了Pandas使用SQLite3实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1 环境准备2 从 SQLite3VlfrWQzgt 读取数据到 DataFrame基础用法:读

JSON Web Token在登陆中的使用过程

《JSONWebToken在登陆中的使用过程》:本文主要介绍JSONWebToken在登陆中的使用过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录JWT 介绍微服务架构中的 JWT 使用结合微服务网关的 JWT 验证1. 用户登录,生成 JWT2. 自定义过滤

Linux卸载自带jdk并安装新jdk版本的图文教程

《Linux卸载自带jdk并安装新jdk版本的图文教程》在Linux系统中,有时需要卸载预装的OpenJDK并安装特定版本的JDK,例如JDK1.8,所以本文给大家详细介绍了Linux卸载自带jdk并... 目录Ⅰ、卸载自带jdkⅡ、安装新版jdkⅠ、卸载自带jdk1、输入命令查看旧jdkrpm -qa

Java中StopWatch的使用示例详解

《Java中StopWatch的使用示例详解》stopWatch是org.springframework.util包下的一个工具类,使用它可直观的输出代码执行耗时,以及执行时间百分比,这篇文章主要介绍... 目录stopWatch 是org.springframework.util 包下的一个工具类,使用它

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

springboot security使用jwt认证方式

《springbootsecurity使用jwt认证方式》:本文主要介绍springbootsecurity使用jwt认证方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录前言代码示例依赖定义mapper定义用户信息的实体beansecurity相关的类提供登录接口测试提供一

go中空接口的具体使用

《go中空接口的具体使用》空接口是一种特殊的接口类型,它不包含任何方法,本文主要介绍了go中空接口的具体使用,具有一定的参考价值,感兴趣的可以了解一下... 目录接口-空接口1. 什么是空接口?2. 如何使用空接口?第一,第二,第三,3. 空接口几个要注意的坑坑1:坑2:坑3:接口-空接口1. 什么是空接

springboot security快速使用示例详解

《springbootsecurity快速使用示例详解》:本文主要介绍springbootsecurity快速使用示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录创www.chinasem.cn建spring boot项目生成脚手架配置依赖接口示例代码项目结构启用s

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

java中使用POI生成Excel并导出过程

《java中使用POI生成Excel并导出过程》:本文主要介绍java中使用POI生成Excel并导出过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求说明及实现方式需求完成通用代码版本1版本2结果展示type参数为atype参数为b总结注:本文章中代码均为