劉家華,陳靖宇
廣東工業(yè)大學(xué) 計(jì)算機(jī)學(xué)院,廣州510006
脈沖神經(jīng)網(wǎng)絡(luò)(Spiking Neural Network,SNN)[1]是第三代人工神經(jīng)網(wǎng)絡(luò),它結(jié)合了生物神經(jīng)系統(tǒng)與人工神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)、功能與原理,對(duì)腦神經(jīng)系統(tǒng)進(jìn)行建模,模擬仿真人的智能行為,如學(xué)習(xí)、識(shí)別、推理演算等[2],與傳統(tǒng)的人工神經(jīng)網(wǎng)絡(luò)相比,脈沖神經(jīng)網(wǎng)絡(luò)更接近人腦神經(jīng)網(wǎng)絡(luò)的工作機(jī)理。脈沖神經(jīng)網(wǎng)絡(luò)以脈沖神經(jīng)元[3]為基本單元,脈沖神經(jīng)元(Spiking Neuron)膜電位非線性累積,當(dāng)?shù)竭_(dá)閾值電位后脈沖放電并進(jìn)入不應(yīng)期冷卻,脈沖通過(guò)軸突傳遞給下一個(gè)神經(jīng)元,大量的脈沖神經(jīng)元構(gòu)成的神經(jīng)網(wǎng)絡(luò)不僅擁有更強(qiáng)大的計(jì)算能力,而且可以處理復(fù)雜的信息信號(hào)和模擬連續(xù)函數(shù)[4]。不同的神經(jīng)元具有不同的幾何形態(tài)和電學(xué)特性,通過(guò)對(duì)這些形態(tài)不一的神經(jīng)元進(jìn)行數(shù)學(xué)建模與數(shù)值分析,才能開展多種神經(jīng)計(jì)算與模擬仿真。
隨著神經(jīng)科學(xué)研究成果的積累,早期人們對(duì)生物神經(jīng)系統(tǒng)的構(gòu)造和運(yùn)行機(jī)理已有了比較全面的認(rèn)識(shí),對(duì)不同的生物神經(jīng)元構(gòu)建出具有生物可解釋性的脈沖神經(jīng)元模型。Hodgkin 等人通過(guò)對(duì)烏賊軸突神經(jīng)的研究,揭示了各種可興奮性細(xì)胞的基本規(guī)律,提出了Hodgkin-Huxley神經(jīng)元模型[5]。Lapicque用電子線路模擬神經(jīng)元的神經(jīng)生理現(xiàn)象,簡(jiǎn)化了Hodgkin-Huxley神經(jīng)元模型負(fù)責(zé)的高維非線性方程,提出了漏電Integrate-and-Fire 神經(jīng)元模型[6]。Izhikevich 通過(guò)對(duì)Hodgkin-Huxley 神經(jīng)元模型的分岔分析,結(jié)合了Integrate-and-Fire 神經(jīng)元模擬的計(jì)算效率,提出了Izhikevich 二維脈沖神經(jīng)元模型[7],以1 000個(gè)Izhikevich為模型的神經(jīng)元在1 s的生物時(shí)間仿真1 000 生物周期。近幾年來(lái),人們對(duì)脈沖神經(jīng)網(wǎng)絡(luò)模型進(jìn)行深入研究,相繼提出了許多空間復(fù)雜的神經(jīng)元模型,如表1 所示,BULE BRAIN 團(tuán)隊(duì)提出的Hippocampus神經(jīng)元模型,它有13種不同形態(tài)的神經(jīng)元,由約80萬(wàn)個(gè)神經(jīng)元和3.6億個(gè)突觸連接構(gòu)成。
表1 多種神經(jīng)元模擬示例
龐大的神經(jīng)元分布與頻繁的神經(jīng)元間的脈沖交互,在串行方式下難以進(jìn)行仿真實(shí)驗(yàn)。針對(duì)這個(gè)問(wèn)題,許多科研團(tuán)隊(duì)提出了一些解決方案。曼切斯特大學(xué)類腦科學(xué)研究團(tuán)隊(duì)研發(fā)了SpiNNaker 脈沖神經(jīng)網(wǎng)絡(luò)模擬器[13]。SpiNNaker 模擬器構(gòu)建于sPyNNaker[14]軟件層與SpiNNaker 的類腦計(jì)算機(jī)[15],支持更新神經(jīng)元狀態(tài)的時(shí)間驅(qū)動(dòng)和脈沖處理的事件驅(qū)動(dòng),可以高效率多線程并行地模擬大規(guī)模不同模型的脈沖神經(jīng)網(wǎng)絡(luò)。NEURON為脈沖神經(jīng)網(wǎng)絡(luò)提供了一種分布式并行計(jì)算平臺(tái)[16],神經(jīng)元計(jì)算任務(wù)可以分布在不同的處理器節(jié)點(diǎn)上,以時(shí)間同步方式進(jìn)行神經(jīng)元仿真實(shí)驗(yàn)。雖然眾多的模擬平臺(tái)為脈沖神經(jīng)網(wǎng)絡(luò)提供了模擬環(huán)境,但國(guó)內(nèi)使用權(quán)限的原因,國(guó)內(nèi)研究者難以在神經(jīng)科學(xué)平臺(tái)上進(jìn)行模擬實(shí)驗(yàn)。如何僅僅利用個(gè)人計(jì)算機(jī)實(shí)現(xiàn)脈沖神經(jīng)網(wǎng)絡(luò)高效率地模擬仿真,成為國(guó)內(nèi)神經(jīng)科學(xué)研究者所關(guān)注的問(wèn)題之一。
隨著計(jì)算機(jī)硬件的支持,計(jì)算資源的提升,個(gè)人計(jì)算機(jī)內(nèi)核數(shù)不斷增多(如ARM A83 處理器8 核,Intel i7-8740處理器6核),為此,本文設(shè)計(jì)了一種多核并行的脈沖神經(jīng)元網(wǎng)絡(luò)模擬器框架,利用多核的計(jì)算能力,高效地對(duì)大規(guī)模脈沖神經(jīng)網(wǎng)絡(luò)進(jìn)行并行計(jì)算。在并行計(jì)算任務(wù)的分發(fā)方面,將神經(jīng)元進(jìn)行編碼,并對(duì)每個(gè)核進(jìn)行映射。在網(wǎng)絡(luò)通信方面,采用源地址尋址的通信方式,自定義分布式路由表實(shí)現(xiàn)處理器內(nèi)多核間的脈沖傳輸。采用同步時(shí)間驅(qū)動(dòng)策略,在每個(gè)生物周期進(jìn)行動(dòng)態(tài)同步,解決并行同步問(wèn)題。以Izhikevich 脈沖神經(jīng)元為模型,在大規(guī)模的脈沖網(wǎng)絡(luò)結(jié)構(gòu)上進(jìn)行仿真實(shí)驗(yàn)。實(shí)驗(yàn)結(jié)果表明,本文的模擬器在大規(guī)模的網(wǎng)絡(luò)結(jié)構(gòu)中,并行仿真計(jì)算的效率優(yōu)于傳統(tǒng)的串行仿真計(jì)算。
Izhikevich 脈沖神經(jīng)元模型是單房室神經(jīng)元,由于該模型結(jié)構(gòu)簡(jiǎn)單,本文以Izhikevich 脈沖神經(jīng)元模型作為模擬器仿真實(shí)驗(yàn)對(duì)象。在多核并行模擬器設(shè)計(jì)中,涉及到并行任務(wù)的分發(fā)、多核間的網(wǎng)絡(luò)傳輸、時(shí)間同步的問(wèn)題。針對(duì)這些問(wèn)題,進(jìn)行了神經(jīng)元的映射與編碼設(shè)計(jì),自定義路由表與動(dòng)態(tài)同步設(shè)計(jì)。
數(shù)學(xué)上來(lái)講,脈沖神經(jīng)元是一種混合系統(tǒng):神經(jīng)元的狀態(tài)根據(jù)一些生物物理方程不斷變化,這些方程通常是微分方程(確定性或隨機(jī)性、普通或偏微分方程),通過(guò)突觸接收到脈沖信號(hào)觸發(fā)一些變量的變化。因此脈沖神經(jīng)元的動(dòng)力學(xué)可以描述如下:
其中,X 是描述神經(jīng)元狀態(tài)的向量,f 表示神經(jīng)元狀態(tài)變量演化的微分方程,gi指脈沖通過(guò)突觸i 后對(duì)神經(jīng)元的影響,當(dāng)X ∈A 滿足某個(gè)條件時(shí)就會(huì)發(fā)出一個(gè)脈沖[17]。例如Izhikevich 模型Vm≥θ(這里Vm是神經(jīng)元膜電位對(duì)應(yīng)矢量X)神經(jīng)元產(chǎn)生一個(gè)脈沖,同時(shí)作為X的膜電位將被重置。Izhikevich的二維脈沖神經(jīng)元模型如下所示:
如果神經(jīng)元的膜電位V ≥30 mV,輔助的復(fù)位機(jī)制為:
式中,V 表示膜電位;U 表示恢復(fù)變量,用來(lái)代理生理模型中激活的K+電流和流失的Na+電流,實(shí)現(xiàn)對(duì)膜電位V 的負(fù)反饋。Izhikevich神經(jīng)元模型中的參數(shù)a、b、c、d是無(wú)量綱參數(shù),隨著參數(shù)a、b、c、d 取值的變化,Izhikevich神經(jīng)元模型可以表現(xiàn)出豐富的脈沖發(fā)放模式。參數(shù)a表示恢復(fù)變量U 的時(shí)間尺度,a 的值越小,表明恢復(fù)得越慢;參數(shù)b 表示恢復(fù)變量U 依賴于膜電位V 的閾值下隨機(jī)波動(dòng)的敏感程度;參數(shù)c 表示神經(jīng)元發(fā)放脈沖后膜電位V 的復(fù)位值;參數(shù)d 表示神經(jīng)元發(fā)放脈沖后恢復(fù)變量U 的復(fù)位值。
映射與編碼設(shè)計(jì)思路:(1)每一個(gè)神經(jīng)元總有唯一內(nèi)核與它對(duì)應(yīng);(2)充分利用每個(gè)內(nèi)核的計(jì)算資源,每個(gè)內(nèi)核間神經(jīng)元個(gè)數(shù)差不超過(guò)M ;(3)確保神經(jīng)元的獨(dú)立性,映射前后神經(jīng)元有獨(dú)立的編碼。
大規(guī)模的脈沖神經(jīng)網(wǎng)絡(luò)在多核中并行計(jì)算時(shí),需要將計(jì)算任務(wù)分發(fā)至每個(gè)內(nèi)核中,即將網(wǎng)絡(luò)中的神經(jīng)元映射至對(duì)應(yīng)的內(nèi)核。內(nèi)核的集合為C={Cm;m=1,2,…,M},M 是內(nèi)核的個(gè)數(shù),神經(jīng)元的集合為V={Vn;n=1,2,…,N},N 是神經(jīng)元個(gè)數(shù)。神經(jīng)元與內(nèi)核的映射關(guān)系可以表達(dá)為:
神經(jīng)元初始分配順序序號(hào),神經(jīng)元采用均分的方法映射至對(duì)應(yīng)的內(nèi)核,每個(gè)內(nèi)核平均分配到的神經(jīng)元個(gè)數(shù)為AVG,AVG 可以表示為:
若有多余的神經(jīng)元,多余的神經(jīng)元分配至最后一個(gè)內(nèi)核,最后一個(gè)內(nèi)核神經(jīng)元個(gè)數(shù)為EXTRA,EXTRA 可以表示為:
神經(jīng)元映射對(duì)應(yīng)的內(nèi)核后,由源序號(hào)重新編碼。神經(jīng)元編碼定義為32 位,編碼規(guī)則如下:前12 位為CPU的ID(保留12位CPU位方便以后的擴(kuò)展應(yīng)用),中間4位為內(nèi)核ID,后16位為神經(jīng)元核內(nèi)局部ID,如圖1所示。
圖1 神經(jīng)元的映射與編碼
路由表設(shè)計(jì)思路:(1)根據(jù)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)可生成靜態(tài)路由表;(2)源神經(jīng)元通過(guò)查表可尋找目的神經(jīng)元;(3)多表結(jié)合,減少查詢的時(shí)間復(fù)雜度。
以源地址尋址作為內(nèi)核間神經(jīng)元的通信方式,由此在每一個(gè)內(nèi)核中設(shè)計(jì)了兩份路由表:(1)第一份路由表為發(fā)送表(Table 1),其作用是當(dāng)本核內(nèi)神經(jīng)元生成脈沖,通過(guò)Table 1由源神經(jīng)元ID查詢到對(duì)應(yīng)目的神經(jīng)元ID。若目的神經(jīng)元為本核內(nèi)的神經(jīng)元,直接根據(jù)路由表的權(quán)值影響本核目的神經(jīng)元的權(quán)值。若目的神經(jīng)元為核外的神經(jīng)元,將脈沖(源ID)通過(guò)I/O傳輸方式寫入對(duì)應(yīng)的神經(jīng)元所在的內(nèi)核緩存中。(2)第二份路由表為接收表(Table 2),當(dāng)本核收到來(lái)自其他核發(fā)來(lái)的脈沖(源ID),通過(guò)Table 2 查詢?cè)撁}沖影響本核內(nèi)的哪些神經(jīng)元,并根據(jù)Table 2獲取到影響權(quán)值大小。如圖2所示,根據(jù)自定義的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)與突觸連接權(quán)值生成權(quán)值文件,在神經(jīng)元映射與編碼后,根據(jù)權(quán)值文件生成每個(gè)內(nèi)核對(duì)應(yīng)的兩份路由表。生成路由表的算法如下所示。
算法1 生成路由表
查表的時(shí)間復(fù)雜度為O(1),通過(guò)實(shí)驗(yàn)測(cè)速,源神經(jīng)元查詢多個(gè)目的神經(jīng)元在1 μs內(nèi)完成。
圖2 路由表的生成
神經(jīng)網(wǎng)絡(luò)仿真有兩大類算法:同步時(shí)間驅(qū)動(dòng)算法[18]和異步事件驅(qū)動(dòng)算法[19]。其中同步時(shí)間驅(qū)動(dòng)算法所有的神經(jīng)元在每一個(gè)周期都進(jìn)行同步更新,異步事件驅(qū)動(dòng)算法只有當(dāng)神經(jīng)元在接收或發(fā)出一個(gè)脈沖時(shí)才會(huì)更新。時(shí)間驅(qū)動(dòng)算法與事件驅(qū)動(dòng)算法在理論上相比,神經(jīng)元處理時(shí)間上時(shí)間驅(qū)動(dòng)算法是近似的,沒(méi)有事件驅(qū)動(dòng)算法精確。但考慮到模擬器是為大規(guī)模仿真而設(shè)計(jì)的,在大規(guī)模仿真中,性能是一個(gè)關(guān)鍵問(wèn)題,由于網(wǎng)絡(luò)延遲存在,異步驅(qū)動(dòng)算法無(wú)法在精確時(shí)間內(nèi)完成點(diǎn)對(duì)點(diǎn)的脈沖傳輸,并且無(wú)法大規(guī)模集成地對(duì)神經(jīng)元群批處理。再者事件驅(qū)動(dòng)算法的精度依賴于特定的神經(jīng)元模型[20],存在模擬器的擴(kuò)展性不高的問(wèn)題。通過(guò)綜合考慮,本文模擬器采用的同步時(shí)間驅(qū)動(dòng)算法如下所示。
算法2 同步時(shí)間驅(qū)動(dòng)
在同步時(shí)間驅(qū)動(dòng)算法中,所有神經(jīng)元的狀態(tài)變量在每個(gè)周期進(jìn)行一次更新X(t)→X(t+dt),更新所有變量后,對(duì)每個(gè)神經(jīng)元檢查閾值條件。每個(gè)滿足該條件的神經(jīng)元產(chǎn)生一個(gè)脈沖,該脈沖傳輸?shù)狡淠繕?biāo)神經(jīng)元,更新相應(yīng)的變量(X ←gi(X))。
算法的仿真時(shí)間由兩部分組成:(1)更新神經(jīng)元狀態(tài);(2)脈沖的傳播。假設(shè)神經(jīng)元的數(shù)目為N ,那么時(shí)間復(fù)雜度為O(N/dt)。假如在每個(gè)生物周期中,平均有FN 個(gè)脈沖由神經(jīng)元生成(F 是脈沖平均生成率),需要傳播至P 個(gè)目標(biāo)神經(jīng)元,總時(shí)間成本為T,T 可以表示為:
這里,cu是單個(gè)神經(jīng)元更新狀態(tài)花費(fèi)的時(shí)間,cp是單個(gè)脈沖傳輸所花費(fèi)的時(shí)間。
動(dòng)態(tài)同步設(shè)計(jì)思路:(1)內(nèi)核完成每個(gè)周期計(jì)算任務(wù)與脈沖傳輸后進(jìn)行一次狀態(tài)同步;(2)以最先完成計(jì)算任務(wù)的內(nèi)核時(shí)間點(diǎn)作為同步開始,以全部?jī)?nèi)核完成同步的時(shí)間點(diǎn)作為同步結(jié)束;(3)解決同步時(shí)網(wǎng)絡(luò)延遲、脈沖數(shù)據(jù)丟失的問(wèn)題。
在時(shí)間同步方面,同步分為初始同步與周期同步。初始同步:每一個(gè)內(nèi)核綁定獨(dú)自的線程,在每個(gè)線程中設(shè)置線程?hào)艡?,只有?dāng)每個(gè)內(nèi)核都完成本核的初始化后,打開線程?hào)艡谑沟盟芯€程在同一時(shí)間點(diǎn)開始運(yùn)行。周期同步:在每個(gè)周期對(duì)每一個(gè)內(nèi)核進(jìn)行周期同步,如圖3 所示。當(dāng)一個(gè)內(nèi)核完成本周期的計(jì)算任務(wù)后,通過(guò)廣播的方式發(fā)送同步數(shù)據(jù)包給其他核。然后自身進(jìn)入接收階段并每隔一段時(shí)間間隔t 重復(fù)發(fā)送同步數(shù)據(jù)包(防止同步包的丟失)。t 由神經(jīng)元數(shù)量N 與內(nèi)核數(shù)量M 決定,可以表示為:
若本核收到其他核傳來(lái)的同步數(shù)據(jù)包時(shí),記錄對(duì)應(yīng)核的周期完成情況。只有當(dāng)每個(gè)內(nèi)核自身完成本周期的計(jì)算任務(wù)和收到其他內(nèi)核的同步數(shù)據(jù)包后,則開啟下一個(gè)周期。若本周期計(jì)算完成但長(zhǎng)時(shí)間沒(méi)收到其他核的同步數(shù)據(jù)包,則重新廣播本核本周期的同步數(shù)據(jù)包。
圖3 脈沖神經(jīng)網(wǎng)絡(luò)周期同步
內(nèi)核結(jié)構(gòu)如圖4 所示,每個(gè)線程綁定獨(dú)立的內(nèi)核,內(nèi)核中存放映射后的神經(jīng)元,同時(shí)內(nèi)核也存放對(duì)應(yīng)的兩份路由表Table1 與Table 2,其中Table 1 為發(fā)送表,Table 2為接收表。在共享內(nèi)存上對(duì)每個(gè)核分配兩塊獨(dú)立的內(nèi)存空間,分別為緩存1(Buffer 1)與緩存2(Buffer 2)。其中Buffer 1 存放本核神經(jīng)元生成的脈沖,Buffer 2 接收存放外核傳來(lái)的脈沖。
模擬流程如圖5所示,根據(jù)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)生成對(duì)應(yīng)的權(quán)值文件,由權(quán)值文件創(chuàng)建每個(gè)核對(duì)應(yīng)的路由表,根據(jù)配置參數(shù)初始化所有神經(jīng)元。將每個(gè)核綁定至獨(dú)立的線程,當(dāng)每個(gè)核部署完成并初始同步后開始周期模擬。每個(gè)核的每個(gè)周期的主要工作分為三步:(1)更新核內(nèi)每個(gè)神經(jīng)元的狀態(tài),根據(jù)脈沖神經(jīng)元的模型計(jì)算出神經(jīng)元的膜電位,若神經(jīng)元膜電位高于閾值則生成脈沖(源ID),將脈沖放置核內(nèi)的緩存1(Buffer 1)中;(2)處理神經(jīng)元生成的脈沖,當(dāng)遍歷更新完核內(nèi)所有神經(jīng)元狀態(tài)后,查看緩存1 是否有本核神經(jīng)元生成的脈沖,如果有脈沖,則逐一取出并通過(guò)查發(fā)送表(Table 1)直接影響本核內(nèi)對(duì)應(yīng)神經(jīng)元的膜電位或?qū)⒚}沖發(fā)送至對(duì)應(yīng)核的緩存2(Buffer 2)中;(3)處理外核傳來(lái)的脈沖,查看緩存2 中是否有外核傳來(lái)的脈沖,如果有脈沖,則逐一取出并通過(guò)查接收表(Table 2)直接影響本核內(nèi)對(duì)應(yīng)神經(jīng)元的膜電位。當(dāng)每個(gè)核完成本周期的任務(wù)后,所有核進(jìn)行一次周期同步。仿真模擬結(jié)束后,記錄每個(gè)脈沖神經(jīng)元在每個(gè)周期的生成脈沖情況。
圖4 內(nèi)核結(jié)構(gòu)
圖5 模擬仿真流程
本文的實(shí)驗(yàn)環(huán)境基于Intel Core i7-8750 六核處理器,內(nèi)存24 GB,Liunx操作系統(tǒng),GCC-version7.3版本下完成編寫程序與編譯。
根據(jù)Izhikevich文獻(xiàn)[7]的模型生成相同的脈沖神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),總共有1 000個(gè)脈沖神經(jīng)元,神經(jīng)元之間以全連接的方式連接,神經(jīng)元間的突觸權(quán)值隨機(jī)生成,興奮性神經(jīng)元突觸權(quán)值在0~0.5 范圍,抑制性神經(jīng)元突觸權(quán)值在-1~0范圍,神經(jīng)元的其余配置參數(shù)如表2所示。
表2 神經(jīng)元的配置參數(shù)
圖6 是Izhikevich 提供的源碼在1 000 個(gè)生物周期以串行的方式模擬仿真的結(jié)果,模擬仿真時(shí)間為69 ms,脈沖激活數(shù)是7 591。圖7 是在六核單處理器環(huán)境下在1 000 個(gè)生物周期以并行的方式仿真的結(jié)果,模擬仿真時(shí)間是805 ms,脈沖激活數(shù)是8 256。對(duì)比結(jié)果顯示兩者脈沖激活數(shù)相近,多核并行模擬器生成的脈沖激活結(jié)果圖與Izhikevich 提供的實(shí)驗(yàn)結(jié)果圖呈現(xiàn)出相同的alpha波段與gamma波段,驗(yàn)證了模擬器的理論正確性。
圖6 Izhikevich原文仿真的實(shí)驗(yàn)結(jié)果
圖7 模擬器仿真的實(shí)驗(yàn)結(jié)果
針對(duì)Izhikevich模型的串行計(jì)算環(huán)境與本文并行計(jì)算環(huán)境做不同數(shù)量集的對(duì)比實(shí)驗(yàn),生成三種不同數(shù)量級(jí)的網(wǎng)絡(luò)結(jié)構(gòu),分別為10 000、50 000、100 000 個(gè)Izhikevich模型的脈沖神經(jīng)元網(wǎng)絡(luò)。在10 000個(gè)脈沖神經(jīng)元模型中定義8 000 個(gè)興奮性神經(jīng)元和2 000 個(gè)抑制性神經(jīng)元隨機(jī)分布,網(wǎng)絡(luò)結(jié)構(gòu)定義為每個(gè)神經(jīng)元與10%的神經(jīng)元隨機(jī)連接。在50 000個(gè)脈沖神經(jīng)元模型中,定義40 000 個(gè)興奮性神經(jīng)元和10 000 個(gè)抑制性神經(jīng)元隨機(jī)分布,網(wǎng)絡(luò)結(jié)構(gòu)定義為每個(gè)神經(jīng)元與10%的神經(jīng)元隨機(jī)連接。在100 000 個(gè)脈沖神經(jīng)元模型中,定義80 000個(gè)興奮性神經(jīng)元和20 000個(gè)抑制性神經(jīng)元隨機(jī)分布,網(wǎng)絡(luò)結(jié)構(gòu)定義為每個(gè)神經(jīng)元與10%的神經(jīng)元隨機(jī)連接。配置參數(shù)與上個(gè)實(shí)驗(yàn)參數(shù)相同,10 000、50 000、100 000不同規(guī)模數(shù)量集的脈沖神經(jīng)網(wǎng)絡(luò)在1 000個(gè)生物周期在模擬器上所花費(fèi)時(shí)間如圖8~圖10所示。
圖8 10 000神經(jīng)元不同核的模擬時(shí)間
圖9 50 000神經(jīng)元不同核的模擬時(shí)間
圖10 100 000神經(jīng)元不同核的模擬時(shí)間
在多核并行模擬器下成功復(fù)現(xiàn)了1 000個(gè)Izhikevich神經(jīng)元模型的脈沖網(wǎng)絡(luò),在此基礎(chǔ)上進(jìn)行10 000、50 000、100 000個(gè)神經(jīng)元的脈沖網(wǎng)絡(luò)的模擬對(duì)比實(shí)驗(yàn)。
仿真設(shè)計(jì)及實(shí)現(xiàn)并行模擬的目的是希望并行模擬比相應(yīng)的串行模擬更快,為了評(píng)估并行計(jì)算對(duì)仿真模擬效率的提高,通常用加速比[21](Speedup)作為衡量標(biāo)準(zhǔn),加速比S 可以表示為:
其中,Te為串行程序模擬時(shí)間,Tp為并行程序模擬時(shí)間。仿真結(jié)果如表3所示。
表3 不同規(guī)模的并行計(jì)算加速比
從表3可以看出,多核并行計(jì)算在規(guī)模較小的數(shù)據(jù)集上(10 000數(shù)量以下的神經(jīng)元)效率不如串行計(jì)算,但在大規(guī)模數(shù)據(jù)集上并行計(jì)算可以提高仿真速度,最大加速比為1.96,當(dāng)內(nèi)核達(dá)到一定數(shù)量時(shí),加速比逐漸收斂。如圖11 所示,本實(shí)驗(yàn)中當(dāng)內(nèi)核數(shù)量達(dá)到4 核后,內(nèi)核數(shù)量越多并行計(jì)算的效率卻得不到更好的提高。
圖11 不同規(guī)模數(shù)據(jù)集的模擬情況
本文在10 000與50 000數(shù)量集的實(shí)驗(yàn)中,記錄每個(gè)階段花費(fèi)的時(shí)間,如表4 所示,模擬時(shí)間開銷主要在神經(jīng)元狀態(tài)的更新與脈沖的傳輸。在10 000數(shù)據(jù)集中,神經(jīng)元整體狀態(tài)更新所花費(fèi)時(shí)間與內(nèi)核間脈沖傳輸?shù)臅r(shí)間比為230。在50 000 數(shù)據(jù)集中,神經(jīng)元整體狀態(tài)更新所花費(fèi)時(shí)間與內(nèi)核間脈沖傳輸?shù)臅r(shí)間比為516。
表4 各階段的時(shí)間開銷
在多核間的網(wǎng)絡(luò)傳輸中,采用共享內(nèi)存的方式實(shí)現(xiàn)多核間的數(shù)據(jù)傳輸,共享內(nèi)存是數(shù)據(jù)共享的最快方式,但多線程之間的數(shù)據(jù)傳輸需要對(duì)緩存區(qū)提供互斥條件。當(dāng)內(nèi)核外神經(jīng)元交互頻繁時(shí),多個(gè)線程容易同一時(shí)刻對(duì)同一個(gè)緩存區(qū)進(jìn)行訪問(wèn)而出現(xiàn)線程阻塞的情況,由此導(dǎo)致網(wǎng)絡(luò)出現(xiàn)延遲的情況。
綜上分析,當(dāng)核內(nèi)計(jì)算量不繁重,內(nèi)核的平均計(jì)算速度遠(yuǎn)快于網(wǎng)絡(luò)傳輸速度時(shí),并行計(jì)算效果不如串行計(jì)算。當(dāng)內(nèi)核平均計(jì)算速度接近網(wǎng)絡(luò)傳輸速度時(shí)(大規(guī)模計(jì)算下),并行計(jì)算速率優(yōu)于傳統(tǒng)的串行計(jì)算。而在大規(guī)模計(jì)算下,網(wǎng)絡(luò)傳輸交互頻繁時(shí),內(nèi)核越多,周期計(jì)算效率不一定得到有效的提高。
面對(duì)大規(guī)模的脈沖神經(jīng)網(wǎng)絡(luò)模擬,一般研究者在個(gè)人計(jì)算機(jī)上以串行的方式難以高效率地進(jìn)行模擬仿真,本文設(shè)計(jì)一種多核并行脈沖神經(jīng)網(wǎng)絡(luò)模擬器,為脈沖神經(jīng)網(wǎng)絡(luò)提供一個(gè)多核并行計(jì)算的模擬環(huán)境。在大規(guī)模神經(jīng)網(wǎng)絡(luò)模擬中,模擬器可以充分利用每個(gè)內(nèi)核的計(jì)算資源,高效率進(jìn)行脈沖神經(jīng)網(wǎng)絡(luò)的模擬。實(shí)驗(yàn)結(jié)果表明,本文設(shè)計(jì)的模擬器與傳統(tǒng)的串行仿真模擬相比,在大規(guī)模數(shù)據(jù)集的并行計(jì)算環(huán)境下,速度約為串行計(jì)算的兩倍。本實(shí)驗(yàn)也可以為類似的脈沖神經(jīng)網(wǎng)絡(luò)的模擬并行化設(shè)計(jì)提供參考。
在本文實(shí)驗(yàn)中發(fā)現(xiàn),當(dāng)內(nèi)核數(shù)達(dá)到一定數(shù)量時(shí),加速比將逐漸減少,后續(xù)的工作中,可以設(shè)置多級(jí)緩存,減少多核間的網(wǎng)絡(luò)傳輸延時(shí)。同時(shí)還發(fā)現(xiàn),當(dāng)內(nèi)核間的神經(jīng)元交互頻繁時(shí),網(wǎng)絡(luò)傳輸效率不高,在后續(xù)工作中,可優(yōu)化神經(jīng)元的映射算法,將交互頻繁的神經(jīng)元映射至同一內(nèi)核中,減少網(wǎng)絡(luò)傳輸?shù)呢?fù)載。在未來(lái)的工作中,增添模擬器的接口模擬,以便不同的脈沖神經(jīng)元模型都可以在模擬器上并行模擬計(jì)算。