据我所知,可调整大小的 BAR 是一种增加 CPU 可以用来向 GPU 发送数据的数据块大小的方法,从而增加吞吐量(如果我错了,请纠正我)。
但是,这是否适用于笔记本电脑等具有共享 CPU/GPU 内存的系统?其理念是,两个处理器都可以访问物理内存地址,从而消除了“传输”的需要,因为内核应该能够使用相同的内存地址访问相同的数据。
在这种情况下,我看不出可调整大小的 BAR 如何适用,因为两个处理器都可以访问相同的数据,而无需任何传输。我完全搞错了吗?
以下是我的 AMD Ryzen 9 笔记本电脑(配备 16 GB 主内存和 iGPU)的相关 vulkaninfo 输出:
VkPhysicalDeviceMemoryProperties:
=================================
memoryHeaps: count = 1
memoryHeaps[0]:
size = 15931211776 (0x3b5930000) (14.84 GiB)
budget = 15931211776 (0x3b5930000) (14.84 GiB)
usage = 3912351744 (0xe931c000) (3.64 GiB)
flags: count = 1
MEMORY_HEAP_DEVICE_LOCAL_BIT
memoryTypes: count = 1
memoryTypes[0]:
heapIndex = 0
propertyFlags = 0x000f: count = 4
MEMORY_PROPERTY_DEVICE_LOCAL_BIT
MEMORY_PROPERTY_HOST_VISIBLE_BIT
MEMORY_PROPERTY_HOST_COHERENT_BIT
MEMORY_PROPERTY_HOST_CACHED_BIT
usable for:
IMAGE_TILING_OPTIMAL:
color images
FORMAT_D16_UNORM
FORMAT_X8_D24_UNORM_PACK32
FORMAT_D32_SFLOAT
FORMAT_S8_UINT
FORMAT_D24_UNORM_S8_UINT
FORMAT_D32_SFLOAT_S8_UINT
(non-sparse)
IMAGE_TILING_LINEAR:
color images
(non-sparse)
答案1
可调整大小的 BAR 仅用于增加设备到设备内存复制的缓冲区大小,例如从 CPU 内存到(专用)GPU 内存。
这是一种增强 PCIe 链路带宽和延迟的方法。来自 NvidiaGeForce RTX 30 系列性能通过可调整大小的 BAR 支持加速
可调整大小的 BAR 是一种可选的 PCI Express 接口技术。
它与集成显卡无关,因为没有物理 PCIe 链路。iGPU 与 CPU 连接到同一个内存控制器,其命令总线连接到 CPU 总线,没有相关的 PCIe 链路用于启用可调整大小的 BAR,并且所需的任何内存复制都可以由与 CPU 使用的同一个内存控制器完成,而无需辅助缓冲区。
从英特尔 Gen11 架构和 GT2 “Ice Lake” iGPU 详解您可以看到总体架构。LLC 是 CPU 和 GPU 共享的“最后一级缓存”,它们都从中获取数据。
iGPU 具有与 CPU 相同的内存访问权限,而专用 GPU 则必须依赖于由其他设备填充的内存。
BAR 是 PCI 接口的基本功能,也是 PCIe 接口的基本功能,PCIe 接口本质上是一个通过快速串行链路运行的 PCI 接口。BAR 基本上是 GPU 命令和内存区域与 CPU 地址空间之间的通道。有关更多信息,我建议阅读PCIe 中的基地址寄存器 (BAR) 是什么?
可调整大小的 BAR 是一个扩展,它允许“动态”更改地址空间,以便 CPU 可以将数据发送到 GPU 上更大的地址空间。
可调整大小的 BAR 是一种让 CPU 能够将数据块推送到专用 GPU 的方式,使用集成 GPU,它可以简单地将数据加载到分配给 GPU 的内存部分,然后告诉 GPU 它在哪里。