设备内存空间中的 cuda 程序内核代码

Posted

技术标签:

【中文标题】设备内存空间中的 cuda 程序内核代码【英文标题】:cuda program kernel code in device memory space 【发布时间】:2012-04-21 23:32:46 【问题描述】:

有什么办法可以查出,gpu(设备)内存中内核代码(执行)占用了多少内存? 如果我有 512 MB 设备内存,我怎么知道有多少可分配? 视觉分析器可以显示这些信息吗?

【问题讨论】:

内核代码,AFAIK,永远不会驻留在设备数据内存中。 当一个 c 程序被执行时,这发生在 ram 中。我认为可以安全地假设在 gpu 上执行的代码部分驻留在那里。我并不是要粗鲁,但我想要一个更广泛的答案。如果不在数据存储器中,那么在哪里? 其实我不知道,但与 CPU 不同,GPU 显然是哈佛架构而不是冯诺依曼架构。 【参考方案1】:

程序代码占用的内存很少。 CUDA 上下文的其余部分(本地内存、常量内存、printf 缓冲区、堆和堆栈)使用更多。 CUDA 运行时 API 包括 cudeGetMemInfo 调用,它将返回代码可用的空闲内存量。请注意,由于碎片和页面大小的限制,您将无法分配内存的每个最后一个空闲字节。最好的策略是从最大值开始,然后递归地尝试分配连续较小的分配,直到获得成功的分配。

您可以在my answer 中看到类似问题的更完整的设备内存消耗解释,

【讨论】:

以上是关于设备内存空间中的 cuda 程序内核代码的主要内容,如果未能解决你的问题,请参考以下文章

CUDA 内核代码的设备内存:它是不是明确可管理?

CUDA C 最佳实践:设备内存空间读书笔记

cuda学习3-共享内存和同步

cuda 编 程简单CUDA程序的基本框架

Linux内核空间-理解高端内存

Linux进程地址空间与进程内存布局详解,内核空间与用户空间