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
posted @ 2026-06-27 18:30  变秃了也就变强了  阅读(13)  评论(0)    收藏  举报