Windows 和 ARM64 开发版上内存和显存 机制区别
ARM64开发版管理机制是(UMA, Unified Memory Architecture)
- CPU 和 GPU 集成在同一颗 SoC 上,并且共享同一块物理内存芯片,采用的是统一内存架构, 真正的的内存共享(零拷贝)
- 不同生态的 ARM64 芯片,在额度限制上有所不同:
- 手机arm64 SoC:全动态按需分配,没有固定的“独立显存”概念。只要系统有空闲内存,GPU 几乎可以调用绝大部分内存空间
- 嵌入式/Linux 端(如 RK3588, Jetson):CMA(连续内存分配)/ 预留内存。方式一、通过设备树(Device Tree)从总内存中硬划分出一块固定大小的连续内存(例如划出 2 GB 专给 GPU/VPU 驱动)。方式二、 通过在内核启动参数(Bootargs)指定 CMA 值动态硬划分
- 两种方式的区别:1、设备树方式,是直接绑定给GPU或VPU。2、bootargs方式,是期望2GB内存虽然专属于多媒体/图形驱动,但在驱动不用时,系统能临时借用,驱动需要时必须能无条件一次性拿走 2GB 连续物理内存。
点击查看代码
# 方式一:dts
/ {
reserved-memory {
#address-cells = <2>;
#size-cells = <2>;
ranges;
/* 硬划分一块固定 2GB 的连续物理内存 */
gpu_vpu_reserved: memory@90000000 {
compatible = "shared-dma-pool";
reg = <0x0 0x90000000 0x0 0x80000000>; /* 起始地址 0x90000000,大小 0x80000000 (2GB) */
no-map; /* 关键:禁止内核为其建立通用页表映射,确保只有指定驱动能管辖 */
};
};
/* 将上面划出的 2GB 绑定给 GPU 或 VPU 设备节点 */
gpu@ff9a0000 {
compatible = "rockchip,rk3588-mali";
reg = <0x0 0xff9a0000 0x0 0x10000>;
/* 绑定保留内存 */
memory-region = <&gpu_vpu_reserved>;
};
};
# 方式二:bootargs, 在 bootargs 字符串中追加,强制划分 2GB 连续内存分配器(CMA)区域
bootargs = "console=ttyFIQ0 root=/dev/mmcblk0p7 cma=2G"
Windows
- Windows 系统将 GPU 可以调用的显存分成了两部分
- 专用 GPU 内存(6.0 GB),显卡自带的独立显存(GDDR)
- 共享 GPU 内存(15.9 GB):当 6 GB 独立显存不够用时,系统会自动从主机的 32 GB 内存中切出约一半(约 16 GB)作为显存备用
- Windows 系统默认的共享显存分配机制规定:共享 GPU 内存的上限是主机物理内存的一半(50%)
![image]()
本文来自博客园,作者:变秃了也就变强了,转载请注明原文链接:https://www.cnblogs.com/lichangyi/p/20862399


浙公网安备 33010602011771号