楊彥鑫,黎 英
(1.云南大學(xué)信息學(xué)院,昆明 650091;2.云南農(nóng)業(yè)大學(xué)工程技術(shù)學(xué)院,昆明 650201;3.昆明理工大學(xué)信息工程與自動(dòng)化學(xué)院,昆明 650093)
計(jì)算機(jī)仿真[1]是指以計(jì)算機(jī)為主要工具,運(yùn)行真實(shí)系統(tǒng)或預(yù)研系統(tǒng)的仿真模型,通過對(duì)仿真模型的輸出信息分析與研究,實(shí)現(xiàn)對(duì)實(shí)際系統(tǒng)運(yùn)行狀態(tài)和演化規(guī)律的綜合評(píng)估與預(yù)測(cè)。它是分析評(píng)價(jià)現(xiàn)有系統(tǒng)運(yùn)行狀態(tài)或設(shè)計(jì)優(yōu)化未來系統(tǒng)性能與功能的一種技術(shù)手段,現(xiàn)已廣泛應(yīng)用于國(guó)民生產(chǎn)的各種領(lǐng)域。隨著人們對(duì)復(fù)雜、大型系統(tǒng)如基因工程、氣候預(yù)報(bào)、軍事演習(xí)、電力系統(tǒng)等的深入研究,原有串行仿真系統(tǒng)已經(jīng)不能滿足龐大的計(jì)算量需求,并行仿真系統(tǒng)越來越受到人們的青睞。并行系統(tǒng)的基本構(gòu)建方式主要有兩種,第一種是使用大型機(jī)甚至巨型機(jī),將多個(gè)CPU通過高速總線連接,這種方式的管理效率、數(shù)據(jù)傳輸速度和可靠性都非常高,整個(gè)并行程序的運(yùn)行效率也很高。但是,這種方式購置、維護(hù)、管理費(fèi)用非常昂貴,系統(tǒng)的擴(kuò)展性及可移植性也較差[2]。并且由于系統(tǒng)成本太高、專業(yè)性太強(qiáng)、難以被中、小型企業(yè)和普通用戶所接受;第二種方法使用分布式計(jì)算模式,多主機(jī)間通過通信線路互聯(lián),將復(fù)雜的計(jì)算任務(wù)分解至各主機(jī)進(jìn)行計(jì)算,這種方法相對(duì)于大型機(jī)來說,價(jià)格低廉、可擴(kuò)展性強(qiáng)、可移植性好。目前來說基于TCP/IP協(xié)議的以太網(wǎng)多DSP并行處理系統(tǒng)應(yīng)用較廣。該系統(tǒng)通過以太網(wǎng)將一組高性能的DSP連接起來,在并行操作系統(tǒng)和集成開發(fā)環(huán)境的支持下統(tǒng)一調(diào)度,可以實(shí)現(xiàn)高效的并行計(jì)算。這種系統(tǒng)的開發(fā)設(shè)計(jì)較為方便,也具有很好的擴(kuò)展性能[3]。但是,由于在系統(tǒng)的各并行節(jié)點(diǎn)間數(shù)據(jù)的傳輸采用TCP/IP協(xié)議,將大量精力應(yīng)用在保證數(shù)據(jù)傳輸?shù)目煽啃约皵?shù)據(jù)流的控制上,這不僅需要花費(fèi)較多的處理時(shí)間來實(shí)現(xiàn)協(xié)議,占用大量的系統(tǒng)資源,而且通信也存在有不確定性。直接將這種耗時(shí)長(zhǎng)、不確定的通信技術(shù)所構(gòu)成的并行系統(tǒng)應(yīng)用于實(shí)時(shí)仿真時(shí),仿真的速度將受限于并行節(jié)點(diǎn)間的數(shù)據(jù)通信開銷,實(shí)時(shí)性難以得到保證。
實(shí)時(shí)仿真需要仿真系統(tǒng)的仿真時(shí)間和自然時(shí)間完全一致[4]。為了滿足仿真時(shí)間與自然時(shí)間一致的要求,通過對(duì)以太網(wǎng)TCP/IP通信協(xié)議的優(yōu)化和裁剪,設(shè)計(jì)出基于MAC層數(shù)據(jù)傳輸?shù)耐ㄐ欧绞?,大大降低了系統(tǒng)通信開銷,提高了通信速率,為并行實(shí)時(shí)仿真系統(tǒng)的實(shí)現(xiàn)奠定了基礎(chǔ)。并行仿真系統(tǒng)中,并行計(jì)算需要將復(fù)雜的任務(wù)進(jìn)行劃分,通過調(diào)度算法將任務(wù)分配至各節(jié)點(diǎn)機(jī)進(jìn)行處理。因此,各節(jié)點(diǎn)機(jī)必需預(yù)先下載經(jīng)過編譯系統(tǒng)編譯完成的任務(wù)。但當(dāng)并行系統(tǒng)中節(jié)點(diǎn)數(shù)量較多時(shí),每個(gè)節(jié)點(diǎn)單獨(dú)下載任務(wù)的方式將變得非常繁瑣復(fù)雜,不僅耗時(shí)長(zhǎng)而且增加很大工作量。如果任務(wù)調(diào)度的算法改變,也會(huì)遇到同樣的問題。通過對(duì)DSP啟動(dòng)方式及加載方式的研究,提出一種多重加載的下載方法,很好地解決了并行任務(wù)下載至各節(jié)點(diǎn)機(jī)的問題。
多DSP并行系統(tǒng)的基本性能主要取決于處理單元即DSP的處理速度、并行系統(tǒng)的結(jié)構(gòu)和任務(wù)調(diào)度算法三個(gè)方面[5]。三者之間緊密聯(lián)系、相互依賴。此并行系統(tǒng)使用美國(guó)模擬器件公司(ADI公司)生產(chǎn)的Blackfin系列ADSP-BF548型號(hào)的DSP芯片作為處理單元,該芯片具有強(qiáng)大的運(yùn)算能力,主頻最高可到600MHz,并具有低功耗、片內(nèi)資源豐富、控制功能強(qiáng)的特點(diǎn)。雖然BF548已經(jīng)在片內(nèi)融入了并行處理技術(shù),如多級(jí)流水線、并行計(jì)算單元等,但多片并行的技術(shù)處理任務(wù)速度更快,性能更強(qiáng),并且擴(kuò)展靈活,是并行技術(shù)發(fā)展的主要方向。多片DSP如何實(shí)現(xiàn)通信控制與數(shù)據(jù)交換,即如何建立起多DSP之間的信號(hào)連接通道SLC(Signal Link Channel)[6],是并行系統(tǒng)結(jié)構(gòu)設(shè)計(jì)的核心問題。并行系統(tǒng)采用基于以太網(wǎng)的雙重網(wǎng)絡(luò)體系主從結(jié)構(gòu)設(shè)計(jì),如圖1所示。
圖1 并行網(wǎng)絡(luò)結(jié)構(gòu)
在雙重網(wǎng)絡(luò)結(jié)構(gòu)下,各節(jié)點(diǎn)的通信和數(shù)據(jù)交換方式也分為兩類。第一類是主機(jī)與各從機(jī)間的通信。在此方式中主機(jī)相當(dāng)于大型機(jī)的中央管理系統(tǒng),負(fù)責(zé)對(duì)并行仿真的任務(wù)進(jìn)行劃分和調(diào)度,將劃分好的任務(wù)分配到各處理機(jī)上,使任務(wù)按照一定的順序執(zhí)行,從而將復(fù)雜任務(wù)分解成簡(jiǎn)單任務(wù),獲得了很高的處理性能,主機(jī)還可以對(duì)各從機(jī)進(jìn)行管理。對(duì)于復(fù)雜的并行系統(tǒng),在管理和調(diào)度任務(wù)時(shí)需要使用操作系統(tǒng)。μC/OS-II是一種基于優(yōu)先級(jí)的搶占式多任務(wù)操作系統(tǒng),包含了實(shí)時(shí)內(nèi)核、任務(wù)管理、時(shí)間管理、任務(wù)間通信同步(信號(hào)量,郵箱,消息隊(duì)列)和內(nèi)存管理等功能。μC/OS-II的最大特點(diǎn)是源碼公開,可方便的將其移植到本系統(tǒng)中,并且方便維護(hù)。由于系統(tǒng)采用靜態(tài)任務(wù)調(diào)度方法,主要保證數(shù)據(jù)傳輸?shù)姆€(wěn)定性和可靠性,對(duì)任務(wù)的劃分和調(diào)度沒有非常嚴(yán)格的時(shí)間要求,所以在這類網(wǎng)絡(luò)中使用以太網(wǎng)TCP/IP協(xié)議提供可靠的傳輸服務(wù);第二類是從機(jī)間的數(shù)據(jù)交換。在并行計(jì)算的過程中,多任務(wù)間具有一定的耦合性,各從機(jī)間需要交換數(shù)據(jù)信息。為滿足實(shí)時(shí)仿真的要求,DSP間的數(shù)據(jù)交換采用了通信速度較快的基于MAC地址的網(wǎng)絡(luò)傳輸機(jī)制。標(biāo)準(zhǔn)的TCP/IP協(xié)議棧在傳輸過程中占用了大量CPU資源和通信開銷,由于DSP并行系統(tǒng)中所有節(jié)點(diǎn)均處于同一局域網(wǎng)內(nèi),可將上層協(xié)議進(jìn)行裁剪,保留MAC層以下的協(xié)議,使用MAC地址進(jìn)行數(shù)據(jù)傳輸。經(jīng)測(cè)試,在以交換機(jī)組成的局域網(wǎng)內(nèi),采用MAC層收發(fā)數(shù)據(jù),可以降低通信開銷、提高通信速率,特別是短數(shù)據(jù)幀的通信速率。另外,從機(jī)可根據(jù)并行仿真的需要通過交換機(jī)靈活配置成各種并行結(jié)構(gòu),具有很好的可重構(gòu)性和擴(kuò)展性。這種雙重網(wǎng)絡(luò)結(jié)構(gòu)的并行系統(tǒng)繼承了大型機(jī)和分布式系統(tǒng)的優(yōu)點(diǎn),既有運(yùn)算能力強(qiáng)、可靠性高、管理效率良好的特點(diǎn),又具有成本較低、擴(kuò)展靈活、可滿足仿真實(shí)時(shí)性要求的優(yōu)勢(shì),是一種可應(yīng)用于中、小企業(yè)和個(gè)人用戶的高效廉價(jià)的并行仿真系統(tǒng)。
BF548芯片的引導(dǎo)啟動(dòng)方式非常靈活,有多種啟動(dòng)方式可供用戶選擇,在不同的啟動(dòng)方式下,初始執(zhí)行的程序地址并不相同,讀取執(zhí)行文件的方式也不相同。為了使DSP能夠從固定地址執(zhí)行并行計(jì)算程序,必需掌握BF548芯片的啟動(dòng)方式。BF548的啟動(dòng)方式由芯片的4根BMODE輸入引腳決定,各種啟動(dòng)方式見表1。
表1 BF548啟動(dòng)方式
為了便于任務(wù)下載,各 DSP選擇從16-bit burst flash存儲(chǔ)器啟動(dòng)的方式,該方式的啟動(dòng)過程可以看作是從flash存儲(chǔ)器上讀取啟動(dòng)碼流即LDR文件到DSP內(nèi)部的L1存儲(chǔ)器和SDRAM存儲(chǔ)器的過程,如圖2所示。啟動(dòng)工作全部由位于DSP存儲(chǔ)器地址0xEF000000到0xEF0003FF的片上Boot ROM中的啟動(dòng)代碼完成。DSP處理器復(fù)位后會(huì)從Boot ROM的起始地址開始執(zhí)行,啟動(dòng)代碼首先讀取啟動(dòng)碼流最開始的16個(gè)字節(jié),它們是啟動(dòng)文件的頭信息,內(nèi)核通過分析包含在這16個(gè)字節(jié)中的DMACODE位來確定DMA通道的寬度和步長(zhǎng),同時(shí)配置DMA通道。一旦DMA的配置完成后,啟動(dòng)碼流將以子塊為單位讀取LDR文件中的其它程序信息。啟動(dòng)代碼根據(jù)頭信息中的目標(biāo)地址(Target Address)和子塊長(zhǎng)度(Byte Count)將啟動(dòng)碼流的每個(gè)子塊傳輸?shù)礁鞔鎯?chǔ)器的指定位置。當(dāng)所有的塊傳輸完成后,啟動(dòng)代碼會(huì)自動(dòng)跳轉(zhuǎn)到應(yīng)用程序的起始地址開始執(zhí)行,默認(rèn)的地址為0xFFA00000存儲(chǔ)在EVT1寄存器中,通過更改EVT1中的地址值可實(shí)現(xiàn)執(zhí)行不同位置的應(yīng)用程序。
圖2 BF548啟動(dòng)過程
裝載文件,即LDR文件,它包含著全部的啟動(dòng)碼流,LDR文件保存在靜態(tài)存儲(chǔ)器中供啟動(dòng)使用,它可以通過ADI公司提供的集成開發(fā)和調(diào)試工具VDSP中的 ELFLOADER功能生成。ELFLOADER解析輸入的可執(zhí)行文件(DXE文件),生成帶有頭信息的啟動(dòng)碼流。LDR文件由多個(gè)子塊組成,每個(gè)子塊可以分為頭部和負(fù)載兩個(gè)部分,但有部分特殊子塊只有頭部,沒有負(fù)載區(qū)。頭部區(qū)共有16個(gè)字節(jié),分別存儲(chǔ)著頭部的CRC校驗(yàn)數(shù)據(jù)、標(biāo)志符、目的地址、塊大小和塊參數(shù)。頭部標(biāo)志符共有16字節(jié),如圖3所示。
圖3 LDR文件頭部標(biāo)志符
前4字節(jié)為區(qū)塊代碼(Block Code),如圖4所示。
其中 BFLAG_FINAL、BFLAG_FIRST、BFLAG_INIT和BFLAG_FILL四個(gè)標(biāo)志符,它們分別指出當(dāng)前的子塊為結(jié)束塊、開始?jí)K、初始化塊和填充塊。一般情況下每個(gè)LDR文件都會(huì)存在這四個(gè)標(biāo)志符。不同的區(qū)塊會(huì)令Boot ROM對(duì)啟動(dòng)過程產(chǎn)生不同的影響。利用啟動(dòng)文件中的區(qū)塊加載方式,可設(shè)計(jì)多重加載的啟動(dòng)方式。
圖4 區(qū)塊代碼
要實(shí)現(xiàn)將PC機(jī)上VDSP編譯好的LDR文件從主DSP下載到各從DSP中,要通過以太網(wǎng),所以PC機(jī)和DSP中必需有網(wǎng)絡(luò)通信程序以實(shí)現(xiàn)數(shù)據(jù)傳送。加載文件傳輸過程主要保證傳輸?shù)恼_性,對(duì)時(shí)間和效率的要求不高,所以上下位機(jī)都使用TCP/IP通信協(xié)議。PC機(jī)中使用VC++編寫程序,利用TCP/IP協(xié)議提供的編程接口套接字(Sockets)開發(fā)通信程序。套接字的實(shí)質(zhì)是通信端點(diǎn)的一種抽象,它提供一種發(fā)送和接收數(shù)據(jù)的機(jī)制。Windows Sockets規(guī)范以U.C.Berkeley大學(xué)BSD UNIX中流行的Sockets接口為范例定義了一套Windows下網(wǎng)絡(luò)編程接口。Windows Sockets具體實(shí)現(xiàn)使用Winsock應(yīng)用程序接口(API),Windows Sockets提供面向連接的流式套接字(Stream socket)和面向無連接的數(shù)據(jù)報(bào)套接字(Datagram socket)。在VC++中可利用MFC封裝的CAsyncSocket和CSocket兩個(gè)類中的相關(guān)函數(shù)實(shí)現(xiàn)。在BF548 DSP中,使用μC/TCPIP協(xié)議棧,μC/TCPIP是一個(gè)精簡(jiǎn)、實(shí)時(shí)、高效的TCP/IP協(xié)議棧,可支持64位的嵌入式處理器,所有代碼遵循Motor Industry Software Reliability Association(MISRA)C標(biāo)準(zhǔn),可根據(jù)用戶需要裁減,它的原碼公開,可方便移植入BF548平臺(tái)。運(yùn)行μC/TCPIP需要多任務(wù)的實(shí)時(shí)操作系統(tǒng),操作系統(tǒng)需要具有計(jì)數(shù)信號(hào)量,μC/TCPIP中封裝了支持μC/OS-II的軟件層,所以與μC/OS-II配合使用更加方便。μC/TCPIP可支持Sockets、TCP、UCP、IP等協(xié)議,所以 PC 機(jī)和DSP均可使用相同的方式創(chuàng)建網(wǎng)絡(luò)連接。主從DSP間進(jìn)行文件傳輸也通過Sockets套接字進(jìn)行編程,程序流程如圖5。為確保LDR文件傳輸?shù)恼_性,主從DSP間經(jīng)過多次交互,從DSP還應(yīng)將寫入flash的文件讀出后再發(fā)送至主DSP進(jìn)行校驗(yàn),如果校驗(yàn)失敗,要求主DSP重新進(jìn)行傳輸。
圖5 通信程序流程圖
在BF548芯片復(fù)位后,系統(tǒng)均要通過啟動(dòng)過程加載可執(zhí)行的程序進(jìn)入L1或RAM中執(zhí)行,加載過程通過芯片Boot ROM中的啟動(dòng)代碼完成。DSP選擇從16-bit burst flash存儲(chǔ)器啟動(dòng)的方式,系統(tǒng)將加載保存在flash中的啟動(dòng)碼流。在DSP的啟動(dòng)過程中,首先要判斷flash中是否已經(jīng)存儲(chǔ)了并行任務(wù)的LDR文件,如果沒有,則需要加載通信程序和主DSP通信下載并行任務(wù)的LDR文件;如果已經(jīng)存儲(chǔ)了并行任務(wù),則直接加載并行任務(wù)的LDR文件進(jìn)行并行仿真計(jì)算。為了實(shí)現(xiàn)此過程,必需運(yùn)用BF548初始化塊預(yù)先加載的特性實(shí)現(xiàn)多重加載。BF548在實(shí)際應(yīng)用程序加載之前,允許預(yù)先加載初始化塊。當(dāng)Boot ROM中的啟動(dòng)程序檢測(cè)到某些子塊的頭部標(biāo)志符具有BFLAG_INIT標(biāo)志時(shí),認(rèn)定這些區(qū)塊為初始化塊,并首先將這些區(qū)塊載入DSP的存儲(chǔ)器中,然后發(fā)出一個(gè)調(diào)用指令給其目標(biāo)地址來執(zhí)行該塊。初始化塊中可包含一段初始化代碼(Init Code),用C語言函數(shù),原型如下:
void initcode(ADI_BOOT_DATA*pBootStruct)也可以聲明一段初始化代碼。初始化代碼執(zhí)行完后將通過一條RTS指令返回BOOT ROM繼續(xù)加載過程,將要加載區(qū)塊的地址保存在DSP的R0寄存器中,在初始化代碼中改變R0的值,可實(shí)現(xiàn)加載不同LDR文件。初始化代碼執(zhí)行完成后,已加載的初始化塊將被其它區(qū)塊所覆蓋。其過程如圖6所示。
圖6 初始化代碼執(zhí)行過程
在初始化程序中,判斷Burst Flash存儲(chǔ)器中地址為0x200F FFFF的存儲(chǔ)單元存儲(chǔ)的內(nèi)容是否為0x0FFF,如果是,則表明DSP中沒有下載過并行任務(wù)程序,初始化程序修改R0寄存器內(nèi)容,調(diào)用網(wǎng)絡(luò)下載程序,網(wǎng)絡(luò)下載程序?qū)⑴cPC機(jī)通信,下載任務(wù)程序,將下載的LDR文件寫入存儲(chǔ)器0x20100000之后的空間,同時(shí)修改0x200F FFFF地址單元內(nèi)容為0x08FF;如果不是,則設(shè)置定時(shí)器延時(shí)一段時(shí)間,用戶在定時(shí)時(shí)間內(nèi)如按下SW10按鍵則重新下載LDR文件,更新任務(wù)程序,更新完成后重啟DSP;如未按下SW10按鍵則調(diào)用下載好的任務(wù)程序開始并行仿真過程。程序流程圖如圖7所示。
圖7 多重加載過程
在對(duì)比傳統(tǒng)并行系統(tǒng)結(jié)構(gòu)的基礎(chǔ)上,構(gòu)建了一種基于以太網(wǎng)的多DSP并行仿真系統(tǒng)。系統(tǒng)采用雙重網(wǎng)絡(luò)結(jié)構(gòu),靜態(tài)任務(wù)調(diào)度管理和并行實(shí)時(shí)仿真過程使用不同網(wǎng)絡(luò)架構(gòu)進(jìn)行數(shù)據(jù)通信,使得調(diào)度管理過程靈活、可靠;通過對(duì)以太網(wǎng)協(xié)議的裁剪優(yōu)化,縮短了并行結(jié)點(diǎn)間數(shù)據(jù)通信的時(shí)間,為并行系統(tǒng)實(shí)現(xiàn)實(shí)時(shí)仿真提供了基本保證。同時(shí)提出的利用多重加載方式下載并行任務(wù)的方法具有很強(qiáng)的實(shí)用價(jià)值。特別是當(dāng)并行系統(tǒng)中DSP數(shù)量較大時(shí),可節(jié)約大量的下載時(shí)間和工作量,減少通過仿真器下載時(shí)硬件插拔造成的損傷,也可以用于DSP程序的在線升級(jí)更新。此方法不僅適用于ADI公司的BF548芯片,略加修改還可應(yīng)用于其它Blackfin系列DSP中。但是此方法也有一定的局限性,要求DSP板必需有以太網(wǎng)接口,由于移植了操作系統(tǒng)和網(wǎng)絡(luò)協(xié)議棧,對(duì)于存儲(chǔ)器的容量也有一定的要求,因此該方法仍需進(jìn)一步完善。
[1]胡峰,等.動(dòng)態(tài)系統(tǒng)計(jì)算機(jī)仿真技術(shù)綜述[J].計(jì)算機(jī)仿真,2000,17(1):1 -7.
[2]任曉明,等.網(wǎng)絡(luò)并行計(jì)算系統(tǒng)模型[J].計(jì)算機(jī)工程與應(yīng)用,2001(15):118-119.
[3]柳林,李濤,荊濤.基于多節(jié)點(diǎn)多核的樣本級(jí)并行仿真技術(shù)研究[J].系統(tǒng)仿真學(xué)報(bào),2010,22(11):2597-2599.
[4]姚新宇,黃柯棣.仿真中的時(shí)間和實(shí)時(shí)仿真[J].系統(tǒng)仿真學(xué)報(bào),1999,11(6):415 -417.
[5]黃飛,等.網(wǎng)絡(luò)互聯(lián)型多DSP并行處理系統(tǒng)設(shè)計(jì)[J].計(jì)算機(jī)工程,2007,33(23):230 -232.
[6]杜金榜,等.多DSP并行處理系統(tǒng)的設(shè)計(jì)與開發(fā)[J].計(jì)算機(jī)測(cè)量與控制,2006,14(5):658-660.