3
votes

If I'm developing with CUDA, then I have the opportunity to use UVA (Unified Virtual Addressing) - a single address space for CPU-RAM and GPU-RAM of all GPU. Previously this was not possible, and it appeared only in version CUDA 4.0. As I understand it - it is provided by the nVidia CUDA driver. http://docs.nvidia.com/cuda/gpudirect-rdma/index.html#basics-of-uva-cuda-memory-management

But if I want to use the GPU and the FPGA on a single computer connected by PCI-Express 2.0 16x and also for them to use a single address space. Is there such a possibility in FPGA similar to nVidia UVA, what I need to use FPGA "UVA", and nor will they interfere FPGA "UVA" vs CUDA UVA?

How to do something like this? http://research.microsoft.com/pubs/172730/20120625%20UCAA2012_Bittner_Ruf_Final.pdf

enter image description here

1
What FPGA? You mean you have some PCI peripheral or something? - Carl Norum
@Carl Norum Yes. I have a single computer with two GPU and one FPGA connected by PCI-Express 2.0 16x. - Alex
And can you modify whatever parts of the kernel are dealing with this UVA stuff? - Carl Norum
You're describing the FPGA as if it's a generic resource like a serial port. Isn't this a question for the FPGA vendor? CUDA doesn't offer any method to modify the behavior of a FPGA software stack. - Robert Crovella
I would keep the post open. The question is potentially interesting to other users. Perhaps some comments can be converted to one or more answers. - Vitality

1 Answers

3
votes

You've already found the GPUDirect RDMA documentation which seems to answer your question.

RDMA for GPUDirect is a feature introduced in Kepler-class GPUs and CUDA 5.0 that enables a direct path for communication between the GPU and a peer device using standard features of PCI Express.

With this, the host can initiate data movement between the GPU and a peer device. UVA means that each device has a unique part of the virtual address space, but it does not mean any arbitrary device can access the memory of another device, you still need to use the appropriate APIs.

Note that at the simplest level, all you are asking for is a single unified virtual address space. The CPU and the GPU are already unified (that's what UVA is), so it is entirely dependent on how your FPGA works (including its driver). The RDMA part is an optimisation for moving data between the two but the documentation is useful for UVA in general.