NVIDIA Jetson SOC 内存分配策略

CPU 是Host, GPU 是Device, 系统内存分配策略如下:

这段话的翻译如下:

集成的GPU会和CPU以及其他Tegra引擎共享DRAM(动态随机存储器),并且CPU可以通过将DRAM的内容移动到交换区域(SWAP area)或者相反来控制DRAM的内容和释放DRAM内存。而目前的cudaMemGetInfo API并不考虑交换内存区域,因此该API返回的可用内存大小可能会比实际可分配的内存小,因为CPU可以通过将页面移动到交换区域来释放一些DRAM区域,而这部分被释放的内存并未被cudaMemGetInfo API计算在内。

所以,为了估算可分配的设备内存量,CUDA应用程序开发者应该考虑以下几点:

  • 当使用cudaMemGetInfo API获取可用内存大小时,需要意识到其可能并未考虑交换内存区域的情况,因此实际可分配的内存可能会比API返回的值大。
  • CPU可以通过将页面移动到交换区域来释放一些DRAM区域,从而增加可分配的设备内存。
  • 应用程序开发者需要综合考虑这些因素,以便更准确地估算出系统中可供设备使用的内存总量。
  1. "Host allocated memory = Total used physical memory -- Device allocated memory" 这里的"Host allocated memory"指的是主机(CPU)已分配的内存,它等于系统中总物理内存减去已经分配给设备的内存。

  2. "If (Host allocated memory < Free Swap Space) then Device allocatable memory = Total Physical Memory -- already allocated device memory" 这条语句表示,如果CPU已分配的内存小于可用交换空间,则设备可分配内存等于总物理内存减去已经分配给设备的内存。

  3. "If (Host allocated memory > Free Swap Space) then Device allocatable memory = Total Physical Memory -- (Host allocated memory - Free swap space) 这个公式感觉是错的" 这一条是在描述当主机已分配的内存大于可用的交换空间时,设备可分配内存等于总物理内存减去(已分配给主机的内存减去可用的交换空间),即考虑了交换空间的情况。

详细解释下这三条规则

  1. Host allocated memory (CPU已分配内存) = 总已用的物理内存(DRAM + SWAP 缓冲区) - 分配给GPU 的内存,注意:分配给GPU 的内存是无法移动到缓冲区(swap area的)

  2. 如果(CPU已分配的内存< 可用的交换区内存),GPU可分配的内存= 总的物理内存- 已经分配给GPU的内存,原因是因为CPU 已分配的内存可以全部放到交换区中,所以整个物理内存都可以用来给GPU使用

  3. 如果(CPU 已分配的内存> 可用的交换区内存), GPU可分配的内存= 总的物理内存 - (主机已分配的内存- 可用的交换区内存), 原因是因为CPU已分配的内存无法完全放到交换区,所以会留一部分在DRAM中,这时候GPU可分配的内存就等于总物理内存- 未放入缓冲区的CPU 内存部分 - 已分配给GPU的内存 (原文我感觉是错的,如果大家有更好的解释,欢迎回复)

相关推荐
oMcLin几秒前
Systemd 深度解析:理解并掌握 Linux 的现代启动系统
linux·运维·服务器
UIUV3 分钟前
JavaScript 遍历方法详解
前端·javascript·代码规范
Zyx200738 分钟前
React 中的 Props:组件通信与复用的核心机制
前端
海云前端143 分钟前
大模型Function Calling的函数如何调用的?
前端
步步为营DotNet1 小时前
深入理解.NET 中的IHostedService:后台任务管理的基石
java·网络·.net
ohyeah1 小时前
防抖与节流:前端性能优化的两大利器
前端·javascript
Zyx20071 小时前
React Hooks:函数组件的状态与副作用管理艺术
前端
The Mr.Nobody1 小时前
如何配置群晖网盘客户端Synology Drive Client
服务器
让我上个超影吧1 小时前
基于SpringBoot和Vue实现CAS单点登录
前端·vue.js·spring boot