首页 > 其他分享 >nvprof学习手记

nvprof学习手记

时间:2023-03-30 18:46:23浏览次数:56  
标签:bin sudo 3906366 学习 手记 线程 usr nvprof

最近在读professional cuda c programming.第三章里有一些关于nvprof的内容.记录一下过程中遇到的问题.
本书的代码可以在这里找到.

线程束分化

GPU在控制流上相对简单,相比GPU它没有复杂的分支预测机制,一个warp中所有线程在同一周期内必须执行相同指令.如果一个线程执行一条指令,那么warp中的所有线程都必须执行这条指令.如果同一warp中的线程使用不同的路径通过同一程序,则可能产生问题.例如:

if(cond){
    true_branch();
}else{
    false_branch();
}

如果线程束中一部分线程走真分支,另一部分执行假分支,则会违背上述原则.这被称为线程束的分化(warp divergence).这种情形下,warp将连续执行每个分支路径,禁用不执行这一路径的线程.如下图
img
显然这会导致性能的明显下降.

nvprof遇到的问题

按照书上的指引, 执行nvprof --metrics branch_efficiency ./simpleDivergence, 会提示

==3906366== NVPROF is profiling process 3906366, command: ./simpleDivergence
./simpleDivergence using Device 0: GeForce GTX 1080 Ti
Data size 64 Execution Configure (block 64 grid 1)
==3906366== Warning: ERR_NVGPUCTRPERM - The user does not have permission to profile on the target device. See the following link for instructions to enable permissions and get more information: https://developer.nvidia.com/ERR_NVGPUCTRPERM 
==3906366== Profiling application: ./simpleDivergence
==3906366== Profiling result:
No events/metrics were profiled.
==3906366== Warning: Some profiling data are not recorded. Make sure cudaProfilerStop() or cuProfilerStop() is called before application exit to flush profile data.

这里提供了报错信息的情景.依据这里的指引,这是因为获取这些数据的GPU Performance Counters被禁用了.我第一反应是使用管理员权限运行,即sudo nvprof.结果却提示commad not found.
我们在linux运行modprobe nvidia NVreg_RestrictProfilingToAdminUsers=0后,未解决问题.
随后尝试"Enable access permanently"一栏下的方法,在/etc/modprobe.d目录下添加一个后缀名.conf的文件,并输入options nvidia "NVreg_RestrictProfilingToAdminUsers=0".随后执行update-initramfs -u -k all.注意这些都需要root权限.
重启系统,在终端输入cat /proc/driver/nvidia/params | grep RmProfilingAdminOnly查看权限情况,然而一个大大的RmProfilingAdminOnly = 1狠狠地嘲笑了我.
正当我准备放弃时,想到了在一个论坛帖子里看到一位网友使用绝对路径调用nvprof,遂尝试,问题解决.
那么为什么直接用sudo会找不到命令呢?可以在这里找到答案.简单来说,sudo中有一个选项--with-secure-path是默认开启的,此时它并不是在系统的PATH下寻找,而是在/etc/sudoer文件中的

Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

这一项中寻找.默认来说是上面的内容.因此我们需要添加nvprof所在的路径.一般来说是/usr/local/cuda/bin/.编辑sudoer文件需要特殊的编辑器.在/etc目录下,输入sudo visudo,将路径添加进Defaults,注意加冒号.随后Ctrl + O保存,回车,Ctrl + X退出.随后就可以直接使用sudo nvprof了.

这里列出了nvprof支持的所有metrics.

标签:bin,sudo,3906366,学习,手记,线程,usr,nvprof
From: https://www.cnblogs.com/linxiaoshu/p/17273964.html

相关文章

  • Java学习日记4
    2023.3.29学习Java打卡JDBCJDBC(JavaDatabseConnectivity),Java-数据库连接,用Java语言操作数据库。本质:是sun公司定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中......
  • js学习笔记
    Js语法基础== >=<= - 默认把字符型隐式转换为数值型+为字符拼接逻辑短路:(与运算):表达式1结果为真,返回表达式2表达式1为假,返回表达式1(或运算):表达式1为真,返回表......
  • ajax学习笔记
    Ajax:浏览器和服务器之间数据交互的方式,底层是基于浏览器提供的xhr对象 基于xhr发起get请求创建实例Open函数Send函数Onreadystatechange事件const xhr=new XML......
  • Git学习笔记
    《Git学习笔记》一、词汇概念说明Git的用途Git是目前世界上最先进的分布式版本控制系统(没有之一)。其实就是用来管理文件内容变动的一个工具,即一个可下载安装的软件程序......
  • 深度学习(二)--神经网络
    一:神经网络的历史神经网络的发展可谓经历了一波三折:神经网络的发展过程二:M-P模型三:感知机四:多层感知机五:误差反向传播函数六:误差函数和激活函数七:似然函数八:随机梯度下降法......
  • python学习(二)
    1Python中的标识符和保留字有的单词赋予了特定的意义,在给对象起名字时不能使用例如代码:importkeywordprint(keyword.kwlist)结果:['False','None','True','and......
  • python+playwright 学习-42 离线安装 playwright 环境
    前言有些同学可能是在公司局域网办公,无法连到外网去在线下载,本篇教大家在本地局域网部署好playwright环境playwright本地下载先找个有网络的电脑,下载playwright,不要......
  • IM跨平台技术学习(七):得物基于Electron开发客服IM桌面端的技术实践
    本文由得物技术团队Uni分享,即时通讯网收录时有内容修订和排版优化。一、引言本文要分享的是得物技术团队基于Electron开发客服IM桌面端的技术实践过程,内容包括桌面技术......
  • 【HMS Core】FAQ之机器学习服务知多少
    【问题描述1】使用骨骼点驱动虚拟人偶,华为是否提供相关能力以及可使用的API?【解决方案】API请参考下图:参考链接:https://developer.huawei.com/consumer/cn/doc/development/......
  • 【THM】Putting it all together(网站组件协同工作介绍)-学习
    本文相关的TryHackMe实验房间链接:https://tryhackme.com/room/puttingitalltogether本文相关内容:了解Web服务的所有单独组件如何协同工作,这种协同工作能让我们可以访问自......