亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種基于GPU與NIC之間的內(nèi)存高速直接交換的方法及系統(tǒng)與流程

文檔序號(hào):11432196閱讀:845來源:國知局
一種基于GPU與NIC之間的內(nèi)存高速直接交換的方法及系統(tǒng)與流程

本發(fā)明涉及一種基于gpu與nic之間的內(nèi)存高速直接交換的方法及系統(tǒng)。



背景技術(shù):

隨著gpu技術(shù)的快速發(fā)展,當(dāng)前的gpu已經(jīng)具有很強(qiáng)的并行計(jì)算能力,浮點(diǎn)運(yùn)算能力甚至可以達(dá)到同代cpu的10倍以上。同時(shí),隨著nvidia公司cuda的推出,使得gpu具有更好的可編程性,因此,在諸如數(shù)據(jù)庫防火墻、網(wǎng)絡(luò)防火墻、信息安全保護(hù)、圖像處理等通用計(jì)算領(lǐng)域有著廣泛的應(yīng)用。如何充分利用gpu的并行計(jì)算特點(diǎn)實(shí)現(xiàn)海量網(wǎng)絡(luò)數(shù)據(jù)的快速處理,已經(jīng)成為當(dāng)今的熱點(diǎn)問題之一。gpu具有獨(dú)特的硬件結(jié)構(gòu),采用常規(guī)的網(wǎng)絡(luò)數(shù)據(jù)交換方法,由于數(shù)據(jù)交換的延遲,很難發(fā)揮gpu的并行運(yùn)算優(yōu)勢。圖1是現(xiàn)有g(shù)pu與nic網(wǎng)絡(luò)數(shù)據(jù)傳輸示意圖。常規(guī)的方法對(duì)此類涉及大量數(shù)據(jù)的應(yīng)用的傳輸與處理并不高效。從圖1中可以看出,共涉及三次數(shù)據(jù)復(fù)制:第一次從網(wǎng)卡緩沖區(qū)復(fù)制到cpu內(nèi)核內(nèi)存區(qū),內(nèi)核協(xié)議棧處理后將數(shù)據(jù)從內(nèi)核內(nèi)存區(qū)復(fù)制到用戶內(nèi)存區(qū),最后從用戶內(nèi)存區(qū)復(fù)制到gpu內(nèi)存區(qū)供gpu使用。從網(wǎng)卡到gpu內(nèi)存中的三次數(shù)據(jù)復(fù)制,增加了數(shù)據(jù)傳輸延遲,可能需要幾微秒到幾百微秒的時(shí)間用于數(shù)據(jù)傳輸。其次,分配主存儲(chǔ)器作為緩沖區(qū),以臨時(shí)存儲(chǔ)數(shù)據(jù),也導(dǎo)致可用內(nèi)存減少。最后,在多個(gè)存儲(chǔ)區(qū)之間的數(shù)據(jù)傳輸?shù)臄?shù)據(jù)吞吐量也受到嚴(yán)重影響,因?yàn)樘幚砥鞅仨毜却彌_區(qū)被填充有數(shù)據(jù),才能復(fù)制數(shù)據(jù)。因此,目前方法存在以下問題:

1、多次內(nèi)存數(shù)據(jù)交換,導(dǎo)致數(shù)據(jù)傳輸延遲時(shí)間長;

2、多個(gè)存儲(chǔ)區(qū)之間的數(shù)據(jù)傳輸,數(shù)據(jù)吞吐量受到嚴(yán)重影響;

3、由于開辟存儲(chǔ)緩沖區(qū),占用大量內(nèi)存空間,導(dǎo)致可用內(nèi)存資源減少。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明的目的在于提出一種在圖形處理器(gpu)和網(wǎng)卡(nic)之間的內(nèi)存高速直接傳輸數(shù)據(jù)的方法及系統(tǒng)。本發(fā)明通過在gpu和nic之間的數(shù)據(jù)直接傳輸機(jī)制,實(shí)現(xiàn)gpu快速處理海量網(wǎng)絡(luò)數(shù)據(jù)的目的。

本發(fā)明采用的技術(shù)方案是,一種基于gpu與nic之間的內(nèi)存高速直接交換的方法,包括下列步驟:

步驟1,cpu應(yīng)用程序在gpu內(nèi)存中分配一個(gè)或多個(gè)存儲(chǔ)區(qū),并將每塊內(nèi)存區(qū)的物理地址和大小用一個(gè)內(nèi)存塊參數(shù)標(biāo)記,然后,將分配的gpu內(nèi)存塊映射到cpu內(nèi)存空間的一個(gè)虛擬地址中;

步驟2,gpu將分配的內(nèi)存塊參數(shù)返回給cpu;

步驟3,cpu將內(nèi)存塊參數(shù)傳遞給內(nèi)核網(wǎng)卡驅(qū)動(dòng),網(wǎng)卡驅(qū)動(dòng)程序?qū)@得的gpu內(nèi)存塊信息保存;

步驟4,網(wǎng)卡收到網(wǎng)絡(luò)數(shù)據(jù)后,網(wǎng)卡的dma控制器訪問獲得的內(nèi)存塊參數(shù),然后將數(shù)據(jù)直接發(fā)送到gpu對(duì)應(yīng)的內(nèi)存塊中;

步驟5,網(wǎng)卡驅(qū)動(dòng)觸發(fā)一個(gè)cpu中斷;

步驟6,cpu收到中斷后即啟動(dòng)gpu處理數(shù)據(jù),然后返回步驟4循環(huán)。

在一實(shí)施例中,cpu通過ioctl系統(tǒng)函數(shù)將內(nèi)存塊傳送給網(wǎng)卡的dma控制器,每分配一塊gpu內(nèi)存塊調(diào)用一次ioctl,將內(nèi)存塊參數(shù)傳遞給網(wǎng)卡dma控制器,網(wǎng)卡dma控制器給每個(gè)gpu內(nèi)存塊分配一個(gè)相同的內(nèi)存塊參數(shù)并保存相應(yīng)的信息;

步驟1中,使用nividia公司的cuda開發(fā)工具庫中的cumemmap函數(shù)將分配的gpu內(nèi)存塊映射到cpu內(nèi)存空間的一個(gè)虛擬地址中。

所述的內(nèi)存塊參數(shù)采用gpumemstruct(kn,mn)格式,步驟3中cpu通過調(diào)用linux下的ioctl將gpumemstruct(kn,mn)內(nèi)存塊信息傳遞給cpu內(nèi)核網(wǎng)卡驅(qū)動(dòng),網(wǎng)卡驅(qū)動(dòng)程序?qū)@得的gpumemstruct(k1,m1)保存。

網(wǎng)卡驅(qū)動(dòng)使用函數(shù)dma_alloc_coherent分配gpumemstruct(kn,mn),每調(diào)用一次此函數(shù)會(huì)分配一塊內(nèi)存區(qū),多次調(diào)用生成一個(gè)內(nèi)存區(qū)隊(duì)列。

本發(fā)明還提出一種基于gpu與nic之間的內(nèi)存高速直接交換的系統(tǒng),包括cpu、gpu和nic,還包括:

gpu存儲(chǔ)區(qū)分配模塊,用于cpu應(yīng)用程序在gpu內(nèi)存中分配一個(gè)或多個(gè)存儲(chǔ)區(qū),并將每塊內(nèi)存區(qū)的物理地址和大小用一個(gè)內(nèi)存塊參數(shù)標(biāo)記然后,將分配的gpu內(nèi)存塊映射到cpu內(nèi)存空間的一個(gè)虛擬地址,并將分配的內(nèi)存塊的參數(shù)返回給cpu;

信息傳遞模塊,用于cpu將內(nèi)存塊參數(shù)傳遞給內(nèi)核網(wǎng)卡驅(qū)動(dòng),網(wǎng)卡驅(qū)動(dòng)程序?qū)@得的gpu內(nèi)存塊參數(shù)信息保存;

數(shù)據(jù)直傳模塊,用于網(wǎng)卡收到網(wǎng)絡(luò)數(shù)據(jù)后,網(wǎng)卡的dma控制器訪問獲得的內(nèi)存塊參數(shù),然后將數(shù)據(jù)直接發(fā)送到gpu對(duì)應(yīng)的內(nèi)存塊中存儲(chǔ)。

所述信息傳遞模塊通過ioctl系統(tǒng)函數(shù)將內(nèi)存塊傳送給網(wǎng)卡的dma控制器,每分配一塊gpu內(nèi)存塊調(diào)用一次ioctl,將內(nèi)存塊參數(shù)傳遞給網(wǎng)卡dma控制器,網(wǎng)卡dma控制器給每個(gè)gpu內(nèi)存塊分配一個(gè)相同的內(nèi)存塊參數(shù)并保存相應(yīng)的信息。

所述gpu存儲(chǔ)區(qū)分配模塊使用nividia公司的cuda開發(fā)工具庫中的cumemmap函數(shù)將分配的gpu內(nèi)存塊映射到用戶內(nèi)存空間的一個(gè)虛擬地址中。

本發(fā)明解決了數(shù)據(jù)從網(wǎng)卡傳到gpu需要多次在不同的內(nèi)存區(qū)域之間拷貝問題。減少數(shù)據(jù)傳輸時(shí)間,減少數(shù)據(jù)延遲時(shí)間,提高了數(shù)據(jù)吞吐量,減少了因開辟緩沖區(qū)而對(duì)內(nèi)存的占用,提高了系統(tǒng)性能。

附圖說明

圖1是現(xiàn)有g(shù)pu與nic網(wǎng)絡(luò)數(shù)據(jù)傳輸示意圖;

圖2是本發(fā)明提出的gpu與nic網(wǎng)絡(luò)數(shù)據(jù)直接內(nèi)存?zhèn)鬏斒疽鈭D;

圖3是本發(fā)明提出的gpu與nic網(wǎng)絡(luò)數(shù)據(jù)直接內(nèi)存?zhèn)鬏斄鞒虉D。

具體實(shí)施方式

下面結(jié)合附圖和實(shí)施例對(duì)發(fā)明進(jìn)行詳細(xì)的說明。

在現(xiàn)有的方法中,需要減少多個(gè)存儲(chǔ)區(qū)之間的數(shù)據(jù)復(fù)制操作來提高數(shù)據(jù)傳輸效率。因此需要結(jié)合gpu和網(wǎng)卡的硬件特點(diǎn),來減少數(shù)據(jù)的復(fù)制次數(shù)甚至完全避免數(shù)據(jù)復(fù)制,才能有效提高gpu的網(wǎng)絡(luò)數(shù)據(jù)處理能力。

在現(xiàn)有數(shù)據(jù)復(fù)制流程中有兩個(gè)過程可以避免,一是從cpu的內(nèi)核內(nèi)存區(qū)到cpu的用戶內(nèi)存區(qū),另一個(gè)是從cpu的用戶內(nèi)存區(qū)到gpu的內(nèi)存區(qū)。最終的流程變成從網(wǎng)卡的緩沖區(qū)直接復(fù)制到gpu的內(nèi)存區(qū)。由于直接從網(wǎng)卡將數(shù)據(jù)復(fù)制到gpu內(nèi)存中略過了內(nèi)核對(duì)數(shù)據(jù)的協(xié)議棧處理,因此需要gpu對(duì)數(shù)據(jù)作協(xié)議棧的解析。

本發(fā)明具體實(shí)現(xiàn)方案如下:

首先由應(yīng)用程序分配一塊或多塊gpu的內(nèi)存,并將每塊內(nèi)存區(qū)的物理地址和大小保存在一個(gè)結(jié)構(gòu)體中,例如,標(biāo)記為gpumemstruct(k1,m1;……kn,mn),其中:k1為gpu內(nèi)存塊大小,m1為gpu內(nèi)存塊地址,通過linux的ioctl系統(tǒng)函數(shù)傳送給網(wǎng)卡的dma控制器,每分配一塊gpu內(nèi)存調(diào)用一次ioctl傳遞gpumemstruct(k1,m1)參數(shù)給網(wǎng)卡dma控制器,網(wǎng)卡dma控制器給每個(gè)gpu內(nèi)存塊分配一個(gè)相同的結(jié)構(gòu)體并保存相應(yīng)的信息。每當(dāng)網(wǎng)卡接收到數(shù)據(jù)時(shí)就會(huì)將數(shù)據(jù)按傳遞給網(wǎng)卡dma控制器的gpu內(nèi)存塊的順序復(fù)制到相應(yīng)的gpu內(nèi)存塊中。圖2顯示結(jié)構(gòu)體gpumemstruct(k1,m1)的生成過程:

網(wǎng)卡驅(qū)動(dòng)使用linux函數(shù)dma_alloc_coherent分配gpumemstruct(k1,m1),此函數(shù)分配一塊一致的內(nèi)存區(qū),設(shè)備或cpu往此內(nèi)存區(qū)寫入的內(nèi)容可以立即被設(shè)備或cpu讀取,而不用擔(dān)心緩存問題。網(wǎng)卡驅(qū)動(dòng)分配gpu內(nèi)存結(jié)構(gòu)體的最大數(shù)目及最大內(nèi)存塊大小由驅(qū)動(dòng)設(shè)定,可以通過向驅(qū)動(dòng)傳遞配置參數(shù)而改變,網(wǎng)卡啟動(dòng)時(shí)會(huì)設(shè)置一個(gè)默認(rèn)的參數(shù)。每調(diào)用一次此函數(shù)會(huì)分配一塊內(nèi)存區(qū),多次調(diào)用生成一個(gè)內(nèi)存區(qū)隊(duì)列。

gpu內(nèi)存塊的地址和大小會(huì)通過網(wǎng)卡驅(qū)動(dòng)傳遞給網(wǎng)卡的dma(直接內(nèi)存存?。┛刂破?,當(dāng)網(wǎng)卡收到數(shù)據(jù)時(shí)dma控制器可以利用獲得的gpu內(nèi)存塊信息向gpu直接傳送數(shù)據(jù)。

gpu與nic網(wǎng)絡(luò)數(shù)據(jù)直接內(nèi)存?zhèn)鬏斄鞒倘缦拢?/p>

步驟1、cpu應(yīng)用程序在gpu內(nèi)存中申請(qǐng)一個(gè)存儲(chǔ)區(qū),內(nèi)存塊大小為k1,用nividia公司的cuda開發(fā)工具鏈中的cumemmap函數(shù),此函數(shù)將分配的gpu內(nèi)存塊映射到用戶內(nèi)存空間的一個(gè)虛擬地址;

步驟2、gpu將分配的內(nèi)存塊地址m1返回給cpu;

步驟3,cpu將內(nèi)存塊參數(shù)傳遞給內(nèi)核網(wǎng)卡驅(qū)動(dòng),網(wǎng)卡驅(qū)動(dòng)程序?qū)@得的gpu內(nèi)存塊信息保存;

例如,調(diào)用linux下的ioctl將gpumemstruct(k1,m1)傳遞給cpu內(nèi)核網(wǎng)卡驅(qū)動(dòng),網(wǎng)卡驅(qū)動(dòng)程序?qū)@得的gpumemstruct(k1,m1)保存;

步驟4,網(wǎng)卡收到網(wǎng)絡(luò)數(shù)據(jù)后,網(wǎng)卡驅(qū)動(dòng)開始處理;網(wǎng)卡的dma控制器訪問獲得的內(nèi)存塊參數(shù)gpumemstruct(k1,m1)gpu內(nèi)存塊信息,然后將數(shù)據(jù)直接發(fā)送到gpu對(duì)應(yīng)的內(nèi)存塊中;

步驟5,網(wǎng)卡驅(qū)動(dòng)觸發(fā)一個(gè)cpu中斷;

步驟6,cpu收到中斷后即啟動(dòng)gpu處理數(shù)據(jù),然后返回步驟4循環(huán)。

本發(fā)明還提出一種基于gpu與nic之間的內(nèi)存高速直接交換的系統(tǒng),包括cpu、gpu和nic,還包括:

gpu存儲(chǔ)區(qū)分配模塊,用于cpu應(yīng)用程序在gpu內(nèi)存中分配一個(gè)或多個(gè)存儲(chǔ)區(qū),并將每塊內(nèi)存區(qū)的物理地址和大小保存在一個(gè)結(jié)構(gòu)體中標(biāo)記,然后,將分配的gpu內(nèi)存塊映射到用戶內(nèi)存空間的一個(gè)虛擬地址,并將分配的內(nèi)存塊的參數(shù)返回給cpu;

信息傳遞模塊,用于cpu將內(nèi)存塊參數(shù)傳遞給內(nèi)核網(wǎng)卡驅(qū)動(dòng),網(wǎng)卡驅(qū)動(dòng)程序?qū)@得的gpu內(nèi)存塊信息保存;

數(shù)據(jù)直傳模塊,用于網(wǎng)卡收到網(wǎng)絡(luò)數(shù)據(jù)后,網(wǎng)卡的dma控制器訪問獲得的內(nèi)存塊參數(shù),然后將數(shù)據(jù)直接發(fā)送到gpu對(duì)應(yīng)的內(nèi)存塊中存儲(chǔ)。

所述信息傳遞模塊通過linux的ioctl系統(tǒng)函數(shù)將內(nèi)存塊傳送給網(wǎng)卡的dma控制器,每分配一塊gpu內(nèi)存塊調(diào)用一次linux的ioctl,將內(nèi)存塊參數(shù)傳遞給網(wǎng)卡dma控制器,網(wǎng)卡dma控制器給每個(gè)gpu內(nèi)存塊分配一個(gè)相同的結(jié)構(gòu)體并保存相應(yīng)的信息。

所述gpu存儲(chǔ)區(qū)分配模塊使用nividia公司的cuda開發(fā)工具庫中的cumemmap函數(shù)將分配的gpu內(nèi)存塊映射到用戶內(nèi)存空間的一個(gè)虛擬地址中。

所述gpu存儲(chǔ)區(qū)分配模塊使用函數(shù)dma_alloc_coherent分配gpumemstruct(kn,mn),每調(diào)用一次此函數(shù)會(huì)分配一塊內(nèi)存區(qū),多次調(diào)用生成一個(gè)內(nèi)存區(qū)隊(duì)列。

本發(fā)明實(shí)現(xiàn)了一種在圖形處理器(gpu)和網(wǎng)卡(nic)之間的內(nèi)存高速直接傳輸數(shù)據(jù)的方法,主要用于通過網(wǎng)卡從網(wǎng)絡(luò)獲取大量數(shù)據(jù)并傳輸給gpu處理的應(yīng)用,在數(shù)據(jù)高吞吐量的當(dāng)前,我們廣泛使用的是1g或10g網(wǎng)卡,超過200g以上的更高性能的網(wǎng)卡已經(jīng)推出,數(shù)據(jù)高吞吐量時(shí)代即將來臨。在高吞吐量環(huán)境下,數(shù)據(jù)量大,數(shù)據(jù)處理速度性能要求高,特別在數(shù)據(jù)安全保護(hù)領(lǐng)域,需求更加迫切,本發(fā)明適用于高吞吐量數(shù)據(jù)庫防火墻、網(wǎng)絡(luò)防火墻、高速實(shí)時(shí)超高清圖像處理等海量網(wǎng)絡(luò)數(shù)據(jù)的交換處理。

上述實(shí)施例僅用于說明本發(fā)明的具體實(shí)施方式。應(yīng)當(dāng)指出的是,對(duì)于本領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和變化,這些變形和變化都應(yīng)屬于本發(fā)明的保護(hù)范圍。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1