2011-08-01 39 views
0

我有兩個關於CUDA 4.0對接入問題:CUDA 4.0點對點訪問混亂

  1. 有什麼辦法,我可以像GPU#0 ---> GPU#1 ---> GPU#2 ---> GPU#3複製數據。目前在我的代碼中,當我一次只使用兩個GPU時它工作正常,但當我使用cudaDeviceCanAccessPeer檢查第三個GPU上的對等訪問時失敗。因此,以下工作 - cudaDeviceCanAccessPeer(&flag_01, dev0, dev1),但是當我有兩個這樣的語句: cudaDeviceCanAccessPeer(&flag_01, dev0, dev1)cudaDeviceCanAccessPeer(&flag_12, dev1, dev2),後面的失敗(0返回到flag_12變量)。

  2. 只適用於通過公共PCIe連接的GPU嗎?是對等副本是否依賴於基礎PCIe互連?我不明白的PCIe,但在做了nvidia-SMI我看到GPU的PCIe總線是2,3,83和84

該試驗檯是一款雙插槽6核Intel Westmere處理器,擁有4 GPU - Nvidia Tesla C2050。

編輯:HtoD和DtoH,和兩個GPU(DtoD)之間SimpleP2P結果之間 Bandwidthtest: enter image description here

+0

你會得到什麼錯誤?請注意,您使用'cudaDeviceEnablePeerAccess()'啓用對等訪問,而不是'cudaDeviceCanAccessPeer' - 後者用於查詢。 – harrism

+0

我首先通過'cudaDeviceCanAccessPeer'檢查兩臺設備是否可以是對等設備,然後通過'cudaDeviceEnablePeerAccess()'啓用對等設備訪問。當我嘗試檢查時,'cudaDeviceCanAccessPeer'返回一個錯誤,在檢查0,1後說設備1,2 ......當我只是堅持兩個設備時一切都很好,但是當我包含更多設備時,我會被標記出來。 – Sayan

+1

你得到了什麼錯誤代碼? – harrism

回答

5

我懷疑這就是問題所在。從即將發佈的NVIDIA文檔:

NVIDIA GPU旨在充分利用包括點對點通信在內的PCI-e Gen2標準,但IOH芯片組不支持完整的PCI-e Gen2規範與其他IOH芯片組的P2P通信

如果應用程序試圖建立兩個GPU之間的P2P關係,則需要通過QPI進行P2P通信,則cudaPeerEnable()API調用將返回錯誤代碼。用於P2P直接傳輸的cudaMemcopy()函數會自動回退到使用設備到主機到設備的路徑,但P2P直接訪問(設備代碼中的P2P加載/存儲指令)不會自動回退。

一個已知的示例系統是帶有雙IOH芯片組的HP Z800工作站,該工作站可以運行simpleP2P示例,但帶寬非常低(由於回退路徑而導致100 MB MB/s而不是幾GB/s)。

NVIDIA正在研究是否可以通過向未來的GPU架構添加功能來支持跨越QPI的GPU P2P。

參考:英特爾5520芯片組和英特爾5500芯片組數據表,表7-4:入站存儲器地址解碼: 「的IOH不支持非連續字節從PCI Express可用於遠程對等網絡MMIO交易。這是對PCI Express標準要求的一個額外限制,以防止與Intel QuickPath Interconnect不兼容「。 - http://www.intel.com/Assets/PDF/datasheet/321328.pdf

一般來說,我們建議構建多GPU工作站和集羣,這些工作站和集羣具有用於連接到單個IOH的GPU的所有PCI-Express插槽。

+0

我注意到即使這樣,GPU之間的帶寬通過單一的IOH是相當少的。我的另一位同事也證實了這一點。請參考上面問題更新部分的圖表。我只是針對不同的數據大小運行simpleP2P程序.... – Sayan

+1

@harrism請告訴我,在這一刻,是這個問題(GPU1 <-> CPU1 <-> QPI/HT <-> CPU2 <-> GPU2)在開普勒CC3.0( 3.5)和CUDA5.5? – Alex