如何在CUDA C ++中运行时从所有类型的内存访问和输出内存统计信息(已用内存,可用内存)?
全局内存,纹理内存,共享内存,本地内存,寄存器,(常量内存?)
奖金问题:您能否指出有关如何使用Windows CUDA分析器工具执行此操作的文档?是否所有卡都支持内存分析,或者只是某些特定型号可以执行此操作?
答案 0 :(得分:3)
要对设备上的整体内存使用情况进行运行时检查,请使用cudaMemGetInfo API。请注意,NVIDIA设备上没有专用纹理内存。纹理存储在全局内存中,并且无法使用我所知道的任何CUDA API单独对其进行说明。您还可以使用cudaDeviceGetLimit API以编程方式查询使用全局内存(运行时堆,printf缓冲区,堆栈)的运行时组件的大小。
在编译时静态分配常量内存,您可以通过compile time switches获取特定翻译单元的常量内存使用情况。
我无法在运行时动态检查SM级资源使用情况(寄存器,共享内存,本地内存)。您可以使用cudaFuncGetAttributes API在运行时查询特定内核函数的每个线程和每个块资源需求。
Visual Profiler可以在detail view中显示运行时收集的相同信息。我不是视觉分析器的大用户,所以我不确定它是否在运行期间动态收集设备级内存使用情况。我当然不记得看到过这样的事情,但这并不意味着它不存在。