问题标签 [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 - 在这个添加两个数组的程序中,K80 与 Pascal 性能差异的原因是什么?
我按照此页面上的示例开始使用 CUDA 编程。它使用添加两个具有一百万个元素的数组来说明不同的执行配置。
我使用 Tesla P100(Pascal 架构)通过 Google Colaboratory 运行代码。但是文章使用的是K80。以下是nvprof关于在这两个 GPU 中执行相同代码的指标。
读完这篇文章后,我假设 Pascal 架构会胜过 K80。但如上所示,有两个观察结果:
- K80 在单块性能方面比 Pascal 更快
- 在 K80 上使用 4096 块而不是 1 块会产生显着的性能提升(~28 倍),但在 Pascal 的情况下看不到(~1.2 倍)
这是预期的吗?另外,观察 (2) 的解释是什么?
如果我在这里遗漏了什么,请告诉我。
感谢您的阅读。
cuda - Cuda 分析器的“gld_transactions_per_request”指标中的事务和请求是什么?
对于一个双精度数组的完美合并访问4096
,每个 8 字节,nvprof
在 Nvidia Tesla V100 上报告以下指标:
我找不到事务和对全局内存的请求到底是什么的具体定义,因此我无法理解这些指标。因此我的问题:
- 如何定义内存请求?
- 内存事务是如何定义的?
- 是否
gld_transactions_per_request = 8.00000
表示对双打的完全合并访问?
为了向自己解释,这是我想出的:
- 请求:warp 级的负载,即从 32 个线程合并的一条 warp 级指令。在这种情况下,
32 threads * 8 bytes = 256 byte
负载。 - 这个对吗? - 事务:
32 byte
加载指令。在这种情况下,以这种方式定义的一个事务能够加载32 bytes / 8 bytes = 4
双精度数。 - 这个对吗?如果是这样,这是 Cuda 实现的最大负载指令吗?
使用这些定义,我得出的值与以下相同nvprof
: 访问 4096 个数组项需要 128 个经线级指令(=requests),每个指令有 32 个线程。使用 32 字节加载(=事务)导致 1024 个事务。
docker - 如何在不使用 ctrl-c 的情况下停止运行 TensorRT 服务器(用于使用 nvprof 进行分析)
我正在运行 nvprof 来分析 TensorRT 服务器-客户端模型的 GPU 使用情况。这就是我正在做的事情:
在启用了 TensorRT 的 docker 容器内的终端 1 上运行 nvprof,
nvprof --profile-all-processes -o results%p.nvvp
在与第一步相同的 docker 容器中在终端 2 上运行 TensorRT 服务器
作为前两个步骤,在不同的 docker 容器中请求终端 3 上的服务。
当第三步完成时,客户端正常存在,但服务器和 nvprof 保持运行。所以很自然地,我用 ctrl-c 关闭了 TensorRT 服务器。当我这样做时,在终端 1(运行 nvprof)上,它告诉我应用程序出现内部分析错误,并且生成的输出文件上没有任何时间线信息。(它只有 380KB 大,而其他文件运行的持续时间大致相同,2-3 分钟,至少大约几 MB)
似乎用 ctrl-C 结束 TensorRT 服务器是问题所在,所以我尝试给 nvprof 一个超时选项,即nvprof --profile-all-processes -o results%p.nvvp --timeout 200
在第一步中(200 秒足以完成整个过程)但这确实使 nvprof 提高此消息:Execution timeout, stopping the application...
,它实际上并没有停止 TensorRT 服务器。
基本上,我想知道是否有任何方法可以在不使用 ctrl-C 的情况下正常停止正在运行的 TensorRT 服务器退出,或者是否有使用 nvprof 和 TensorRT 一起解决此问题的解决方法。
任何帮助或朝着正确的方向推动将不胜感激。谢谢!
PS原始问题大约3小时前在这里发布。
tensorflow - 什么是 redzone_checker?在 GPU 上分析我的 tensorflow 应用程序
我正在使用 NVIDIA 的命令行 Visual Profiler nvprof 分析一个 tensorflow GPU 应用程序,其中一个已启动且在分析中非常活跃的内核是名为 redzone_checker? 我终其一生都无法在互联网上的任何地方找到任何有用的信息来说明这意味着什么......
任何帮助或提示将不胜感激。
python - 使用 nvprof 分析 Tensorflow 代码时如何捕获 GPU 数据?
我想在多 GPU 系统上分析用 Tensorflow 编写的变压器模型的训练循环。由于代码不支持 tf2,我不能使用内置但实验性的分析器。因此,我想使用 nvprof + nvvp(CUDA 10.1,驱动程序:418)。
我可以分析代码而没有任何错误,但是,在 nvvp 中检查结果时,没有 GPU 的数据。我不知道是什么原因造成的,因为 nvidia-smi 清楚地表明 GPU 已被使用。
该线程似乎描述了相同的问题,但没有解决方案。按照这个问题中的建议,我在代码上运行了 cuda-memcheck,没有产生任何错误。
我尝试使用其他命令行参数运行 nvprof,例如--analysis-metrics
(没有区别)和--profile-child-processes
(警告它无法捕获 GPU 数据),但无济于事。
有人可以帮我理解为什么我无法捕获 GPU 数据以及如何解决这个问题吗?
另外,为什么在分析深度神经网络方面的资源这么少?看来,随着训练时间的延长,确保利用所有计算资源尤为重要。
谢谢!
cuda - nvprof 命令错误:未找到 cupti64_102.dll
当我尝试nvprof
在命令提示符中运行命令时,系统错误弹出并说“代码执行无法继续,因为找不到 cupti64_102.dll。重新安装程序可能会解决这个问题。”
我已经安装了 CUDA Toolkit 10.2 但cupti64_102.dll
不在/bin
.
系统:Windows 10、Quadro K4200、CUDA10.2、CUDA Toolkit 10.2
cuda - P100 上的 dram_write_bytes 结果
我使用 nvprof 在 P100 上分析了一个简单的 vecadd 示例(n=1024),但观察到 dram_write_bytes 只有 256(而不是我预期的 1024*4)。有人可以解释为什么这个数字很小吗?我需要添加哪些其他指标来计算全局内存写入?谢谢。float_count_sp 数字是正确的 (1024)。
是不是和nvprof的采样有关?有一次我得到 384 个字节。有时我什至得到 0 个字节。奇怪的是:如果我将 n 更改为 1024*1024,我得到的字节数比我预期的要多(4688032)。4688032/1024/1024/4 = 1.11。
cuda - 为什么我没有得到“thread_inst_executed”
当我列出 nvprof 的指标时
我懂了:
thread_inst_executed:活动线程执行的指令数。对于每条指令,它会增加执行该指令的线程数,包括断定线程数。它不包括重播。
我想使用这个指标,所以我使用以下方法收集指标:
nvprof --csv --metrics thread_inst_executed,inst_executed,inst_executed_global_loads,inst_executed_global_stores,inst_executed_local_loads,inst_executed_local_stores,inst_executed_shared_loads,inst_executed_shared_stores,gld_transactions,gst_transactions,local_load_transactions,local_store_transactions,shared_load_transactions,shared_store_transactions,l2_read_transactions,l2_write_transactions,dram_read_transactions,dram_write_transactions,sysmem_read_transactions,sysmem_write_transactions ./my_program my arguments
输出具有我要求的所有指标...除了thread_inst_executed
. 为什么它不见了?我怎么才能得到它?
c++ - Windows 上的 CUDA nvprof:“警告:无法定位分析库,GPU 分析已跳过”(不是 cupti64_102.dll)
我正在尝试在 cuda/c++ 程序上使用 nvprof,但我得到了输出:
我的命令:
这是一个帕斯卡 GPU,驱动程序是最新的,我可以毫无问题地运行 CUDA 程序。我安装了 CUDA 9.0、10.1 和 11.0。路径和 CUDA_PATH 链接到 11.0。我在网上没有找到这个问题的任何答案。
错误安装有一些类似的问题,但只有这个带有相同的警告。没有找到任何适用于 windows 的东西。
我怀疑某种错误的安装,但我已经多次重新安装了 CUDA Toolkit,并且安装指南中的示例运行良好。
接下来我应该尝试什么?我的目标是在我的优化程序中找到效率低下的地方(序列化、内存使用、占用等)。nprof 似乎是最好/唯一的选择。
该错误与nvprof 命令错误不同:cupti64_102.dll was not found。这个错误(及其解决方案)是我提到的“类似错误”。我已经在 PATH 中找到了 cupti 的路径。