【发布时间】:2016-01-19 16:22:35
【问题描述】:
如何在 CUDA C++ 运行时从所有类型的内存中访问和输出内存统计信息(已用内存、可用内存)?
全局内存、纹理内存、共享内存、本地内存、寄存器、(常量内存?)
额外问题:您能否指出有关如何使用 Windows CUDA 分析器工具执行此操作的文档?是否所有卡都支持内存分析,还是只有某些特定型号可以做到?
【问题讨论】:
标签: cuda gpgpu memory-profiling
如何在 CUDA C++ 运行时从所有类型的内存中访问和输出内存统计信息(已用内存、可用内存)?
全局内存、纹理内存、共享内存、本地内存、寄存器、(常量内存?)
额外问题:您能否指出有关如何使用 Windows CUDA 分析器工具执行此操作的文档?是否所有卡都支持内存分析,还是只有某些特定型号可以做到?
【问题讨论】:
标签: cuda gpgpu memory-profiling
要对设备上的整体内存使用情况进行运行时检查,请使用cudaMemGetInfo API。请注意,在 NVIDIA 设备上没有专用纹理内存之类的东西。纹理存储在全局内存中,无法使用我知道的任何 CUDA API 单独说明它们。您还可以使用cudaDeviceGetLimit API 以编程方式查询消耗全局内存(运行时堆、printf 缓冲区、堆栈)的运行时组件的大小。
常量内存在编译时静态分配,您可以通过compile time switches获取特定翻译单元的常量内存使用情况。
据我所知,没有办法在运行时动态检查 SM 级别的资源使用情况(寄存器、共享内存、本地内存)。您可以使用cudaFuncGetAttributes API 在运行时查询特定内核函数的每个线程和每个块的资源需求。
可视分析器可以在其detail view 中显示在运行时收集的相同信息。我不是视觉分析器的大用户,所以我不确定它是否在运行期间动态收集设备级内存使用情况。我当然不记得看到过类似的东西,但这并不意味着它不存在。
【讨论】: