问题标签 [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.
cuda - nvvp(视觉)和nvprof(命令行)的输出有什么区别吗?
为了测量 CUDA 程序的指标/事件,我尝试使用如下命令行:
我还在 Visual profiler 上测量了相同的指标nvvp
。我注意到我得到的值没有区别。
当我选择像achieved_occupancy
. 但这会随着每次执行而变化,这可能就是为什么我每次运行它都会得到不同结果的原因,无论我使用的是nvvp
还是nvprof
.
问题:
我的印象是nvvp
和nvprof
完全一样,那nvvp
只是一个建立在上面的GUI,nvprof
以便于使用。但是我得到了这个建议:
始终使用视觉分析器。永远不要使用命令行。
另外,这个问题说:
我不想使用命令行分析器,因为我需要全局加载/存储效率、回放和 DRAM 利用率,这些在可视分析器中更加明显。
除了 '动态' 指标achieved_occupancy
,我从未注意到结果有任何差异。那么,这个建议有效吗?工作方式是否存在某种缺陷nvprof
?我想知道在命令行表单上使用可视化分析器的优势(如果有的话)。
更具体地说,是否存在nvprof
给出错误结果的指标?
笔记:
cuda - 什么会导致 nvprof 不返回数据?
我有一个使用 OpenACC 检测的 Fortran MPI 代码。这是一个大代码。我无法在这里提供任何有意义的片段。它在 Cray aprun 下运行良好:
我想用 nvprof 来分析它。我尝试:
代码再次运行正常,但是当一切都说完了,我没有得到任何分析数据,只有一条消息:
没有提供其他错误消息。任何人都知道什么会导致这种行为?我正在使用 Cray MPI Fortran 编译器进行编译。我的编译标志是
模块已cudatoolkit
加载。
fortran - 带 MPICH 的 nvprof
我正在尝试分析 MPI/OpenACC Fortran 代码。我在这里找到了一个详细说明如何使用 MPI 运行 nvprof 的站点。给出的示例适用于 OpenMPI。但是,我仅限于 MPICH,我无法弄清楚等价物。有谁知道会是什么?
cuda - 带宽的 nvprof 选项
从命令行使用 nvprof --metrics 测量带宽的正确选项是什么?我正在使用 flop_dp_efficiency 来获取峰值 FLOPS 的百分比,但是手册中似乎有很多带宽测量选项,我并不真正了解我在测量什么。例如 dram_read、dram_write、gld_read、gld_write 在我看来都一样。另外,我是否应该通过假设两者同时发生来将带宽报告为读+写吞吐量的总和?
编辑:
根据图表的出色答案,从设备内存到内核的带宽是多少?我正在考虑在从内核到设备内存的路径上采用最小的带宽(读+写),这可能是 dram 到 L2 缓存。
我试图通过测量 FLOPS 和带宽来确定内核是否受计算或内存限制。
cuda - Global load transaction count when in coalesced memory access
I've created a simple kernel to test the coalesced memory access by observing the transaction counts, in nvidia gtx980 card. The kernel is,
When I run this with the following kernel configurations
Since the the data access in the kernel is fully coalasced, and since the data type is float (4 bytes), The number of Load/Store Transactions expected can be found as following,
Load Transaction Size = 32 bytes
Number of floats that can be loaded per transaction = 32 bytes / 4 bytes = 8
Number of transactions needed to load 10240 of data = 10240/8 = 1280 transactions
The same amount of transactions are expected for writing the data as well.
But when observing the nvprof metrics, following was the results
I cannot figure out why it takes twice the transactions that it needs for loading the data. But when it comes to load/store efficiency both the metrics gives out 100%
What am I missing out here?
cuda - CUDA 中每个 Warp 关系的数据大小到指令
当数据类型的大小发生变化时,我试图查看内核中执行的指令数
为了获得自定义大小的数据结构,我创建了一个结构如下,
然后创建一个内核只是为了将上述数据类型数组从一个数组复制到另一个数组
然后用一个块只为 32 个线程调用上述内核
当我使用nvprof
和检查程序来分析程序时,instructions per warp
我可以看到参数值随着 值的变化而变化DATABYTES
。
我的问题是,这个指令计数增加的原因是否是由于floatArray
结构内的数组。因为当我们在内核中调用copy的时候,实际上是a
在struct里面扩展复制了数组的每一个元素floatArray
,创建了更多的指令。
有没有办法使用一条指令在内核中复制自定义结构变量?
cuda - 检查当前驻留在 GPU 内存中的实体
检查已使用 cudaMalloc () 分配的实体(及其大小)当前驻留在 GPU 设备上的最简单方法是什么?我想在函数中找到内存泄漏,如果它只被调用一次并退出,则没有内存泄漏(通过 cuda-memcheck 检查),但如果多次调用,内存占用会越来越大。
Nsight Visual Profiler 对于我的要求似乎太复杂了,cuda-memcheck 没有发现泄漏!
cuda - 是否有一些 CUDA 程序的代码内分析
在 OpenCL 世界中,有一个函数clGetEventProfilingInfo以纳秒为单位返回事件的所有分析信息,如排队、提交、开始和结束时间。这很方便,因为我可以随时获取printf
该信息。
例如,使用PyOpenCL可以编写这样的代码
这对我的任务很有帮助。
cuda - How to profile OpenCL application with CUDA 8.0 nvprof
I'm trying to profile OpenCL application, a.out
, in a system with NVIDIA TITAN X and CUDA 8.0.
If it was CUDA application, nvprof ./a.out
would be enough. But I found this does not work with OpenCL application, with a message "No kernels were profiled."
Until CUDA 7.5, I successfully used COMPUTE_PROFILE=1
following this. Unfortunately, the documentation says "The support for command-line profiler using the environment variable COMPUTE_PROFILE has been dropped in the CUDA 8.0 release."
The question is, is there any way other than downgrading CUDA to profile OpenCL application with nvprof?