Enabling P2P reduces bandwidth on Arrow Lake / Z890? #1215
Replies: 5 comments 1 reply
|
@petertiedemann Short answer: yes, that's expected on this kind of platform and it's not a bug. With P2P off, cudaMemcpyPeer stages the copy through host RAM (GPU→RAM→GPU), which is a well-optimized, posted-write DMA path. With P2P on, the copy goes GPU→GPU directly, but on a consumer Z890 board that traffic has to route up through the CPU root complex (and across the DMI link to the chipset for the PCH-attached cards). Client root complexes are poor P2P forwarders NVIDIA's own GPUDirect docs note peer-to-peer read bandwidth is "severely limited" through the CPU. Add your reduced link widths (x4/x8) and the shared DMI uplink, and direct P2P ends up slower than host staging for bulk transfers. The latency improvement you saw is the real P2P benefit on this hardware; bandwidth isn't. So: for throughput, you're better off leaving P2P disabled here. Good P2P bandwidth needs full x16 CPU-direct lanes (Threadripper Pro / EPYC) or a board with a PCIe switch. |
|
I am experiencing the same issue with a dual RTX 5060 Ti 16GB setup on an MSI PRO Z890P motherboard paired with an Intel Core Ultra 265K (Arrow Lake) processor. Below are the results from the connectivity and bandwidth matrix: Given these metrics, I have two questions:
|
|
How did you even enable P2P on Z890? Disabling IOMMU and setting intel_iommu=on and iommu=pt I can't even get P2P to work with my RTX A6000 GPUs on an Asus Z890 Apex. |
|
I no longer have that setup available to verify, but if I recall correctly, in the end it had I'd suggest opening a new issue with your setup details, as that seems to be a distinct problem. However, even once you resolve it, you will likely still encounter the limited bandwidth bottleneck, which currently appears to be a hardware limitation. I believe I now have answers to my two original questions above. This really does seem to be an Intel Arrow Lake platform issue. I am now running 4 x RTX 5060 Ti 16GB cards on a much lower-cost AMD setup:
Here are my updated Switching to a budget AMD CPU and motherboard (roughly half the price of the Arrow Lake platform) completely resolved the P2P throughput issue. This Arrow Lake P2P throughput bottleneck may share a root cause with another reported issue: Intel Arrow Lake Processors Bottleneck PCIe 5.0 NVMe SSDs (Tom's Hardware) That report highlights two key findings:
Assuming P2P transfers over PCIe rely on small transaction packets (e.g., 256 bytes) transferred via the controller, they would likely hit the same latency bottleneck seen in random write operations, accumulating to low bandwidth. |
|
Have you run nvbandwidth (https://github.com/nvidia/nvbandwidth) or simpleP2P (https://github.com/NVIDIA/cuda-samples/tree/master/cpp/0_Introduction/simpleP2P) to confirm if P2P even works?
In my case I get |
Uh oh!
There was an error while loading. Please reload this page.
On my systems equipped with 4x 5060TI 16gb GPUs, i noticed that
p2pBandwidthLatencyTestindicates that P2P bandwidth is lower than non-P2P. Is that expected, and if so, is it specific to the specific CPU, or determined by chipset etc?In case it matters, performance is identical with iommu off completely as well as with intel_iommu=on iommu=pt.
Here is an example:
All reactions