可重構(gòu)硬件操作系統(tǒng)BORPH是面向可重構(gòu)計(jì)算系統(tǒng)設(shè)計(jì)的操作系統(tǒng),目標(biāo)是增強(qiáng)可重構(gòu)平臺(tái)的易用性,提出硬件進(jìn)程來(lái)抽象硬件功能邏輯。正如軟件進(jìn)程運(yùn)行于通用處理器(general purpose processor,GPP)上,硬件進(jìn)程則在可重構(gòu)硬件上執(zhí)行。硬件進(jìn)程與系統(tǒng)其他部分的通信符合UNIX語(yǔ)義的進(jìn)程間通信機(jī)制實(shí)現(xiàn)。應(yīng)用開(kāi)發(fā)人員只需要開(kāi)發(fā)硬件進(jìn)程即可完成可重構(gòu)平臺(tái)應(yīng)用的設(shè)計(jì),BORPH將這種模式概括為硬件為中心的執(zhí)行模型。
當(dāng)前的BORPH實(shí)現(xiàn)中存在以下3個(gè)問(wèn)題:
1)不支持共享存儲(chǔ)平臺(tái),無(wú)法支持基于共享存儲(chǔ)的進(jìn)程通信方式。由于BORPH設(shè)計(jì)時(shí)面向的可重構(gòu)平臺(tái)BEE2為分布式存儲(chǔ),所以硬件進(jìn)程與系統(tǒng)其他部分通信基于消息傳遞方式實(shí)現(xiàn),效率較低。
2)軟硬件進(jìn)程問(wèn)的數(shù)據(jù)傳輸仍然需要通用處理器控制,加重了GPP的負(fù)擔(dān),并且數(shù)據(jù)傳輸受限于GPP獲取數(shù)據(jù)的速度。例如BORPH中提供的文件訪(fǎng)問(wèn)功能,需要系統(tǒng)軟件負(fù)責(zé)從磁盤(pán)讀取文件,而磁盤(pán)讀取速度遠(yuǎn)遠(yuǎn)小于對(duì)系統(tǒng)主存的訪(fǎng)問(wèn)速度,這決定了該方法難以高效。
3)對(duì)硬件進(jìn)程的系統(tǒng)服務(wù)支持是通過(guò)硬件模塊的方式提供,不便于使用且難以擴(kuò)展。
BORPH軟件框架最早在分布式存儲(chǔ)的BEE2平臺(tái)上進(jìn)行了實(shí)現(xiàn),主要是面向海量信息處理等規(guī)模較大的并行處理任務(wù)。而普通用戶(hù)平時(shí)使用的通常是基于PCIE總線(xiàn)的可重構(gòu)處理平臺(tái),即FPGA以板卡形式插入普通PC的PCIE插槽中。由于FPGA可以通過(guò)PCIE訪(fǎng)問(wèn)系統(tǒng)主存,所以本文將該類(lèi)可重構(gòu)計(jì)算稱(chēng)為共享存儲(chǔ)可重構(gòu)計(jì)算機(jī)。與大規(guī)模的海量信息處理相比,該類(lèi)可重構(gòu)處理平臺(tái)通常面向?qū)M(jìn)程間數(shù)據(jù)傳輸和同步的效率進(jìn)行了優(yōu)化,優(yōu)化關(guān)鍵是減少GPP和FPGA之間通過(guò)中斷機(jī)制交互的次數(shù)。當(dāng)FPGA上運(yùn)行的硬件進(jìn)程需要進(jìn)行數(shù)據(jù)傳輸和同步時(shí),不需要GPP協(xié)助進(jìn)行,而是獨(dú)立完成,從而避免了GPP和FPGA之間頻繁的交互。
1.BORPH-N簡(jiǎn)介
1.1 系統(tǒng)層次結(jié)構(gòu)
本文首先將BORPH系統(tǒng)移植到由GPP和FPGA組成的可重構(gòu)計(jì)算平臺(tái)上,同時(shí)調(diào)整了FPGA片上邏輯的實(shí)現(xiàn),添加了嵌入式標(biāo)量處理核。因此硬件進(jìn)程不僅包含硬件模塊,還包括運(yùn)行于該嵌入式標(biāo)量處理核的軟件部分。本文將經(jīng)過(guò)移植和擴(kuò)展的BORPH系統(tǒng)稱(chēng)為BORPH—N,圖l為BORPH—N的層次結(jié)構(gòu)圖:
Fig.1 BORPH—N layer.
圖1 BORPH—N系統(tǒng)層次結(jié)構(gòu)圖
在BORPH—N硬件層,GPP通過(guò)前端總線(xiàn)(front side bus,F(xiàn)SB)連接到存儲(chǔ)控制集中器(memorycontrol hub,MCH)中,F(xiàn)PGA則通過(guò)PCIE連接到存儲(chǔ)控制集中器中,兩者共享系統(tǒng)主存。FPGA內(nèi)部邏輯采取半定制方式設(shè)計(jì),部分邏輯為基礎(chǔ)硬件系統(tǒng),主要包括嵌入式處理器、On-Chip RAM、片上總線(xiàn)以及PCIE總線(xiàn)接口等,用于支持BORPH—N系統(tǒng)的運(yùn)行,其余部分為用戶(hù)自定義功能模塊,用于具體的功能邏輯實(shí)現(xiàn)。
在操作系統(tǒng)層,GPP上運(yùn)行的系統(tǒng)軟件包括標(biāo)準(zhǔn)的Linux內(nèi)核以及一個(gè)內(nèi)核的擴(kuò)展模塊:硬件進(jìn)程代理。硬件進(jìn)程代理主要負(fù)責(zé)管理FPGA,響應(yīng)來(lái)自FPGA的系統(tǒng)服務(wù)請(qǐng)求。由于嵌入式微處理核的支持,用戶(hù)可以方便地在FPGA上進(jìn)行軟件設(shè)計(jì),所以BORPH—N中硬件進(jìn)程除了包括硬件模塊外,主要是指FPGA上的嵌入式軟件部分。面向硬件進(jìn)程的系統(tǒng)服務(wù)接口也以軟件形式即微內(nèi)核(microkernel)提供,而不是硬件形式。
圖1中右側(cè)上方為原始BORPH中硬件部分的層次結(jié)構(gòu),BORPH中硬件進(jìn)程為一個(gè)硬件邏輯模塊通過(guò)與一個(gè)或多個(gè)系統(tǒng)服務(wù)模塊IOC相連來(lái)與系統(tǒng)交互(硬件進(jìn)程的設(shè)計(jì)體現(xiàn)為通過(guò)硬件描述語(yǔ)言設(shè)計(jì)硬件模塊)。在BORPH—N中,硬件進(jìn)程的主體變?yōu)樵贔PGA內(nèi)嵌入式處理器上運(yùn)行的軟件模塊,該軟件模塊通過(guò)調(diào)用BORPH—N提供的軟件接口與系統(tǒng)進(jìn)行交互,用戶(hù)也改為通過(guò)編寫(xiě)軟件代碼來(lái)設(shè)計(jì)硬件進(jìn)程。硬件功能邏輯則根據(jù)硬件進(jìn)程的實(shí)際需求進(jìn)行設(shè)計(jì),通過(guò)標(biāo)準(zhǔn)接口與FPGA片上系統(tǒng)相連,并且也由軟件負(fù)責(zé)控制。本文認(rèn)為BORPH—N的結(jié)構(gòu)調(diào)整有以下優(yōu)點(diǎn):
1)從程序員視角看,為硬件進(jìn)程提供的系統(tǒng)服務(wù)接口是軟件形式的。用戶(hù)通過(guò)在嵌入式處理核上設(shè)計(jì)軟件,調(diào)用系統(tǒng)服務(wù)接口來(lái)與系統(tǒng)交互,與硬件接口相比,設(shè)計(jì)難度明顯下降,并且接口擴(kuò)展性也更好。
2)從內(nèi)部實(shí)現(xiàn)看,硬件進(jìn)程中的硬件邏輯部分接口標(biāo)準(zhǔn)。BORPH中硬件邏輯與IOC相連,接口不標(biāo)準(zhǔn),BORPH—N中硬件邏輯與標(biāo)準(zhǔn)FPGA片上總線(xiàn)相連。標(biāo)準(zhǔn)接口可提高用戶(hù)邏輯的通用性,并且FPGA廠(chǎng)商提供的庫(kù)可降低用戶(hù)設(shè)計(jì)硬件進(jìn)程的困難。
1.2基于共享存儲(chǔ)的進(jìn)程間通信
本文為硬件進(jìn)程提供了基于共享存儲(chǔ)的進(jìn)程間通信方法。共享存儲(chǔ)符合System V的標(biāo)準(zhǔn),軟件進(jìn)程可直接通過(guò)System V IPC訪(fǎng)問(wèn)共享存儲(chǔ)。進(jìn)程通過(guò)調(diào)用shmget()建立一個(gè)共享存儲(chǔ)段。其他擁有合適權(quán)限的進(jìn)程可以通過(guò)shmctl()對(duì)該共享存儲(chǔ)段進(jìn)行各種控制。進(jìn)程可通過(guò)shmat()將創(chuàng)建后的共享段連接到本進(jìn)程虛擬地址空間,并進(jìn)行讀寫(xiě)操作。每一個(gè)共享段都通過(guò)一個(gè)shmid進(jìn)行標(biāo)識(shí)。
當(dāng)多個(gè)進(jìn)程對(duì)同一個(gè)共享段進(jìn)行寫(xiě)操作時(shí),需要同步機(jī)制來(lái)確保正確訪(fǎng)問(wèn)。本文使用信號(hào)量來(lái)避免不一致以及訪(fǎng)問(wèn)沖突。與System V信號(hào)量相比,POSIX信號(hào)量實(shí)現(xiàn)和使用開(kāi)銷(xiāo)更低,所以本文采用POSIX信號(hào)量。進(jìn)程通過(guò)sem_init()建立和初始化信號(hào)量,在訪(fǎng)問(wèn)共享資源之前通過(guò)sem_wait()來(lái)獲取控制權(quán),訪(fǎng)問(wèn)結(jié)束后通過(guò)sem_post()釋放控制權(quán)。
本文為硬件進(jìn)程提供一組包含上述函數(shù)支持訪(fǎng)問(wèn)System V共享存儲(chǔ)和POSIX信號(hào)量的API。為了能夠支持?jǐn)?shù)據(jù)在主存和FPGA On—Chip RAM之間傳輸,BORPH-N增加兩個(gè)API函數(shù):cpy—from—vm()和cpy—to—vm(),分別用于將數(shù)據(jù)從虛擬存儲(chǔ)拷貝到FPGA片上存儲(chǔ)器和將FPGA片上存儲(chǔ)器數(shù)據(jù)拷貝到虛擬存儲(chǔ)。注意由于shmat()得到的虛擬地址,所以這兩個(gè)API函數(shù)操作的地址都是虛擬地址而不是物理地址。嵌入式軟件的設(shè)計(jì)基于該組API進(jìn)行,對(duì)于系統(tǒng)中其他部分,硬件進(jìn)程和軟件進(jìn)程是一樣的,除非它執(zhí)行在FPGA上。
硬件進(jìn)程通常負(fù)責(zé)進(jìn)行數(shù)據(jù)處理,初始化完成后通過(guò)一個(gè)持續(xù)執(zhí)行的主循環(huán)來(lái)進(jìn)行反復(fù)多批次的數(shù)據(jù)處理。在BORPH—N中,典型的程序結(jié)構(gòu)如圖2所示。初始化階段建立共享存儲(chǔ)段和信號(hào)量,這兩個(gè)調(diào)用只會(huì)在初始化階段發(fā)生一次(如果發(fā)生對(duì)多個(gè)信號(hào)量和多個(gè)共享存儲(chǔ)段的訪(fǎng)問(wèn),則初始化階段也要發(fā)生多次)。然后是主循環(huán),對(duì)共享存儲(chǔ)的訪(fǎng)問(wèn)通過(guò)信號(hào)量進(jìn)行互斥,其中關(guān)于信號(hào)量和虛擬存儲(chǔ)的訪(fǎng)問(wèn)隨著主循環(huán)反復(fù)執(zhí)行,需要反復(fù)執(zhí)行以讀寫(xiě)數(shù)據(jù),因而對(duì)硬件進(jìn)程性能至關(guān)重要。
Fig.2 Typical program structure of hardware processes.
圖2 硬件進(jìn)程典型程序結(jié)構(gòu)
2.基本實(shí)現(xiàn)
本節(jié)介紹BORPH—N系統(tǒng)的基本實(shí)現(xiàn),分別介紹FPGA的硬件片上體系結(jié)構(gòu)和軟件部分的設(shè)計(jì)。
2.1片上體系結(jié)構(gòu)
FPGA片上體系結(jié)構(gòu)主要部件包括NIOS2,On—Chip RAM,PCIE Compiler,SGDMA(Scatter-Gather Dirdct Memory Access)和用戶(hù)功能模塊,這些部件通過(guò)Avalon總線(xiàn)相連。下面簡(jiǎn)單介紹這些部件的功能和配置。
NIOS2是Altera提供的廣泛用于FPGA的軟核處理器。該軟核處理器的高度靈活性滿(mǎn)足了成本敏感、實(shí)時(shí)等應(yīng)用的各方面需求。本文使用的NIOS2為無(wú)操作系統(tǒng)支持的標(biāo)準(zhǔn)版本。
PCIE Compiler是Altera提供的PCIE總線(xiàn)與內(nèi)部Avalon總線(xiàn)的協(xié)議轉(zhuǎn)換器。本文配置的轉(zhuǎn)換器為PCIE 2.0 1X的端節(jié)點(diǎn),硬核實(shí)現(xiàn),帶Avalon—MM接口。支持Burst傳輸,讀Burst負(fù)載最大為256 B,寫(xiě)B(tài)urst負(fù)載最大為128 B。
On—Chip RAM直接采用Altera提供的庫(kù)實(shí)現(xiàn)。主要作為FPGA部分的軟件管理片上存儲(chǔ)器使用,提高應(yīng)用執(zhí)行效率。
用戶(hù)自定義功能模塊根據(jù)硬件線(xiàn)程的功能需求進(jìn)行設(shè)計(jì),必須能夠與Avalon總線(xiàn)相連。用戶(hù)通過(guò)NIOS2上運(yùn)行的軟件控制功能模塊運(yùn)行。
2.2軟件
軟件主要包括兩部分:運(yùn)行于GPP上的硬件進(jìn)程代理和運(yùn)行于FPGA中NIOS2上的微內(nèi)核,這兩部分協(xié)同工作為硬件進(jìn)程提供系統(tǒng)服務(wù)支持。
1)硬件進(jìn)程代理
操作系統(tǒng)對(duì)硬件進(jìn)程的管理和服務(wù)支持以代理方式設(shè)計(jì)。每一個(gè)硬件進(jìn)程都有一個(gè)軟件代理進(jìn)程與之對(duì)應(yīng)。軟件代理進(jìn)程啟動(dòng)后負(fù)責(zé)配置FPGA并下載嵌入式軟件代碼,申請(qǐng)系統(tǒng)資源供硬件進(jìn)程使用。最后注冊(cè)中斷響應(yīng)函數(shù),等待響應(yīng)來(lái)自硬件進(jìn)程的服務(wù)請(qǐng)求。對(duì)系統(tǒng)其他部分而言,代理進(jìn)程即是硬件進(jìn)程。
2)微內(nèi)核
微內(nèi)核運(yùn)行于NIOS2上,負(fù)責(zé)嵌入式軟件運(yùn)行環(huán)境的初始化并為應(yīng)用程序提供服務(wù)。初始化過(guò)程包括初始化C運(yùn)行時(shí)庫(kù),注冊(cè)中斷信號(hào)處理函數(shù),以處理來(lái)自GPP的中斷信號(hào),最后調(diào)用硬件進(jìn)程標(biāo)準(zhǔn)人口點(diǎn)函數(shù)進(jìn)入用戶(hù)程序執(zhí)行。在通用多核處理器上,用戶(hù)進(jìn)程需要請(qǐng)求系統(tǒng)服務(wù)時(shí)通過(guò)trap指令轉(zhuǎn)入系統(tǒng)內(nèi)核,系統(tǒng)服務(wù)本質(zhì)上是對(duì)內(nèi)核數(shù)據(jù)結(jié)構(gòu)的操作。由于性能和數(shù)據(jù)結(jié)構(gòu)復(fù)雜性的緣故,F(xiàn)PGA難以在本地完成硬件進(jìn)程需要的系統(tǒng)服務(wù),所以在本文基本實(shí)現(xiàn)中,所有面向硬件進(jìn)程的系統(tǒng)調(diào)用都是以遠(yuǎn)程調(diào)用的方式實(shí)現(xiàn),即請(qǐng)求由FPGA發(fā)出,GPP響應(yīng)。GPP和FPGA之間的消息傳遞機(jī)制基于PCIE Compiler內(nèi)的Mailbox實(shí)現(xiàn),該Mailbox支持雙向的數(shù)據(jù)傳輸和中斷發(fā)送。
3.優(yōu)化
根據(jù)1.2節(jié)中基于共享存儲(chǔ)的進(jìn)程通信方式,硬件進(jìn)程會(huì)反復(fù)調(diào)用cpy—from一vm(),cpy—to一vm(),sem—wait(),sem—post()這4個(gè)函數(shù)來(lái)獲取輸人和寫(xiě)回輸出。其他管理類(lèi)函數(shù)如建立共享存儲(chǔ)段和建立信號(hào)量在進(jìn)程單次執(zhí)行中通常都只執(zhí)行一次,而這4個(gè)函數(shù)隨著進(jìn)程主循環(huán)的反復(fù)執(zhí)行需要反復(fù)調(diào)用,所以其執(zhí)行效率至關(guān)重要。本節(jié)針對(duì)這4個(gè)函數(shù),以進(jìn)程從共享存儲(chǔ)獲取輸人數(shù)據(jù)進(jìn)行處理為例,討論本文優(yōu)化的基本思路。
圖3示出采用3種不同軟硬件協(xié)同方式時(shí)FPGA獲取輸人數(shù)據(jù)并進(jìn)行處理的過(guò)程。為避免繁瑣,圖3中省略了數(shù)據(jù)處理完成后寫(xiě)回輸出數(shù)據(jù)的過(guò)程。輸入數(shù)據(jù)通過(guò)訪(fǎng)問(wèn)共享存儲(chǔ)段獲得,使用信號(hào)量對(duì)共享存儲(chǔ)段訪(fǎng)問(wèn)進(jìn)行保護(hù)。整個(gè)過(guò)程分為兩部分:獲取輸入數(shù)據(jù)和數(shù)據(jù)處理。圖3中從左向右的箭頭表示數(shù)據(jù)傳輸過(guò)程,折線(xiàn)段表示FPGA的數(shù)據(jù)處理過(guò)程。
Fig.3 Three types of software—hardware CO—operation.
圖3 GPP控制、遠(yuǎn)程調(diào)用和FPGA控制的流程比較圖
圖3(a)表示以硬件為加速設(shè)備的軟件進(jìn)程的設(shè)計(jì)方法。該方法針對(duì)信號(hào)量的操作,與FPG沒(méi)有關(guān)系,完全由軟件執(zhí)行。通過(guò)系統(tǒng)DMA來(lái)控制數(shù)據(jù)傳輸過(guò)程,注意該DMA位于系統(tǒng)總線(xiàn)上。數(shù)據(jù)傳輸之前軟件需要對(duì)FPGA的接口寄存器進(jìn)行配置,指示將要發(fā)生的數(shù)據(jù)傳輸。待數(shù)據(jù)傳輸完成后軟件再次向FPGA發(fā)出命令,指示數(shù)據(jù)傳輸完畢。輸入數(shù)據(jù)傳輸完畢后,軟件向FPGA發(fā)出進(jìn)行數(shù)據(jù)處理的命令,最后軟件需要等待來(lái)自FPGA的執(zhí)行完畢的信號(hào)。
圖3(b)則是采用硬件進(jìn)程概念的基本實(shí)現(xiàn),表面上看信號(hào)量操作和數(shù)據(jù)傳輸均由NIOS2執(zhí)行,但實(shí)際上所有的操作仍然是由軟件完成,這種方法反而增加了GPP和FPGA之間的交互次數(shù),降低了效率。
對(duì)比圖3(a)(b)兩種方法,可以發(fā)現(xiàn)它們的軟硬件交互過(guò)程是相反的:圖3(a)中需要交互時(shí)GPP主動(dòng)發(fā)起請(qǐng)求,圖3(b)中則是FPGA主動(dòng)發(fā)起。圖3(a)中由于主體程序運(yùn)行在GPP上,關(guān)于系統(tǒng)的操作,如信號(hào)量等不需要發(fā)生交互,而關(guān)于FPGA的操作,如數(shù)據(jù)傳輸、數(shù)據(jù)處理等則需要發(fā)生交互。圖3(b)中主體程序運(yùn)行于FPGA上,關(guān)于FPGA本地的操作不需要發(fā)生交互,如數(shù)據(jù)處理,F(xiàn)PGA在獲取到數(shù)據(jù)后可自行啟動(dòng)數(shù)據(jù)處理過(guò)程。其他包括信號(hào)量的操作等需要向GPP發(fā)出請(qǐng)求,并等待響應(yīng)。
圖3(c)則是本節(jié)將要討論的優(yōu)化實(shí)現(xiàn),主體程序仍然在FPGA上運(yùn)行,但信號(hào)量操作和數(shù)據(jù)傳輸都由NIOS2單獨(dú)完成。考慮到NIOS2頻率較低,只要保證執(zhí)行在NIOS2上的代碼非常短,即使相比在GPP上執(zhí)行開(kāi)銷(xiāo)略大,但與取消兩者之間的交互帶來(lái)的性能提高相比則非常小。該目標(biāo)的完成有兩個(gè)條件:NIOS2能夠獨(dú)立地通過(guò)虛擬地址進(jìn)行數(shù)據(jù)訪(fǎng)問(wèn)和獨(dú)立地完成原子操作,從而實(shí)現(xiàn)對(duì)信號(hào)量的獨(dú)立正確訪(fǎng)問(wèn)。下面分別對(duì)這兩方面進(jìn)行討論。
3.1 獨(dú)立虛擬存儲(chǔ)訪(fǎng)問(wèn)
cpy—from—vm()和cpy—to—vm()類(lèi)似,本文以cpy—from—wm()為例討論優(yōu)化方法。優(yōu)化的cpy—from—um()實(shí)現(xiàn)分為地址翻譯和數(shù)據(jù)傳輸兩個(gè)過(guò)程。第1個(gè)過(guò)程將虛擬地址翻譯為Avalon內(nèi)部總線(xiàn)地址,這一步根據(jù)頁(yè)表和所需要訪(fǎng)問(wèn)的虛擬地址對(duì)PCIE Compiler進(jìn)行設(shè)置,以保證通過(guò)內(nèi)部Avalon地址對(duì)PCIE Compiler的訪(fǎng)問(wèn)能夠正確地映射到對(duì)主存物理地址的訪(fǎng)問(wèn)。第2步控制數(shù)據(jù)在on—ChipRAM和PCIE Compiler之間傳輸。
Linux將可用的物理存儲(chǔ)器分割為4 KB的頁(yè)面。PGD(page global directory)和PTE(page tableentry)兩級(jí)組織的頁(yè)表用來(lái)描述虛地址與物理地址的映射關(guān)系。虛擬地址分為3段,前兩段分別是指向PGD和PTE的指針,最后一段是偏移量。PGD和PTE兩個(gè)表格都存儲(chǔ)在內(nèi)核空間,物理地址是虛擬地址減去0xC0000000,所以FPGA可以通過(guò)物理地址直接訪(fǎng)問(wèn)PGD和PTE,完成虛擬地址到物理地址的翻譯。
圖4示出FPGA進(jìn)行地址翻譯的過(guò)程,該過(guò)程將虛擬地址映射為本地Avalon地址,這樣NIOS2或Avalon總線(xiàn)上的其他部件通過(guò)訪(fǎng)問(wèn)該本地地址即可訪(fǎng)問(wèn)到所需的進(jìn)程虛擬地址。給定需要訪(fǎng)問(wèn)的虛擬地址,首先查詢(xún)PGD和PTE來(lái)得到物理地址,物理地址的高22位即為物理頁(yè)的首地址。該起始地址會(huì)寫(xiě)入PCIE Compiler的地址轉(zhuǎn)換表中。然后,所有來(lái)自Avalon訪(fǎng)問(wèn)PCIE Compiler的訪(fǎng)問(wèn)都會(huì)自動(dòng)轉(zhuǎn)換為對(duì)物理地址的訪(fǎng)問(wèn)事務(wù),每次只有4 KB的地址被映射。
Fig.4 Translation of local address to host physic address.
圖4 本地地址向主機(jī)物理地址的翻譯
PGD和PTE中的空人口意味著發(fā)生頁(yè)錯(cuò)誤。由于處理頁(yè)錯(cuò)誤的過(guò)程比較復(fù)雜,F(xiàn)PGA難以獨(dú)立完成,本文采用與EXOCHI中CEH類(lèi)似的方式處理頁(yè)錯(cuò)誤。關(guān)于該頁(yè)錯(cuò)誤的消息會(huì)發(fā)送GPP,當(dāng)頁(yè)錯(cuò)誤發(fā)生,GPP會(huì)代替FPGA處理該頁(yè)錯(cuò)誤。
第2個(gè)過(guò)程在PCIE Compiler的支持下較容易完成。PCIE Compiler將讀寫(xiě)請(qǐng)求自動(dòng)轉(zhuǎn)換為對(duì)PCIE總線(xiàn)的讀寫(xiě)請(qǐng)求,就能夠完成數(shù)據(jù)從On-ChipRAM到主存的傳輸過(guò)程。On—Chip RAM和PCIECompiler之間的數(shù)據(jù)傳輸過(guò)程可通過(guò)簡(jiǎn)單的數(shù)據(jù)拷貝完成(如memcpy)。但這種方法效率非常低,由于數(shù)據(jù)傳輸?shù)男阅苤陵P(guān)重要,所以本文在FPGA內(nèi)添加了SGDMA組件來(lái)提高數(shù)據(jù)效率。
在傳統(tǒng)多核處理器中,Cache一致性保證了多個(gè)處理核具有相同的存儲(chǔ)視圖。當(dāng)前的MCH通常支持Snoop存儲(chǔ)一致性協(xié)議,即保證主存GPP內(nèi)部Cache的一致性,也保證了FPGA對(duì)主存訪(fǎng)問(wèn)的正確性。但FPGA內(nèi)部的On—Chip RAM無(wú)法與GPP內(nèi)部Cache保持一致,所以硬件進(jìn)程必須負(fù)責(zé)管理On—Chip RAM。
3.2定制同步存儲(chǔ)單元
sem—wait()操作首先判斷信號(hào)量是否大于0,若大于0則將其減1,繼續(xù)執(zhí)行,否則等待。sem—post()將信號(hào)量加1,并喚醒所有等待該信號(hào)量的進(jìn)程。本文將這兩者統(tǒng)一為1次對(duì)信號(hào)量的原子訪(fǎng)問(wèn),以及可能的堵塞等待或是喚醒操作。如果對(duì)信號(hào)量的訪(fǎng)問(wèn)可在本地高效進(jìn)行,則可極大地減小sem—wait()成功以及進(jìn)行sem—post()的延遲時(shí)間開(kāi)銷(xiāo),因?yàn)閟em—wait()成功時(shí)不需要等待,sem—post()時(shí)只需向GPP發(fā)出信號(hào),不需要等待該信號(hào)返回。而如果sem—wait()不成功,則時(shí)間開(kāi)銷(xiāo)是不可避免的,硬件進(jìn)程將進(jìn)入等待GPP信號(hào)的狀態(tài)。
POSIX信號(hào)量實(shí)際上是1個(gè)16B的整型變量,對(duì)其訪(fǎng)問(wèn)必須滿(mǎn)足原子性要求,所以本文優(yōu)化的關(guān)鍵問(wèn)題就是FPGA如何對(duì)1個(gè)16 B的整型變量實(shí)現(xiàn)原子操作。常見(jiàn)的硬件原語(yǔ)操作支持包括compareand—swap,fetch—and—add等,原語(yǔ)操作的關(guān)鍵在于保證讀和寫(xiě)之間的原子性。例如fetch-and—add,實(shí)際是1次讀訪(fǎng)存操作,然后進(jìn)行加法操作并將結(jié)果寫(xiě)入存儲(chǔ)單元,必須保證讀和寫(xiě)之間沒(méi)有其他指令對(duì)該單元進(jìn)行訪(fǎng)問(wèn)。多核x86體系結(jié)構(gòu)硬件上對(duì)該原子性的支持通過(guò)前端總線(xiàn)的鎖定信號(hào)FSBLOCK實(shí)現(xiàn),該信號(hào)指示一個(gè)原子事務(wù)需要執(zhí)行。
而在本文的硬件平臺(tái)中,由于FPGA是一個(gè)PCIE端設(shè)備,不具備鎖定前端總線(xiàn)的能力,所以無(wú)法以相似的方法實(shí)現(xiàn)對(duì)系統(tǒng)存儲(chǔ)單元的原子性操作。本文提出通過(guò)FPGA提供一種特殊的存儲(chǔ)單元用于支持原子操作的方法,將該存儲(chǔ)單元稱(chēng)為MutexRAM。該存儲(chǔ)單元實(shí)現(xiàn)于FPGA內(nèi)部(因?yàn)镕PGA是整個(gè)硬件平臺(tái)中設(shè)計(jì)人員唯一能修改的部分),并且映射到系統(tǒng)存儲(chǔ)空間,保證GPP可以通過(guò)PCIE總線(xiàn)訪(fǎng)問(wèn)。該單元設(shè)計(jì)的目標(biāo)是GPP和NIOS2都可以對(duì)該單元進(jìn)行鎖定,從而支持兩者通過(guò)該單元進(jìn)行互斥。
Mutex RAM的設(shè)計(jì)依賴(lài)于MCH對(duì)PCIE設(shè)備訪(fǎng)問(wèn)的一種特征。GPP進(jìn)行鎖定操作時(shí),如果目標(biāo)地址指向PCIE設(shè)備,則MCH會(huì)將該請(qǐng)求轉(zhuǎn)換為讀鎖定(read lock)事務(wù)發(fā)往PCIE設(shè)備。當(dāng)發(fā)生寫(xiě)操作時(shí)自動(dòng)解鎖,否則會(huì)發(fā)出單獨(dú)的解鎖事務(wù)包(completion locked without data)根據(jù)這一特征,Mutex RAM設(shè)計(jì)如圖5所示。RAM中每個(gè)32位數(shù)增加1位鎖定位,0表示未鎖定,1表示鎖定。雙端口訪(fǎng)問(wèn),端口A提供普通的讀寫(xiě)訪(fǎng)問(wèn),寫(xiě)操作附帶解鎖含義,端口B的讀操作實(shí)際為讀鎖定,寫(xiě)操作為解鎖。當(dāng)收到來(lái)自GPP的讀鎖定請(qǐng)求和解鎖請(qǐng)求時(shí)PCIE Compiler訪(fǎng)問(wèn)Mutex RAM的端口B,否則訪(fǎng)問(wèn)端口A。兩個(gè)端口的訪(fǎng)問(wèn)會(huì)被自動(dòng)排序以避免沖突。如果讀請(qǐng)求和讀鎖定請(qǐng)求訪(fǎng)問(wèn)的存儲(chǔ)單元已經(jīng)被鎖定,則該存儲(chǔ)訪(fǎng)問(wèn)操作會(huì)被堵塞。這樣的設(shè)計(jì)可保證GPP和FPGA都可以實(shí)現(xiàn)對(duì)Mutex RAM的原子操作。
Fig.5 Diagram of dual ports mutex RAM.
圖5 雙端口Mutex RAM結(jié)構(gòu)圖
4.性能評(píng)測(cè)
本文完成了BORPH—N系統(tǒng)的基本實(shí)現(xiàn),并進(jìn)行了兩項(xiàng)優(yōu)化工作。建立實(shí)驗(yàn)平臺(tái)時(shí)采用的通用處理平臺(tái)配置為:Intel E5200,4 GB DDR2內(nèi)存。FPGA主板采用ARRIA II GX芯片,片上系統(tǒng)綜合頻率為50 MHz。FPGA芯片上各部件資源使用情況如表1所示。這些資源的占用分為兩類(lèi):一是任意方式使用FPGA都不可以避免的開(kāi)銷(xiāo),包括PCIECompiler和On—Chip RAM,因?yàn)镕PGA必須依靠前者以便于PCIE總線(xiàn)相連,后者則是進(jìn)行數(shù)據(jù)處理必須的緩沖;第2類(lèi)是用于支持BORPH—N運(yùn)行的部件,包括NIOS2,SGDMA和Mutex RAM,這三者對(duì)ARRIA II GX芯片邏輯資源的占用率非常小,由于控制Burst傳輸需要大量緩存,所以使用存儲(chǔ)塊資源較多。
Table 1 Resource Utilization of Hardware Components
表1 FPGA片上各組件資源占用
本文分別對(duì)BORPH—N系統(tǒng)的遠(yuǎn)程系統(tǒng)調(diào)用、虛擬存儲(chǔ)訪(fǎng)問(wèn)和信號(hào)量訪(fǎng)問(wèn)3個(gè)方面進(jìn)行了詳細(xì)的性能測(cè)試。主要測(cè)試手段是在FPGA內(nèi)硬件系統(tǒng)中添加性能計(jì)數(shù)器(performance counter)來(lái)統(tǒng)計(jì)時(shí)間開(kāi)銷(xiāo)。在分析數(shù)據(jù)傳輸效率時(shí)為了得到更加精確的時(shí)間開(kāi)銷(xiāo)信息,加入SignalTab探針。所有時(shí)間單位均為FPGA的時(shí)鐘周期。
4.1基本實(shí)現(xiàn)的遠(yuǎn)程系統(tǒng)服務(wù)調(diào)用
本文首先對(duì)調(diào)用遠(yuǎn)程系統(tǒng)服務(wù)的開(kāi)銷(xiāo)進(jìn)行了測(cè)試,以shm—get()為例,該過(guò)程包括從NIOS2發(fā)出請(qǐng)求到GPP得到完成服務(wù)請(qǐng)求的信號(hào)為止,進(jìn)行1000次調(diào)用遠(yuǎn)程系統(tǒng)服務(wù),平均時(shí)間開(kāi)銷(xiāo)為1980時(shí)鐘周期。
測(cè)試結(jié)果如圖6所示,NIOS2通過(guò)PCIE Compiler中的Mailbox向GPP發(fā)出請(qǐng)求,該請(qǐng)求從被發(fā)出到被GPP響應(yīng)時(shí)間開(kāi)銷(xiāo)大約為600時(shí)鐘周期。Mailbox為PCIE Compiler中的一組寄存器,對(duì)該組寄存器進(jìn)行寫(xiě)操作,PCIE Compiler將會(huì)向GPP發(fā)出中斷信號(hào)。圖6中REG Write即是指該寫(xiě)操作,IRQ指PCIE Compiler向GPP發(fā)出的中斷信號(hào)。緊接著為GPP完成實(shí)際系統(tǒng)服務(wù)的時(shí)間,“Real”shm—get是指GPP執(zhí)行真正的共享存儲(chǔ)段建立工作,只需要大概800時(shí)鐘周期。最后GPP也通過(guò)向PCIE Compiler內(nèi)的Mailbox進(jìn)行寫(xiě)操作來(lái)向N10S2發(fā)出請(qǐng)求完成的信號(hào),只是該寫(xiě)操作通過(guò)PCIE進(jìn)行。這些開(kāi)銷(xiāo)中通過(guò)PCIE總線(xiàn)進(jìn)行讀寫(xiě)占了很大比例,由于數(shù)據(jù)傳輸量非常小,僅僅為7個(gè)參數(shù)和1個(gè)返回值,總線(xiàn)傳輸效率非常低。這表明調(diào)用遠(yuǎn)程系統(tǒng)服務(wù)是比較低效的,所以在實(shí)際的應(yīng)用程序中不應(yīng)該大量反復(fù)使用,而應(yīng)該只在初始化或是結(jié)束時(shí)進(jìn)行調(diào)用。但這并不影響通過(guò)共享存儲(chǔ)進(jìn)行進(jìn)程間通信的實(shí)用性,因?yàn)橐坏┻M(jìn)程通過(guò)將共享存儲(chǔ)段鏈接到本進(jìn)程的地址空間后,對(duì)這些數(shù)據(jù)的訪(fǎng)問(wèn)就不需要再通過(guò)遠(yuǎn)程調(diào)用系統(tǒng)進(jìn)行服務(wù)。
圖6 遠(yuǎn)程系統(tǒng)服務(wù)調(diào)用流程
4.2高性能信號(hào)量操作
本文對(duì)NIOS2和GPP對(duì)Mutex RAM內(nèi)信號(hào)量進(jìn)行1次fetch—and—add原語(yǔ)操作的時(shí)間開(kāi)銷(xiāo)進(jìn)行了評(píng)估。NIOS2內(nèi)進(jìn)行該原子操作時(shí)間為10時(shí)鐘周期,GPP為60時(shí)鐘周期。這表明兩者進(jìn)行同步的開(kāi)銷(xiāo)遠(yuǎn)遠(yuǎn)小于進(jìn)行1次遠(yuǎn)程系統(tǒng)服務(wù)調(diào)用的開(kāi)銷(xiāo)。NIOS2和GPP對(duì)信號(hào)量的訪(fǎng)問(wèn)均為1次讀操作和1次寫(xiě)操作,不同的是NIOS2的讀寫(xiě)操作通過(guò)FPGA內(nèi)Avalon總線(xiàn)進(jìn)行,而GPP則是通過(guò)PCIE總線(xiàn)進(jìn)行,所以時(shí)間開(kāi)銷(xiāo)相對(duì)較大。
4.3虛擬存儲(chǔ)訪(fǎng)問(wèn)
按照本文設(shè)計(jì)的虛擬存儲(chǔ)訪(fǎng)問(wèn)機(jī)制,對(duì)單個(gè)物理頁(yè)即4 KB的存儲(chǔ)進(jìn)行訪(fǎng)問(wèn)的時(shí)間開(kāi)銷(xiāo)包括3部分:地址翻譯、可能的頁(yè)錯(cuò)誤處理和實(shí)際的數(shù)據(jù)傳輸過(guò)程。前兩者的時(shí)間開(kāi)銷(xiāo)在任何時(shí)候都基本固定,變化很小。
地址翻譯過(guò)程比較簡(jiǎn)單,由2次NIOS2通過(guò)PCIE對(duì)系統(tǒng)存儲(chǔ)的訪(fǎng)問(wèn)構(gòu)成,為200時(shí)鐘周期。頁(yè)錯(cuò)誤處理過(guò)程的開(kāi)銷(xiāo)與3.1節(jié)中1次遠(yuǎn)程系統(tǒng)服務(wù)調(diào)用類(lèi)似,為1500~2000時(shí)鐘周期。通常使用FPGA進(jìn)行加速的應(yīng)用,不同模塊之問(wèn)進(jìn)行數(shù)據(jù)交互時(shí)有兩個(gè)特點(diǎn):大批量連續(xù)的數(shù)據(jù)傳輸和固定的數(shù)據(jù)存儲(chǔ)地址。由于每次進(jìn)行數(shù)據(jù)交互的物理內(nèi)存地址固定,頁(yè)錯(cuò)誤只會(huì)在第1次發(fā)生,后面就不會(huì)反復(fù)發(fā)生。
實(shí)際數(shù)據(jù)傳輸過(guò)程為On—Chip RAM與系統(tǒng)存儲(chǔ)之間的數(shù)據(jù)傳輸,在本文系統(tǒng)中等價(jià)于On—Chip RAM與PCIE Compiler之間的數(shù)據(jù)傳輸。數(shù)據(jù)傳輸過(guò)程可由NIOS2執(zhí)行簡(jiǎn)單的存儲(chǔ)拷貝函數(shù)memcpy完成,也可由SGDMA控制完成。表2列出了利用兩種方式在傳輸不同規(guī)模數(shù)據(jù)的時(shí)間開(kāi)銷(xiāo),單位為時(shí)鐘周期,通過(guò)進(jìn)行1000次數(shù)據(jù)傳輸,對(duì)時(shí)間開(kāi)銷(xiāo)取平均值得到。P是指PCIE Compiler,O是指On-Chip RAM,第1行數(shù)據(jù)是指數(shù)據(jù)傳輸時(shí)每個(gè)PCIE事務(wù)數(shù)據(jù)負(fù)載的大小,單位為Byte。
Table 2 Two Types of Data Transfer
表2 兩種數(shù)據(jù)傳輸方式的比較
簡(jiǎn)單調(diào)用存儲(chǔ)拷貝函數(shù)memcpy無(wú)法利用PCIE Compiler的Burst傳輸能力。結(jié)果顯示在On—Chip RAM和PCIE Compiler之間傳輸4 KB數(shù)據(jù)速度非常慢,并且讀寫(xiě)次數(shù)也非常多。這是由于對(duì)PCIE Compiler的每次讀寫(xiě)實(shí)際上都轉(zhuǎn)換為對(duì)PCIE總線(xiàn)的訪(fǎng)問(wèn),也就是形成單個(gè)的PCIE事務(wù),而負(fù)載卻非常小,通常僅為4B,這使得傳輸效率非常低。
結(jié)果表明使用SGDMA后效率獲得大幅度提升。PCIE Compiler支持的Burst讀最大長(zhǎng)度為256 B,Burst寫(xiě)最大長(zhǎng)度為128B,結(jié)果表明SGDMA充分利用PCIE Compiler的Burst傳輸能力。由于SGDMA可以自行控制多個(gè)傳輸?shù)倪M(jìn)行,所以當(dāng)數(shù)據(jù)量大于4 KB時(shí),多次DMA之間時(shí)間開(kāi)銷(xiāo)非常小,從而能保證數(shù)據(jù)傳輸率保持不變。
從結(jié)果中可以發(fā)現(xiàn)讀操作開(kāi)銷(xiāo)略大于寫(xiě)操作,讀操作的額外開(kāi)銷(xiāo)來(lái)自存儲(chǔ)一致性協(xié)議。在FPGA對(duì)主存進(jìn)行寫(xiě)操作時(shí)不需要等待,總線(xiàn)制器將CPU內(nèi)Cache置為失效即可。但在FPGA進(jìn)行讀時(shí)如果最新的數(shù)據(jù)在Cache內(nèi),則需要CPU先進(jìn)行Cache的清空操作,將數(shù)據(jù)寫(xiě)回主存,該開(kāi)銷(xiāo)為300時(shí)鐘周期。該開(kāi)銷(xiāo)實(shí)際上為存儲(chǔ)一致性協(xié)議的開(kāi)銷(xiāo)。
4.4性能分析
本文從兩個(gè)方面來(lái)分析BORPH-N的性能:一方面是數(shù)據(jù)傳輸通道的帶寬利用率;另一方面是獲取一批次輸入數(shù)據(jù)的時(shí)間開(kāi)銷(xiāo)。
由于BORPH—N中硬件進(jìn)程通過(guò)FPGA內(nèi)部的SGDMA控制數(shù)據(jù)在主存和FPGA的On—ChipRAM之間傳輸,而不是通常的系統(tǒng)DMA,所以考察這種方式是否能夠充分利用數(shù)據(jù)傳輸通道的帶寬非常重要。
圖7為利用SGDMA部件來(lái)控制PCIE Compiler和FPGA的On—Chip RAM之間的數(shù)據(jù)傳輸?shù)男阅堋T搱D通過(guò)SignalTab的探針考察SGDMA的讀寫(xiě)端口得到,4行信號(hào)分別為SGDMA的SGDMA—READ(讀使能信號(hào))'SGDMA—READ—DATA(讀數(shù)據(jù)信號(hào)),SGDMA—WRITE(寫(xiě)使能信號(hào))和SGDMA—WRITE—DATA(寫(xiě)數(shù)據(jù)信號(hào))。
Fig.7 Signals of SGDMA controlling data transfer.
圖7 SGDMA控制數(shù)據(jù)傳輸讀寫(xiě)信號(hào)
圖7分為左右兩邊,分別測(cè)試了雙向數(shù)據(jù)傳輸?shù)男省W髠?cè)部分可以清晰地看出SGDMA首先發(fā)出讀使能信號(hào),停頓后(即存儲(chǔ)一致性開(kāi)銷(xiāo))有16組讀數(shù)據(jù)到達(dá),每組為256 B。讀數(shù)據(jù)到達(dá)的同時(shí),SGDMA將數(shù)據(jù)同時(shí)寫(xiě)入On—Chip RAM。右側(cè)也類(lèi)似,首先發(fā)出讀使能信號(hào),由于是讀On—Chip RAM,所以沒(méi)有延遲。對(duì)On-Chip RAM的讀操作達(dá)到了On-Chip RAM的峰值性能。同時(shí)SGDMA將數(shù)據(jù)寫(xiě)入PCIE Compiler,從圖中可以清晰地看出寫(xiě)操作分為32組burst數(shù)據(jù),每組128B。
圖7表明利用SGDMA控制數(shù)據(jù)傳輸,已經(jīng)達(dá)到了PCIE Compiler的峰值傳輸性能。在50 MHz的頻率下,讀寫(xiě)帶寬分別為974 Mbps和1 187 Mbps。PCIE 2.0 lx的峰值帶寬為5 Gbps。該數(shù)據(jù)表明當(dāng)前BORPH—N的數(shù)據(jù)傳輸帶寬利用率是較低的,但要強(qiáng)調(diào)的是數(shù)據(jù)傳輸?shù)钠款i是PCIE Compile以及FPGA片上系統(tǒng)過(guò)低的頻率。優(yōu)化PCIE Compiler設(shè)計(jì)和提高片上系統(tǒng)頻率是提高數(shù)據(jù)傳輸帶寬的兩個(gè)途徑。
此外考察獲取一批次輸人數(shù)據(jù)的時(shí)間開(kāi)銷(xiāo),為簡(jiǎn)單起見(jiàn)假定輸入數(shù)據(jù)為4 KB,首先考察BORPH—N系統(tǒng)中硬件進(jìn)程獲取4 KB輸人數(shù)據(jù)的開(kāi)銷(xiāo)。開(kāi)銷(xiāo)包括兩次信號(hào)量操作,時(shí)間開(kāi)銷(xiāo)為20時(shí)鐘周期,1次地址轉(zhuǎn)換時(shí)間開(kāi)銷(xiāo)為200時(shí)鐘周期。考慮正常運(yùn)行過(guò)程中不會(huì)再發(fā)生頁(yè)錯(cuò)誤,所以不計(jì)人頁(yè)錯(cuò)誤處理開(kāi)銷(xiāo)。這些開(kāi)銷(xiāo)加上數(shù)據(jù)傳輸開(kāi)銷(xiāo),綜合的讀寫(xiě)傳輸率為861 Mbps和1 024 Mbps。
首先與原始BORPH系統(tǒng)中硬件進(jìn)程獲取輸入數(shù)據(jù)的速率進(jìn)行比較。由于原始BORPH僅為硬件進(jìn)程提供了訪(fǎng)問(wèn)文件系統(tǒng)的方法,該方法必然受限于磁盤(pán)訪(fǎng)問(wèn)的速率,而普通的磁盤(pán)數(shù)據(jù)讀寫(xiě)速率僅為560~720 Mbps。該性能是磁盤(pán)數(shù)據(jù)讀寫(xiě)的峰值,并且還沒(méi)有考慮交互的開(kāi)銷(xiāo)。然后與傳統(tǒng)的加速器方式進(jìn)行比較。按照?qǐng)D3(a)所示,進(jìn)行1次數(shù)據(jù)傳輸需要1次GPP和FPGA之間的交互。該交互包括GPP訪(fǎng)問(wèn)1次FPGA,以及FPGA返回1次狀態(tài)信息。前者開(kāi)銷(xiāo)為200時(shí)鐘周期。后者可通過(guò)GPP輪詢(xún)或是中斷信號(hào)處理的方式實(shí)現(xiàn),以效率較高的中斷方式為例,參照4.1節(jié)實(shí)驗(yàn)數(shù)據(jù),時(shí)間開(kāi)銷(xiāo)為600時(shí)鐘周期。需要注意的是這些交互開(kāi)銷(xiāo)的絕對(duì)時(shí)間并不會(huì)隨著FPGA片上系統(tǒng)頻率的提高而減少,因?yàn)檫@些開(kāi)銷(xiāo)是來(lái)自PCIE總線(xiàn)以及GPP方面。實(shí)際數(shù)據(jù)傳輸雖然由系統(tǒng)DMA控制,但根據(jù)上述分析,數(shù)據(jù)傳輸?shù)钠款i在于PCIECompiler,所以傳輸開(kāi)銷(xiāo)必然與通過(guò)SGDMA控制得相同。因此總的讀寫(xiě)帶寬為660 Mbps和751 MbpS。可以發(fā)現(xiàn)BORPH—N與之相比讀寫(xiě)帶寬分別提高30%和36%。并且這里還沒(méi)有考慮啟動(dòng)FPGA進(jìn)行處理時(shí)還需要進(jìn)行的1次GPP和FPGA之間的交互。
5.相關(guān)研究與總結(jié)
HThread面向片上多處理系統(tǒng)設(shè)計(jì),與BORPH思想較為相近,不同的是HThread擴(kuò)展了線(xiàn)程概念,麗BORPH擴(kuò)展了進(jìn)程概念。HThread將多線(xiàn)程編程模型擴(kuò)展到可重構(gòu)計(jì)算中,系統(tǒng)將硬件邏輯抽象為硬件線(xiàn)程。HThread基于微內(nèi)核的概念設(shè)計(jì),由一組功能模塊包括線(xiàn)程管理器、鎖管理器、共享存儲(chǔ)管理單元等構(gòu)成系統(tǒng)內(nèi)核,這些功能模塊可以實(shí)現(xiàn)為通用處理核上的軟件,也可以實(shí)現(xiàn)為掛載在系統(tǒng)總線(xiàn)上的硬件邏輯。軟硬件線(xiàn)程通過(guò)不同的接口訪(fǎng)問(wèn)這些功能模塊,也就是訪(fǎng)問(wèn)系統(tǒng)服務(wù),線(xiàn)程之間通過(guò)系統(tǒng)服務(wù)實(shí)現(xiàn)協(xié)同。
Saldana等人介紹了通過(guò)MPI進(jìn)行軟硬件交互的方法。硬件模塊通過(guò)系統(tǒng)提供的TMD-MPE模塊來(lái)與系統(tǒng)其他部分進(jìn)行交互。使用MPI來(lái)抽象軟硬件之間的交互接口具有非常好的特性,如支持軟硬件模塊的無(wú)縫替換。本文介紹的節(jié)點(diǎn)內(nèi)進(jìn)程間高效率通信方法可以支持TMD-MPI在單節(jié)點(diǎn)內(nèi)不同進(jìn)程之間的通信。
HybridOS和OpenFPGAE都以加速器方式進(jìn)行GPP和FPGA之聞協(xié)同。該方向的研究新趨勢(shì)也是對(duì)操作FPGA的編程接口進(jìn)行規(guī)范化。HybridOS的方法是統(tǒng)一FPGA內(nèi)部邏輯的框架結(jié)構(gòu),以類(lèi)似訪(fǎng)問(wèn)文件的方式訪(fǎng)問(wèn)FPGA邏輯的緩沖,試圖將對(duì)FPGA的操作統(tǒng)一到一般的文件操作方式。OpenFPGA則試圖將FPGA統(tǒng)一為一類(lèi)標(biāo)準(zhǔn)的設(shè)備,設(shè)計(jì)具有統(tǒng)一接VI的驅(qū)動(dòng)程序,不同類(lèi)型的FPGA邏輯都實(shí)現(xiàn)該接口,保證上層軟件的一致性。
考慮使用新型高級(jí)編程模型來(lái)開(kāi)發(fā)FPGA應(yīng)用也一直是學(xué)術(shù)界的研究熱點(diǎn)。最近的研究包括將CUDA,OpenCL等面向眾核的編程模型引入到FPGA的應(yīng)用開(kāi)發(fā)中。FCUDA利用CUDA作為FPGA設(shè)計(jì)的編程模型。FCUDA可將CUDA程序中的粗粒度和細(xì)粒度并行高效地映射到可重構(gòu)邏輯上。FCUDA基于高級(jí)綜合工具AutoPilot實(shí)現(xiàn),通過(guò)源到源編譯器實(shí)現(xiàn)CUDA代碼到AutoPilot代碼的轉(zhuǎn)換。
國(guó)內(nèi)學(xué)術(shù)界也有大量研究關(guān)注如何簡(jiǎn)化可重構(gòu)計(jì)算中的軟硬件協(xié)同問(wèn)題。馬吉軍在其學(xué)位論文中討論了將線(xiàn)程概念擴(kuò)展到可重構(gòu)計(jì)算中的方法,并將軟硬件協(xié)同設(shè)計(jì)轉(zhuǎn)換為多線(xiàn)程應(yīng)用開(kāi)發(fā)。與本文不同的是,該工作的底層平臺(tái)專(zhuān)注于片上可重構(gòu)計(jì)算系統(tǒng),以支持硬件線(xiàn)程和軟件線(xiàn)程之間非常緊密的耦合關(guān)系。
本文將BORPH移植到普通用戶(hù)最易獲得的由FPGA板和通用PC構(gòu)成的可重構(gòu)計(jì)算乎臺(tái)上,并對(duì)硬件進(jìn)程概念進(jìn)行了擴(kuò)展,降低了硬件進(jìn)程設(shè)計(jì)難度。硬件進(jìn)程設(shè)計(jì)難度的降低體現(xiàn)在兩個(gè)方面:一方面是與系統(tǒng)交互部分通過(guò)軟件接口面不是硬件接口,編寫(xiě)軟件程序來(lái)調(diào)用系統(tǒng)接口,顯然比設(shè)計(jì)硬件邏輯來(lái)連接硬件接口更為容易;另一方面是功能邏輯部分,由于接口為標(biāo)準(zhǔn)FPGA片上總線(xiàn)接口,有大量廠(chǎng)商提供的庫(kù)支持方便了設(shè)計(jì)。基于獨(dú)立執(zhí)行的基本思想,提供了性能優(yōu)化的軟硬件進(jìn)程間通信機(jī)制。
核心關(guān)注:拓步ERP系統(tǒng)平臺(tái)是覆蓋了眾多的業(yè)務(wù)領(lǐng)域、行業(yè)應(yīng)用,蘊(yùn)涵了豐富的ERP管理思想,集成了ERP軟件業(yè)務(wù)管理理念,功能涉及供應(yīng)鏈、成本、制造、CRM、HR等眾多業(yè)務(wù)領(lǐng)域的管理,全面涵蓋了企業(yè)關(guān)注ERP管理系統(tǒng)的核心領(lǐng)域,是眾多中小企業(yè)信息化建設(shè)首選的ERP管理軟件信賴(lài)品牌。
轉(zhuǎn)載請(qǐng)注明出處:拓步ERP資訊網(wǎng)http://www.lukmueng.com/
本文標(biāo)題:共享存儲(chǔ)可重構(gòu)計(jì)算機(jī)軟硬件通信的優(yōu)化實(shí)現(xiàn)
本文網(wǎng)址:http://www.lukmueng.com/html/support/11121511517.html