如何测量 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)

Nsight Compute 如何确定/显示共享内存指标?

NSight (NVIDIA) 无法在 Visual Studio 中使用“暂停和捕获帧”功能正常工作

在 nvidia nsight 中安装 CUB

Nvidia Nsight 与 localhost 的连接失败