如何测量 NVIDIA nsight 系统中复制的数据量?
How to measure the amount of data copied in NVIDIA nsight systems?
知识问答
在 NVIDIA Nsight Systems 中,您可以使用 --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 之间传输的数据量吗?
如果您想纯粹从 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 Systems 中,您可以使用 --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 之间传输的数据量吗?
如果您想纯粹从 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 活动有关的所有行。
将鼠标悬停在感兴趣的操作上: