Real-time control application with RDMA between GPU and third-party DAC/ADC card

I’m looking to build a real-time control system that uses an NVIDIA GPU as the digital controller. A PCIe ADC (analog digital converter) card would read in analog signals, the GPU would process these signals, and a PCIe DAC (digital to analog converter) card would provide an output signal. Ideally, this system would use an RDMA or similar to expedite the transfer of data between the GPU and ADC/DAC to minimize latency. However there is a lot I don’t know.

My biggest concern is that I have no driver development experience, and the references below make me think that I’ll have to do a fair amount of custom driver edits to make this work. Does anyone know if something like this already exists? A well documented project that I could duplicate? Or maybe there is a company out there who already makes PCIe DAC/ADC cards that supports direct GPU communication?



I apologize if I didn’t post in the correct category. There didn’t appear to an appropriate one for my application.

After additional internet searching, I found this possible solution:
I’ll call them when they’re open and see if this will work for my application. However, please let me know if you know of any other solution. Options are always nice.

  • use gdrcopy driver ( as a reference to map GPU memory.
  • you need a kind of controller (FPGA that could also serve as ADC/DAC) to do the DMA transfer from/to GPU and trigger the needed events
  • and a host CPU application to launch kernel at the end of DMA data transfer (triggered by the before-mentioned event)
1 Like


Thanks for pointing out that library. It seems perfect.

Do you have any recommendations for an FPGA controller that could also serve as ADC/DAC? I’ve looked around a little, but I don’t understand FPGAs (yet) well enough to know what to look for.

Hmm. I don’t seem to be able to edit my initial post. That company (spectrum) does not support NVIDIA GPU communication for low-latency (they seem to be optimized for throughput instead).