• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 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è)計及性能分析
    林西县| 郑州市| 新昌县| 宕昌县| 沙田区| 鹤山市| 广平县| 海阳市| 彭水| 巴青县| 涞水县| 吉首市| 璧山县| 康平县| 邢台市| 石阡县| 兴安县| 朝阳区| 淄博市| 洛扎县| 阿巴嘎旗| 罗定市| 江城| 清河县| 鹤山市| 侯马市| 安溪县| 北流市| 嘉黎县| 资中县| 宣威市| 清水县| 丰宁| 兴城市| 黑河市| 铁岭县| 新巴尔虎右旗| 庆安县| 襄垣县| 巴林右旗| 中阳县|