我正在使用E9171 AMDGPU和T1040 NXP主板,请问这款GPU是否支持使用AMDGPU进行点对点数据传输?NXP主板通过PCIe交换机连接到FPGA和GPU。该GPU应该能够使用QDMA驱动程序直接从FPGA获取数据,另外,该NXP板是否支持使用AMDGPU驱动程序的直接点对点功能?
不要假设 T1040 平台上的 E9171 + AMDGPU 支持 FPGA→GPU PCIe P2P DMA。根据目前可获得的 AMDGPU 信息,直接 FPGA 到 AMDGPU 的 P2P 通常不作为标准 AMDGPU 功能得到支持,不像 NVIDIA GPUDirect RDMA 那样。
AMDGPU确实包含Linux P2P基础架构支持(PCI_P2PDMA),AMD KFD也有一个HSA_AMD_P2P选项,但这种支持主要针对以下情况:
Linux Kconfig 的描述明确提到了AMD GPU 之间的 P2P 通信。
AMD工程师曾公开表示:
目前尚不支持在 Xilinx FPGA 和 AMD GPU 之间实现 P2P 通信。
并建议采用主机内存注册变通方案,而不是真正的设备到设备 PCIe DMA。
因此:
|
通路 |
状态 |
|
AMD GPU ↔ AMD GPU |
支持特定 ROCm 平台 |
|
FPGA ↔ AMD GPU 直接 PCIe DMA |
AMDGPU通常不支持此功能。 |
|
FPGA → 主机 DDR → GPU |
支持 |
|
FPGA P2P缓冲区映射到主机内存并注册到GPU |
从 T1040 端来看,如果满足以下条件,PCIe 硬件本身可以通过交换机在端点之间转发内存读/写 TLP:
PCIe 协议本身并不能阻止端到端数据传输。但是, T1040/NXP 软件不会自动提供 AMDGPU-FPGA P2P 支持。关键问题在于:
通常情况下,AMDGPU 的限制才是阻碍因素,而不是 T1040 PCIe 控制器本身的限制。
当前拓扑结构:
PCIe交换机
/ \
FPGA(QDMA)E9171 GPU
/
T1040 RC
最有可能支持的流程:
FPGA ---> DDR(T1040 内存)
|
v
AMDGPU DMA
|
显存
不保证有效:
FPGA(QDMA)---> GPU显存
因为 AMDGPU 通常不会为任意 FPGA 设备公开类似 GPUDirect-RDMA 的接口。