P2P programming

Does GTX 560 ti supports P2P coding?

Not supported Maybe supported? [ see @seibert’s post below! ]

From the CUDA C Programming Guide:

3.2.6.4. Peer-to-Peer Memory Access
When the application is run as a 64-bit process, devices of compute capability 2.0 and higher from the Tesla series may address each other’s memory (i.e., a kernel executing on one device can dereference a pointer to the memory of the other device). This peer-to-peer memory access feature is supported between two devices if cudaDeviceCanAccessPeer() returns true for these two devices.

However, a 560 Ti supports unified addressing so host-initiated memory copies should work.

Interestingly, deviceQuery on my Linux system says that the two GTX 580 cards can communicate P2P, so it might not just be Tesla. It does seem that the two cards need to have the same architecture.

> Peer access from GeForce GTX 580 (GPU0) -> GeForce GTX 680 (GPU2) : No
> Peer access from GeForce GTX 580 (GPU0) -> GeForce GTX 580 (GPU3) : Yes
> Peer access from GeForce GTX 680 (GPU2) -> GeForce GTX 680 (GPU2) : No
> Peer access from GeForce GTX 680 (GPU2) -> GeForce GTX 580 (GPU3) : No
> Peer access from GeForce GTX 680 (GPU2) -> GeForce GTX 580 (GPU0) : No
> Peer access from GeForce GTX 680 (GPU2) -> GeForce GTX 680 (GPU2) : No
> Peer access from GeForce GTX 580 (GPU3) -> GeForce GTX 580 (GPU0) : Yes
> Peer access from GeForce GTX 580 (GPU3) -> GeForce GTX 680 (GPU2) : No

Interesting!

I tried to see if two sm_35 devices (GK208, GK110) have peer access under Win7/x64… no joy. I think on Windows both devices need to be running the TCC driver.

Tesla K20c        <--  GeForce GT 630    :  FALSE
GeForce GT 630    <--  Tesla K20c        :  FALSE

A code snippet for testing peer-to-peer access is here.

So I guess this means the CUDA docs need to be updated?