NVIDIA nvprof / nvvp工具安装和使用介绍

前言

在这里插入图片描述

NVIDIA nvprof / nvvp工具是英伟达N卡GPU编程中用于观察的利器。全称是NVIDIA Visual Profiler,是由2008年起开始支持的性能分析器。交互性好,利于使用。其中记录运行日志时使用命令nvprof,可视化显示日志时使用命令nvvp。

该工具的官方介绍如下:
在这里插入图片描述

不过在最近几年,英伟达官方推出了新的性能分析工具NSight,官方更加建议使用新的工具,给出的原因是NSight运行时消耗的资源更少,统计的数据更加贴近实际运行情况的数据。相比之下使用nvprof/nvvp方式运行时消耗资源较多,数据统计容易不准确。

在这里插入图片描述

除此以外,英伟达还给出了其他的工具,如果希望深入GPU编程,那么这些工具都是傍身利器。

在这里插入图片描述

安装与使用

Linux & Windows

在带有N卡的Linux和Windows机器环境下,在安装好CUDA Toolkit后则自带了nvprof / nvvp等工具。且一般会有相应的应用图标(NVIDIA Visual Profiler 和 NSight),可以直接点击图标打开。
在这里插入图片描述

也可以通过命令行方式打开。

在这里插入图片描述
以Linux系统命令行方式为例,说明使用方法。

直接打印跟踪日志

$ nvprof --print-gpu-trace python test.py

生成nvvp日志文件

$ nvprof -o prof_name.nvvp python test.py

打开nvvp日志文件

$ nvvp prof_name.nvvp

最开始打开日志时显示如下,可以初步看到整个程序运行时的耗时情况:
在这里插入图片描述
X轴是时间轴,表示了程序运行的时间。Y轴分为两个大块,包括进程号模块和显卡卡号模块。其中进程号下又细分为线程模块,其下又分为Runtime API和Driver API耗时。而显卡模块下分为Context模块,其下又细分为MemCpy、Compute和Stream模块。MemCpy展示了显存拷贝的耗时情况,Compute展示了实际CUDA Kernel运行时消耗,Stream展示了流上的时间消耗情况。需要注意的是子模块的信息是可以投射回父模块的时间轴上的。可以通过放大缩小来查看某个关注周期内的时间消耗情况。
在这里插入图片描述
一般在使用时,如果是多个循环,可以先找出某个代表性循环周期,在时间轴上标记处这一周期,然后再仔细查看Compute部分的耗时情况,保证时间消耗不要浪费在内存开辟和释放上,主要花在核函数运行上。优良的CUDA程序从Stream轴看起来是比较连续的,不会出现大量的空白区间。另外还可以关注某些大量耗时的核函数,考虑优化核函数的设计。

nvprof和nvvp还有更多的特性,例如多进程跟踪支持,核函数调用和运行情况统计等。详细使用可以参考官方文档。

MacOS

Mac自从不再支持英伟达显卡后,只能使用nvvp工具查看profile文件。

要使Mac能查看nvvp日志,需要安装JDK环境和nvvp工具包。安装过程参考官网:https://developer.nvidia.com/nvidia-cuda-toolkit-developer-tools-mac-hosts

适用于macOS 系统版本11以下

  1. 下载nvidia-visual-profiler-mac-11.1-28936279.dmg(官网或者CSDN资源

  2. 下载zulu8.23.0.3-jdk8.0.144-macosx_x64.zip(官网或者CSDN资源

  3. 解压放至某文件夹(如/users/name/test/)
    在这里插入图片描述

    注:
    ①JDK可以不用安装,解压放在nvvp文件夹下即可。
    ②JDK如果不是上述版本,可能会出现无法使用的问题(弹出workspace选择界面后卡死)。

  4. 使用
    初次使用可能会被Mac系统拦截,这是由于安全性设置导致的。可以在下面的页面允许jdk相关程序运行(会调用jdk的bin目录下8个左右程序),也可以关闭该安全性设置(参考资料[6])。
    在这里插入图片描述

cd nvvp
./bin/nvvp -vm /users/name/test/nvvp/jdk8/bin/java

需要注意-vm后的路径需为绝对路径。如不指定则自动寻找环境变量中的java。

Mac下打开nvvp文件显示如下,使用方式参考上述“打开nvvp日志文件”部分:
在这里插入图片描述

适用于macOS 系统版本11(Big Sur) 及以上

  1. 下载nvidia-visual-profiler-mac-11.1-28936279.dmg(官网或者CSDN资源

  2. 下载zulu8.23.0.3-jdk8.0.144-macosx_x64.dmg(官网或者CSDN资源

  3. 点击zulu8.23.0.3-jdk8.0.144-macosx_x64.dmg安装jdk
    在这里插入图片描述

  4. 建立libjvm.dylib的软链接

sudo ln -s /Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/server/libjvm.dylib /Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/lib/libserver.dylib
  1. 使用
cd nvvp
./bin/nvvp

需要注意在MacOS11及以上的版本无需再指定-vm参数。

初次使用可能会遇到'lib.dylib' cannot be allowed to run because its origin cannot be verified的报错,说明jdk运行时被Mac系统拦截,这是由于安全性设置导致的。打开系统安全性设置点击允许(‘System Preferences’ → ‘Security & Privacy’ → ‘General’)。
在这里插入图片描述

在这里插入图片描述

参考资料

[1] Nvidia Developer - Performance Analysis Tools
[2] NVIDIA Visual Profiler
[3] [腾讯机智] tensorflow profiling工具简介——nvprof和nvvp
[4] CUDA Toolkit v11.1.1 Doc - Profiler - Visual Profiler
[5] NVIDIA CUDA Toolkit - Developer Tools for macOS
[6] macOS Catalina(10.15)解决阻止程序运行“macOS无法验证此App不包含恶意软件”
[7] How to use NVIDIA profiler
[8] Understanding the Visualization of Overhead and Latency in NVIDIA Nsight Systems
[9] NVIDIA Nsight Systems
[10] Does calling a CUDA kernel multiple times affect execution speed?

  • 0
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TracelessLe

❀点个赞加个关注再走吧❀

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值