Ubuntu使用Visual Profiler

Ubuntu使用Visual Profiler

配置java环境

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//卸载OpenJDK
sudo apt-get purge openjdk/openjdk*
sudo apt-get clean/autoclean
//安装jre、jdk
sudo apt install openjdk-8-jre-headless
sudo apt install openjdk-8-jdk-headless
//添加环境变量
sudo vim ~/.bashrc
#set oracle jdk environment
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_191 ## 这里要注意目录要换成自己解压的jdk 目录
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
source ~/.bashrc
//验证
java -version
//如果你安装了多个版本的jdk,你可以通过以下命令在这些版本之间切换
sudo update-alternatives –config java

使用nvvp

1
nvvp

出现Visual Profiler图形化界面

nvprof命令使用

常用度量标准

1
2
3
4
5
6
7
8
9
10
11
12
nvprof --query-metrics # 查看所有能用的参数命令
nvprof 计时统计工具
--metrics achiveed_ocupancy 内核占用率
--metrics gld_throughput 全局加载吞吐量
--metrics gld_efficiency 全局内存读取效率
--metrics gst_efficiency 全局内存载入效率
--metrics gld_transactions 全局内存加载事务效率
...
最常用的有:
achieved_occupancy 占用率(每个SM在每个cycle能够达到的最大active warp数目占总warp的比例)
gld_throughput 全局加载吞吐量(较高的load throughput也不一定就有较高的性能)
gld_efficiency 全局内存读取效率(我们确切需要的global load throughput与实际得到global load memory的比值)

bug

nvprof –metrics gld_throughput ./multiply ./test/a_15360_15360.mtx ./test/b_15360_2.mtx ./outnvprof

nvprof –metrics achieved_occupancy ./multiply ./test/a_15360_15360.mtx ./test/b_15360_2.mtx ./out

Make sure cudaProfilerStop() or cuProfilerStop() is called before application exit to flush profile data.

解决方法在程序末尾加cudaDeviceReset()或者cudaProfilerStop()

在runtime API下,添加

1
2
3
4
5
#include "cuda_profiler_api.h"
cudaProfilerStart();
//划分出您需要profile(多数情况下是指用来测定你所编写的应用程序的运行效率的一个程序)的部分
cudaDeviceSynchronize();
cudaProfilerStop();

在dariver API下则为,添加

1
2
3
4
5
#include "cudaProfiler.h"
cuProfilerStart();
...
cudaDeviceSynchronize();
cuProfilerStop();

这个方法是visual profiler适用的,nsight的profiler功能可能不适用。

在你的程序结束前, 请至少调用如下两种之一, 再退出.
(1)
cudaDeviceSynchronize();
cudaDeviceReset();
或者
(2)
cudaDeviceSynchronize();
cudaProfilerStop();

注意别漏了cudaDeviceSynchronize();
不加上面任意一种而直接退出将导致各种奇葩问题, 例如看不到部分数据, 看不到时间线之类的.

cudaDeviceReset重置当前线程所关联过的当前设备的所有资源.如在调用cuda的过程中出现中途错误,需要提前退出程序,可以调用这个cudaDeviceReset来清空之前所关联过得所有资源。

猜想:

可能也能清空当前线程和device的映射关系

ERR_NVGPUCTRPERM - The user does not have permission to profile on the target device.

1
2
3
4
5
6
# 既然是没有权限,则采用sudo来解决
which nvprof
#出现nvprof所在路径: /usr/local/cuda-10.1/bin/nvprof
sudo /usr/local/cuda-10.1/bin/nvprof --metrics gld_throughput # +执行程序
sudo /usr/local/cuda-10.1/bin/nvprof --metrics gld_throughput ./multiply ./test/a_15360_15360.mtx ./test/b_15360_2.mtx ./outnvprof
sudo /usr/local/cuda-10.1/bin/nvprof -o result.nvcc -f --metrics gld_throughput ./multiply_TSM2_V3 ./test/a_30720_30720.mtx ./test/b_30720_2.mtx ./out

参考文章

GPU世界论坛

Ubuntu18.04安装jdk环境

Ubuntu 18.04安装Java JDK8三种方式

CUDA:(五)Nvidia Visual Profiler (Nvidia自带内核执行代码分析软件)

CUDA入门(四)Visual Profiler

profiler和Nsight分析问题

NVIDIA Profiling Tools

nvprof

---------------- 本文结束 ----------------

本文标题:Ubuntu使用Visual Profiler

文章作者:Pabebe

发布时间:2020年06月21日 - 12:15:58

最后更新:2020年06月21日 - 20:24:04

原始链接:https://pabebezz.github.io/article/ed84546b/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%