【问题标题】:GPGPU CUDA memory usage statistics at runtime运行时 GPGPU CUDA 内存使用统计
【发布时间】:2016-01-19 16:22:35
【问题描述】:

如何在 CUDA C++ 运行时从所有类型的内存中访问和输出内存统计信息(已用内存、可用内存)?

全局内存、纹理内存、共享内存、本地内存、寄存器、(常量内存?)

额外问题:您能否指出有关如何使用 Windows CUDA 分析器工具执行此操作的文档?是否所有卡都支持内存分析,还是只有某些特定型号可以做到?

【问题讨论】:

    标签: cuda gpgpu memory-profiling


    【解决方案1】:

    要对设备上的整体内存使用情况进行运行时检查,请使用cudaMemGetInfo API。请注意,在 NVIDIA 设备上没有专用纹理内存之类的东西。纹理存储在全局内存中,无法使用我知道的任何 CUDA API 单独说明它们。您还可以使用cudaDeviceGetLimit API 以编程方式查询消耗全局内存(运行时堆、printf 缓冲区、堆栈)的运行时组件的大小。

    常量内存在编译时静态分配,您可以通过compile time switches获取特定翻译单元的常量内存使用情况。

    据我所知,没有办法在运行时动态检查 SM 级别的资源使用情况(寄存器、共享内存、本地内存)。您可以使用cudaFuncGetAttributes API 在运行时查询特定内核函数的每个线程和每个块的资源需求。

    可视分析器可以在其detail view 中显示在运行时收集的相同信息。我不是视觉分析器的大用户,所以我不确定它是否在运行期间动态收集设备级内存使用情况。我当然不记得看到过类似的东西,但这并不意味着它不存在。

    【讨论】:

    • 非常感谢,我会尽快查看您在回答中提供的资源!
    猜你喜欢
    • 1970-01-01
    • 2012-06-15
    • 2016-12-18
    • 1970-01-01
    • 2011-04-17
    • 2021-08-08
    • 2021-08-24
    • 2017-07-14
    • 1970-01-01
    相关资源
    最近更新 更多