问题标签 [nvprof]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
tensorflow - nv-nsight-cu-cli 导致 TensorFlow 失败
我已经下载了最新的 Nsight Compute 分析工具,我想用它来对 Tensorflow 应用程序进行基准测试。我使用的代码在这里。当我执行它时它运行得非常好,当我用nvprof ./mnist.py
它进行基准测试时完全没有问题。但是,当我尝试使用命令运行它时,sudo ./nv-nsight-cu-cli [path to the file]
出现以下错误:
ImportError: libcublas.so.9.0: cannot open shared object file: No such file or directory
我怀疑nv-nsight-cu-cli
不知何故根本没有识别环境变量。周围有什么解决办法吗?
nvprof - 如何将 nvprof 应用于 Kinetica?
有人可以给我一个关于如何将 nvprof 应用于 Kinetica 的提示吗?
1) 我看到位于 GPU 上的 Kinetica 进程的名称是 gpudb_cluster_cuda,其父进程是 gpudb_host_manager。我发现 gpudb_host_manager 是由 /etc/rc.d/init.d/gpudb_host_manager 启动的。
2)因此我将其修改如下。这应该有效 - 即使对于它的子进程也是如此。但事实并非如此。没有为 gpudb_cluster_cuda 生成分析数据。
我将 nvprof 应用于 /etc/rc.d/init.d/gpudb,它会产生一些痕迹,但它根本不使用 GPU。
当然,我停止并重新启动了这些。欢迎任何评论。
performance - 多内核性能分析(CUDA C)
我有具有多个内核的 CUDA 程序在系列上运行(在同一个流中 - 默认一个)。我想对整个程序进行性能分析,特别是 GPU 部分。我正在使用 nvprof 工具使用一些指标进行分析,例如 completed_occupancy、inst_per_warp、gld_efficiency 等。
但是分析器分别为每个内核提供指标值,而我想为它们计算这些值以查看程序的 GPU 总使用量。我应该为每个指标取所有内核的(平均值或最大值或总数)吗?
python - Tensorflow - 配置文件自定义操作
我对在 GPU 上运行时测量自定义 Tensorflow Op 的详细性能的方法感兴趣。
到目前为止,我已经使用时间轴以及内部的 Tensorflow Profiler ( )尝试了这篇文章的方法。tf.profiler.Profiler
两者都提供了非常相似的结果,如果我想调查网络,这很好,但是对于分析单个操作,输出太粗糙并且不包括操作内计算(至少我找不到方法) . 我的下一个尝试是使用 CUDA 分析器nvprof
(或nvvp
就此而言),它的方向更正确,并显示对 CUDA 内核和内存分配的单个调用。但是现在,不包括 CPU 计算。我试过运行nvprof --cpu-profiling on
,但现在探查器永远不会完成(见这里)
我的场景如下:我编写了一个自定义 Op,它与 2D 中的卷积非常相似,并且不应该花费更多时间来计算。在网络中,我的自定义 Op 的性能比tf.nn.conv2d
. 使用tf.profiler.Profiler
我得到以下信息:
所以在我看来,我的自定义操作在 GPU 上花费的时间差不多,但在 CPU 上的时间要长一个数量级以上。对于 GPU Ops,这是不可接受的,我想找到我的 Ops 在 CPU 上花费的时间。另外让我吃惊的是,我的 Ops 似乎只分配了原始 Conv Ops 分配的 GPU 内存的三分之一。
有没有办法获得我的自定义操作(包括 CPU 和 GPU 使用)的详细配置文件,可以向我解释我做错了什么并帮助我纠正错误?
cuda - 由于“内存依赖性”,仅寄存器指令如何停止?
我正在使用启用 PC 采样的 nvprof 分析 CUDA 内核,以了解我遇到的一些延迟问题。我使用的 GPU 是 P100(计算 6.0)
PC 采样报告说 DFMA 由于内存依赖性而经常停止。DFMA 的 SASS 代码如下:
我对这个问题的看法是,R8 需要通过 LDG.E.CI.64 加载,L2 上的未命中率非常高。
内存依赖停顿的定义是“无法进行加载/存储,因为所需的资源不可用或未充分利用,或者给定类型的太多请求未完成”。
让我感到困惑的是 DFMA 不是加载/存储操作,如果我认为停顿是由于 R8 上不可用的数据是正确的,那么它应该是执行依赖。DFMA 上的内存依赖停止意味着什么?
cuda - 为什么两个 CUDA 流中的操作不重叠?
我的程序是一个管道,它包含多个内核和 memcpys。每个任务将通过具有不同输入数据的相同管道。主机代码在处理任务时首先会选择一个 Channel,它是暂存器内存和 CUDA 对象的封装。在最后一个阶段之后,我将记录一个事件,然后去处理下一个任务。
主要流水线逻辑如下。问题是不同流中的操作不重叠。我附上了处理 10 个任务的时间表。您可以看到流中的任何操作都没有重叠。对于每个内核,一个块中有 256 个线程,一个网格中有 5 个块。用于 memcpy 的所有缓冲区都已固定,我确信我已满足这些要求用于重叠内核执行和数据传输。有人可以帮我找出原因吗?谢谢。
环境信息
GPU:Tesla K40m (GK110)
Max Warps/SM:64
Max Thread Blocks/SM:16
Max Threads/SM:2048
CUDA版本:8.0
c++ - nvprof 产生意想不到的分支效率结果
我按照教科书“专业CUDA C编程”中的翘曲发散示例(以下代码)。
显然(并且写在教科书上),math_kernel2
应该有最好的分支效率,math_kernel1
遵循并math_kernel3
有最差的结果。然而,nvprof
报告给我的结果与教科书相矛盾。我使用 CUDA 8.0 在 GTX 1080 Ti 上对这些内核进行了基准测试(我还添加了编译器标志-g -G
以nvcc
禁用优化),它报告了以下分支效率:
- 数学内核1 83.33%
- 数学内核2 100.00%
- math_kernel3 100.00%(预计小于math_kernel1,教科书上是71.43%)
cuda - CUDA 中的 FLOP 效率
根据定义flop_sp_efficiency
达到峰值单精度浮点运算的比率
CUDA 手册在这里介绍了 FLOPS 。度量收益率比率,例如 10%。这引发了关于“峰值”一词的两个问题:
1-这是硬件特定的值吗?因此,nvprof 应该知道,为了计算比率,并且对于在特定设备上运行的所有应用程序,分母应该是恒定的?按照说明书,就是No_CUDA_cores * Graphic_clock_freq * 2
。那是 nvprof 设置分母的方式吗?
2-这是否意味着在每个内核的程序运行时达到峰值?假设一个内核被调用 10 次。一次调用具有最高的 FLOPS(与硬件值无关),例如 2GFLOPS。然后计算效率sum(FLOPS_i)/10
,给出 10 次调用的平均 FLOPS,然后将该平均值除以 2,得出该内核的 FLOPS 效率。在这个假设下,一个内核可能达到 2 GFLOPS,而另一个内核可能达到 4 GFLOPS。我这么说是因为该指标是在 nvprof 中按内核报告的。
对此有何评论?
cuda - cuda 探查器中的本地缓存命中指标
对于某些 CUDA 应用程序分析,我看到本地命中率(local_hit_rate 指标)的值为 0%。
我想用该值区分以下概念。
应用程序无权访问本地缓存。
对本地缓存的所有访问均未命中。
我怎样才能找到答案?由于inst_compute_ld_st
,ldst_issued
和的值ldst_executed
非零,是否可以丢弃第一个问题?还是有别的东西?
该设备是M2000,即CC5.3 CC5.2