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

基于GPU的計(jì)算二值神經(jīng)網(wǎng)絡(luò)卷積的方法及裝置與流程

文檔序號(hào):12469165閱讀:342來源:國知局
基于GPU的計(jì)算二值神經(jīng)網(wǎng)絡(luò)卷積的方法及裝置與流程

本發(fā)明涉及計(jì)算機(jī)視覺領(lǐng)域,更具體地涉及一種基于GPU的計(jì)算二值神經(jīng)網(wǎng)絡(luò)卷積的方法及裝置。



背景技術(shù):

深度學(xué)習(xí)(Deep Learning)的概念源于人工神經(jīng)網(wǎng)絡(luò)的研究。含多隱層的多層感知器就是一種深度學(xué)習(xí)結(jié)構(gòu)。深度學(xué)習(xí)通過組合低層特征形成更加抽象的高層表示屬性類別或特征,以發(fā)現(xiàn)數(shù)據(jù)的分布式特征表示。在計(jì)算機(jī)視覺及相關(guān)領(lǐng)域,新興的深度學(xué)習(xí)方法相比過去傳統(tǒng)方法有了長足的進(jìn)步。

卷積神經(jīng)網(wǎng)絡(luò)(Convolutional neural networks,簡(jiǎn)稱CNNs)是一種深度的監(jiān)督學(xué)習(xí)下的機(jī)器學(xué)習(xí)模型,是深度學(xué)習(xí)的核心操作,它將卷積核(Kernel)與原圖像輸入進(jìn)行卷積操作得到輸出。一般而言,卷積操作是一個(gè)深度學(xué)習(xí)模型中計(jì)算量最大、也是內(nèi)存開銷最多的部分,例如目前的CNN中卷積操作會(huì)占用70%以上的計(jì)算時(shí)間,因此優(yōu)化卷積操作是很有必要的。為解決卷積計(jì)算量大、內(nèi)存開銷多的問題,二值神經(jīng)網(wǎng)絡(luò)(Binary Neural Network,簡(jiǎn)稱BNN)能夠?qū)⒕矸e中32比特(bit)浮點(diǎn)數(shù)存儲(chǔ)改為1bit二值存儲(chǔ),并將浮點(diǎn)計(jì)算替換成整數(shù)位運(yùn)算,例如將浮點(diǎn)數(shù)乘法映射為按位的同或(XNOR)操作。然而,二值神經(jīng)網(wǎng)絡(luò)如何在圖形處理單元(Graphics Processing Unit,簡(jiǎn)稱GPU)設(shè)備上實(shí)現(xiàn)卷積的計(jì)算是急需解決的技術(shù)瓶頸。



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

考慮到上述問題而提出了本發(fā)明。本發(fā)明提供了一種基于GPU的計(jì)算二值神經(jīng)網(wǎng)絡(luò)卷積的方法,使得二值神經(jīng)網(wǎng)絡(luò)卷積的計(jì)算能夠在GPU上實(shí)現(xiàn),且能夠?qū)崿F(xiàn)計(jì)算速度的提升。

根據(jù)本發(fā)明一方面,提供了一種基于GPU的計(jì)算二值神經(jīng)網(wǎng)絡(luò)卷積的方法,包括:

獲取根據(jù)二值神經(jīng)網(wǎng)絡(luò)執(zhí)行卷積操作的計(jì)算請(qǐng)求;

根據(jù)所述計(jì)算請(qǐng)求,開啟GPU上的至少一個(gè)線程塊,其中,每個(gè)線程塊包括多個(gè)線程;

基于兩級(jí)分塊策略,確定所述至少一個(gè)線程塊中每個(gè)線程塊的計(jì)算區(qū)域范圍,并確定每個(gè)線程塊所包括的線程的計(jì)算區(qū)域范圍;

所述至少一個(gè)線程塊中的每個(gè)線程塊內(nèi)的各個(gè)線程執(zhí)行計(jì)算過程,得到計(jì)算結(jié)果;

根據(jù)每個(gè)線程塊內(nèi)的各個(gè)線程得到的所述計(jì)算結(jié)果,確定相應(yīng)的線程塊的輸出結(jié)果。

示例性地,被執(zhí)行卷積操作的輸入數(shù)據(jù)的物理數(shù)據(jù)布局為:所述輸入數(shù)據(jù)在通道數(shù)維度分為多組,每組包括連續(xù)的b位,同一組中的位在物理存儲(chǔ)空間上是連續(xù)的,相鄰的組在所述物理存儲(chǔ)空間上是不相鄰的;其中b與所述GPU的顯存位寬一致。

示例性地,所述計(jì)算過程包括:使用異或操作模擬XNOR操作的行為對(duì)所述輸入數(shù)據(jù)進(jìn)行計(jì)算,并使用popcount指令計(jì)算異或操作得到的結(jié)果中為1的位的數(shù)量,作為所述計(jì)算結(jié)果。

示例性地,所述根據(jù)每個(gè)線程塊內(nèi)的各個(gè)線程得到的所述計(jì)算結(jié)果,確定相應(yīng)的線程塊的輸出結(jié)果包括:

利用投票函數(shù)對(duì)每個(gè)線程塊內(nèi)的各個(gè)線程得到的所述計(jì)算結(jié)果進(jìn)行統(tǒng)計(jì),如果所述計(jì)算結(jié)果中為1的位的數(shù)量大于為0的位的數(shù)量,則確定所述線程對(duì)應(yīng)的判定結(jié)果為正,否則所述線程對(duì)應(yīng)的判定結(jié)果為負(fù);

將各個(gè)線程的所述判定結(jié)果整合成一個(gè)整數(shù),得到相應(yīng)的線程塊的輸出結(jié)果。

示例性地,所述兩級(jí)分塊策略包括:高層分塊策略和低層分塊策略,

所述基于兩級(jí)分塊策略,確定所述至少一個(gè)線程塊中每個(gè)線程塊的計(jì)算區(qū)域范圍,并確定每個(gè)線程塊所包括的線程的計(jì)算區(qū)域范圍,包括:

基于所述高層分塊策略,確定所述每個(gè)線程塊的計(jì)算區(qū)域范圍,并進(jìn)一步根據(jù)所述低層分塊策略,確定所述每個(gè)線程塊所包括的線程的計(jì)算區(qū)域范圍。

示例性地,所述高層分塊策略依賴于所述GPU的共享內(nèi)存的總量限制,所述低層分塊策略依賴于所述GPU的寄存器的數(shù)量限制以及最大化指令級(jí)別的并行。

示例性地,在所述得到計(jì)算結(jié)果之后,還包括:

將所述輸出結(jié)果存儲(chǔ)在物理存儲(chǔ)空間中,其中,所述輸出結(jié)果的物理數(shù)據(jù)布局為:所述輸出結(jié)果在通道數(shù)維度分為多組,每組包括連續(xù)的b位,同一組中的位在所述物理存儲(chǔ)空間上是連續(xù)的,相鄰的組在所述物理存儲(chǔ)空間上是不相鄰的;其中b與所述GPU的顯存位寬一致。

示例性地,還包括:在所述每個(gè)線程塊執(zhí)行計(jì)算過程時(shí),將輸入數(shù)據(jù)載入共享內(nèi)存中。

根據(jù)本發(fā)明另一方面,提供了一種基于GPU的計(jì)算二值神經(jīng)網(wǎng)絡(luò)卷積操作的裝置,包括:

獲取模塊,用于獲取根據(jù)二值神經(jīng)網(wǎng)絡(luò)執(zhí)行卷積操作的計(jì)算請(qǐng)求;

開啟模塊,用于根據(jù)所述獲取模塊獲取的所述計(jì)算請(qǐng)求,開啟GPU上的至少一個(gè)線程塊,其中,每個(gè)線程塊包括多個(gè)線程;

確定模塊,用于基于兩級(jí)分塊策略,確定所述至少一個(gè)線程塊中每個(gè)線程塊的計(jì)算區(qū)域范圍,并確定每個(gè)線程塊所包括的線程的計(jì)算區(qū)域范圍;

計(jì)算模塊,用于所述至少一個(gè)線程塊中的每個(gè)線程塊內(nèi)的各個(gè)線程執(zhí)行計(jì)算過程,得到計(jì)算結(jié)果;

統(tǒng)計(jì)模塊,用于根據(jù)每個(gè)線程塊內(nèi)的各個(gè)線程得到的所述計(jì)算結(jié)果,確定相應(yīng)的線程塊的輸出結(jié)果。

該裝置能夠用于實(shí)現(xiàn)前述第一方面所述的基于GPU的計(jì)算二值神經(jīng)網(wǎng)絡(luò)卷積的方法。

根據(jù)本發(fā)明另一方面,提供了一種計(jì)算機(jī)芯片,該計(jì)算機(jī)芯片包括GPU,當(dāng)該GPU執(zhí)行代碼時(shí),能夠?qū)崿F(xiàn)前述第一方面所述的基于GPU的計(jì)算二值神經(jīng)網(wǎng)絡(luò)卷積的方法。

本發(fā)明實(shí)施例中,設(shè)計(jì)了基于GPU線程塊的兩級(jí)分塊策略,充分利用了GPU的訪存特性,從而能夠在GPU設(shè)備上實(shí)現(xiàn)二值神經(jīng)網(wǎng)絡(luò)的卷積計(jì)算,并且計(jì)算速度得到了提升,內(nèi)存消耗得到了減少。

附圖說明

通過結(jié)合附圖對(duì)本發(fā)明實(shí)施例進(jìn)行更詳細(xì)的描述,本發(fā)明的上述以及其它目的、特征和優(yōu)勢(shì)將變得更加明顯。附圖用來提供對(duì)本發(fā)明實(shí)施例的進(jìn)一步理解,并且構(gòu)成說明書的一部分,與本發(fā)明實(shí)施例一起用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的限制。在附圖中,相同的參考標(biāo)號(hào)通常代表相同部件或步驟。

圖1是包括GPU的電子設(shè)備的一個(gè)示意性框圖;

圖2是本發(fā)明實(shí)施例的基于GPU的計(jì)算二值神經(jīng)網(wǎng)絡(luò)卷積的方法的一個(gè)示意性流程圖;

圖3是本發(fā)明實(shí)施例的線程塊的輸出區(qū)域范圍的一個(gè)示意圖;

圖4是本發(fā)明實(shí)施例的一種基于GPU的計(jì)算二值神經(jīng)網(wǎng)絡(luò)卷積的裝置的一個(gè)示意性框圖;

圖5是本發(fā)明實(shí)施例的一種基于GPU的計(jì)算二值神經(jīng)網(wǎng)絡(luò)卷積的裝置的另一個(gè)示意性框圖。

具體實(shí)施方式

為了使得本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更為明顯,下面將參照附圖詳細(xì)描述根據(jù)本發(fā)明的示例實(shí)施例。顯然,所描述的實(shí)施例僅僅是本發(fā)明的一部分實(shí)施例,而不是本發(fā)明的全部實(shí)施例,應(yīng)理解,本發(fā)明不受這里描述的示例實(shí)施例的限制?;诒景l(fā)明中描述的本發(fā)明實(shí)施例,本領(lǐng)域技術(shù)人員在沒有付出創(chuàng)造性勞動(dòng)的情況下所得到的所有其它實(shí)施例都應(yīng)落入本發(fā)明的保護(hù)范圍之內(nèi)。

隨著顯卡的發(fā)展,GPU越來越強(qiáng)大,而且GPU為顯示圖像做了優(yōu)化。在計(jì)算上已經(jīng)超越了通用的中央處理單元(Central Processing Unit,簡(jiǎn)稱CPU)。統(tǒng)一計(jì)算設(shè)備架構(gòu)(Compute Unified Device Architecture,簡(jiǎn)稱CUDA)是一種由NVIDIA推出的通用并行計(jì)算架構(gòu),該架構(gòu)使GPU能夠解決復(fù)雜的計(jì)算問題,從而在應(yīng)用程序中充分利用CPU和GPU各自的優(yōu)點(diǎn)。

本發(fā)明的實(shí)施例提出了一種基于GPU的計(jì)算二值神經(jīng)網(wǎng)絡(luò)卷積的方法,其中,GPU可以包括在電子設(shè)備中,如圖1所示為包括GPU的電子設(shè)備的一個(gè)示意性框圖。

圖1所示的電子設(shè)備10包括一個(gè)或多個(gè)處理器102、一個(gè)或多個(gè)存儲(chǔ)裝置104、輸入裝置106、輸出裝置108、圖像傳感器110以及一個(gè)或多個(gè)非圖像傳感器114,這些組件通過總線系統(tǒng)112和/或其它形式互連。應(yīng)當(dāng)注意,圖1所示的電子設(shè)備10的組件和結(jié)構(gòu)只是示例性的,而非限制性的,根據(jù)需要,所述電子設(shè)備也可以具有其他組件和結(jié)構(gòu)。

所述處理器102可以包括CPU 1021和GPU 1022或者具有數(shù)據(jù)處理能力和/或指令執(zhí)行能力的其它形式的處理單元,并且可以控制所述電子設(shè)備10中的其它組件以執(zhí)行期望的功能。

所述存儲(chǔ)裝置104可以包括一個(gè)或多個(gè)計(jì)算機(jī)程序產(chǎn)品,所述計(jì)算機(jī)程序產(chǎn)品可以包括各種形式的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),例如易失性存儲(chǔ)器1041和/或非易失性存儲(chǔ)器1042。所述易失性存儲(chǔ)器1041例如可以包括隨機(jī)存取存儲(chǔ)器(Random Access Memory,簡(jiǎn)稱RAM)和/或高速緩沖存儲(chǔ)器(cache)等。所述非易失性存儲(chǔ)器1042例如可以包括只讀存儲(chǔ)器(Read-Only Memory,簡(jiǎn)稱ROM)、硬盤、閃存等。在所述計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)上可以存儲(chǔ)一個(gè)或多個(gè)計(jì)算機(jī)程序指令,處理器102可以運(yùn)行所述程序指令,以實(shí)現(xiàn)各種期望的功能。在所述計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中還可以存儲(chǔ)各種應(yīng)用程序和各種數(shù)據(jù),例如所述應(yīng)用程序使用和/或產(chǎn)生的各種數(shù)據(jù)等。

所述輸入裝置106可以是用戶用來輸入指令的裝置,并且可以包括鍵盤、鼠標(biāo)、麥克風(fēng)和觸摸屏等中的一個(gè)或多個(gè)。

所述輸出裝置108可以向外部(例如用戶)輸出各種信息(例如圖像或聲音),并且可以包括顯示器、揚(yáng)聲器等中的一個(gè)或多個(gè)。

所述圖像傳感器110可以拍攝用戶期望的圖像(例如照片、視頻等),并且將所拍攝的圖像存儲(chǔ)在所述存儲(chǔ)裝置104中以供其它組件使用。

示例性地,該電子設(shè)備10可以被實(shí)現(xiàn)為諸如智能手機(jī)、平板電腦、門禁系統(tǒng)的圖像采集端等。

圖2是本發(fā)明實(shí)施例的基于GPU的計(jì)算二值神經(jīng)網(wǎng)絡(luò)卷積的方法的一個(gè)示意性流程圖。圖2所示的方法包括:

S101,獲取根據(jù)二值神經(jīng)網(wǎng)絡(luò)執(zhí)行卷積操作的計(jì)算請(qǐng)求。

具體地,可以獲取宿主端(host)發(fā)起的GPU端的計(jì)算請(qǐng)求,也就是說,S101包括從宿主端獲取該計(jì)算請(qǐng)求。

可選地,該計(jì)算請(qǐng)求可以包括:針對(duì)輸入數(shù)據(jù),根據(jù)預(yù)定的二值神經(jīng)網(wǎng)絡(luò)執(zhí)行卷積操作。

S102,根據(jù)所述計(jì)算請(qǐng)求開啟GPU上的至少一個(gè)線程塊,其中,每個(gè)線程塊包括多個(gè)線程。

具體地,可以基于S101所獲取的計(jì)算請(qǐng)求,開啟GPU設(shè)備上的至少一個(gè)(例如一個(gè)、兩個(gè)或其他合適的數(shù)量)線程塊(Thread Block),并且,每個(gè)線程塊中又會(huì)開啟多個(gè)線程(thread)。例如,S102中可以根據(jù)計(jì)算請(qǐng)求開啟GPU上的多個(gè)線程塊,這樣,多個(gè)線程塊之間可以并行地進(jìn)行處理;并且多個(gè)線程可以共享全局變量,共享內(nèi)存,以合作完成一個(gè)任務(wù);從而提高了處理的速率。

S103,基于兩級(jí)分塊策略,確定所述至少一個(gè)線程塊中每個(gè)線程塊的計(jì)算區(qū)域范圍,并確定每個(gè)線程塊所包括的線程的計(jì)算區(qū)域范圍。

可選地,兩級(jí)分塊策略可以包括:高層分塊策略和低層分塊策略。其中,高層分塊策略用于確定線程塊的計(jì)算區(qū)域范圍,低層分塊策略用于確定線程塊所包括的線程的計(jì)算區(qū)域范圍。其中,計(jì)算區(qū)域范圍是指計(jì)算涉及的輸入數(shù)據(jù)的范圍。

作為一例,所述高層分塊策略依賴于所述GPU的共享內(nèi)存的總量限制,所述低層分塊策略依賴于所述GPU的寄存器的數(shù)量限制以及最大化指令級(jí)別的并行(Instruction Level Parallelism)。

相應(yīng)地,S103可以包括:基于所述高層分塊策略,確定所述每個(gè)線程塊的計(jì)算區(qū)域范圍,并進(jìn)一步根據(jù)所述低層分塊策略,確定所述每個(gè)線程塊所包括的線程的計(jì)算區(qū)域范圍。

一般地,GPU的線程塊有三維坐標(biāo),假設(shè)為(a×b×c),那么這三維坐標(biāo)將分別映射至輸出圖像的通道數(shù)(channel)、輸出圖像的高度(height)、輸出圖像的寬度(width)上。其中的a一般為32的倍數(shù),例如,a=32。

本發(fā)明實(shí)施例進(jìn)行兩級(jí)分塊設(shè)定:高層分塊是因?yàn)楣蚕韮?nèi)存的總量限制,低層分塊是因?yàn)榧拇嫫鲾?shù)量限制以及最大化指令級(jí)別的并行。

以b=c=4為例,GPU的每個(gè)線程將計(jì)算(4×4)個(gè)輸出答案。如圖3所示,表示一個(gè)線程塊計(jì)算的輸出區(qū)域范圍。其中每個(gè)小方塊表示一個(gè)輸出點(diǎn),整個(gè)16×16的網(wǎng)格表示一個(gè)線程塊計(jì)算的輸出區(qū)域范圍,灰度相同的連續(xù)區(qū)域表示單個(gè)線程計(jì)算的結(jié)果區(qū)域范圍??梢钥闯觯瑘D3中的16×16的網(wǎng)格被分割為16個(gè)4×4的區(qū)域,每個(gè)區(qū)域分配給一個(gè)線程,且單個(gè)區(qū)域(即單個(gè)線程)內(nèi)部負(fù)責(zé)計(jì)算4×4個(gè)結(jié)果。

S104,所述至少一個(gè)線程塊中的每個(gè)線程塊內(nèi)的各個(gè)線程執(zhí)行計(jì)算過程,得到計(jì)算結(jié)果。

可選地,在S104中,使用異或操作模擬XNOR操作的行為對(duì)輸入數(shù)據(jù)進(jìn)行計(jì)算,并使用popcount指令計(jì)算異或操作得到的結(jié)果中為1的位的數(shù)量,作為所述計(jì)算結(jié)果。

其中,popcount(population count)指令可以稱為POPCNT指令,或者也可以稱為sideways sum,該指令可以用于計(jì)算一個(gè)數(shù)的二進(jìn)制表示有多少位是1。

示例性地,被執(zhí)行卷積操作的輸入數(shù)據(jù)的物理數(shù)據(jù)布局可以為:輸入數(shù)據(jù)在通道數(shù)維度分為多組,每組包括連續(xù)的b位,同一組中的位在物理存儲(chǔ)空間上是連續(xù)的,相鄰的組在物理存儲(chǔ)空間上是不相鄰的。其中,b與所述GPU的顯存位寬一致。

本發(fā)明實(shí)施例中,在每個(gè)線程塊執(zhí)行計(jì)算過程時(shí),可以將輸入數(shù)據(jù)載入共享內(nèi)存中。具體地,每個(gè)線程塊內(nèi)部將計(jì)算該線程塊結(jié)果所需的輸入數(shù)據(jù)載入共享內(nèi)存(Shared Memory)中,以加速被多次訪問的數(shù)據(jù)。將輸入數(shù)據(jù)載入共享內(nèi)存可以增加內(nèi)存的使用率,一次加載圖片,產(chǎn)生多次的數(shù)據(jù),而不需要多次訪問圖片,從而能夠減少額外訪問的時(shí)間,加快處理速度。

S105,根據(jù)每個(gè)線程塊內(nèi)的各個(gè)線程得到的所述計(jì)算結(jié)果,確定相應(yīng)的線程塊的輸出結(jié)果。

可選地,可以利用投票函數(shù)將線程塊內(nèi)部的計(jì)算結(jié)果統(tǒng)計(jì)起來,并根據(jù)統(tǒng)計(jì)結(jié)果的正負(fù)決定最終結(jié)果的正負(fù)。具體可以包括:首先,利用投票函數(shù)對(duì)每個(gè)線程塊內(nèi)的各個(gè)線程得到的所述計(jì)算結(jié)果進(jìn)行統(tǒng)計(jì),如果所述計(jì)算結(jié)果中為1的位的數(shù)量大于為0的位的數(shù)量,則確定所述線程對(duì)應(yīng)的判定結(jié)果為正,否則所述線程對(duì)應(yīng)的判定結(jié)果為負(fù);然后,將各個(gè)線程的所述判定結(jié)果整合成一個(gè)整數(shù),得到相應(yīng)的線程塊的輸出結(jié)果。也就是說,可以利用投票函數(shù)進(jìn)行跨線程通訊,以得到相應(yīng)線程塊的最終計(jì)算結(jié)果(輸出結(jié)果)。當(dāng)然,還可以采用其他合適的方式進(jìn)行跨線程通訊從而得到相應(yīng)線程塊的輸出結(jié)果,此處并不進(jìn)行限定。

在本實(shí)施例中,每個(gè)線程塊負(fù)責(zé)計(jì)算一部分連續(xù)輸出結(jié)果,輸入輸出均以無符號(hào)整數(shù)的形式存儲(chǔ)。這里無符號(hào)整數(shù)的位數(shù)以GPU設(shè)備的天然寄存器寬度為準(zhǔn),一般為32或64。

另外,本發(fā)明實(shí)施例中,還可以包括:將輸入輸出存儲(chǔ)在物理存儲(chǔ)空間中。其中,物理存儲(chǔ)空間中的0表示邏輯上的-1,物理存儲(chǔ)空間中的1表示邏輯上的1。

在對(duì)輸入輸出進(jìn)行存儲(chǔ)時(shí),可以采用N(C/b)HWb的存儲(chǔ)格式。其中,N表示批處理規(guī)模,C(channel)表示通道數(shù),H(height)表示圖像高度,W(width)表示圖像寬度,b表示存儲(chǔ)使用的無符號(hào)整數(shù)的寬度。N(C/b)HWb的存儲(chǔ)格式表示待存儲(chǔ)數(shù)據(jù)在在通道數(shù)(C)維度分為多組,每組包括連續(xù)的b位,同一組中的位在物理存儲(chǔ)空間上是連續(xù)的;相鄰的組在物理存儲(chǔ)空間上是不相鄰的。舉例來說,待存儲(chǔ)數(shù)據(jù)在通道數(shù)維度的第0~b-1位分別映射到物理存儲(chǔ)空間的第0~b-1位,待存儲(chǔ)數(shù)據(jù)在通道數(shù)維度的第b~2b-1位分別映射到物理存儲(chǔ)空間的第2b~3b-1位??衫斫?,待存儲(chǔ)數(shù)據(jù)在通道數(shù)維度的第0~b-1位是位于同一組中的位,它們映射到物理存儲(chǔ)空間上連續(xù)的第0~b-1位。待存儲(chǔ)數(shù)據(jù)在通道數(shù)維度的第b~2b-1位位于同一組中的位,它們映射到物理存儲(chǔ)空間上連續(xù)的第2b~3b-1位。待存儲(chǔ)數(shù)據(jù)在通道數(shù)維度的第0~b-1位和第b~2b-1位是兩個(gè)相鄰的組,是連續(xù)的,但是它們映射到物理存儲(chǔ)空間上的位置是不相鄰的,即物理存儲(chǔ)空間的第0~b-1位與物理存儲(chǔ)空間的第2b~3b-1位不相鄰,是非連續(xù)的。

這里的待存儲(chǔ)數(shù)據(jù)可以為輸入數(shù)據(jù)和/或輸出數(shù)據(jù),輸出數(shù)據(jù)可以為上述的輸出結(jié)果。以待存儲(chǔ)數(shù)據(jù)為輸出結(jié)果為例,輸出結(jié)果的物理數(shù)據(jù)布局可以為:輸出結(jié)果在通道數(shù)維度分為多組,每組包括連續(xù)的b位,同一組中的位在物理存儲(chǔ)空間上是連續(xù)的,相鄰的組在物理存儲(chǔ)空間上是不相鄰的;其中b與所述GPU的顯存位寬一致。

傳統(tǒng)非二值神經(jīng)網(wǎng)絡(luò)會(huì)使用NCHW格式,本發(fā)明實(shí)施例中,所使用的是N(C/b)HWb的存儲(chǔ)格式,其中,由于二值神經(jīng)網(wǎng)絡(luò)需要將多值壓縮到單個(gè)無符號(hào)整數(shù)中存儲(chǔ),而壓縮的維度會(huì)發(fā)生在C維度,因此難以直接利用NCHW格式。若假設(shè)存儲(chǔ)使用的無符號(hào)整數(shù)的寬度為b,則在C維度每隔b位分隔一下,便可以形成N(C/b)HWb的存儲(chǔ)格式,因此,本發(fā)明實(shí)施例使用N(C/b)HWb這一種新的存儲(chǔ)格式,更加適用于二值神經(jīng)網(wǎng)絡(luò)的卷積計(jì)算。

可見,本發(fā)明實(shí)施例中的數(shù)據(jù)存儲(chǔ)格式能夠充分利用GPU的訪存特性。

本發(fā)明在GPU設(shè)備上實(shí)現(xiàn)了二值神經(jīng)網(wǎng)絡(luò)的卷積計(jì)算,由于設(shè)計(jì)了基于GPU線程塊的兩級(jí)分塊策略,充分利用了GPU的訪存特性,因而能夠提高在GPU設(shè)備上實(shí)現(xiàn)二值神經(jīng)網(wǎng)絡(luò)卷積計(jì)算的計(jì)算速度,降低了內(nèi)存消耗。此外,由于設(shè)計(jì)了數(shù)據(jù)存儲(chǔ)格式以充分利用GPU的訪存特性,更加適用于二值神經(jīng)網(wǎng)絡(luò)的卷積計(jì)算。由于利用了GPU的共享內(nèi)存(shared memory)進(jìn)行加速,可以進(jìn)一步提高二值神經(jīng)網(wǎng)絡(luò)卷積計(jì)算速度。由于利用投票函數(shù)進(jìn)行跨線程通訊,可以更準(zhǔn)確的得到最終計(jì)算結(jié)果。相比傳統(tǒng)的非二值神經(jīng)網(wǎng)絡(luò),本發(fā)明實(shí)施例中的二值神經(jīng)網(wǎng)絡(luò)有10到20倍的計(jì)算速度提升,內(nèi)存消耗減少到了1/32。

圖4是本發(fā)明實(shí)施例的一種基于GPU的計(jì)算二值神經(jīng)網(wǎng)絡(luò)卷積的裝置的一個(gè)示意性框圖。圖4所示的裝置40包括:獲取模塊401、開啟模塊402、確定模塊403、計(jì)算模塊404和統(tǒng)計(jì)模塊405。

獲取模塊401,用于獲取根據(jù)二值神經(jīng)網(wǎng)絡(luò)執(zhí)行卷積操作的計(jì)算請(qǐng)求;開啟模塊402,用于根據(jù)所述獲取模塊401獲取的所述計(jì)算請(qǐng)求,開啟GPU上的至少一個(gè)線程塊,其中,每個(gè)線程塊包括多個(gè)線程;確定模塊403,用于基于兩級(jí)分塊策略,確定所述至少一個(gè)線程塊中每個(gè)線程塊的計(jì)算區(qū)域范圍,并確定每個(gè)線程塊所包括的線程的計(jì)算區(qū)域范圍;計(jì)算模塊404,用于所述至少一個(gè)線程塊中的每個(gè)線程塊內(nèi)各個(gè)線程塊執(zhí)行計(jì)算過程,得到計(jì)算結(jié)果;統(tǒng)計(jì)模塊405,用于根據(jù)每個(gè)線程塊內(nèi)的各個(gè)線程塊得到的所述計(jì)算結(jié)果,確定相應(yīng)的線程塊的輸出結(jié)果。

可選地,獲取模塊401具體用于從宿主端獲取該計(jì)算請(qǐng)求。

可選地,被執(zhí)行卷積操作的輸入數(shù)據(jù)的物理數(shù)據(jù)布局為:所述輸入數(shù)據(jù)在通道數(shù)維度分為多組,每組包括連續(xù)的b位,同一組中的位在物理存儲(chǔ)空間上是連續(xù)的,相鄰的組在所述物理存儲(chǔ)空間上是不相鄰的;其中b與所述GPU的顯存位寬一致。

可選地,所述統(tǒng)計(jì)模塊405,具體用于:利用投票函數(shù)對(duì)每個(gè)線程塊內(nèi)的各個(gè)線程得到的所述計(jì)算結(jié)果進(jìn)行統(tǒng)計(jì),如果所述計(jì)算結(jié)果中為1的位的數(shù)量大于為0的位的數(shù)量,則確定所述線程對(duì)應(yīng)的判定結(jié)果為正,否則所述線程對(duì)應(yīng)的判定結(jié)果為負(fù);將各個(gè)線程的所述判定結(jié)果整合成一個(gè)整數(shù),得到相應(yīng)的線程塊的輸出結(jié)果。

可選地,所述兩級(jí)分塊策略包括:高層分塊策略和低層分塊策略。所述高層分塊策略依賴于所述GPU的共享內(nèi)存的總量限制,所述低層分塊策略依賴于所述GPU的寄存器的數(shù)量限制以及最大化指令級(jí)別的并行。相應(yīng)地,確定模塊403,具體用于:基于所述高層分塊策略,確定所述每個(gè)線程塊的計(jì)算區(qū)域范圍,并進(jìn)一步根據(jù)所述低層分塊策略,確定所述每個(gè)線程塊所包括的線程的計(jì)算區(qū)域范圍。

可選地,計(jì)算模塊404具體用于:使用異或操作模擬XNOR操作的行為對(duì)輸入數(shù)據(jù)進(jìn)行計(jì)算,并使用popcount指令計(jì)算異或操作得到的結(jié)果中為1的位的數(shù)量,作為所述計(jì)算結(jié)果。

另外,如圖5所示,該裝置40還可以進(jìn)一步包括存儲(chǔ)模塊406,用于將輸入和輸出以無符號(hào)整數(shù)的形式存儲(chǔ)在物理存儲(chǔ)空間中,且存儲(chǔ)格式為N(C/b)HWb的存儲(chǔ)格式。

例如,存儲(chǔ)模塊406,用于將所述輸出結(jié)果存儲(chǔ)在物理存儲(chǔ)空間中,其中,所述輸出結(jié)果在通道數(shù)維度分為多組,每組包括連續(xù)的b位,同一組中的位在所述物理存儲(chǔ)空間上是連續(xù)的,相鄰的組在所述物理存儲(chǔ)空間上是不相鄰的;其中b與所述GPU的顯存位寬一致。

此外,如圖5所示,該裝置40還可以進(jìn)一步包括共享模塊407,用于在所述每個(gè)線程塊執(zhí)行計(jì)算過程時(shí),將輸入數(shù)據(jù)載入共享內(nèi)存中。這樣,能夠加速多次被訪問的數(shù)據(jù)。

可選地,本發(fā)明實(shí)施例中的裝置40可以為GPU或包括GPU的任何可行的裝置。進(jìn)一步地,該裝置可以為安裝有GPU的服務(wù)器或服務(wù)器集群。

本發(fā)明實(shí)施例還提供了一種電子設(shè)備,該電子設(shè)備包括前述圖4或圖5所述的裝置。

盡管這里已經(jīng)參考附圖描述了示例實(shí)施例,應(yīng)理解上述示例實(shí)施例僅僅是示例性的,并且不意圖將本發(fā)明的范圍限制于此。本領(lǐng)域普通技術(shù)人員可以在其中進(jìn)行各種改變和修改,而不偏離本發(fā)明的范圍和精神。所有這些改變和修改意在被包括在所附權(quán)利要求所要求的本發(fā)明的范圍之內(nèi)。

本領(lǐng)域普通技術(shù)人員可以意識(shí)到,結(jié)合本文中所公開的實(shí)施例描述的各示例的單元及算法步驟,能夠以電子硬件、或者計(jì)算機(jī)軟件和電子硬件的結(jié)合來實(shí)現(xiàn)。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計(jì)約束條件。專業(yè)技術(shù)人員可以對(duì)每個(gè)特定的應(yīng)用來使用不同方法來實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。

在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的設(shè)備和方法,可以通過其它的方式實(shí)現(xiàn)。例如,以上所描述的設(shè)備實(shí)施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)設(shè)備,或一些特征可以忽略,或不執(zhí)行。

在此處所提供的說明書中,說明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實(shí)施例可以在沒有這些具體細(xì)節(jié)的情況下實(shí)踐。在一些實(shí)例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對(duì)本說明書的理解。

類似地,應(yīng)當(dāng)理解,為了精簡(jiǎn)本發(fā)明并幫助理解各個(gè)發(fā)明方面中的一個(gè)或多個(gè),在對(duì)本發(fā)明的示例性實(shí)施例的描述中,本發(fā)明的各個(gè)特征有時(shí)被一起分組到單個(gè)實(shí)施例、圖、或者對(duì)其的描述中。然而,并不應(yīng)將該本發(fā)明的的方法解釋成反映如下意圖:即所要求保護(hù)的本發(fā)明要求比在每個(gè)權(quán)利要求中所明確記載的特征更多的特征。更確切地說,如相應(yīng)的權(quán)利要求書所反映的那樣,其發(fā)明點(diǎn)在于可以用少于某個(gè)公開的單個(gè)實(shí)施例的所有特征的特征來解決相應(yīng)的技術(shù)問題。因此,遵循具體實(shí)施方式的權(quán)利要求書由此明確地并入該具體實(shí)施方式,其中每個(gè)權(quán)利要求本身都作為本發(fā)明的單獨(dú)實(shí)施例。

本領(lǐng)域的技術(shù)人員可以理解,除了特征之間相互排斥之外,可以采用任何組合對(duì)本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進(jìn)行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個(gè)特征可以由提供相同、等同或相似目的的替代特征來代替。

此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實(shí)施例包括其它實(shí)施例中所包括的某些特征而不是其它特征,但是不同實(shí)施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實(shí)施例。例如,在權(quán)利要求書中,所要求保護(hù)的實(shí)施例的任意之一都可以以任意的組合方式來使用。

本發(fā)明的各個(gè)部件實(shí)施例可以以硬件實(shí)現(xiàn),或者以在一個(gè)或者多個(gè)處理器上運(yùn)行的軟件模塊實(shí)現(xiàn),或者以它們的組合實(shí)現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實(shí)踐中使用微處理器或者數(shù)字信號(hào)處理器(DSP)來實(shí)現(xiàn)根據(jù)本發(fā)明實(shí)施例的物品分析設(shè)備中的一些模塊的一些或者全部功能。本發(fā)明還可以實(shí)現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的裝置程序(例如,計(jì)算機(jī)程序和計(jì)算機(jī)程序產(chǎn)品)。這樣的實(shí)現(xiàn)本發(fā)明的程序可以存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)上,或者可以具有一個(gè)或者多個(gè)信號(hào)的形式。這樣的信號(hào)可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號(hào)上提供,或者以任何其他形式提供。

應(yīng)該注意的是上述實(shí)施例對(duì)本發(fā)明進(jìn)行說明而不是對(duì)本發(fā)明進(jìn)行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計(jì)出替換實(shí)施例。在權(quán)利要求中,不應(yīng)將位于括號(hào)之間的任何參考符號(hào)構(gòu)造成對(duì)權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個(gè)”不排除存在多個(gè)這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計(jì)算機(jī)來實(shí)現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個(gè)可以是通過同一個(gè)硬件項(xiàng)來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。

以上所述,僅為本發(fā)明的具體實(shí)施方式或?qū)唧w實(shí)施方式的說明,本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。本發(fā)明的保護(hù)范圍應(yīng)以權(quán)利要求的保護(hù)范圍為準(zhǔn)。

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