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