如何测量 NVIDIA nsight 系统中复制的数据量?
Posted
技术标签:
【中文标题】如何测量 NVIDIA nsight 系统中复制的数据量?【英文标题】:How to measure the amount of data copied in NVIDIA nsight systems? 【发布时间】:2021-02-25 17:59:17 【问题描述】:琐事
在 NVIDIA Nsight 系统中,您可以使用 --stats=true
标志来获取 GPU 和 CPU 之间数据传输的详细信息。输出包括类似于以下内容的部分:
CUDA Memory Operation Statistics (KiB)
Total Operations Average Minimum Maximum Name
------------------- -------------- ------------------- ----------------- ------------------- -------------------
8192.000 2 4096.000 4096.000 4096.000 [CUDA memcpy HtoD]
528384.000 2 264192.000 4096.000 524288.000 [CUDA memcpy DtoD]
问题
是否可以获得每个 API 调用的统计信息?也就是说,我们能不能得到每个cudaMemCpyxxx
调用中Host/Device之间传输的数据量?
【问题讨论】:
您可以从 GUI 中的时间线视图中获取此信息,但我认为这不是您所要求的。 要从命令行执行此操作,this blog 有“扩展汇总统计信息”中的步骤 1. 导出到 sqlite 数据库 2. 构建适当的数据库查询 3. 利润 谢谢@RobertCrovella。这对我行得通。但 GUI 不显示该信息。你能详细说明一下吗? (我可以获取内核信息,但不能获取cudaMemcpyxxx
。
【参考方案1】:
如果您想完全通过 CLI 执行此操作,我建议您遵循 this blog 从“扩展摘要统计信息”开始的指导。基本步骤是将配置文件数据导出为 sqlite 数据库,然后制定数据库查询以提取您想要的数据。我承认这不是一个完整的食谱。
如果使用 GUI 是可以接受的,我认为这很简单。假设我们有一个非常简单的 CUDA 程序:
int main()
int *d1, *d2;
int *h1, *h2;
h1 = new int[8192];
h2 = new int[262144];
cudaMalloc(&d1, 32768);
cudaMalloc(&d2, 1048576);
cudaMemcpy(d1, h1, 32768, cudaMemcpyHostToDevice);
cudaMemcpy(d2, h2, 1048576, cudaMemcpyHostToDevice);
这些是步骤:
您可以直接从 GUI 进行交互式分析,如 here 所述,或者您可以从 CLI 开始。要开始使用 CLI,请运行如下命令:
nsys profile --trace=cuda ./my_app
在其他活动中,这将创建一个名为 reportX.qdrep
的报告文件,其中 X
实际上是一个数字,例如 1、2 或 3 等。
打开 GUI,然后 File...打开上面的 reportX.qdrep
文件。在这种情况下,GUI 不必在同一台机器上,但它的版本应该大于或等于用于创建报告文件的 CLI 版本。
完全展开时间轴中与 CUDA 活动相关的所有行。
将鼠标悬停在感兴趣的所需操作上:
【讨论】:
以上是关于如何测量 NVIDIA nsight 系统中复制的数据量?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 VS 2010 中使用 Nvidia NSight 查看 CUDA 线程值?
如何在 nvidia Nsight eclipse 中使用 GNU 科学库 (gsl)