本發(fā)明涉及l(fā)inux內(nèi)核驅(qū)動設(shè)計領(lǐng)域,提供一種面向rdma(remote?direct?memoryaccess)通信的linux內(nèi)核驅(qū)動設(shè)計方法,以供gpu與第三方設(shè)備基于pcie(peripheralcomponent?interconnect?express)總線實現(xiàn)無需cpu(central?processing?unit)參與的直接通信。
背景技術(shù):
1、隨著計算機技術(shù)的不斷發(fā)展,算力已經(jīng)成為了現(xiàn)代社會中的關(guān)鍵生產(chǎn)力,尤其在人工智能、物聯(lián)網(wǎng)、虛擬現(xiàn)實等領(lǐng)域,對高效計算能力的需求更加迫切。在此背景下,將多種不同類型的處理器或計算設(shè)備組合在一起進行計算任務(wù)的異構(gòu)計算技術(shù)逐漸嶄露頭角。與傳統(tǒng)的單一類型計算相比,異構(gòu)計算可以根據(jù)計算任務(wù)的特點發(fā)揮不同計算資源的能力,提高服務(wù)器計算性能、能效比和實時性。然而,不同計算單元之間的通信帶寬和通信延時限制了異構(gòu)平臺的計算能力的提升。
2、計算任務(wù)有兩種特點:簡單但計算量大、復雜但計算量小,采用下位機fpga(fieldprogrammable?gate?array)和上位機cpu構(gòu)成的異構(gòu)并行計算平臺,分別負責計算簡單量大和復雜量小的任務(wù)可以充分地利用計算資源。由于深度學習等計算領(lǐng)域通常需要大量的計算資源來訓練,gpu(graphics?processing?unit)的并行性能使其成為訓練大型神經(jīng)網(wǎng)絡(luò)的理性選擇,于是可以考慮將gpu代替cpu與fpga構(gòu)成異構(gòu)并行計算平臺。如果采用傳統(tǒng)的驅(qū)動設(shè)計方法實現(xiàn)兩者之間通信,數(shù)據(jù)必須通過cpu內(nèi)存,從而會增加傳輸延遲,亟待一項技術(shù)解決解決上述問題。
3、然而nvidia開發(fā)的一項技術(shù)gpudirect?rdma,可實現(xiàn)gpu與第三方設(shè)備通信時繞過遠程主機,直接與其他設(shè)備(例如網(wǎng)卡和存儲設(shè)備)之間進行數(shù)據(jù)傳輸,從而顯著降低傳輸延遲,加快數(shù)據(jù)交換速度。因此本發(fā)明基于rdma技術(shù)開發(fā)相應(yīng)linux內(nèi)核驅(qū)動。
技術(shù)實現(xiàn)思路
1、為了滿足異構(gòu)計算平臺中g(shù)pu與fpga通信需求,本發(fā)明提供一種面向分子動力學計算的linux內(nèi)核驅(qū)動設(shè)計方法。不同于傳統(tǒng)的驅(qū)動,它能實現(xiàn)gpu與fpga在pcie總線下,繞過cpu,直接進行數(shù)據(jù)交換,滿足異構(gòu)平臺計算速度的需求。
2、本發(fā)明采用如下技術(shù)方案:
3、步驟s1,與通用的設(shè)備驅(qū)動類似,rdma驅(qū)動通過設(shè)置與fpga相對應(yīng)的device?id、vendor?id,掛載在fpga上并生成一個可供程序端操作的字符設(shè)備句柄。驅(qū)動加載至下位機fpga后會有兩個關(guān)鍵步驟,一是將pci?bar(base?address?register),即設(shè)備的i/o空間或者內(nèi)存空間,映射到內(nèi)核地址空間中的指定區(qū)域,從而方便內(nèi)核對設(shè)備進行訪問和控制;二是將dma操作需要的物理地址與內(nèi)核使用的虛擬地址進行映射。這些過程都發(fā)生在驅(qū)動加載至fpga的過程中,一旦驅(qū)動卸載就會釋放這些映射。
4、步驟s2,在上位機gpu端,分配一段內(nèi)存空間存儲需要傳輸?shù)臄?shù)據(jù),再將這段內(nèi)存空間的參數(shù)包括虛擬地址和長度傳入驅(qū)動,驅(qū)動收到后將這段內(nèi)存固定住,并將其虛擬地址轉(zhuǎn)換為物理地址。程序端利用步驟s1中生成的字符設(shè)備句柄,以文件的形式將其打開后,再執(zhí)行后續(xù)的步驟。驅(qū)動利用gpudirect?rdma技術(shù)提供的api將gpu分配的內(nèi)存固定住并將其虛擬地址轉(zhuǎn)換為物理頁列表。
5、步驟s3,dma傳輸需要上位機和下位機的物理地址。驅(qū)動將步驟s2中轉(zhuǎn)換后的物理頁列表映射為物理地址,即為gpu的物理地址。fpga物理地址可以通過自定義的vivado工程中的bram內(nèi)存地址直接讀取,并通過上位機程序端直接填寫進驅(qū)動。
6、步驟s41,上位機利用步驟s1的字符設(shè)備句柄,主動發(fā)起dma傳輸,內(nèi)核驅(qū)動得到正確指令后,執(zhí)行dma傳輸。首先,dma傳輸時需要將源地址、目的地址以及傳輸數(shù)據(jù)長度傳入dma描述符寄存器中,之后驅(qū)動需將步驟s2的gpu物理地址、fpga的物理地址以及上位機確定好的數(shù)據(jù)長度等參數(shù)填充進dma描述符寄存器中。
7、步驟s42,驅(qū)動初始化控制寄存器描述符、中斷寄存器描述符等關(guān)鍵參數(shù),之后驅(qū)動內(nèi)部通過步驟s1中的關(guān)鍵步驟二來將dma需要操作的物理地址映射為內(nèi)核可使用的虛擬地址。準備好上述條件后,驅(qū)動通過寫控制寄存器發(fā)起傳輸。在數(shù)據(jù)傳輸完畢后,設(shè)備會產(chǎn)生一個中斷信號,并將中斷寄存器的相應(yīng)位進行復位,以告知驅(qū)動本次傳輸已經(jīng)完成。驅(qū)動程序?qū)⒆x取該中斷寄存器后將其復位清除,并通過寫控制寄存器來完成dma傳輸。
8、傳輸完成后,需要評估通信的速度。本設(shè)計框架下采用pcie?4.0架構(gòu),理論傳輸數(shù)據(jù)速度為32gb/s,其通信速度由以下公式(1)來衡量:
9、
10、其中bw為通信速度,size為傳輸數(shù)據(jù)大小,time為傳輸時間。
1.一種面向rdma通信的linux內(nèi)核驅(qū)動設(shè)計方法,其特征在于,包括以下步驟:
2.如權(quán)利要求1中的一種面向rdma通信的linux內(nèi)核驅(qū)動設(shè)計方法,其特征在于:所述步驟s1中,將fpga和gpu掛載在同一pcie?switch下,并加載上驅(qū)動,進行映射工作。
3.如權(quán)利要求1中的一種面向rdma通信的linux內(nèi)核驅(qū)動設(shè)計方法,其特征在于:所述步驟s2中,上位機端對gpu分配一段內(nèi)存用于存儲傳輸數(shù)據(jù),并將其虛擬地址傳入驅(qū)動,將虛擬地址映射為物理地址。
4.如權(quán)利要求1中的一種面向rdma通信的linux內(nèi)核驅(qū)動設(shè)計方法,其特征在于:所述步驟s3中,準備好dma傳輸需要的上下位機硬件的物理地址。
5.如權(quán)利要求1中的一種面向rdma通信的linux內(nèi)核驅(qū)動設(shè)計方法,其特征在于:所述步驟s4中,上位機啟動dma傳輸指令,驅(qū)動接受指令后執(zhí)行dma傳輸后,實現(xiàn)gpu對fpga的讀寫操作。
6.如權(quán)利要求1中的一種面向rdma通信的linux內(nèi)核驅(qū)動設(shè)計方法,其特征在于:進行完dma傳輸后,對通信過程的通信速度進行實時評估。