以前轉載了一篇文章: https://www.cnblogs.com/devilmaycry812839668/p/12370685.html
對於里面的結果總感覺有所懷疑,於是斥巨資購入兩個 技嘉 rtx2070super 顯卡, (至於為啥不弄兩個2080ti呢,因為才貴搞不定呢),然后又購入了一款七彩虹的RTX下的nvlink hub 也就是 nvlink 交換機。
環境如下:
操作系統:Ubuntu 18.04
主板:華碩z470-e
cpu:10700k
獨立顯卡:兩個 技嘉2070super
nvlink hub: 七彩虹 (3 slots款)
查看顯卡工作情況:
一切正常。
===========================================================
不安裝nvlink情況:
上面結果顯示在不使用nvlink橋接器的情況下,Ubuntu系統環境中 兩個 rtx2070super顯卡無法實現P2P通信。
===========================================================
安裝nvlink情況:
上面結果顯示在使用nvlink橋接器的情況下,Ubuntu系統環境中 兩個 rtx2070super顯卡 可以實現P2P通信。
注:安裝nvlink橋接器后,系統啟動此時nvlink橋接器的工作燈是亮的(七彩虹的nvlink是有燈的,紅色的),如果等沒有亮說明該nvlink橋接器沒有正常工作,此時需要確認一下nvlink橋接器安裝的是否牢靠,有沒有把插槽插到底。
網上查詢到有個開啟 TCC 計算模式的命令:
nvidia-smi -i 0 -dm TCC
可以看到,這此時這兩個顯卡開啟TCC模式均失敗,查資料發現rtx, gtx 顯卡不支持TCC模式,只有泰坦之類的專業顯卡才可以打開TCC模式,而且開啟TCC模式需要這塊顯卡沒有在執行顯示任務才可以。
===========================================================
考慮到網上大部分利用nvlink橋接器的都是在windows環境下,於是改換在windows系統下進行測試:
開機進入系統后,打開NVIDIA的控制面板:
開啟 SLI 功能, 如上圖所示。
打開資源管理器,查看是否實現兩個顯卡同時工作:
發現成功可行,兩個顯卡利用率相同,並且利用率的波形變化圖也相近似。
使用 nvidia-smi 命令查看:
發現兩個顯卡確實同時工作,實現了SLI功能,否則的話會有一個顯卡利用率為 0 。
但是 由於不太會用 vs2019, 沒有在windows平台上成功編譯出 simpleP2P.exe 和 p2pBandwidthLatencyTest.exe 這兩個P2P測速程序,因此這里就沒有windows環境下的實測數值,具體P2P速度可以參考linux環境下的實測數值。(當然也就無法判斷在windows環境下實現P2P功能是否需要開啟sli,個人觀點這兩個功能應該是獨立的,也就是說不開啟sli也可以使用P2P功能)
-----------------------------------
原來以為在linux環境下要想使用nvlink橋接器組P2P需要至少三個獨立顯卡,兩個相同的顯卡組成P2P提供給計算任務使用,第三個顯卡進行圖像顯示之用,實踐后發現兩個相同的支持sli的獨立顯卡就可以組成P2P, 當然在linux驅動中我們無法設置sli交火,也就是在linux系統中雖然兩個顯卡進行了nvlink橋接但是只能實現P2P功能而不能實現sli功能,因為linux驅動中並不能設置sli功能,兩個顯卡不能同時協同的進行顯示任務,但是兩個顯卡在nvlink連接下可以協同進行計算任務。在windows環境下,要想實現P2P功能是否必須實現sli功能就不得而知了(個人觀點可能windows系統下即使不開啟sli功能也是可以進行P2P功能的,畢竟linux系統下沒有sli功能也是可以P2P功能的),畢竟windows系統支持sli功能而linux系統不支持(linux下N卡的sli功能應該是不支持的,linux系統的NVIDIA控制面板中沒有sli設置的選項)
linux系統和window系統下 nvlink 最大的不同,個人觀點是window是環境下可以實現sli,也就是兩個顯卡同時負擔顯示任務,而在兩個系統環境下計算任務應該都是相似的都可以實現P2P功能。
在 linux系統下,nvlink橋接器實現P2P功能,此時打開多個視頻播放任務, 顯卡工作如下:
發現, linux環境下,沒有sli功能的nvlink橋接雖然實現了P2P功能但是不能實現sli功能,兩個顯卡只有主顯卡進行顯示任務,副顯卡基本就沒有工作,利用率為 0 。
而在 windows環境下 實現sli功能的nvlink橋接器,主副顯卡同時為顯示任務工作,利用率基本相同,不存在空閑顯卡。
在本文所搭建的環境中,執行 p2pBandwidthLatencyTest 測速程序:
可以看到,PCIE的實際帶寬 紅色1部分 單向6GB/s, 紅色3部分, 雙向10.4GB/s , 與實際PCIE3.0*8的理論單向8GB/s ,雙向16GB/s 還是有一定距離的。
但是通過NVLINK的P2P通信實測 單向24GB/s , 雙向 48GB/s , 其表現還是不錯的,雖然比顯存內部帶寬380GB/s的帶寬還是差距很大的,但是比PCIE3.0*8以及*16速度要快不少,當然如果你這里使用的是專業級別顯卡NVLINK的帶寬可以達到300GB/s 甚至 600GB/s的帶寬速度,這樣就完全可以把多個顯卡的內存當做是在一個顯卡內部那樣進行調用而不會有明顯帶寬瓶頸,本文主要是測試目的,由於資金限制也就只能進行消費級別的顯卡測試。
下面的 bandwidthTest 測速程序也證明了 主機和GPU的訪問帶寬和GPU內部的訪問帶寬:
---------------------------------------
注:
PCIE3.0*16速度是多少?
PCIE3.0*16 通道單方向速度為16GB/s ,由於是全雙工工作所以是兩個方向的速度之和,也就是16GB/s * 2 = 32GB/s , 所以說PCIE3.0*16的全雙工工作的速率為32GB/s 。(每個通道是兩個方向的,雙工工作所以是16GB/s*2)
頻率 8 GT/s= 1GBps
編碼效率為 128/130 bit
雙工效率 2
通道數量 16
所以是 1* (128/130)* 2 *16 =31.5 GB/s ~32GB/s
從NVIDIA給出的官方數據可以了解到,RTX 2080Ti顯卡支持兩條NVLink通道,雙向帶寬可達100GB/s,而RTX 2080只支持一條通道,帶寬為50GB/s。即便是一條NVLink通道,也要比主板PCI-Ex16的32GB/s的帶寬數值大得多,如此大的帶寬可以確保兩塊顯卡之間的數據交換無礙,理論上可以讓兩塊顯卡都發揮出全部性能,實現1+1=2的效果。(此段源於 http://www.yxdown.com/hardware/346994.html)
一個通道的NVLINK是50GB/s(全雙工,兩個方向的情況),也就是說一條通道單方向的NVLINK速率為25GB/s 。
PCIE3.0*16 的速率是32GB/s (全雙工,兩個方向的情況) , 也就是說PCIE3.0*16單方向的的速率為16GB/s 。
RTX2080Ti 支持兩條NVLINK通道,雙向帶寬為100GB/s, 單向帶寬50GB/s, 而 RTX2080, RTX2070super 只支持一條通道,雙向帶寬為50GB/s, 單向通道為25GB/s 。
從上文的圖中:
可以知道實際過程中2070super單方向的帶寬實測為22.53GB/s , 雖然與理論的25GB/s有一定距離但是還算可以接受。
根據 http://www.gpus.cn/gpus_list_page_techno_support_content?id=30
中的兩個2080ti P2P實測速率單方向為44.8GB/s , 比理論的單方向帶寬 50GB/s 也是存在一定距離, 不過正好是本文2070s的實測帶寬的22.53GB/s的大致兩倍,這也正好符合雙通道和單通道的倍數之差。
文章 https://kheresy.wordpress.com/2019/03/05/nvidia-nvlink-on-geforce-rtx/
給出下面的測試結果:(兩個 RTX 2080 Ti 顯卡在nvlink下的表現)
p2pBandwidthLatencyTest.exe 測試
上圖 1部分結果是單方向情況下 不利用P2P功能的時候 顯卡間的帶寬為 6.6GB/s 和 9.47GB/s , 顯存自身的帶寬為500GB/s 多一些。
上圖 2部分 是單方向下 利用P2P功能顯卡間的帶寬為 46GB/s左右,和 rtx2080ti nvlink單方向理論帶寬50GB/s 接近。
上圖 3 部分 是雙方向下 不利用P2P功能時候 顯卡間帶寬為 7.27GB/s 和 11.42GB/s。
PCIE3.0*16的理論單向帶寬為16GB/s, 雙向帶寬為32GB/s, PCIE3.0*8的理論帶寬為單方向8GB/s, 雙方向16GB/s , 根據上圖 1部分和3部分 可以大膽猜測顯卡的插槽PCIE3.0的倍數應該是*8的。
上圖4部分 是雙方向 利用P2P功能的時候顯卡間的帶寬 大約為 90GB/s 和 rtx2080ti nvlink雙方向理論帶寬100GB/s 接近。
-------------------------------------------------------------
對於文章 https://zhuanlan.zhihu.com/p/46061343
NVLink工作在GeForce RTX 2080上和Quadro GP100上有區別嗎?
中所說的有些內容並不是很認同, 上面這篇文章出現的比較早, 在本次測試中也多次參考這篇文章, 以下說一說自己不認同的地方和認同的地方:
不認同的地方:
無法打開GeForce RTX顯卡的TCC模式,這意味着它們將不能“點對點”通信,而這是使用全功能NVLink的前提。-------首先TCC模式主要是指關閉了圖形顯示功能,一般都是泰坦等專業的計算顯卡才可以開啟的,但這並不意味着RTX顯卡不能支持P2P通信, 經過上面的實測發現RTX顯卡也是可以支持P2P功能的。
認同的地方:
RTX顯卡即使支持P2P功能,顯卡之間通信的帶寬也大大受限。-------RTX顯卡的P2P帶寬確實沒有專業顯卡的P2P帶寬大,不過但是還是可以的。
這篇文章給出了下面的測試結果:
根據本文的實測我們知道 2080ti的P2P帶寬為單向理論值50GB/s,實測為44.81GB/s, 2070super的P2P帶寬理論單向帶寬為25GB/s, 實測為22.53GB/s, 和專業顯卡比起來還是可以湊合的, 而比PCIE3.0*16的理論單向帶寬16GB/s 還是高上不少的,而且現在很多消費級別的主板兩個顯卡同時插上只能到達PCIE*8的帶寬,這個帶寬的理論值為單向8GB/s, 可以看到即使是2080, 2070super這樣的單通道P2P顯卡的實測帶寬也是 PCIE*8的理論帶寬的將近3倍(22.53GB/s, 8GB/s, 單方向)
而且 還有一點要說的就是 那篇文章有個 地方有些問題,那就是如果顯卡不開TCC模式(當然RTX顯卡不支持TCC模式),那么就不需要亮機卡,因為你的RTX顯卡在進行P2P通信的同時由於不支持TCC模式所以仍然可以執行圖形顯示的任務, 也就是說用RTX顯卡組成P2P通信是可以的,而且不需要亮機卡,重要的事情說三遍,不需要亮機卡,不需要亮機卡,不需要亮機卡(RTX顯卡的情況下)。
在官方資料上可以看到: https://www.nvidia.cn/design-visualization/nvlink-bridges/
使用nvlink橋接器的話,兩個顯卡之間的速度分別可以為:
雙向帶寬: 單向帶寬:
50GB/s 25GB/s
100GB/s 50GB/s
160GB/s 80GB/s
200GB/s 100GB/s
RTX2080Ti的雙向帶寬理論為100GB/s, RTX2080 和 RTX2070super 的理論雙向帶寬為50GB/s 。雖然比不了速度最高的顯卡的200GB/s雙向nvlink帶寬,但是也不主板上的PCIE3.0*16 雙向帶寬32GB/s, PCIE3.0*8雙向帶寬16GB/s 要好上很多了, 當然這種P2P的通信模式雖然速率上去了但是還有一個就是每個顯卡的顯存是固定的而且遠遠小於主機內存, 兩個顯卡不訪問主機內存的情況下兩個顯卡之間所能交換的數據量就是顯存大小,這里2070super 為8G, 而我這主機內存最高可以安裝128GB, 雖然主機內存和顯存的交換要走PCIE要慢一些但是主機內存大,即使NVLINK速度再快顯存的大小都難以匹敵主機內存,這樣的話使用P2P通信的場景還是很有局限性的。
在 https://www.expreview.com/64042-8.html
NVIDIA為專業顯卡、計算卡設計了全新的NVLink,而2016年發布的Tesla P100是首款搭載NVLink的產品,單個GPU具有160GB/s的帶寬,相當於PCIe 3.0 ×16帶寬的5倍。去年GTC 2017上發布的TeslaV100搭載的NVLink 2.0更是將GPU帶寬提升到了300G/s(六通道),都快是PCIe 3.0 ×16的10倍。
--------------可以知道,原來TeslaV100 可以實現300GB/s的雙通道帶寬,確實速度很快,不過價格應該也是不菲呀。
---------------------------------------------------------
Quadro RTX 8000 顯卡具體情況呢,下面文章給出了描述:
https://www.zhihu.com/question/364933644/answer/965561950
NVIDIA NVLink™
使用高速互聯技術連接2塊GPU,以將顯存容量擴展至96GB,並以高達100GB/秒的數據傳輸速度實現更高性能。
多 GPU 可擴展性
QUADRO RTX 8000 NVLINK HB 橋接器

----------------------------------
