臧照虎,李 晨,王耀華,陳小文,郭 陽
(國防科技大學(xué)計算機(jī)學(xué)院,湖南 長沙 410073)
當(dāng)前,在多核及眾核處理器中,大量并行應(yīng)用程序和程序模型依賴于線程之間的同步來確保一致性和正確性[1,2]。因此,這類應(yīng)用程序的性能受制于同步原語的延遲,隨著并行處理器或計算數(shù)據(jù)規(guī)模的增大,這種依賴性變得越來越大。柵欄同步是一個重要的同步原語,它會阻塞線程,直到所有線程都到達(dá)同步點,繼而恢復(fù)執(zhí)行。柵欄通常用于將并行應(yīng)用分離成不同的執(zhí)行階段,以確保在對應(yīng)階段所有線程完成之前,下一階段不會啟動。
為了實現(xiàn)柵欄同步,研究人員提出了許多基于軟件的方法[3,4]。通常,所有線程共享一個變量。當(dāng)每個線程到達(dá)同步點時,訪問內(nèi)存并修改該變量,使其值加1,然后進(jìn)入等待狀態(tài)。當(dāng)變量的值達(dá)到預(yù)設(shè)的同步線程數(shù)時,所有線程都將恢復(fù)執(zhí)行。軟件柵欄同步方法仍然需要基于同步原語,如信號量和鎖[5,6],利用這些同步原語,通過共享內(nèi)存實現(xiàn)柵欄同步。由于共享變量存儲在內(nèi)存中,每次修改共享變量都需要訪問內(nèi)存,因此長內(nèi)存訪問延遲可能成為系統(tǒng)的瓶頸。
利用共享內(nèi)存實現(xiàn)的柵欄的開銷主要來自訪問共享內(nèi)存的原子操作,因此可以利用Cache一致性協(xié)議來實現(xiàn)[7,8]。然而,一些多核處理器可能不支持硬件Cache一致性協(xié)議,因此這些系統(tǒng)無法采用這種方法[9]。為了降低這種軟件同步開銷,研究人員提出了幾種基于硬件實現(xiàn)的柵欄同步方法[10 - 14],典型的是在處理器上集成一個集中式硬件柵欄單元,用于處理來自所有內(nèi)核的柵欄同步請求。與軟件柵欄同步相比,采用硬件設(shè)計的集中式柵欄同步方法效率更高。然而,當(dāng)它運(yùn)行在多核甚至眾核處理器系統(tǒng)上時,這種集中式柵欄同步方法可能會導(dǎo)致網(wǎng)絡(luò)擁塞[15]。陳小文[16]提出一種協(xié)同通信方法,用于在基于mesh的眾核處理器中實現(xiàn)高效和高擴(kuò)展性的all-to-all柵欄同步機(jī)制,該方法使用片上網(wǎng)絡(luò)傳遞同步報文,但仍會占用片上網(wǎng)絡(luò)資源,可能在網(wǎng)絡(luò)中形成熱點。
因此,本文提出一種稱為HSync(Hierarchical Synchronization)的層次化硬件柵欄同步設(shè)計。HSync建立在分層網(wǎng)絡(luò)上,可以減少柵欄同步原語的同步流量,并且易于擴(kuò)展以滿足眾核處理器的需求。實驗結(jié)果表明,與傳統(tǒng)的基于集中式硬件柵欄的柵欄同步相比,HSync實現(xiàn)了13%的性能提升和高達(dá) 74% 的同步報文減少。
研究人員在過去的幾十年中已經(jīng)提出了許多方法,例如在軟件中利用原子操作實現(xiàn)同步[17]。軟件同步方法雖然因其實現(xiàn)簡單而被廣泛使用,但是,構(gòu)建于硬件共享內(nèi)存系統(tǒng)之上的軟件實現(xiàn)的柵欄同步操作延遲很高,內(nèi)核間通信的流量和延遲都隨著同步參與者數(shù)量的增加而呈指數(shù)增加[18],這導(dǎo)致了同步數(shù)百個線程的效率極低。
當(dāng)前已有研究人員使用專用硬件來提高柵欄同步性能,但這些方法也存在一些缺點,例如缺乏可擴(kuò)展性或?qū)Σl(fā)柵欄的支持有限。從本質(zhì)上來說,柵欄同步原語是一個與門,在硬件實現(xiàn)中,柵欄的實際性能受到芯片中連線延遲的限制。Hsu等[19]提出了一個多級隨機(jī)交換網(wǎng)絡(luò),通過組合交換機(jī)中的數(shù)據(jù)包來有效處理軟件柵欄的同步流量,以緩解網(wǎng)絡(luò)中的熱點擁塞。Monchiero等[20]提出使用硬件模塊來減少CMP(Chip MultiProcessor)系統(tǒng)中核心的等待時間,該模塊集成在內(nèi)存控制器中,稱為SOB(Synchronization Operation Buffer)。SOB管理本地核心對共享變量的輪詢,避免產(chǎn)生網(wǎng)絡(luò)流量及訪存。眾核系統(tǒng)中各核心也可以通過片上網(wǎng)絡(luò)進(jìn)行同步信息的交換。Giannoula等[21]提出的SynCron(Synchronization)適用于NDP(Near-Data-Processing) 架構(gòu),此架構(gòu)將處理核心置于數(shù)據(jù)附近,而不是將數(shù)據(jù)搬移至處理器中。該方法的優(yōu)勢在于將信號量、鎖、柵欄及條件變量4種同步原語集中到一個硬件中,但是也因此帶來了更大的開銷,降低了靈活性,而且沒有應(yīng)用到實際當(dāng)中。本文方法依托于國防科技大學(xué)的眾核處理器項目,已應(yīng)用于實際芯片,在減少網(wǎng)絡(luò)流量,降低時延,降低開銷的同時,擁有較強(qiáng)的擴(kuò)展性。Hetland等[22]基于Intel的HARP(Hardware Accelerator Research Program)多芯片架構(gòu)平臺提出了Harp Barrier的同步方法,此方法的優(yōu)勢在于利用這種混合架構(gòu)的FPGA及緩存一致性接口實現(xiàn)柵欄,但是其缺點在于難以適用于一般的眾核處理器。
綜上,軟件柵欄會帶來較高的時間開銷,而集中式硬件柵欄同步會占用片上網(wǎng)絡(luò),可能造成網(wǎng)絡(luò)擁塞及熱點問題。因此,為了避免上述問題,本文設(shè)計了基于層次化網(wǎng)絡(luò)進(jìn)行消息傳遞的方法。層次化網(wǎng)絡(luò)最大限度地減少了跨結(jié)點的通信報文,并在高并發(fā)場景下具有高性能。為了保證設(shè)計的正確性,參考驗證方法學(xué)[23,24]對HSync進(jìn)行了模塊級完善和系統(tǒng)級驗證。
本文是基于國防科技大學(xué)自主研發(fā)的高性能通用DSP(Digital Signal Processor)提出的HSync。該款DSP具有24顆DSP核心,所有的核心被分為4個結(jié)點,6個核組合成1個結(jié)點。HSync在每個結(jié)點內(nèi)設(shè)置一個本地柵欄單元LBU(Local Barrier Unit),本結(jié)點的所有核都與之連接,由其負(fù)責(zé)本結(jié)點的柵欄同步請求。全局柵欄單元GBU(Global Barrier Unit)設(shè)置在結(jié)點之間,所有本地柵欄單元都與其相連,在完成本地柵欄同步后,再進(jìn)行全局柵欄同步。
HSync使用獨立的柵欄網(wǎng)絡(luò),網(wǎng)絡(luò)流量主要有2種類型,即本地柵欄同步流量和全局柵欄同步流量。如果沒有分層設(shè)計,即使是本地柵欄同步流量也需要跨全局柵欄網(wǎng)絡(luò)傳播,這大大增加了全局柵欄網(wǎng)絡(luò)的壓力,可能導(dǎo)致網(wǎng)絡(luò)擁塞和熱點問題。同時,隨著信息傳輸跳數(shù)的增加,本地柵欄同步的延遲會進(jìn)一步增加。因此,分層?xùn)艡诮Y(jié)構(gòu)可以顯著減少全局柵欄同步流量,降低本地柵欄同步延遲。
HSync是多核處理器中柵欄同步的有效解決方案,可以提高并行程序性能,降低網(wǎng)絡(luò)開銷,簡化編程難度。該方案的設(shè)計主要是基于一定數(shù)量的計算核心組成一個基本單元,稱為結(jié)點,若干結(jié)點構(gòu)成一個處理器。HSync的結(jié)構(gòu)具有很強(qiáng)的可擴(kuò)展性,便于應(yīng)用在各種多核或眾核微處理器上。程序員在使用該裝置時只需要確定每個結(jié)點需要同步的核數(shù)及所有結(jié)點同步的總核數(shù),并且使用同一個同步ID即可。
HSync使用了高度協(xié)作的兩級柵欄同步單元。如圖 1所示,柵欄同步單元包括結(jié)點內(nèi)部的本地柵欄單元和結(jié)點之間的全局柵欄單元,本地柵欄單元連接全局柵欄單元。
Figure 1 Overall structure of HSync圖1 HSync的整體結(jié)構(gòu)
在HSync柵欄同步操作中,單個核只能發(fā)起一個柵欄同步操作,但可以同時參與多個不同的柵欄同步。對于柵欄同步請求,每個結(jié)點內(nèi)部的線程首先進(jìn)行同步,然后全局柵欄單元收集所有結(jié)點的同步信息進(jìn)行處理。這種分層處理方式匯集了同步信息,減少了網(wǎng)絡(luò)中的數(shù)據(jù)包數(shù)量,可以更快地完成結(jié)點內(nèi)的柵欄同步。
本地柵欄單元 (LBU)由寄存器和相應(yīng)的控制邏輯組成,位于每個結(jié)點內(nèi),負(fù)責(zé)處理結(jié)點內(nèi)的柵欄同步請求。本文在LBU中設(shè)置了若干本地柵欄實例LBI(Local Barrier Instance),每個硬件柵欄實例用于記錄一次柵欄同步的所有信息。LBU還包含了處理同步請求、分配LBI及向內(nèi)核發(fā)送釋放信號的邏輯。LBU的結(jié)構(gòu)如圖1所示,主要由柵欄同步請求分析模塊、柵欄實例調(diào)度模塊、柵欄實例分配模塊和一些LBI組成。
為了支持多個線程并發(fā)的柵欄請求,本文在每個LBU中設(shè)置了多個LBI,并可根據(jù)系統(tǒng)規(guī)模進(jìn)行調(diào)整。LBI主要包括以下功能:(1)同步ID區(qū)分不同的同步請求;(2)記錄結(jié)點內(nèi)需要同步的線程總數(shù);(3)記錄整個處理器中需要同步的線程總數(shù);(4)使用進(jìn)程向量寄存器記錄已經(jīng)到達(dá)的線程;(5)一些配置功能,例如超時寄存器為同步請求預(yù)留了最長的保持時間。
HSync中為每個柵欄實例提供了一些配置寄存器,用戶可以通過設(shè)置這些寄存器來控制每個 LBI。比如,通過設(shè)置柵欄超時寄存器,可以調(diào)整LBI的最長占用時間,以適應(yīng)不同的工作環(huán)境。如果確定不需要配置LBI,可以去掉部分配置寄存器,以減少設(shè)計的面積開銷。
全局柵欄單元 (GBU)用于處理結(jié)點間的柵欄同步請求。與LBU的主要區(qū)別在于其內(nèi)部有多個FIFO,用于臨時存儲來自 LBU 的消息。GBU包含多個全局柵欄實例GBI(Global Barrier Instance),GBI與LBI的組成類似。GBU首先接收來自 LBU的消息,對其進(jìn)行解碼以跟蹤全局柵欄同步,并在所有線程到達(dá)時向LBU發(fā)送釋放信號。GBU 的具體結(jié)構(gòu)如圖2所示。
Figure 2 Structure of GBU圖2 全局柵欄單元的結(jié)構(gòu)
為了增強(qiáng)本文柵欄設(shè)計方案的可配置性,以及協(xié)助程序員在出現(xiàn)問題時定位錯誤,本文添加了一些用于觀察和控制柵欄的寄存器,包括狀態(tài)寄存器組和配置寄存器組。狀態(tài)寄存器用來存儲柵欄機(jī)制的當(dāng)前狀態(tài),程序員可以通過讀取這些寄存器的值來檢查機(jī)制的運(yùn)行狀態(tài);柵欄的配置信息存儲在配置寄存器中,程序員將特定值寫入這些寄存器以配置柵欄。
全局柵欄映射寄存器:該寄存器存儲了全局柵欄實例與柵欄同步請求ID的映射關(guān)系。每個柵欄同步請求ID對應(yīng)一個全局柵欄實例。這個映射關(guān)系是由硬件根據(jù)空閑柵欄實例自動建立的,程序員可以通過讀該寄存器來獲取該柵欄請求所訪問的柵欄實例。全局柵欄實例有效寄存器:默認(rèn)所有位均為1。當(dāng)使用柵欄實例時,其對應(yīng)值設(shè)置為0。當(dāng)柵欄同步完成后,柵欄實例被釋放,寄存器恢復(fù)為全1。全局錯誤寄存器:當(dāng)該寄存器設(shè)置為1時,表示柵欄處理發(fā)生異常,例如超時錯誤,將發(fā)送中斷信號通知系統(tǒng);設(shè)置為 0 時,則中斷關(guān)閉。軟復(fù)位寄存器:對該寄存器的低位寫1將復(fù)位對應(yīng)結(jié)點的柵欄單元。閾值控制寄存器:該寄存器的值表示該結(jié)點發(fā)送的同步請求存在于緩沖區(qū)頭部的時間。超時后,頭部請求將放置在緩沖區(qū)的末尾。本地柵欄單元中的寄存器組與全局柵欄單元中的類似,但沒有閾值控制寄存器。
全局柵欄實例和本地柵欄實例也包含狀態(tài)寄存器和配置寄存器。柵欄狀態(tài)寄存器:該寄存器存儲了柵欄同步請求的相關(guān)信息,包括同步請求ID、參與同步的總核數(shù)等。本地柵欄實例還包含參與同步的內(nèi)核總數(shù)。柵欄實例狀態(tài)向量寄存器:表示當(dāng)前到達(dá)的核心向量。超時寄存器:表示一個柵欄請求可以等待的最長時間,超時后此柵欄實例將被釋放。超時計數(shù)寄存器:當(dāng)一個柵欄請求被分配給一個柵欄實例時,此寄存器會開始計數(shù),記錄此同步請求的等待時間,當(dāng)超過超時寄存器的值時,會釋放柵欄,以避免長時間等待。柵欄實例錯誤使能寄存器:將此寄存器設(shè)置為1后,如果對應(yīng)LBI在處理柵欄請求中發(fā)生錯誤,將通知系統(tǒng)處理錯誤并做出其他響應(yīng)。柵欄實例錯誤寄存器:用于記錄發(fā)生錯誤時到達(dá)的核心向量,以方便于系統(tǒng)查詢和定位錯誤。
一般來說,可以將來自核心的同步請求分為2類:(1)本地同步:指只有結(jié)點內(nèi)的處理器核上的線程參與的柵欄同步。當(dāng)一個線程發(fā)送柵欄請求時,LBU接收請求并選擇一個空閑的LBU來記錄此柵欄同步的詳細(xì)信息。當(dāng)LBU收到來自其他參與同步的內(nèi)核的請求時,它會更新之前選擇的 LBI。直到所有的核都到達(dá),LBI將被LBU復(fù)位,并向參與同步的核發(fā)送釋放信號。如果參與本地同步的核數(shù)為1,則直接將請求發(fā)送給GBU進(jìn)行處理。(2)全局同步:指參與同一次同步的線程位于不同結(jié)點。不同結(jié)點的核首先完成本地柵欄同步,然后將相應(yīng)的同步信息發(fā)送給GBU。與LBU流程類似,GBU會為此請求分配一個空閑的GBI記錄同步信息。當(dāng)所有參與同步的核到達(dá)時,GBU將重置GBI,并向LBU 發(fā)送釋放信號。LBU將發(fā)布信息轉(zhuǎn)發(fā)給每個內(nèi)核,所有線程恢復(fù)執(zhí)行。
柵欄同步請求分為本地和全局,可以減少本地同步報文在網(wǎng)絡(luò)中的傳輸時間。同時,層次化的多級設(shè)計減少了全局同步的報文數(shù)量。一次完整柵欄同步的基本流程如圖 3所示。本文假設(shè)所有內(nèi)核同時參與相同的柵欄同步。
Figure 3 Flow chart of barrier synchronization request圖3 柵欄同步請求流程
HSync使用體系結(jié)構(gòu)中已有的load指令(訪問特定范圍的地址)訪問柵欄空間的方式發(fā)出同步請求,線程阻塞在此指令,直到所有線程都到達(dá)柵欄。這種方法的優(yōu)點是不需要添加新指令或修改指令集。柵欄同步請求的具體信息編碼在load指令的地址參數(shù)中。柵欄空間地址包含3個字段:SyncID(同步請求ID)、LocalNum(本地線程數(shù))和GlobalNum(全局線程數(shù)),它們各自的字段寬度根據(jù)實際系統(tǒng)配置確定。
下面給出了柵欄操作以及訪問柵欄內(nèi)部寄存器的軟件接口:
intbar_req(unsigned intSyncID,unsigned intLocalNum,unsigned intGlobalNum);
在《中關(guān)村筆記》中,資料的完備性、敘事的詳盡性是毋庸置疑的,這使得它在根本上作為“非虛構(gòu)文學(xué)”的參與者,遵循了客觀紀(jì)實性的要求,并由于藝術(shù)水準(zhǔn)的高超為這一題材的發(fā)展增添了更多可能性。
intset_bar_reg(unsigned intRegName,unsigned intValue);
intget_bar_reg(unsigned intRegName);
程序員需要向發(fā)起柵欄請求的函數(shù)傳遞3個參數(shù):表示柵欄同步請求的ID的SyncID、存儲本地結(jié)點參與同步的線程數(shù)LocalNum和存儲參與此同步的全局線程總數(shù)GlobalNum。當(dāng)柵欄同步正確完成時,該函數(shù)返回一個大于零的值。整個同步機(jī)制對程序員是透明的。當(dāng)內(nèi)核發(fā)送同步請求時,該機(jī)制自動分配空閑的 LBI 和 GBI,無需程序員指定。
為了提高方案設(shè)計的靈活性和穩(wěn)定性,本文還在HSync內(nèi)部設(shè)置了一些配置寄存器供程序員訪問。設(shè)置內(nèi)部寄存器的系統(tǒng)調(diào)用需要提供2個參數(shù):RegName(目標(biāo)寄存器的名稱)和Value(要設(shè)置的值)。獲取狀態(tài)寄存器值的函數(shù)只需要提供寄存器地址。
本節(jié)討論如何對本文提出的方案進(jìn)行擴(kuò)展,以適用于更大規(guī)模的系統(tǒng),便于HSync應(yīng)用到不同的場景中。HSync可以通過2種方式應(yīng)用于更大的系統(tǒng)。第1種方式是增加LBU中LBI的個數(shù)和GBU中GBI的個數(shù)。這種方法比較簡單容易實現(xiàn),但是在系統(tǒng)規(guī)模巨大時會造成很大的硬件開銷,且在實際程序中很少會有并發(fā)柵欄請求占滿LBI或GBI的情況。在實際測試中發(fā)現(xiàn)確實如此,每個結(jié)點通常不會同時有大量不同ID的同步請求,因此大多時候有一部分LBI或GBI并未被使用。第2種方式使用固定數(shù)量的LBI和GBI,當(dāng)同步請求數(shù)超過LBI或GBI數(shù)量時,在同步裝置中增加FIFO來緩存同步請求。
為了減少資源浪費,LBI和GBI的數(shù)量可設(shè)置為比核數(shù)更小的值,因此如果 LBI 或 GBI 被全部占用,則來自內(nèi)核的新同步請求可能會阻塞暫存于同步請求的FIFO。在這種情況下,會產(chǎn)生死鎖。為了解決這個問題,本文修改了傳統(tǒng)的FIFO,增加了一些控制邏輯。當(dāng) FIFO 中的數(shù)據(jù)在一定時間內(nèi)沒有被移除時,后續(xù)的請求將首先對FIFO 頭進(jìn)行處理。這種方法不僅減少了LBI和GBI的數(shù)量,而且對本文設(shè)計的性能沒有顯著影響,大大增強(qiáng)了設(shè)計的可擴(kuò)展性,減少了資源浪費。
為了衡量柵欄同步操作對于并行應(yīng)用程序的影響,本文使用2個計算核進(jìn)行實驗。如圖 4所示,隨著核數(shù)的增加,軟件同步方法引起的同步開銷迅速增加。當(dāng)有32個內(nèi)核在運(yùn)行矩陣乘法運(yùn)算時,接近66% 的執(zhí)行時間是消耗在各進(jìn)程同步上的,對于需要多核柵欄同步的運(yùn)算,隨著核數(shù)增加,柵欄同步操作占比會更大。對于不同運(yùn)算,柵欄同步操作所占比例不同,但隨著核數(shù)增多,占比增大的趨勢是相同的。
Figure 4 Proportion of time cost for software synchronization operation under different core scales圖4 不同核心規(guī)模下軟件同步占總執(zhí)行時間比例
本文采用Verilog硬件描述語言實現(xiàn)了HSync硬件柵欄設(shè)計,并通過將此設(shè)計集成到系統(tǒng)級環(huán)境中得到實驗結(jié)果。本文在 Linux系統(tǒng)上使用仿真軟件平臺對HSync進(jìn)行了測試。實驗中使用的24核系統(tǒng),一共4個結(jié)點,每個結(jié)點具有6個核心。
為了全面地評估HSync,本文使用了幾種不同的測試方案,包括理論性能測試、隨機(jī)激勵測試和實際應(yīng)用測試。為了測試本文方案的理論性能,首先建立了一個合成流量模型。主要做法是調(diào)整本地同步請求在全體同步請求中所占的比例。在此測試中,分別選取了5個典型值:0,25%,50%,75%和100%?;谶@個條件,隨機(jī)產(chǎn)生相應(yīng)的柵欄同步請求,并不斷地發(fā)送到同步單元,同時監(jiān)測網(wǎng)絡(luò)中的流量并記錄同步消耗的時間。本文還選擇了幾種常用的并行計算核,如FFT、一般線性遞推方程等。本文評估中所使用的計算核如表1所示。
Table 1 Computational kernels used in this experiment
本文使用合成流量模型和一些并行計算核對HSync進(jìn)行了全面測試。為了清楚地了解柵欄同步所占用的處理器執(zhí)行時間,在實驗平臺上測量了1次柵欄同步的時間。圖 5表明,硬件柵欄同步相比軟件實現(xiàn)耗時明顯減少了,本文的層次化柵欄設(shè)計耗時相比集中式也有明顯降低。
Figure 5 Average time spent in one barrier synchronization圖5 1次柵欄同步的平均耗時
從圖 6可以看出,隨著本地柵欄同步請求比例的增加,由于本地的網(wǎng)絡(luò)延遲更低,因此性能提升更加明顯。圖7為以集中式柵欄為基準(zhǔn)不同柵欄方案下各并行計算核的性能。橫坐標(biāo)代表使用的計算核,縱坐標(biāo)代表歸一化的執(zhí)行時間。由于降低了本地柵欄的同步延遲,HSync在實際應(yīng)用中相對于無層次硬件柵欄方案也有一定的改進(jìn)。
Figure 6 Performance of different barrier schemes in synthetic traffic models圖6 合成流量模型中不同柵欄方案的性能
Figure 7 Performance of different barrier schemes in parallel computing kernels圖7 并行計算核中不同柵欄方案的性能
受益于層次化的設(shè)計,結(jié)點內(nèi)的柵欄同步不會在結(jié)點之間的網(wǎng)絡(luò)中產(chǎn)生報文。對于全局同步,柵欄請求會被結(jié)點中的本地柵欄單元處理,合成一條報文,然后在結(jié)點間的網(wǎng)絡(luò)中傳輸。因此,柵欄同步的網(wǎng)絡(luò)流量得到了很大的減少。圖 8 描述了合成流量模型網(wǎng)絡(luò)中的歸一化報文數(shù)量。橫坐標(biāo)表示本地柵欄同步在所有同步請求中的比例。正如預(yù)期的那樣,隨著本地柵欄同步所占比例逐步增加,結(jié)點間網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)包總數(shù)則逐步減少。當(dāng)所有數(shù)據(jù)包都是本地柵欄同步請求生成時,數(shù)據(jù)包數(shù)量最少。得益于層次化的結(jié)構(gòu)設(shè)計,可以看到圖9中實際的并行計算核中網(wǎng)絡(luò)流量顯著減少,因為網(wǎng)絡(luò)中數(shù)據(jù)包合并后大大減少了報文數(shù)量。
Figure 8 Network traffic of different barrier schemes in synthetic traffic models圖8 合成流量模型中不同柵欄方案網(wǎng)絡(luò)流量
Figure 9 Network traffic of different barrier schemes in different computing kernels圖9 并行計算核中不同柵欄方案網(wǎng)絡(luò)流量
在本文的設(shè)計中,LBU和GBU分別用于分析并處理本地同步請求和全局同步請求,它們包含的LBI和GBI的數(shù)量可能會影響HSync執(zhí)行柵欄同步的性能。因此,為了分析不同數(shù)量的LBI和GBI對HSync性能的影響,設(shè)計了幾組實驗。實驗基本配置由4個結(jié)點組成,每個結(jié)點包含8個核。通過在不同的LBU和GBU 配置下執(zhí)行相同的應(yīng)用程序,比較實際執(zhí)行時間得到實驗結(jié)果。圖 10 顯示了在每個結(jié)點中設(shè)置不同LBU數(shù)量對性能的影響。結(jié)果表明,當(dāng)LBU數(shù)量為3時,HSync對柵欄同步的加速比達(dá)到較高值。圖 10表明,GBU的數(shù)量在4~6時達(dá)到較高的加速比。根據(jù)此實驗結(jié)果,可以確定HSync中LBI和GBI的最佳數(shù)量,以實現(xiàn)性能和硬件開銷之間的平衡。
Figure 10 Effect of the number of GBIs and LBIs on performance圖10 GBI和LBI數(shù)量對性能的影響
對HSync進(jìn)行了功能驗證并確認(rèn)結(jié)果正確后,使用28 nm工藝庫在典型條件下(常溫常壓(1 V,25 ℃))進(jìn)行了綜合,綜合頻率達(dá)到了1.56 GHz。綜合結(jié)果表明,HSync所占用面積為401 979.38 μm2,相比于集中式的FlatBar減少了36%,其中本地柵欄單元約占66%,全局柵欄單元約占34%。FlatBar因為缺乏FIFO調(diào)度機(jī)制,在結(jié)點之間需要設(shè)置24個柵欄實例,而且與結(jié)點內(nèi)的柵欄同步單元沒有協(xié)同工作,解碼器及相應(yīng)的狀態(tài)寄存器更多,而HSync只需要12個全局柵欄實例且邏輯更加簡單,因此面積更小。HSync功耗為29.46 mW,比FlatBar減少了55.4%,由于HSync相比于非層次化FlatBar減少了很多重復(fù)的解碼單元、狀態(tài)寄存器及控制邏輯,因此降低了功耗。
具有共享內(nèi)存的多核系統(tǒng)或眾核系統(tǒng)中的同步問題需要高效可靠的解決方案。一種簡單的方法是利用共享內(nèi)存實現(xiàn)。然而,事實證明這不是一種高效的方法,且依賴于其他的同步原語。本文提出的設(shè)計方案對處理器存儲系統(tǒng)沒有任何影響,且大大減少了網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)包數(shù)量;另一方面,由于本地結(jié)點內(nèi)部的同步請求由LBU處理,減少了整體同步延遲,提高了系統(tǒng)性能。
柵欄同步使用層次化方式實現(xiàn)的目的在于減少網(wǎng)絡(luò)內(nèi)的柵欄同步報文數(shù)量,同時減少柵欄同步操作的平均延遲。隨著處理器核數(shù)的增加,使用FlatBar實現(xiàn)的柵欄會將大量同步報文集中到網(wǎng)絡(luò)的一個結(jié)點,造成擁塞等問題,層次化的方式將報文分別在不同結(jié)點上進(jìn)行處理匯集,減少了報文數(shù)量,進(jìn)而降低了對網(wǎng)絡(luò)的壓力,且對于結(jié)點內(nèi)的核可以更快完成同步操作。隨著結(jié)點數(shù)增加及每個結(jié)點的核數(shù)增加,層次化結(jié)構(gòu)優(yōu)勢更加突出,平均網(wǎng)絡(luò)延遲也會降低更多。
通過實驗結(jié)果體現(xiàn)出了層次化硬件柵欄的優(yōu)勢:降低了平均延遲,減少了網(wǎng)絡(luò)流量,降低了網(wǎng)絡(luò)開銷。本文的實驗結(jié)果表明,與集中式硬件柵欄FlatBar相比,使用層次化柵欄的HSync的處理器總執(zhí)行時間平均減少了13%,網(wǎng)絡(luò)流量減少了74%;與軟件柵欄同步方法相比,總執(zhí)行時間平均減少了82%。此外,HSync滿足硬件設(shè)計的簡單性和編程接口的易用性,是一種行之有效的硬件柵欄同步機(jī)制。