• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      一種基于GPU的高性能稀疏卷積神經(jīng)網(wǎng)絡(luò)優(yōu)化*

      2018-02-26 10:12:52邢座程陳頊顥
      計算機(jī)工程與科學(xué) 2018年12期
      關(guān)鍵詞:共享內(nèi)存指針線程

      方 程,邢座程,陳頊顥,張 洋

      (國防科技大學(xué)計算機(jī)學(xué)院,湖南長沙410073)

      1 引言

      CNN(Convolutional Neural Network)目前作為深度學(xué)習(xí)領(lǐng)域中的一個重要模型,在計算機(jī)圖像[1]、語音識別[2]、游戲比賽[3]以及機(jī)器人[4]等方面都扮演著越來越重要的角色。但是,隨著CNN的發(fā)展,CNN網(wǎng)絡(luò)規(guī)模和網(wǎng)絡(luò)層數(shù)不斷增加,參數(shù)規(guī)模也變得越來越龐大。1990年,早期的卷積神經(jīng)網(wǎng)絡(luò)模型用于手寫識別使用的參數(shù)數(shù)量不到100M[5]。20 年后,AlexNet[1]和 VGG[6]分別使用了61M和138M個參數(shù)來對1 000個圖像進(jìn)行分類。顯而易見,這對CNN實(shí)現(xiàn)過程中的硬件資源、網(wǎng)絡(luò)結(jié)構(gòu)、算法優(yōu)化等各方面都會產(chǎn)生諸多的挑戰(zhàn)。CNN 加速[7]、CNN 參數(shù)的量化分析與研究[8]、參數(shù)規(guī)模的縮小與權(quán)重刪減[9-12]都將成為熱門的研究方向。

      為了應(yīng)對CNN對計算需求量的不斷增加,采用高性能的 GPU 已經(jīng)成為加速 CNN[13,14]的一項(xiàng)重要措施。此外還有研究給出了壓縮CNN的解決方案。壓縮CNN方法主要分為兩類:一類是基于分解[15,16],另一類是基于刪減[17,18]?;趧h減的方法是在保證網(wǎng)絡(luò)訓(xùn)練和測試結(jié)果精確度[8]沒有損失的前提下減少參數(shù)數(shù)量。權(quán)重刪減下的深度壓縮[9,10]方式能夠使 AlexNet和 VGG-16 的參數(shù)規(guī)模分別縮小9倍和13倍,在CPU和GPU的架構(gòu)下實(shí)現(xiàn)了3~4倍的加速。但是,權(quán)重刪減的性能提升遠(yuǎn)遠(yuǎn)落后于實(shí)際減少乘累加操作的性能提升,特別是在GPU的硬件設(shè)備上,這一類似的性能損失經(jīng)常發(fā)生。同時,有研究提出了全新的直接稀疏卷積算法[19],它在CPU的架構(gòu)下相比原有的稠密算法在AlexNet卷積層上實(shí)現(xiàn)了3.1×~7.3×的加速。對于訓(xùn)練好的CNN來說,卷積層的卷積運(yùn)算是測試過程運(yùn)行時間最主要的部分。所以,對卷積層的卷積運(yùn)算優(yōu)化成為解決該加速優(yōu)化問題中的關(guān)鍵路徑。

      由于權(quán)重刪減的方式犧牲了數(shù)據(jù)的規(guī)則性,SCNN(Sparse Convolutional Neural Network)內(nèi)部產(chǎn)生了大量的稀疏計算成分。稀疏數(shù)據(jù)處理與GPU體系結(jié)構(gòu)特性不匹配[20]。原有GPU架構(gòu)下對卷積核提供卷積數(shù)學(xué)運(yùn)算的cuBLAS和cuSPARSE并不能很好地應(yīng)對這種不匹配。同時,GPU和CPU在體系結(jié)構(gòu)上存在的差異使得很多針對CPU優(yōu)化的稀疏卷積算法并不能在GPU上適用。我們采用了一個高效的直接稀疏卷積算法,對其在GPU的平臺上進(jìn)行優(yōu)化,從而解決權(quán)重刪減產(chǎn)生稀疏數(shù)據(jù)所帶來的性能損失。

      本篇論文主要貢獻(xiàn)在以下幾點(diǎn):

      (1)針對卷積層關(guān)鍵優(yōu)化路徑上完成直接稀疏卷積算法[19]在GPU架構(gòu)上的并行化實(shí)現(xiàn),打破GPU上采用傳統(tǒng)稠密算法的局限性,給出了一種可行且高效的GPU加速SCNN方案。

      (2)采用最大限度的線程映射,充分利用GPU的硬件計算資源,防止產(chǎn)生稀疏結(jié)構(gòu)運(yùn)算對GPU計算資源的浪費(fèi)。

      (3)采用最優(yōu)的任務(wù)調(diào)度,合理安排每個單線程的任務(wù)工作,減少線程同步過程中某一部分線程等待時間,提高資源利用率。

      (4)充分利用直接稀疏卷積算法數(shù)據(jù)處理過程中的數(shù)據(jù)局部性,增加數(shù)據(jù)復(fù)用,對于同一block下的所有線程,采用共享內(nèi)存來減少數(shù)據(jù)訪存時間。

      最終我們在CAFFE(Convolutional Architecture for Fast Feature Embedding)架構(gòu)下所實(shí)現(xiàn)的稀疏卷積神經(jīng)網(wǎng)絡(luò),對同一訓(xùn)練好的 AlexNet、GoogleNet、ResNet,在 GPU GTX1060 上,與 CAFFE本身搭建的由cuBLAS和cuSPARSE所提供的數(shù)學(xué)庫支持的卷積層進(jìn)行測試對比。相比cuBLAS的實(shí)現(xiàn),我們在 AlexNet、GoogleNet、ResNet上性能提升分別達(dá)到1.07 × ~1.23 ×、1.17 × ~3.51 ×、1.32×~5.00×的加速比。相比cuSPARSE的實(shí)現(xiàn),在 AlexNet、GoogleNet、ResNet上性能提升分別達(dá)到1.31 × ~1.42 ×、1.09 × ~2.00 ×、1.07 × ~3.22×的加速比。

      2 背景

      這一節(jié)介紹實(shí)現(xiàn)卷積運(yùn)算的幾種方式,并說明了它們各自的局限性,從而闡述本文的研究意義和研究背景。

      2.1 降維方式

      目前很多CNN卷積層的卷積操作都是通過降維方式實(shí)現(xiàn)的[18]。圖1所示是一個簡單的用降維方式實(shí)現(xiàn)卷積的例子,圖中參數(shù)可參考表1。

      Table 1 Description of convolution parameters表1 卷積參數(shù)描述

      假設(shè)輸入特征矩陣的batchsize為1,其輸入通道數(shù)為C,輸入特征矩陣大小為H×W,預(yù)輸出通道數(shù)為M,每一個卷積核的實(shí)際大小為R×S(在實(shí)際應(yīng)用中,可以通過設(shè)置步長U來控制卷積核在輸入特征矩陣上的局部感知區(qū)域的位置,后文我們假設(shè)U默認(rèn)為1)。那么一共有M個卷積核,每個卷積核包含C個通道。降維方式通過將輸入特征矩陣和卷積核分別以行展開的方式生成新的特征矩陣Ilowering和卷積核矩陣Wlowering。那么,最終卷積的計算過程可以表示為:

      降維方式將卷積運(yùn)算轉(zhuǎn)換為矩陣乘法。在基礎(chǔ)線性代數(shù)子程序庫BLAS(Basic Linear Algebra Subprograms)中,GEMM(GEneralized Matrix Multiplication)的函數(shù)接口實(shí)現(xiàn)了兩個稠密矩陣的乘法運(yùn)算。在CAFFE的框架下,CNN卷積層中卷積運(yùn)算所采用的方式也是降維方式,具體是通過im2col函數(shù)和GEMM函數(shù)實(shí)現(xiàn)。此外,CAFFE還支持了CUDA版本下由cuBLAS所提供的GPU架構(gòu)下并行實(shí)現(xiàn)的降維方式。

      在降維方式展開生成新的特征矩陣Ilowering的過程中,卷積核所感知的局部區(qū)域重疊部分的元素都進(jìn)行了多次重復(fù)復(fù)制,增加了存儲開銷。特別是在SCNN中,這種大量的數(shù)據(jù)重復(fù)復(fù)制浪費(fèi)了大量的存儲資源。此外,GEMM是針對稠密矩陣實(shí)現(xiàn)的矩陣乘法,對于處理稀疏矩陣?yán)速M(fèi)了GPU大量的計算資源。所以,我們需要一個針對GPU實(shí)現(xiàn)的稀疏卷積運(yùn)算。

      2.2 直接稀疏卷積

      直接稀疏卷積(Direct Sparse Convolutions)作為一種全新的卷積方式在2017年的ICLR會議上被首次提出[19]。該算法在CPU的架構(gòu)下相比原有的算法在AlexNet卷積層上實(shí)現(xiàn)了3.1×~7.3×的加速。

      相比降維方式,直接稀疏卷積去除了輸入特征矩陣中的數(shù)據(jù)重復(fù)復(fù)制。該算法將卷積核矩陣的規(guī)模擴(kuò)展到輸入矩陣的相同大小。對于延展后的卷積核行展開生成向量Wm,其長度為C×H×W。由于有M個卷積核,對每一個卷積核進(jìn)行延展后得到了M×(C×H×W)的權(quán)重矩陣。對于該批次任務(wù)下的輸入矩陣以行展開的方式形成列向量I,其長度為C×H×W。那么,在計算卷積的過程中,對于不同感知區(qū)域的元素可以通過調(diào)整向量I的起始指針,使得卷積核映射到正確的局部區(qū)域。其具體算法如圖2所示。

      該批次任務(wù)下,直接稀疏卷積結(jié)果可以表示為:Om=Wm·Ivirtual。其中矩陣Ivirtual是由列向量I調(diào)整起始指針?biāo)玫降摹D敲?,我們可以進(jìn)一步簡化結(jié)果為:Om,y,x=Wm·Iy·W+x。所有輸出通道下的稀疏向量Wm構(gòu)成稀疏矩陣WSparse,采用行壓縮存儲CSR(Compressed Spares Row)格式,存儲如圖3所示。數(shù)組value記錄矩陣Wsparse中的非零元素。數(shù)組colidx記錄每個非零元素在矩陣Wsparse中的列指針。數(shù)組rowptr記錄矩陣Wsparse中每一行起始元素在value中的指針。

      直接稀疏卷積將卷積運(yùn)算抽象成稀疏向量Wm對稠密向量Iy·W+x的內(nèi)積。此外,由于 SCNN采用CSR或CSC(Compressed Sparse Column)的稀疏數(shù)據(jù)存儲格式,對于運(yùn)算過程中的延展實(shí)際上并沒有增加存儲開銷,只是調(diào)整了矩陣中非零元素的行列指針。相比降維方式,直接稀疏卷積更適合在GPU上實(shí)現(xiàn)SCNN。

      3 設(shè)計與實(shí)現(xiàn)

      本節(jié)介紹本文所提方法的具體實(shí)現(xiàn)和優(yōu)化。由于權(quán)重刪減后SCNN產(chǎn)生了大量稀疏數(shù)據(jù)結(jié)構(gòu),而傳統(tǒng)的降維方式并不能保證稀疏矩陣卷積的計算性能,本文采用全新的直接稀疏卷積來替代降維方式,彌補(bǔ)性能損失。除此以外,GPU的體系結(jié)構(gòu)特征需要在實(shí)現(xiàn)過程中對線程映射、任務(wù)分配以及內(nèi)存管理進(jìn)行更多的考慮和優(yōu)化。

      3.1 概述

      直接稀疏卷積的實(shí)現(xiàn)主要由兩部分組成:(1)數(shù)據(jù)預(yù)處理,主要完成對卷積核矩陣的延展,生成稀疏向量Wm和稠密向量I;(2)計算過程,主要完成所有的MAC操作,并準(zhǔn)確更新計算過程中的指針。

      第(1)部分如圖4所示。在這里,權(quán)重矩陣為M×(C×R×S)的稀疏矩陣,按照CSR格式存儲于物理內(nèi)存中。對于輸出通道m(xù)中的第j個非零元素(c,y,x)有:

      其中col=colidx[j]。那么,延展后的權(quán)重矩陣大小為M ×(C ×H ×W),同一個非零元素(c,y,x)的CSR格式存儲下的列指針更新為:colidx[j]=(c*H+y)*W+x。

      直接稀疏卷積的計算過程可以表示為:Om,y,x=Wm·Iy·W+x。其核心在于實(shí)現(xiàn)稀疏向量Wm與稠密向量Iy·W+x的內(nèi)積運(yùn)算。對于計算輸出矩陣中的點(diǎn)(m,y,x),需要完成的MAC操作數(shù)取決于稀疏向量Wm的非零元素數(shù)目。由于對同一輸出通道m(xù)中的所有點(diǎn),稀疏向量Wm是恒定不變的,所以計算這些輸出節(jié)點(diǎn)所需要的MAC操作數(shù)相等。在直接稀疏卷積算法中矩陣Ivirtual是由向量I生成,其中每一個列向量Iy·W+x的起始指針?biāo)赶虻脑貫镮[y·W+x]。根據(jù)這一特點(diǎn),我們僅將向量I的元素常駐內(nèi)存,而不是存儲整個稠密矩陣Ivirtual。

      考慮到實(shí)際的CNN模型中,所有卷積層經(jīng)過權(quán)重刪減后的稀疏度存在差異,我們通過下列方式來計算當(dāng)前卷積層的稀疏度:

      其中,Nnonzero為當(dāng)前卷積層的所有非零元素數(shù)目,M為當(dāng)前卷積層輸出通道數(shù),kernel_size為卷積核規(guī)模大小。

      對于不同稀疏度的卷積層,我們設(shè)置一個閾值。稀疏度大于該閾值的卷積層采用優(yōu)化后的直接稀疏卷積方式,小于該閾值的卷積層則仍采用原有的降維方式。對于稠密數(shù)據(jù)和稀疏數(shù)據(jù)的分別處理,使得對于任意稀疏度的卷積層都能夠?qū)崿F(xiàn)最佳的計算性能,可以最大限度提高整個網(wǎng)絡(luò)的運(yùn)行性能。由于在最終實(shí)驗(yàn)過程中采用了IntelSkimcaffe開源項(xiàng)目(https://github.com/IntelLabs/Skim-Caffe)中的稀疏CNN網(wǎng)絡(luò)結(jié)構(gòu),CNN中的卷積層的稀疏度集中在0和0.7~0.96這兩個區(qū)域,所以設(shè)置閾值僅僅是排除了稀疏度為0的稠密層。

      3.2 并行策略

      相比CPU,GPU擁有更多的處理核心,如何合理分配和充分利用這些處理核心是本文設(shè)計的關(guān)鍵。接下來我們將分別介紹直接稀疏卷積兩個過程的并行策略。

      對于過程一,即圖5中所示oc=m時所有非零元素的列指針更新。

      將整個權(quán)重矩陣進(jìn)行延展就是更新權(quán)重矩陣內(nèi)所有非零元素的列指針colidx。那么,我們設(shè)置線程Threadm完成稀疏向量Wm內(nèi)所有非零元素的列指針更新。

      對于過程二,每一個線程計算輸出特征矩陣中的一個點(diǎn)(m,y,x),如圖5所示。由于輸入特征矩陣Ivirtual中每一列向量是由稠密列向量I移動初始指針得到的,那么我們將稠密列向量I的所有數(shù)據(jù)常駐內(nèi)存。當(dāng)需要計算不同的輸出點(diǎn)(m,y,x)時,計算其對應(yīng)列向量 Iy·W+x相對向量 I的偏移量pos,其計算公式為:pos=y·W+x。通過對向量I的初始指針增加pos偏移量得到對應(yīng)向量Iy·W+x:*inputptr=input+pos。該過程避免了數(shù)據(jù)的重復(fù)復(fù)制,僅通過調(diào)整指針來完成當(dāng)前輸出通道的全部計算。由于Wsparse作為稀疏矩陣采用CSR的格式存儲在物理內(nèi)存中,第m個卷積核下所有非零元素對應(yīng)存儲在rowptr[m]行。該行元素在物理內(nèi)存中存儲非零元素的一維數(shù)組value中的起始位置為 row_strat(row_start=rowptr[m]),結(jié)束位置為row_end(row_end=rowptr[m+1])。那么,對于線程 Thread(z,y,x),需要完成下列計算:

      輸出點(diǎn)(m,y,x)與線程 Thread(z,y,x)一一對應(yīng)。

      通過分別對過程一和過程二實(shí)現(xiàn)并行化,我們在GPU的架構(gòu)下實(shí)現(xiàn)了直接稀疏卷積。在實(shí)際的測試中,這一實(shí)現(xiàn)的具體性能并沒有達(dá)到預(yù)期效果(這一點(diǎn)將在第4節(jié)具體說明)。所以,接下來增加了對數(shù)據(jù)局部性的考慮,對實(shí)現(xiàn)的并行策略進(jìn)行了進(jìn)一步優(yōu)化。

      3.3 局部性優(yōu)化

      由于輸入特征向量的數(shù)據(jù)復(fù)用,我們采用了Ivirtual的方式來減小帶寬需求。通過更改訪存指針來讀取向量I中的值。同樣地,為了增加Cache塊的命中率,希望優(yōu)先計算同一輸出通道的值。由于實(shí)際測試性能達(dá)不到預(yù)期效果,我們增加了共享內(nèi)存優(yōu)化的版本,其具體映射規(guī)則如圖6所示。

      對于輸出通道m(xù),需要E×F個線程來完成計算任務(wù)。但是在實(shí)際情況中,GPU所能設(shè)置的最大block_size小于E×F,所以對于同一個block內(nèi)的所有線程會在短時間內(nèi)經(jīng)常訪問向量Wm,直到該block內(nèi)的所有線程完成計算。此時內(nèi)存常駐的數(shù)據(jù)僅僅只有向量I和向量Wm。

      由于同一個block下的所有線程都要求對Wm進(jìn)行數(shù)據(jù)訪問,我們將Wm放入共享內(nèi)存中,以減少Wm的數(shù)據(jù)訪存時間。共享內(nèi)存對于同一block塊下的線程是共同可見的??紤]到GPU內(nèi)共享內(nèi)存大小的限制,將Wm分塊化,塊Tilei為特定長度的一維數(shù)組。將Tilei的長度設(shè)定為block下的線程總數(shù),并使Tilei包含的數(shù)據(jù)能夠常駐共享內(nèi)存。由于Wm采用CSR格式存儲,那么僅需將對應(yīng)數(shù)組value和數(shù)組colidx的值存入共享內(nèi)存。在計算輸出結(jié)果前,需要將Tilei對應(yīng)的value和colidx寫入共享內(nèi)存中的數(shù)組valueshared和數(shù)組colidxshared。由于 Tilei長度與線程數(shù)相等,那么對于線程Thread(z,y,x)需要完成的讀寫工作如下所示:

      每個線程只需要將Tilei塊內(nèi)一個元素的value和colidx數(shù)組值寫入共享內(nèi)存。其中,blockDim.y為GPU線程設(shè)置中block塊在y方向上的維度大小,Tilesize為設(shè)置的Tile塊的長度。

      為了防止讀后寫,為同一block下的所有線程增加同步操作。線程 Thread(z,y,x)將 Tilei數(shù)據(jù)寫入共享內(nèi)存后進(jìn)行等待,直到所有線程完成操作。當(dāng)block 塊內(nèi)所有線程完成同步后,線程 Thread(z,y,x)需要完成共享內(nèi)存內(nèi)向量Tilei與向量Iy·W+x的內(nèi)積運(yùn)算。其具體計算如下所示:

      每一次累加操作后同步線程,當(dāng)訪問共享內(nèi)存未命中時,替換下一個Tile塊到共享內(nèi)存。將每個塊替換下來的部分和保存在寄存器sum中,這樣當(dāng)下一個塊被換進(jìn)共享內(nèi)存時,線程能夠正常工作。當(dāng)輸出通道m(xù)所有Tile塊都被替換過后,將部分和sum輸出:output[(m·E+y)·F+x]=sum。輸出點(diǎn)(m,y,x)與線程 Thread(z,y,x)的映射關(guān)系與之前的一樣。

      通過增加共享內(nèi)存以及對數(shù)據(jù)局部性的考慮,實(shí)驗(yàn)結(jié)果最終達(dá)到了預(yù)期性能。相比未優(yōu)化的直接稀疏卷積,本文在GPU上實(shí)現(xiàn)了更為高效的性能。

      4 性能評估

      4.1 總體性能

      實(shí)驗(yàn)采用的GPU型號為GTX 1060 3 GB。設(shè)置稀疏度閾值為0.6,batchsize為128。訓(xùn)練好的AlexNet模型包含5層卷積層,每層的稀疏度根據(jù)公式計算的結(jié)果如表2所示。

      Table 2 Parameters of AlexNet convolution layers表2 AlexNet卷積層參數(shù)

      對稀疏度大于0.6 的 CONV2、CONV3、CONV4和CONV5四個卷積層采用直接稀疏卷積的方式。設(shè)置一個block塊下的總線程數(shù)為1 024,那么每次替換進(jìn)共享內(nèi)存的Tile塊長度為1 024。實(shí)驗(yàn)結(jié)果記錄了50 000次迭代中每一次迭代完成Forward過程所需的時間,每100次迭代的Forward執(zhí)行時間取平均值,具體結(jié)果如圖7所示。其中Base為未優(yōu)化初始版本的執(zhí)行時間曲線,Tiled為增加共享內(nèi)存優(yōu)化后版本的執(zhí)行時間曲線。

      Tiled版本相比Base版本在各層上都有較大的性能提升。在各層上Tiled版本的性能分別提升了 46.7%、41.1%、41.5%、42.6%。這說明本文的優(yōu)化在GPU架構(gòu)上起到了實(shí)質(zhì)性作用。通過增加共享內(nèi)存,合理分配線程,增加數(shù)據(jù)復(fù)用,在GPU架構(gòu)上實(shí)現(xiàn)直接稀疏卷積,實(shí)現(xiàn)了高效的稀疏卷積神經(jīng)網(wǎng)絡(luò)優(yōu)化。本文采用的直接稀疏卷積并行方式適應(yīng)了GPU的體系結(jié)構(gòu)特征,充分利用了硬件計算資源。為了進(jìn)一步說明本文設(shè)計性能的優(yōu)越性,將在4.2小節(jié)與現(xiàn)有的CNN卷積層實(shí)現(xiàn)進(jìn)行性能對比。

      4.2 執(zhí)行時間分析

      為了進(jìn)一步說明優(yōu)化后的性能提升,在Alex-Net模型基礎(chǔ)上對比本文的設(shè)計與原有CAFFE框架下所實(shí)現(xiàn)的卷積神經(jīng)網(wǎng)絡(luò)。CAFFE通過cu-BLAS提供的函數(shù)接口在GPU上主要實(shí)現(xiàn)了降維。cuBLAS是在GPU上實(shí)現(xiàn)的CUDA數(shù)學(xué)函數(shù)庫。此外,CAFFE還采用了cuSPARSE庫來優(yōu)化處理稀疏卷積。給出了batchsize為64時的AlexNet模型各層執(zhí)行時間對比,如圖8所示。

      同樣地,只列出了AlexNet中稀疏度大于0.6的四個卷積層以及它們的總執(zhí)行時間。從圖8可以看到,相比cuBLAS實(shí)現(xiàn)方法,本文的優(yōu)化方法僅在CONV2上有略微的性能損失,而在CONV3、CONV4、CONV5上的性能分別提升了41.1%、26.2%、40.1%,且總體性能提升了10%;相比 cuSPARSE實(shí)現(xiàn)方法,本文的優(yōu)化方法在 CONV2、CONV3、CONV4、CONV5上的性能分別提升了29.6%、39.2%、47.1%、67.4%,且總體性能提升了41.1%。通過分析表2給出了未刪減前AlexNet各層結(jié)構(gòu)參數(shù),包括輸入特征矩陣大小、卷積核大小以及稀疏度。而對于 CONV3、CONV4、CONV5這三層來說,其稀疏度均高于CONV2的稀疏度,從而證明了本文的設(shè)計針對大規(guī)模高稀疏度數(shù)據(jù)有顯著優(yōu)化效果。此外,圖9給出了不同batchsize下AlexNet各層的加速比。相比cuBLAS,本文的優(yōu)化方法在batchsize為192時得到了最佳的加速比;相比cuSPARSE,當(dāng)batchsize在32~64時性能最佳,從網(wǎng)絡(luò)整體性能來看,batchsize為64時加速性能最佳。這是由于batchsize過小或過大都會使在線負(fù)載任務(wù)過輕或過重,不能合理利用硬件計算資源。

      本文還對GoogleNet和ResNet模型進(jìn)行了測試,同樣也只給出了稀疏度大于0.6的卷積層的加速比,如圖10所示。

      對于 GoogleNet,相比 cuBLAS,本文優(yōu)化方法僅在低維度有1層性能有略微的損失,其余高維度稀疏層實(shí)現(xiàn)了 1.17× ~3.51×加速;相比 cuSPARSE,本文優(yōu)化方法僅在高維度和低維度各出現(xiàn)了1層性能損失,其余各層實(shí)現(xiàn)了1.09×~2.00×加速;在總體性能上,相比cuBLAS和cuSPARSE的方式分別實(shí)現(xiàn)了1.34×和1.21×加速。對于ResNet,相比cuBLAS,本文優(yōu)化方法在所有稀疏層實(shí)現(xiàn)了1.32× ~5.00×加速;相比 cuSPARSE,本文優(yōu)化方法僅在高維度出現(xiàn)了2層性能損失,其余各層實(shí)現(xiàn)了1.07×~3.22×加速;在總體性能上,相比cuBLAS和cuSPARSE的方式分別實(shí)現(xiàn)了2.43×和1.97×加速。

      移動學(xué)習(xí)中學(xué)習(xí)評價是在網(wǎng)絡(luò)課程學(xué)習(xí)的過程中對學(xué)生的學(xué)習(xí)過程和學(xué)習(xí)結(jié)果進(jìn)行價值判斷的過程[5]。移動學(xué)習(xí)評價設(shè)計的缺失和無效已經(jīng)成為制約網(wǎng)絡(luò)課程發(fā)揮實(shí)際效力的關(guān)鍵因素。54.5%的學(xué)生希望針對移動學(xué)習(xí)進(jìn)行學(xué)習(xí)評價。移動學(xué)習(xí)可以通過在線反饋獲取學(xué)生的學(xué)習(xí)評價,Bb平臺提供給學(xué)生多種學(xué)習(xí)反饋方式,學(xué)生反映不一。58.6%的學(xué)生希望可以看到每題得分和總成績,通過每題的得分狀況,對自己掌握的知識進(jìn)行針對性的學(xué)習(xí);33.8%的學(xué)生需要教師評語,教師評語可以更加直觀、深入的評價學(xué)生測試中的問題,便于學(xué)生理解與反思。

      由于各層刪減后的數(shù)據(jù)規(guī)則性也會對實(shí)驗(yàn)結(jié)果產(chǎn)生一定的影響,所以在本文優(yōu)化方案的測試結(jié)果中也出現(xiàn)了某些層的性能損失。但是,相比cu-BLAS和cuSPARSE,本文方法對高稀疏度層的優(yōu)化加速效果顯著??傮w來說,本文優(yōu)化方法實(shí)現(xiàn)了基于GPU架構(gòu)的SCNN加速優(yōu)化。

      5 相關(guān)工作

      相比傳統(tǒng)意義上GPU加速CNN的實(shí)現(xiàn)方案[13,14],本文采用更優(yōu)的數(shù)學(xué)內(nèi)核和卷積運(yùn)算算法,提高了整個系統(tǒng)的可優(yōu)化程度。相比其他采用更合理的刪減方式來切合GPU硬件特性[20]的加速方案,本文所提供的加速方案具有更好的可移植性和可靠性,對數(shù)據(jù)預(yù)處理的消耗小。此外,在文獻(xiàn)[21]所提出的Escort優(yōu)化版本上,本文改進(jìn)了并行策略和映射規(guī)則,取得了更高的加速比。

      6 結(jié)束語

      本文通過在GPU上實(shí)現(xiàn)直接稀疏卷積算法,打破了GPU架構(gòu)下傳統(tǒng)稠密算法對于稀疏結(jié)構(gòu)處理的局限性,有效解決了權(quán)重刪減后SCNN在GPU上運(yùn)行出現(xiàn)性能損失的問題。對于高稀疏度,甚至是GPU所不擅長處理的不規(guī)則數(shù)據(jù),本文的設(shè)計仍然有著極大的優(yōu)勢。相比CAFEE下cuBLAS的實(shí)現(xiàn),本文方法在 AlexNet、GoogleNet、ResNet上的性能提升分別達(dá)到 1.07× ~1.23 ×、1.17× ~3.51×、1.32 × ~ 5.00 ×。相比 cuSPARSE 的實(shí)現(xiàn),本文方法在 AlexNet、GoogleNet、ResNet上的性能提升分別達(dá)到1.31× ~1.42×、1.09 × ~2.00 ×、1.07 × ~3.22 ×。

      猜你喜歡
      共享內(nèi)存指針線程
      通過QT實(shí)現(xiàn)進(jìn)程間的通信
      偷指針的人
      娃娃畫報(2019年5期)2019-06-17 16:58:10
      為什么表的指針都按照順時針方向轉(zhuǎn)動
      基于PCI總線的多處理器協(xié)同機(jī)制研究
      淺談linux多線程協(xié)作
      基于改進(jìn)Hough變換和BP網(wǎng)絡(luò)的指針儀表識別
      電測與儀表(2015年5期)2015-04-09 11:30:42
      QNX下PEX8311多路實(shí)時數(shù)據(jù)采集的驅(qū)動設(shè)計
      電子世界(2014年21期)2014-04-29 06:41:36
      ARM Cortex—MO/MO+單片機(jī)的指針變量替換方法
      一種高效RTAI 共享內(nèi)存管理層的研究與實(shí)現(xiàn)*
      Linux線程實(shí)現(xiàn)技術(shù)研究
      灵川县| 邛崃市| 和硕县| 灌云县| 太原市| 枣庄市| 外汇| 山东省| 博白县| 泸州市| 青铜峡市| 仁怀市| 清涧县| 普兰店市| 托克托县| 嘉峪关市| 北川| 宁陵县| 漾濞| 攀枝花市| 深圳市| 抚顺县| 崇信县| 历史| 景宁| 府谷县| 江城| 长武县| 鄂尔多斯市| 广德县| 上虞市| 烟台市| 曲沃县| 沙雅县| 宜黄县| 四会市| 峨边| 太湖县| 大关县| 东乡| 英吉沙县|