DirecX12 - 基本知识 - Memory Management(内存管理)

这里是SunshineBooming,GPU公司一枚小小的Driver工程师,主要工作是写DirectX12 Driver,我会持续更新这个DX12 Spec系列,可能比较冷门,但是都是干货和工作中的心得体会,有任何GPU相关的问题都可以在评论区互动,知无不言:

DirectX12 Spec 总目录

1. 从hardware的角度看内存

  • 从hardware的角度,一般gpu内存分为local memory和pcie memory。

1.1 local memory

  • local memory是gpu上集成的物理内存。
  • 就是我们买独显的时候,标注的4G/8G/16G这种参数。
  • 我们打开windows的任务管理器,查看gpu属性,能看到专用内存这个参数,指的就是local memory。
  • 驱动里面gpu访问local memory,一般是通过PA(physical address)的方式直接访问,不需要通过VA(virtual address)那样的页表转换,也不需要频繁地出发memory的page in/page out。所以显而易见的,local memory访问效率高,但是容量有限。

1.2 pcie memory

  • pcie memory是gpu与cpu共享的memory,即内存条上分出来的memory。
  • 一般主板的bios中可以调整这个共享memory的大小。
  • 我们打开windows的任务管理器,查看gpu属性,能看到共享内存这个参数,指的就是pcie memory。
  • 驱动里面gpu访问pcie memory,一般是通过VA(physical address)的方式直接访问,VA访问物理内存,需要通过页表转换,如果对应的内存不存在于物理内存中,也会触发page in/page out。所以显而易见的,pcie memory访问效率低,但是使用灵活度高。

2. 从directx spec的角度看内存管理

  • 按照directx12的系统架构,directx12的kernel runtime,有专门的submodule负责内存管理,即dxgmms2.sys(dxgmms1.sys提供给directx9/10/11使用):
    在这里插入图片描述
  • 系统启动时,directx12 runtime会主动调用gpu的kmd驱动,查询gpu支持的内存类型。更具体一点,是通过DxgkDdiQueryAdapterInfo接口,查询DXGKQAITYPE_QUERYSEGMENT类型,然后kmd驱动会通过DXGK_SEGMENTDESCRIPTOR数组,来返回支持的所有内存类型。
  • 当然,DxgkDdiQueryAdapterInfo接口不仅可以用来查内存类型,directx12 runtime还会调用其查询很多信息,例如DXGKQAITYPE_DRIVERCAPSDXGKQAITYPE_WDDMDEVICECAPS等等。
  • directx12 spec将硬件返回的内存类型,分为这几类:Linear Memory-Space SegmentsLinear Aperture-Space SegmentsAGP-Type Aperture-Space Segments

2.1 Linear Memory-Space Segments

  • 待详细补充

2.2 Linear Aperture-Space Segments

  • 待详细补充

2.3 AGP-Type Aperture-Space Segments

  • 待详细补充

2. 参考资料

  • a trip through the grapics pipeline(这个网上很多链接,就不贴pdf了)
  • https://learn.microsoft.com/zh-cn/windows-hardware/drivers/display/windows-vista-and-later-display-driver-model-architecture
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值