<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 利用工具和技巧應(yīng)對多核設(shè)計領(lǐng)域的挑戰(zhàn)

          利用工具和技巧應(yīng)對多核設(shè)計領(lǐng)域的挑戰(zhàn)

          作者: 時間:2009-08-21 來源:網(wǎng)絡(luò) 收藏

            多處理器電腦已存在一段時間了,但工程師們只是在最近幾年才有機會買到具有多個處理器或“核心”的芯片現(xiàn)貨。這些器件分為兩類:對稱型和非對稱型。第一類器件提供同一CPU內(nèi)核的多個“克隆”,因此稱作對稱型。第二類是將不同類型的CPU、DSP、加速器都放在一個單片系統(tǒng)中。本文將專門介紹第一類多核技術(shù)。

            據(jù)Extreme Engineering Solutions公司首席執(zhí)行官Rob Scidmore表示,與多核處理器使用的硬件僅存在很少幾項區(qū)別。“挑戰(zhàn)會出現(xiàn)在,當(dāng)你必須把軟件從單核遷移到雙核時。當(dāng)兩個處理器內(nèi)核必須通信時,性能可能會降低很多。系統(tǒng)的等待時間變得更長,但吞吐率依然很高。當(dāng)工程師們?yōu)槊總€內(nèi)核把應(yīng)用代碼分解成片段時,就必須應(yīng)對上述局面。他們必須平衡等待時間和吞吐率?!?/P>

            但是,工程師們經(jīng)常會把代碼分解成片段。Scidmore解釋說:“他們也許通過以太網(wǎng)端口接收圖像,用算法處理圖像,然后顯示它們。你可以在一個處理器上運行TCP/IP堆棧,在第二個處理器上運行算法,并把第三個處理器專門用于顯示。但是如果你有數(shù)千個匯編語言文件,那么你別無選擇,只能回到框圖并從頭開始,并花時間把某個應(yīng)用劃分成幾個線程?!?/P>

            一些為對稱多處理(SMP)提供支持的操作系統(tǒng)(OS)可以提供某種方式來集成舊代碼和新代碼。例如,QNX公司的Neutrino OS提供混合多處理(bound multiprocessing),它使開發(fā)人員能使多個進程始終位于某個核心,或稱“鎖定”。QNX公司產(chǎn)品經(jīng)理Kerry Johnson說:“假設(shè)你有一些舊軟件,它們在多核芯片或多處理環(huán)境中也許不能恰當(dāng)運行。代碼可能會假定它擁有對I/O設(shè)備等的獨占控制權(quán),這可能會在多核系統(tǒng)中造成一些問題。這種情況下,你可以把軟件‘鎖’在某個內(nèi)核里,不必修改代碼。然后你可以添加新應(yīng)用軟件,它將利用剩余內(nèi)核。舊軟件和新軟件并存于某個多核芯片上的相同OS中。”

          多核處理器的虛擬化

            Johnson說:“要讓開發(fā)人員理解多核芯片不需要每一個內(nèi)核都擁有自己的OS,這是一個挑戰(zhàn)。具備SMP能力的單一OS可立即監(jiān)督多個內(nèi)核的運行情況。隨著更多OS廠商開始支持SMP,開發(fā)人員將會更好地理解,他們可以使用一種編程風(fēng)格,并讓他們的代碼工作在單核、雙核、四核處理器。一套軟件可工作在所有這些環(huán)境中。”

            當(dāng)然,這些必須包含源代碼級調(diào)試器。 Johnson解釋說:“設(shè)計人員需要一個調(diào)試器處理所有這些內(nèi)核,希望在一個窗口里看到一切,而不是每個內(nèi)核都有一個調(diào)試窗口。在特定時間,無論哪個處理器運行代碼,調(diào)試器都必須在斷點停止,追蹤程序執(zhí)行情況,并在所有內(nèi)核收集數(shù)據(jù),就像它對單核芯片做的那樣。”

            作為 Neutrino操作系統(tǒng)的一部分,QNX公司在其中提供了一個帶有調(diào)試的內(nèi)核,它使開發(fā)人員能用日志記錄低級的狀態(tài)變化、中斷等事件。因此人們能看到所有內(nèi)核的互動。Johnson說:“當(dāng)內(nèi)核共享存儲器和I/O設(shè)備時,你可能會遇到必須詳細檢查的問題。這個配備了儀器的內(nèi)核把數(shù)據(jù)記錄在日志里,并且Momentics系統(tǒng)剖析器可以讓你分析日志記錄的信息。”QNX公司提供帶有調(diào)試工具的內(nèi)核以及未配備調(diào)試工具的內(nèi)核。前者提供一種方法來檢查和測試現(xiàn)場的操作,而后者則略微減少了內(nèi)核開發(fā)成本,并略微增加了內(nèi)核的代碼空間。

            在把應(yīng)用軟件放到多核系統(tǒng)中以前,需要多次測試這些軟件。但是,如果原型硬件在代碼準備就緒時就已存在的話,則測試會占用這些昂貴并且難以部署的原型硬件。并且如果把代碼鎖定到多核硬件,就會很快減少在硬件和軟件之間折衷的機會。作為替代辦法,可以考慮在虛擬系統(tǒng)上運行軟件,該系統(tǒng)模仿處理器核心和其它硬件設(shè)備。Virtutech公司營銷副總裁 Michel Genard說:“硬件虛擬化使你能做許多探索。你可以看到應(yīng)用代碼在一個或幾個核心內(nèi)如何工作。并且你可以觀察為每個內(nèi)核改變時鐘頻率后造成的影響,但不必改變硬件。無需占用硬件,可以運行自己的應(yīng)用代碼。”

            由于虛擬系統(tǒng)控制了時間,因此可以停止所有內(nèi)核和設(shè)備,并且可以向后或向前運行代碼。還可以用檢查點在特定時間訪問來自“內(nèi)部”核心和所有其它設(shè)備的信息。Genard指出:“開發(fā)人員告訴我們一些噩夢,比如多核系統(tǒng)中的 SMP競態(tài)條件。他們發(fā)現(xiàn)幾乎無法在硬件上調(diào)試多核應(yīng)用代碼。另一方面,虛擬環(huán)境使他們能再現(xiàn)系統(tǒng)行為。他們可以根據(jù)需要‘備份’、檢驗、改變數(shù)據(jù),或觀察和改變行為。”

            虛擬化還有一個好處:開發(fā)人員可以確定自己的軟件將如何利用多個內(nèi)核以及系統(tǒng)的其它硬件,因此他們可以做出設(shè)計決定。他們也許會發(fā)現(xiàn),兩個內(nèi)核將提供與四個內(nèi)核相同的性能。

            工程師們經(jīng)常把飛思卡爾、英特爾、博通等公司看作多核芯片廠商,而XMOS Semiconductor和Parallax等其它公司也提供多核器件,但面向不同市場。

            據(jù) XMOS公司首席技術(shù)官及創(chuàng)始人之一David May表示,該公司把它的XS1-G多核IC家族定位為“軟件定義芯片”。他說:“XCores也許有些不同尋常,這是因為它們看起來像通用處理器以及與 I/O接口緊密集成的可編程狀態(tài)機。它們能做許多你分配給專用硬件做的事情?!泵總€XCore均位于一個XCore Tile中,后者有自己的寄存器、存儲器、I/O端口以及XLink,XLink與相同或不同IC上的其它Xcore通信。一個XCore能同時執(zhí)行8個線程。

            開發(fā)人員使用XC語言,它是C語言的衍生品,包括輸入與輸出命令以及多種功能,用于將在不同核心上運行的軟件組件。 David May表示,“在盡可能的情況下,程序員擁有與ANSI C相同的操作符和數(shù)據(jù)類型。軟件開發(fā)人員熟悉順序型C程序,他們很快就可領(lǐng)會新的I/O操作。”

            XC語言的I/O命令控制著I /O端口,并經(jīng)由XLink通道在XCore之間發(fā)送消息。據(jù)David May介紹,“XLink連接相同芯片上的各個內(nèi)核,并且我們可以提供外部鏈路,因此可將兩塊XMOS芯片連接。產(chǎn)品應(yīng)用多半將使用我們的多個IC。這種情況下,你可簡單地創(chuàng)建IC之間的信號連接。PCB上無需復(fù)雜的高速總線或接口。你不必擔(dān)心同步操作和操作系統(tǒng)。我們的OS在硬件里面。在我們的處理器上,對多數(shù)系統(tǒng)的OS調(diào)用就是一兩條指令。”

            雖然多核應(yīng)用乍一看也許很復(fù)雜,但有許多工具可以幫助開發(fā)人員對可用內(nèi)核加以利用。本文提及的公司提供了一種具有代表性的方式,來幫助人們在產(chǎn)品中輕松使用多核芯片。



          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();