• 
    

    
    

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

      ?

      基于FPGA集群的脈沖神經(jīng)網(wǎng)絡(luò)仿真器設(shè)計

      2020-10-15 08:32:26張魯飛張新偉郁龔健劉家航柴志雷
      計算機工程 2020年10期
      關(guān)鍵詞:仿真器皮質(zhì)集群

      李 康,張魯飛,張新偉,郁龔健,劉家航,吳 東,柴志雷,

      (1.江南大學(xué) 物聯(lián)網(wǎng)工程學(xué)院,江蘇 無錫 214122; 2.數(shù)學(xué)工程與先進計算國家重點實驗室,江蘇 無錫 214215)

      0 概述

      隨著新一代信息技術(shù)的快速發(fā)展,計算能力和數(shù)據(jù)處理速度得到大幅提升,人工智能已經(jīng)進入大規(guī)模實用階段,但深度學(xué)習(xí)還存在解釋性差、通用智能水平弱等局限性[1],限制了人工智能的發(fā)展。而摩爾定律放緩、登納德縮放定律失效,使得能效問題日益成為計算機系統(tǒng)發(fā)展的重要制約因素。而人腦是由多達(dá)1011個神經(jīng)元和1015個突觸組成的復(fù)雜網(wǎng)絡(luò)系統(tǒng),雖然其功耗只有20 W,但學(xué)習(xí)和認(rèn)知能力卻超強[2]。因此,世界各國紛紛啟動腦科學(xué)計劃[3-5],國內(nèi)清華大學(xué)、北京大學(xué)、復(fù)旦大學(xué)等高校已相繼成立研究平臺開展類腦研究[6-7],希望通過解析大腦機理,發(fā)展類腦計算,克服深度學(xué)習(xí)的不足。類腦計算的基礎(chǔ)是脈沖神經(jīng)網(wǎng)絡(luò)(Spiking Neural Network,SNN),SNN被譽為第三代人工神經(jīng)網(wǎng)絡(luò)[8],具有時空可模擬性、突觸可塑性和支持脈沖編碼等特點,相比第二代神經(jīng)網(wǎng)絡(luò)(如反向傳播網(wǎng)絡(luò)),在具備生物合理性的同時可達(dá)到更高的能效比。

      目前,研究人員已提出多種支持脈沖神經(jīng)網(wǎng)絡(luò)的仿真器用于研究大腦機理和探索類腦計算系統(tǒng),如NEST[9]、BRAIN2[10]和NEURON[11]等,這些仿真器均運行于通用處理器平臺,雖然具有靈活性強、精度高等特點,但同時存在功耗高、仿真速度慢的缺點[12]。因此,尋找合適的脈沖神經(jīng)網(wǎng)絡(luò)硬件平臺為神經(jīng)科學(xué)家提供大規(guī)模的脈沖神經(jīng)網(wǎng)絡(luò)仿真和大腦皮層仿真服務(wù)成為亟待解決的問題[13]。現(xiàn)有主流解決方案采用專用集成電路(Application Specific Integrated Circuit,ASIC)、圖像處理器(Graphics Processing Unit,GPU)、現(xiàn)場可編程邏輯門陣列(Field Programmable Gate Array,FPGA)作為脈沖神經(jīng)網(wǎng)絡(luò)仿真器的硬件平臺[14]。其中,FPGA是一種強靈活性、高性能和低功耗的可編程邏輯器件。與研發(fā)周期較長、靈活性較差的ASIC及能耗高的GPU相比,FPGA更適合作為脈沖神經(jīng)網(wǎng)絡(luò)仿真器的硬件平臺,其目前已得到廣泛應(yīng)用。文獻[15]利用Maxeller Java的高層次綜合(High-Level Synthesis,HLS)工具,采用時分復(fù)用、神經(jīng)元模塊并行計算的硬件架構(gòu),提出一種能夠支持6塊FPGA板卡的脈沖神經(jīng)網(wǎng)絡(luò)仿真器NeuroFlow。文獻[16]利用開放運算語言(Open Computing Language,OpenCL)工具,設(shè)計基于FPGA且支持單精度浮點神經(jīng)元計算模型的脈沖神經(jīng)網(wǎng)絡(luò)加速器。但上述兩種脈沖神經(jīng)網(wǎng)絡(luò)仿真器并不兼容主流的脈沖神經(jīng)網(wǎng)路仿真器接口,開發(fā)難度較大。

      在眾多脈沖神經(jīng)網(wǎng)絡(luò)仿真器中,NEST仿真器應(yīng)用最廣泛,其更加關(guān)注神經(jīng)網(wǎng)絡(luò)系統(tǒng)的動力學(xué)、規(guī)模及結(jié)構(gòu)而不僅是單個神經(jīng)元模型的精確形態(tài),還可用于模擬不同規(guī)模的脈沖神經(jīng)網(wǎng)絡(luò),如哺乳動物的皮質(zhì)層微電路模型等[17]。文獻[18]提出基于OpenCL且提供GPU加速服務(wù)的NEST仿真器,但其能耗較高。因此,本文設(shè)計一種支持FPGA集群的NEST仿真器,重點分析了NEST仿真器、漏電流整合放電(Leaky Integrate and Fire,LIF)神經(jīng)元模型和皮質(zhì)層視覺仿真模型[19]。

      1 脈沖神經(jīng)網(wǎng)絡(luò)仿真器

      在NEST脈沖神經(jīng)網(wǎng)絡(luò)仿真器中,實現(xiàn)了50多種神經(jīng)元模型和10多種突觸模型。突觸模型包含靜態(tài)突觸和STDP突觸等,神經(jīng)元模型包含HH(Hodgkin-Huxley)、Izhikevich、LIF等[20],其計算復(fù)雜度和生物仿真精度依次降低。由于LIF神經(jīng)元模型應(yīng)用廣泛且易于硬件實現(xiàn)[21],因此本文選取NEST仿真器中的LIF神經(jīng)元模型作為FPGA硬件架構(gòu)的實現(xiàn)。

      1.1 LIF神經(jīng)元模型

      LIF神經(jīng)元是一種電流指數(shù)衰減驅(qū)動型神經(jīng)元,其基本原理是將產(chǎn)生脈沖的突觸權(quán)重累加到突觸后電流并進行指數(shù)衰減,衰減后的突觸電流與膜電位相加得到新的神經(jīng)元膜電位,如果神經(jīng)元膜電位大于膜電位閾值便會產(chǎn)生脈沖。NEST仿真器中的LIF神經(jīng)元模型在原LIF神經(jīng)元的基礎(chǔ)上進行離散化,并增加了外部電流參數(shù)和初始化電流參數(shù)。LIF神經(jīng)元模型的計算方法如式(1)、式(2)所示:

      Vm(t)=Vm(t-1)×P22+Si_syn_ex(t-1)×

      P21ex+Si_syn_in(t-1)×P21in+

      (Sie(t-1)+Si0(t-1))×P20

      (1)

      Vm(t)=Vreset且發(fā)送脈沖,Vm(t)≥Vth

      (2)

      在式(1)中,t為當(dāng)前時刻,t-1為上一個時刻,Vm為膜電位,Si_syn_ex、Si_syn_in分別為興奮型電流和抑制型電流,Sie、Si0分別為外部輸入電流和初始化電流,P22為膜電位衰減因子,P21ex、P21in分別為興奮型電流衰減因子和抑制型電流衰減因子,P20為初始化電流和外部電流的衰減因子,所有衰減因子在神經(jīng)元初始化過程中均已計算完畢。在式(2)中,Vth為閾值電壓,Vreset為復(fù)位電壓。

      1.2 NEST仿真器

      NEST仿真器中的計算模式包含時間驅(qū)動型和事件驅(qū)動型,其神經(jīng)元計算模式采用時間驅(qū)動型,即每一個仿真時間步長都會進行神經(jīng)元計算,突觸計算模式采用事件驅(qū)動型,即只有產(chǎn)生脈沖才會進行權(quán)重更新。除此之外,NEST仿真器中還存在最小延遲機制(如圖1所示),其基本原理是在每個最小延遲內(nèi),神經(jīng)元的更新并不會對其他神經(jīng)元產(chǎn)生任何影響,只有在所有神經(jīng)元更新結(jié)束后才會通過突觸將累計的脈沖發(fā)送到目標(biāo)神經(jīng)元。

      圖1 NEST仿真器的最小延遲機制Fig.1 The minimum delay mechanism of NEST simulator

      在圖1中,dmin為最小延遲,若脈沖神經(jīng)網(wǎng)絡(luò)仿真精度為0.1 ms,則dmin為0.5 ms,LIF神經(jīng)元更新的最小步長也為0.1 ms。在神經(jīng)元發(fā)出脈沖后,將脈沖信息存儲到數(shù)據(jù)緩存。采用最小延遲機制,即增加NEST仿真器中單個神經(jīng)元的Cache生命周期,可減少大規(guī)模系統(tǒng)的通信損耗。另外,NEST神經(jīng)元更新模塊中還存在不應(yīng)期機制,其基本原理是當(dāng)神經(jīng)元發(fā)射脈沖后便會處在不應(yīng)期階段,不應(yīng)期階段的神經(jīng)元不會更新而只進行不應(yīng)期計數(shù)遞減,直至跳出不應(yīng)期。NEST仿真器中神經(jīng)元模型更新算法具體如下:

      算法1神經(jīng)元模型更新算法

      輸入仿真時間和神經(jīng)元數(shù)量

      輸出脈沖信息和神經(jīng)元輸出

      1.for (t=0; t

      2.for (nneuron=0; nneuron

      3.for (lag=from; lag

      4.if (ref==0)

      5.neuron_compute();

      6.else

      7.--ref;}

      下文對NEST仿真器中的脈沖發(fā)射率、內(nèi)存需求和計算量進行分析,假設(shè)Nneuron為神經(jīng)元數(shù)量、Nsynapse為突觸數(shù)量、Tsimulation為整個模型的仿真時間。脈沖發(fā)射率為1 s內(nèi)單個神經(jīng)元發(fā)射的脈沖數(shù),計算公式如式(3)所示:

      (3)

      其中,Nspike為所有仿真時間內(nèi)脈沖的發(fā)射數(shù)量。

      NEST仿真器中脈沖神經(jīng)網(wǎng)絡(luò)內(nèi)存的計算公式如式(4)所示:

      Smemory=Nneuron×Mneuron+Nsynapse×Msynapse

      (4)

      其中,Mneuron和Msynapse分別為每個神經(jīng)元和每個突觸的內(nèi)存占用,在NEST中每個LIF神經(jīng)元至少占用128 Byte內(nèi)存,每個靜態(tài)突觸共占用8 Byte內(nèi)存。

      NEST仿真器中脈沖神經(jīng)網(wǎng)絡(luò)浮點計算量的計算公式如式(5)所示:

      OPcompute=(OPneuron+OPsynapse)×Tsimulation×Nstep

      (5)

      其中,OPneuron為神經(jīng)元計算的浮點操作數(shù),OPsynapse為突觸計算的浮點操作數(shù),Nstep為單位仿真時間內(nèi)的仿真步長,OPweight為突觸權(quán)重累加操作數(shù)。NEST仿真器中每個LIF神經(jīng)元和靜態(tài)突觸計算分別需要14 FLOPS和1 FLOPS。

      1.3 基于NEST仿真器的皮質(zhì)層視覺仿真模型

      基于NEST仿真器的皮質(zhì)層視覺仿真模型處理過程具體如下:

      1)圖像預(yù)處理。對任意分辨率的圖像,將圖像進行歸一化,按原圖長寬比縮放至80×80,因為按原圖長寬比縮放,所以存在未填充像素部分,而該部分的填充值為0.5。

      2)脈沖神經(jīng)網(wǎng)絡(luò)仿真。圖像尺寸決定脈沖神經(jīng)網(wǎng)絡(luò)層規(guī)模,分別以預(yù)處理后的圖像大小的1.00倍、0.70倍、0.50倍、0.35倍建立4個脈沖神經(jīng)網(wǎng)絡(luò)層,每個網(wǎng)絡(luò)層又包含4個尺寸相同的層,分別以π/8、π/4+π/8、π/2+π/8、3π/4+π/8 Gabor濾波后的圖像作為輸入。脈沖神經(jīng)網(wǎng)絡(luò)層的突觸連接包含自連接、一對一連接和全連接。NEST仿真器進行仿真后,將脈沖信息作為輸出。

      3)支持向量機(Support Vector Machine,SVM)分類。脈沖神經(jīng)網(wǎng)絡(luò)層的脈沖信息輸出經(jīng)過降采樣后,將發(fā)射脈沖數(shù)映射到一維數(shù)組作為輸入,并通過SVM分類器進行圖像分類。

      基于NEST仿真器的皮質(zhì)層視覺仿真模型參數(shù)設(shè)置如表1所示。

      表1 皮質(zhì)層視覺仿真模型參數(shù)設(shè)置Table 1 Parameter setting of cortical visual simulation model

      對皮質(zhì)層視覺仿真模型進行分析得出以下結(jié)論:

      1)脈沖神經(jīng)網(wǎng)絡(luò)的運行時間和計算量占比約為整個皮質(zhì)層視覺仿真的90%以上。

      2)脈沖神經(jīng)網(wǎng)絡(luò)的平均脈沖發(fā)射率較低。

      3)脈沖神經(jīng)網(wǎng)絡(luò)中神經(jīng)元計算量占整個模型計算量的比重較大,神經(jīng)元計算量約為突觸計算量的3萬多倍。

      本文將以NEST仿真器中神經(jīng)元計算量占比較大的皮質(zhì)層視覺仿真模型作為樣例對其硬件架構(gòu)設(shè)計進行評估。

      2 基于FPGA的NEST仿真器硬件架構(gòu)設(shè)計

      本文設(shè)計基于FPGA集群的脈沖神經(jīng)網(wǎng)絡(luò)仿真器,首先在NEST仿真器的基礎(chǔ)上進行重新設(shè)計以支持FPGA硬件平臺,在保持原始仿真結(jié)果準(zhǔn)確性的同時對神經(jīng)元更新算法進行設(shè)計并增加FPGA硬件驅(qū)動和數(shù)據(jù)傳輸模塊。然后對LIF神經(jīng)元計算硬件模塊進行設(shè)計,提出LIF神經(jīng)元流水線并行架構(gòu),充分利用神經(jīng)元內(nèi)并行度和神經(jīng)元間并行度,增大數(shù)據(jù)吞吐率和計算并行度,以神經(jīng)元ID組成的脈沖隊列作為輸出,有效減少存儲空間和數(shù)據(jù)傳輸時間。最后采用多線程和多進程的設(shè)計,充分利用處理器資源,提高系統(tǒng)并行性和擴展性,增加用戶模式,提高系統(tǒng)使用便利度,為大規(guī)模類腦計算系統(tǒng)實現(xiàn)提供技術(shù)支持。

      2.1 支持FPGA硬件架構(gòu)的NEST仿真器設(shè)計

      2.1.1 NEST仿真器神經(jīng)元計算算法

      為消除神經(jīng)元之間的數(shù)據(jù)依賴性,有利于硬件的并行計算,設(shè)計的神經(jīng)元計算算法具體如下:

      算法2神經(jīng)元計算算法

      輸入仿真時間和神經(jīng)元數(shù)量

      輸出發(fā)射脈沖和神經(jīng)元輸出

      1.for (t=0; t

      2.for (lag=from; lag

      3.for (nneuron=0; nneuron

      4.if (ref==0)

      5.neuron_compute();

      6.else

      7.--ref;}

      在LIF神經(jīng)元計算模塊中,最小延遲的遍歷放置于外層循環(huán),支持在最小延遲的最小步長內(nèi)完成所有神經(jīng)元的計算,在未改變原有脈沖神經(jīng)網(wǎng)絡(luò)更新機制的條件下,消除了每個神經(jīng)元之間的數(shù)據(jù)依賴性。

      2.1.2 NEST仿真器中LIF神經(jīng)元的計算精度

      NEST仿真器中LIF神經(jīng)元變量采用雙精度浮點數(shù),為減少數(shù)據(jù)傳輸需求與系統(tǒng)內(nèi)存需求,將LIF神經(jīng)元中雙精度浮點數(shù)改為單精度浮點數(shù),更改后NEST仿真器的脈沖發(fā)射率及皮質(zhì)層視覺仿真模型的仿真結(jié)果與原來保持一致。使用單精度浮點既保證了NEST仿真器的通用性,又降低了數(shù)據(jù)傳輸需求和系統(tǒng)內(nèi)存需求。

      2.1.3 NEST仿真器與硬件平臺的數(shù)據(jù)交互模式

      由于LIF神經(jīng)元的數(shù)據(jù)無法全部存儲到FPGA上,因此將LIF神經(jīng)元的數(shù)據(jù)存放到共享內(nèi)存中,NEST仿真器與硬件平臺通過共享內(nèi)存的方式進行數(shù)據(jù)交互。為減少頻繁的內(nèi)存讀寫,在共享內(nèi)存中申請LIF神經(jīng)元變量后,初始化時將NEST仿真器中數(shù)據(jù)傳入到共享內(nèi)存,LIF神經(jīng)元硬件模塊每次通過DMA控制器從共享內(nèi)存中讀取數(shù)據(jù)和輸出數(shù)據(jù)到共享內(nèi)存,最大化地減少神經(jīng)元數(shù)據(jù)的搬運次數(shù)。NEST仿真器中的數(shù)據(jù)更新算法具體如下:

      算法3數(shù)據(jù)更新算法

      輸入神經(jīng)元初始化數(shù)據(jù)

      輸出神經(jīng)元輸出數(shù)據(jù)

      1.Initial LIFNeuralDATA();

      2.CopyDatatoShareMemory();

      3.for (t=0; t

      4.for (lag=from; lag

      5.FPGA_MassUpdateNeuron();//FPGA設(shè)備及DMA驅(qū)動

      6.CopyDatafromShareMemory();}

      2.2 LIF神經(jīng)元計算模塊的硬件架構(gòu)設(shè)計

      LIF神經(jīng)元計算模塊采用流水線設(shè)計來提高吞吐率,如圖2所示,由神經(jīng)元輸入緩沖經(jīng)過一系列乘加運算得到當(dāng)前的神經(jīng)元膜電位,如果膜電位大于閾值則會輸出結(jié)果到神經(jīng)元輸出緩沖,輸出的脈沖攜帶神經(jīng)元ID,將發(fā)出脈沖的神經(jīng)元ID存儲到共享內(nèi)存,并按照輸出順序排列在一段連續(xù)的內(nèi)存空間中,設(shè)置結(jié)束標(biāo)志位為0,若讀取到0,則說明本輪神經(jīng)元更新所發(fā)射的脈沖讀取完畢。單個神經(jīng)元計算模塊具有4個乘法和2個加法并行單元,充分利用了神經(jīng)元計算模塊的并行性。

      圖2 LIF神經(jīng)元計算模塊的硬件架構(gòu)設(shè)計Fig.2 Hardware architecture design of LIF neuron computing module

      神經(jīng)元流水線結(jié)構(gòu)如圖3所示,包括數(shù)據(jù)讀取R、神經(jīng)元計算C、數(shù)據(jù)寫回W3個模塊。

      圖3 LIF神經(jīng)元計算模塊的延遲Fig.3 Delay of LIF neuron computing module

      整個流水線時延計算公式如式(6)所示:

      Latencytotal=(TII×RoundDivUpper(Nneuron,Mneuron)+

      TIL)/Freq

      (6)

      其中,TII為初始化間隔時間,RoundDivUpper()為向上取整函數(shù),Mneuron為能夠支持神經(jīng)元計算模塊的最大并行數(shù),TIL為迭代延遲,Freq為工作頻率時鐘,Trip Count為循環(huán)迭代總數(shù)。每個時鐘周期讀取和輸出Mneuron個神經(jīng)元參數(shù),Mneuron取決于每個神經(jīng)元的參數(shù)量和傳輸數(shù)據(jù)位寬,Nneuron由NEST仿真器給定的LIF神經(jīng)元數(shù)量決定。

      LIF神經(jīng)元硬件架構(gòu)的數(shù)據(jù)流和控制流設(shè)計如圖4所示。NEST仿真器運行在ARM核,通過AXI-LITE控制LIF_NEURON神經(jīng)元計算模塊,并將神經(jīng)元總數(shù)量通過寄存器輸出到LIF_NEURON硬件模塊。AXI-STREAM協(xié)議由4個DMA控制器實現(xiàn),通過AXI-STREAM將神經(jīng)元變量參數(shù)寫入輸入緩沖,利用DATA_SCATTER模塊分發(fā)到LIF神經(jīng)元中各個變量,LIF_NEURON神經(jīng)元更新完成后,經(jīng)過DATA_GATHER模塊寫回輸出緩沖。本文采用8個LIF神經(jīng)元并行計算,并通過分時復(fù)用的方式讀取和更新共享內(nèi)存中的數(shù)據(jù)。其中,AXI-STREAM最大數(shù)據(jù)位寬為1 024 bit,ZYNQ 7030的DDR3 1066f支持2.01 GB/s的數(shù)據(jù)帶寬,LIF神經(jīng)元計算模塊最大帶寬需求為1.175 GB/s,滿足設(shè)計要求。

      圖4 LIF神經(jīng)元硬件架構(gòu)的數(shù)據(jù)傳輸設(shè)計Fig.4 Data transmission design of LIF neuron hardware architecture

      2.3 支持FPGA集群的NEST仿真器多節(jié)點設(shè)計

      2.3.1 NEST仿真器多線程與多進程設(shè)計

      為便于大規(guī)模脈沖神經(jīng)網(wǎng)絡(luò)仿真,NEST仿真器本身支持OpenMP的共享內(nèi)存多線程技術(shù)與支持MPI的分布式內(nèi)存多進程技術(shù),可適應(yīng)不同集群平臺。

      NEST仿真器在脈沖神經(jīng)網(wǎng)絡(luò)仿真前建立網(wǎng)絡(luò)連接。按照平均分配的原則將神經(jīng)元分配至各進程中的線程,并賦予每個神經(jīng)元全局ID、線程ID及進程ID,隨后根據(jù)NEST仿真器中的查找表(Look Up Table,LUT)建立突觸,通過突觸建立各個進程和線程之間的連接關(guān)系,進程中使用MPI消息機制進行神經(jīng)元之間的脈沖消息傳遞,每個突觸連接包含權(quán)重、延遲和目標(biāo)神經(jīng)元全局ID。目標(biāo)神經(jīng)元用來查找目標(biāo)節(jié)點,延遲用來定義從源神經(jīng)元(Source neuron)到目標(biāo)神經(jīng)元(Target neuron)需要的仿真步長。

      NEST仿真器會給每個線程分配接收緩沖(Receiver buffer)和發(fā)送緩沖(Send buffer),接收緩沖負(fù)責(zé)接收所有傳入的脈沖信息,發(fā)送緩沖負(fù)責(zé)存放發(fā)射脈沖的信息,每個線程都具有相同大小的接收緩沖,每個緩沖中具有相同的數(shù)據(jù)內(nèi)容,NEST仿真器通過線程ID從接收緩沖獲取相應(yīng)的脈沖事件數(shù)據(jù),然后通過突觸連接找到對應(yīng)的神經(jīng)元進行脈沖傳遞。MPI信息交換機制是將進程中的發(fā)送緩沖拷貝并發(fā)送到其他所有接收進程,NEST仿真器中脈沖發(fā)射與接收流程如圖5所示,其中,t為當(dāng)前仿真時間,Tstep為預(yù)設(shè)的總仿真時間,為仿真步長。

      圖5 脈沖發(fā)射與接收流程Fig.5 Procedure of spiking transmitting and receiving

      由于ZYNQ 7030的PS端為ARM A9雙核處理器,且支持雙線程運行,因此本文設(shè)計了2個LIF神經(jīng)元硬件模塊,由ARM端的線程控制LIF神經(jīng)元硬件模塊,如圖6所示。多線程采用共享內(nèi)存方式,使用2個LIF神經(jīng)元硬件模塊同時讀寫DDR3內(nèi)存,可充分發(fā)揮DDR的帶寬優(yōu)勢,但由于線程之間存在上下文切換,因此多線程的加速比不能達(dá)到理論最大值。

      圖6 多線程硬件設(shè)計Fig.6 Multi-thread hardware design

      如圖7所示,T1和T2分別代表線程1和線程2,多進程采用分布式內(nèi)存方式,每個進程包含發(fā)送緩沖和接收緩沖,在脈沖神經(jīng)網(wǎng)絡(luò)仿真開始前將網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)映射到NEST仿真器,為每個線程和進程分配神經(jīng)元,發(fā)出的脈沖信號通過以太網(wǎng)從發(fā)送緩沖發(fā)送到接收緩沖。

      圖7 多進程硬件設(shè)計Fig.7 Multi-process hardware design

      每個進程節(jié)點配備單獨的DDR3內(nèi)存,可增加整個系統(tǒng)的內(nèi)存容量并提供更高的計算性能,但同時需要考慮多節(jié)點的通信問題。本文中NEST仿真器的皮質(zhì)層視覺仿真模型具有脈沖發(fā)射率低和神經(jīng)元更新計算需求大的特性,其通信數(shù)據(jù)計算公式如式(7)所示:

      Mcommunication=(Nspike/Nmpi+Nthread×dmin)×

      (Mgid+Moffset)×Nmpi

      (7)

      其中,Nthread為預(yù)設(shè)的SNN仿真器線程數(shù),Nmpi為預(yù)設(shè)的NEST仿真器進程數(shù),dmin為最小延遲,Mgid為發(fā)出脈沖的全局ID變量,Moffset為脈沖偏移變量,由于全局ID和脈沖偏移均為雙精度浮點變量,因此Mgid和Moffset總數(shù)據(jù)量為16 Byte。

      2.3.2 用戶編程模式

      NEST仿真器加入動態(tài)加載比特流來配置FPGA模塊,用戶可根據(jù)需求選擇是否使用FPGA硬件加速模塊。FPGA集群的每個進程都可通過NEST仿真器動態(tài)加載比特流,并且可根據(jù)神經(jīng)元類型加載不同的神經(jīng)元硬件模塊,提高用戶使用FPGA集群的便利性。

      2.4 基于FPGA集群的NEST仿真器總體架構(gòu)設(shè)計

      如圖8所示,運行NEST仿真器,在初始化階段判斷是否需要FPGA硬件加速模塊,如果不需要則直接在雙核ARM A9上運行,如果需要則根據(jù)神經(jīng)元類型自動下載相應(yīng)的FPGA比特流,并通過NEST仿真器控制多線程和多進程調(diào)度以及FPGA與DRAM的數(shù)據(jù)交互,單個線程內(nèi)實現(xiàn)8個LIF神經(jīng)元并行計算的硬件設(shè)計,同時采用流水線架構(gòu),當(dāng)前輪次仿真輸入復(fù)用上一輪仿真的輸出。利用OpenMP多線程編程、MPI消息傳輸機制和以太網(wǎng)通信實現(xiàn)計算節(jié)點與計算節(jié)點之間的脈沖傳遞。

      圖8 基于FPGA集群的脈沖神經(jīng)網(wǎng)絡(luò)仿真器整體架構(gòu)Fig.8 Overall architecture of spiking neural network simulator based on FPGA cluster

      3 實驗結(jié)果與分析

      3.1 軟硬件環(huán)境設(shè)置

      NEST仿真器:NEST 2.14.0版本,GCC 5.0編譯器,Python 3.5。

      皮質(zhì)層視覺仿真模型:最小延遲dmin為1 ms,仿真精度為0.1 ms,總生物仿真時間為50 ms,神經(jīng)元數(shù)量為48 904,突觸數(shù)量為355 516。

      FPGA設(shè)計軟件:Xilinx FPGA設(shè)計集成工具(Xilinx Vivado 2018),高層次綜合工具(Xilinx Vivado HLS 2018)。

      CPU:Intel Xeon E5-2620,8個核心,內(nèi)存為128 GB DDR3。

      ARM:ARM A9處理器主頻為667 MHz,2個核心,內(nèi)存為1 GB DDR3。

      FPGA集群系統(tǒng):FPGA集群包含8個Xilinx ZYNQ 7 030節(jié)點,每個節(jié)點包括PS端的ARM A9雙核處理器系統(tǒng)和可編程邏輯端(PL)的FPGA器件,FPGA時鐘頻率為100 MHz,FPGA板卡之間基于TCP/IP協(xié)議并采用1 000 Mb/s網(wǎng)絡(luò)帶寬的以太網(wǎng)進行通信。

      3.2 LIF神經(jīng)元硬件模塊實驗結(jié)果分析

      針對單個LIF神經(jīng)元硬件模塊進行仿真,設(shè)置仿真精度為0.1 ms、0.5 ms、1.0 ms,輸入恒定電流為700 pA,仿真時間為100 ms,分別對原始NEST仿真器與基于FPGA的NEST仿真器進行結(jié)果測試,原始NEST仿真器LIF神經(jīng)元實現(xiàn)結(jié)果如圖9所示,基于FPGA集群的NEST仿真器LIF神經(jīng)元實現(xiàn)結(jié)果如圖10所示。

      圖9 原始NEST仿真器LIF神經(jīng)元實現(xiàn)結(jié)果Fig.9 LIF neuron implementation results of the original NEST simulator

      在圖9和圖10中,直線表示膜電位輸出值,黑點表示NEST仿真器在某個仿真時間內(nèi)存在脈沖發(fā)射,對比原始NEST仿真器和基于FPGA集群的NEST仿真器單個LIF神經(jīng)元以恒定電流輸入的脈沖仿真結(jié)果,可以看出:在單個神經(jīng)元仿真中,本文實現(xiàn)的LIF神經(jīng)元硬件模塊與原始NEST仿真器的仿真結(jié)果保持一致,不存在精度損失,達(dá)到了理想結(jié)果。

      圖10 基于FPGA集群的NEST仿真器LIF神經(jīng)元實現(xiàn)結(jié)果Fig.10 LIF neuron implementation results of cluster NEST simulator based on FPGA

      3.3 皮質(zhì)層視覺仿真模型的脈沖層實驗結(jié)果分析

      針對皮質(zhì)層視覺仿真模型的脈沖層進行仿真,分別得到原始NEST仿真器和基于FPGA集群的NEST仿真器的皮質(zhì)層視覺仿真模型的脈沖層結(jié)果,仿真時間為50 ms,選取80×80大小的網(wǎng)絡(luò)層輸出結(jié)果,如圖11和圖12所示,其中黑點表示NEST仿真器中某個神經(jīng)元在某個仿真時間內(nèi)產(chǎn)生了脈沖,對原始NEST仿真器脈沖仿真結(jié)果與基于FPGA集群的NEST仿真器脈沖仿真結(jié)果進行對比,其脈沖輸出結(jié)果保持一致。通過對比多次實驗結(jié)果和不同層的脈沖輸出結(jié)果證明本文基于FPGA集群的NEST仿真器在脈沖神經(jīng)網(wǎng)絡(luò)仿真時可保證仿真結(jié)果的準(zhǔn)確性,并得到正確的輸出結(jié)果。

      圖11 原始NEST仿真器脈沖結(jié)果Fig.11 Spiking results of the original NEST simulator

      圖12 基于FPGA集群的NEST仿真器脈沖結(jié)果Fig.12 Spiking results of NEST simulator based on FPGA cluster

      3.4 皮質(zhì)層視覺仿真模型性能分析

      本文NEST仿真器中神經(jīng)元計算模塊采用單精度浮點數(shù)據(jù),與原NEST仿真器的神經(jīng)元計算模塊雙精度浮點數(shù)據(jù)相比,在皮質(zhì)層視覺模型仿真圖像分類的準(zhǔn)確率和脈沖發(fā)射率方面并無差異,結(jié)果如表2所示。

      表2 皮質(zhì)層視覺仿真模型性能分析Table 2 Performance analysis of cortical visual simulation model

      3.5 FPGA集群節(jié)點間的數(shù)據(jù)傳輸分析

      在基于NEST仿真器的皮質(zhì)層視覺仿真模型中,預(yù)設(shè)dmin=1,平均脈沖發(fā)射率為3.84 spike/s/neuron,總的仿真時間為50 ms,神經(jīng)元數(shù)量為48 904,總的脈沖發(fā)射數(shù)為9 389,本文設(shè)計采用8個FPGA節(jié)點,單個節(jié)點最大支持2個線程,根據(jù)式(7)計算得出總的MPI通信量為0.143 MB。本文應(yīng)用1 000 Mb/s以太網(wǎng),即每秒鐘傳輸125 MB數(shù)據(jù),由于MPI傳輸時間的理論值約為1.1 ms,但MPI存在頻繁啟動問題,因此隨著節(jié)點的增加,MPI所占時間也不斷增加,如表3所示。

      表3 不同規(guī)模FPGA集群的MPI性能測試Table 3 MPI performance test of FPGA clusters of different scales

      3.6 FPGA資源利用率分析

      FPGA資源包括LUT、LUTRAM、觸發(fā)器(Flip-Flop,FF)、BRAM(Block RAM)和DSP。單個FPGA節(jié)點中2個LIF神經(jīng)元硬件模塊的資源利用率情況如表4所示。

      表4 單個FPGA的資源利用率Table 4 Resource utilization of a single FPGA

      3.7 基于FPGA集群的NEST仿真器性能評估

      本文設(shè)計并實現(xiàn)基于FPGA集群的NEST脈沖神經(jīng)網(wǎng)絡(luò)仿真器,以皮質(zhì)層視覺仿真模型為例,分別對比Xeon E5-2620(8 core)和ARM A9(2 core),其性能評估結(jié)果如表5所示。

      表5 在CPU、ARM和ARM+FPGA平臺上的性能評估Table 5 Performance evaluation of CPU,ARM and ARM+FPGA platforms

      本文實現(xiàn)了基于FPGA集群的NEST仿真器,在計算能效方面,其單個節(jié)點能效是ARM A9的30倍,是Xeon E5-2620的56.10倍;FPGA集群的能效是Xeon E5-2620的43.93倍,是ARM A9的23.54倍。在計算速度方面,單個節(jié)點速度是ARM A9的33.21倍,是Xeon E5-2620的1.97倍;FPGA集群的速度是ARM A9的208倍,是Xeon E5-2620的12.36倍。

      3.8 不同規(guī)模FPGA集群的性能預(yù)測

      根據(jù)本文得到的FPGA集群性能及加速比,基于FPGA集群的NEST仿真器在皮質(zhì)層視覺仿真模型中,隨著FPGA節(jié)點數(shù)目的改變,節(jié)點間的性能預(yù)測結(jié)果如表6所示。

      表6 不同規(guī)模FPGA集群的性能預(yù)測Table 6 Performance prediction of FPGA clusters of different scales

      由表6可知,在16個FPGA節(jié)點內(nèi),總時延隨著節(jié)點數(shù)的增加而減少,當(dāng)節(jié)點數(shù)超過16個時,MPI通信將成為整個FPGA集群的瓶頸,隨著節(jié)點數(shù)的增加,整個系統(tǒng)時延也不斷上升,能效比不斷降低。因此,為實現(xiàn)更大規(guī)模的脈沖神經(jīng)網(wǎng)絡(luò),下一步的工作重點為MPI網(wǎng)絡(luò)通信的優(yōu)化與改進。

      4 結(jié)束語

      本文提出一種基于FPGA集群的NEST脈沖神經(jīng)網(wǎng)絡(luò)仿真器,采用流水線設(shè)計提高吞吐率,使用多線程和多進程設(shè)計充分利用處理器資源,提高系統(tǒng)并行性、擴展性以及使用便利性。實驗結(jié)果表明,NEST仿真器在計算速度和能效方面均有較大幅度的提升,其為神經(jīng)科學(xué)家提供了速度更快、能耗更低的脈沖神經(jīng)網(wǎng)絡(luò)仿真平臺。為進一步提高基于FPGA集群的NEST仿真器的通用性,后續(xù)將針對Izhikevich、HH等類型的神經(jīng)元計算模塊進行設(shè)計,通過優(yōu)化網(wǎng)絡(luò)傳輸性能,實現(xiàn)支持更大網(wǎng)絡(luò)規(guī)模的脈沖神經(jīng)網(wǎng)絡(luò)仿真器與類腦計算平臺。

      猜你喜歡
      仿真器皮質(zhì)集群
      基于基因組學(xué)數(shù)據(jù)分析構(gòu)建腎上腺皮質(zhì)癌預(yù)后模型
      皮質(zhì)褶皺
      迎秋
      睿士(2020年11期)2020-11-16 02:12:27
      海上小型無人機集群的反制裝備需求與應(yīng)對之策研究
      一種無人機集群發(fā)射回收裝置的控制系統(tǒng)設(shè)計
      電子制作(2018年11期)2018-08-04 03:25:40
      Python與Spark集群在收費數(shù)據(jù)分析中的應(yīng)用
      勤快又呆萌的集群機器人
      基于多線程的慣導(dǎo)邏輯仿真器設(shè)計
      計算機工程(2015年4期)2015-07-05 08:28:57
      天文測量仿真器模擬星圖精度分析
      并行片上網(wǎng)絡(luò)仿真器ParaNSim的設(shè)計及性能分析
      台山市| 临泉县| 鲜城| 县级市| 阳信县| 治多县| 通化市| 宁陵县| 吴江市| 新竹县| 渭南市| 清水县| 汾阳市| 当阳市| 景泰县| 邓州市| 西宁市| 屏南县| 长垣县| 屯留县| 金湖县| 怀远县| 高州市| 彭州市| 昆山市| 延边| 乌苏市| 莫力| 达日县| 德庆县| 香港 | 明光市| 辉县市| 平山县| 康乐县| 扶绥县| 郴州市| 洪湖市| 阜南县| 安顺市| 湖口县|