利用工具和技巧應對多核設計領(lǐng)域的挑戰
多處理器電腦已存在一段時(shí)間了,但工程師們只是在最近幾年才有機會(huì )買(mǎi)到具有多個(gè)處理器或“核心”的芯片現貨。這些器件分為兩類(lèi):對稱(chēng)型和非對稱(chēng)型。第一類(lèi)器件提供同一CPU內核的多個(gè)“克隆”,因此稱(chēng)作對稱(chēng)型。第二類(lèi)是將不同類(lèi)型的CPU、DSP、加速器都放在一個(gè)單片系統中。本文將專(zhuān)門(mén)介紹第一類(lèi)多核技術(shù)。
據Extreme Engineering Solutions公司首席執行官Rob Scidmore表示,單核處理器與多核處理器使用的硬件僅存在很少幾項區別?!疤魬饡?huì )出現在,當你必須把軟件從單核遷移到雙核時(shí)。當兩個(gè)處理器內核必須通信時(shí),性能可能會(huì )降低很多。系統的等待時(shí)間變得更長(cháng),但吞吐率依然很高。當工程師們?yōu)槊總€(gè)內核把應用代碼分解成片段時(shí),就必須應對上述局面。他們必須平衡等待時(shí)間和吞吐率?!?/P>
但是,工程師們經(jīng)常會(huì )把代碼分解成片段。Scidmore解釋說(shuō):“他們也許通過(guò)以太網(wǎng)端口接收圖像,用算法處理圖像,然后顯示它們。你可以在一個(gè)處理器上運行TCP/IP堆棧,在第二個(gè)處理器上運行算法,并把第三個(gè)處理器專(zhuān)門(mén)用于顯示。但是如果你有數千個(gè)匯編語(yǔ)言文件,那么你別無(wú)選擇,只能回到框圖并從頭開(kāi)始,并花時(shí)間把某個(gè)應用劃分成幾個(gè)線(xiàn)程?!?/P>
一些為對稱(chēng)多處理(SMP)提供支持的操作系統(OS)可以提供某種方式來(lái)集成舊代碼和新代碼。例如,QNX公司的Neutrino OS提供混合多處理(bound multiprocessing),它使開(kāi)發(fā)人員能使多個(gè)進(jìn)程始終位于某個(gè)核心,或稱(chēng)“鎖定”。QNX公司產(chǎn)品經(jīng)理Kerry Johnson說(shuō):“假設你有一些舊軟件,它們在多核芯片或多處理環(huán)境中也許不能恰當運行。代碼可能會(huì )假定它擁有對I/O設備等的獨占控制權,這可能會(huì )在多核系統中造成一些問(wèn)題。這種情況下,你可以把軟件‘鎖’在某個(gè)內核里,不必修改代碼。然后你可以添加新應用軟件,它將利用剩余內核。舊軟件和新軟件并存于某個(gè)多核芯片上的相同OS中?!?/P>
Johnson說(shuō):“要讓開(kāi)發(fā)人員理解多核芯片不需要每一個(gè)內核都擁有自己的OS,這是一個(gè)挑戰。具備SMP能力的單一OS可立即監督多個(gè)內核的運行情況。隨著(zhù)更多OS廠(chǎng)商開(kāi)始支持SMP,開(kāi)發(fā)人員將會(huì )更好地理解,他們可以使用一種編程風(fēng)格,并讓他們的代碼工作在單核、雙核、四核處理器。一套軟件工具可工作在所有這些環(huán)境中?!?/P>
當然,這些工具必須包含源代碼級調試器。 Johnson解釋說(shuō):“設計人員需要一個(gè)調試器處理所有這些內核,希望在一個(gè)窗口里看到一切,而不是每個(gè)內核都有一個(gè)調試窗口。在特定時(shí)間,無(wú)論哪個(gè)處理器運行代碼,調試器都必須在斷點(diǎn)停止,追蹤程序執行情況,并在所有內核收集數據,就像它對單核芯片做的那樣?!?/P>
作為 Neutrino操作系統的一部分,QNX公司在其中提供了一個(gè)帶有調試工具的內核,它使開(kāi)發(fā)人員能用日志記錄低級的狀態(tài)變化、中斷等事件。因此人們能看到所有內核的互動(dòng)。Johnson說(shuō):“當內核共享存儲器和I/O設備時(shí),你可能會(huì )遇到必須詳細檢查的問(wèn)題。這個(gè)配備了儀器的內核把數據記錄在日志里,并且Momentics系統剖析器可以讓你分析日志記錄的信息?!盦NX公司提供帶有調試工具的內核以及未配備調試工具的內核。前者提供一種方法來(lái)檢查和測試現場(chǎng)的操作,而后者則略微減少了內核開(kāi)發(fā)成本,并略微增加了內核的代碼空間。
在把應用軟件放到多核系統中以前,需要多次測試這些軟件。但是,如果原型硬件在代碼準備就緒時(shí)就已存在的話(huà),則測試會(huì )占用這些昂貴并且難以部署的原型硬件。并且如果把代碼鎖定到多核硬件,就會(huì )很快減少在硬件和軟件之間折衷的機會(huì )。作為替代辦法,可以考慮在虛擬系統上運行軟件,該系統模仿處理器核心和其它硬件設備。Virtutech公司營(yíng)銷(xiāo)副總裁 Michel Genard說(shuō):“硬件虛擬化使你能做許多探索。你可以看到應用代碼在一個(gè)或幾個(gè)核心內如何工作。并且你可以觀(guān)察為每個(gè)內核改變時(shí)鐘頻率后造成的影響,但不必改變硬件。無(wú)需占用硬件,可以運行自己的應用代碼?!?/P>
由于虛擬系統控制了時(shí)間,因此可以停止所有內核和設備,并且可以向后或向前運行代碼。還可以用檢查點(diǎn)在特定時(shí)間訪(fǎng)問(wèn)來(lái)自“內部”核心和所有其它設備的信息。Genard指出:“開(kāi)發(fā)人員告訴我們一些噩夢(mèng),比如多核系統中的 SMP競態(tài)條件。他們發(fā)現幾乎無(wú)法在硬件上調試多核應用代碼。另一方面,虛擬環(huán)境使他們能再現系統行為。他們可以根據需要‘備份’、檢驗、改變數據,或觀(guān)察和改變行為?!?
虛擬化還有一個(gè)好處:開(kāi)發(fā)人員可以確定自己的軟件將如何利用多個(gè)內核以及系統的其它硬件,因此他們可以做出設計決定。他們也許會(huì )發(fā)現,兩個(gè)內核將提供與四個(gè)內核相同的性能。
工程師們經(jīng)常把飛思卡爾、英特爾、博通等公司看作多核芯片廠(chǎng)商,而XMOS Semiconductor和Parallax等其它公司也提供多核器件,但面向不同市場(chǎng)。
據 XMOS公司首席技術(shù)官及創(chuàng )始人之一David May表示,該公司把它的XS1-G多核IC家族定位為“軟件定義芯片”。他說(shuō):“XCores也許有些不同尋常,這是因為它們看起來(lái)像通用處理器以及與 I/O接口緊密集成的可編程狀態(tài)機。它們能做許多你分配給專(zhuān)用硬件做的事情?!泵總€(gè)XCore均位于一個(gè)XCore Tile中,后者有自己的寄存器、存儲器、I/O端口以及XLink,XLink與相同或不同IC上的其它Xcore通信。一個(gè)XCore能同時(shí)執行8個(gè)線(xiàn)程。
開(kāi)發(fā)人員使用XC語(yǔ)言,它是C語(yǔ)言的衍生品,包括輸入與輸出命令以及多種功能,用于將在不同核心上運行的軟件組件。 David May表示,“在盡可能的情況下,程序員擁有與ANSI C相同的操作符和數據類(lèi)型。軟件開(kāi)發(fā)人員熟悉順序型C程序,他們很快就可領(lǐng)會(huì )新的I/O操作?!?/P>
XC語(yǔ)言的I/O命令控制著(zhù)I /O端口,并經(jīng)由XLink通道在XCore之間發(fā)送消息。據David May介紹,“XLink連接相同芯片上的各個(gè)內核,并且我們可以提供外部鏈路,因此可將兩塊XMOS芯片連接。產(chǎn)品應用多半將使用我們的多個(gè)IC。這種情況下,你可簡(jiǎn)單地創(chuàng )建IC之間的信號連接。PCB上無(wú)需復雜的高速總線(xiàn)或接口。你不必擔心同步操作和操作系統。我們的OS在硬件里面。在我們的處理器上,對多數系統的OS調用就是一兩條指令?!?/P>
雖然多核應用乍一看也許很復雜,但有許多工具可以幫助開(kāi)發(fā)人員對可用內核加以利用。本文提及的公司提供了一種具有代表性的方式,來(lái)幫助人們在產(chǎn)品中輕松使用多核芯片。
評論