專利名稱:一種超長(zhǎng)指令字處理器的設(shè)計(jì)和優(yōu)化方法
技術(shù)領(lǐng)域:
本發(fā)明涉及處理器技術(shù)領(lǐng)域,具體涉及 一 種超長(zhǎng)指令字(VLIW, Very Longlnst潔tion Word)處理器的設(shè)計(jì)和優(yōu)化方法。
背景技術(shù):
數(shù)字信號(hào)處理(DSP, Digital Signal Processing)理論和技術(shù)是目前電子技術(shù)和 IT領(lǐng)域中的一個(gè)基本工程理論和核心技術(shù)。DSP技術(shù)已經(jīng)深入到了各個(gè)工業(yè)應(yīng)用技術(shù)中, 成為21世紀(jì)初各種新技術(shù)的一個(gè)共同基礎(chǔ)。數(shù)字信號(hào)處理的實(shí)現(xiàn)方法大體上有如下5種 方法。 (1)在通用計(jì)算機(jī)上用軟件實(shí)現(xiàn)。軟件可以自己編寫,也可使用現(xiàn)成的軟件包,如 Matlab工具。Matlab幾乎可以實(shí)現(xiàn)所有數(shù)字信號(hào)處理的仿真,而且部分仿真程序還可以轉(zhuǎn) 化為C語(yǔ)言,再通過(guò)DSP的C編譯器直接在DSP硬件上運(yùn)行。這對(duì)非實(shí)時(shí)系統(tǒng)或準(zhǔn)實(shí)時(shí)系 統(tǒng)很有吸引力,但缺點(diǎn)是速度太慢。 (2)用單片機(jī)實(shí)現(xiàn)。某些單片機(jī)具有16位X16位的乘法運(yùn)算和內(nèi)積運(yùn)算功能, CPU時(shí)鐘可達(dá)到幾十MHz,在處理復(fù)雜的數(shù)字信號(hào)方面可以和低端DSP芯片相媲美,價(jià)格卻 要比專用的DSP芯片廉價(jià)。
(3)用各種型號(hào)的通用DSP芯片實(shí)現(xiàn)。 (4)用現(xiàn)場(chǎng)可編程門陣列(FPGA)或復(fù)雜可編程邏輯器件(CPLD)開(kāi)發(fā)特定用途集 成電路(ASIC)芯片實(shí)現(xiàn)數(shù)字信號(hào)處理算法。通過(guò)軟件編程用硬件實(shí)現(xiàn)特定的數(shù)字信號(hào)處 理算法,可以實(shí)現(xiàn)算法的并行運(yùn)算,既可以作為獨(dú)立的數(shù)字信號(hào)處理器,也可以作為DSP芯 片的協(xié)處理器。 (5)用通用計(jì)算機(jī)系統(tǒng)+加速卡的方法來(lái)實(shí)現(xiàn)。由于大數(shù)據(jù)量處理時(shí),加速卡和計(jì) 算機(jī)之間的數(shù)據(jù)交換速度比較慢,因而通用計(jì)算機(jī)只能起到管理者的作用,而不能參與實(shí) 時(shí)處理。 在上述五種實(shí)現(xiàn)數(shù)字信號(hào)處理的方法中,第3種基于通用(或?qū)S?DSP處理器的 DSP設(shè)計(jì)是DSP開(kāi)發(fā)者最常選用的設(shè)計(jì)方法。用DSP芯片來(lái)構(gòu)成DSP應(yīng)用系統(tǒng),其主要優(yōu)勢(shì) 是DSP芯片具有很好的通用性和可靠性,又適用于各種DSP算法實(shí)現(xiàn)的通用硬件結(jié)構(gòu),并且 開(kāi)發(fā)工具鏈完善,開(kāi)發(fā)難度低。 當(dāng)前主流的DSP芯片都是采用哈佛體系結(jié)構(gòu),數(shù)據(jù)存儲(chǔ)器與指令存儲(chǔ)器分開(kāi)保存 且獨(dú)立編址。部分高端的DSP處理器還采用VLIW體系結(jié)構(gòu),它能夠在一個(gè)周期內(nèi)使多個(gè)數(shù) 據(jù)處理單元并行工作,即執(zhí)行一條包含多個(gè)微指令的超長(zhǎng)指令,其中每個(gè)微指令控制一個(gè) 數(shù)據(jù)處理單元工作。復(fù)雜的數(shù)字信號(hào)處理任務(wù)就是分配在這些并行數(shù)據(jù)處理單元上完成 的。 基于通用DSP芯片的典型開(kāi)發(fā)流程,如圖1所示,主要包括如下幾個(gè)開(kāi)發(fā)階段
步驟10,開(kāi)發(fā)者利用MATLAB等數(shù)學(xué)工具對(duì)DSP算法進(jìn)行優(yōu)化設(shè)計(jì)和仿真,以獲得 滿足功能要求和適應(yīng)硬件特點(diǎn)的算法模型。
步驟ll,根據(jù)DSP目標(biāo)系統(tǒng)的功能要求、技術(shù)指標(biāo)、系統(tǒng)升級(jí)可行性、性能標(biāo)準(zhǔn)可
能的變化以及成本限制等因素,具體確定并行使用的DSP處理器的數(shù)量和型號(hào)。 步驟12,根據(jù)選定的DSP處理器和系統(tǒng)功能要求,完成應(yīng)用系統(tǒng)評(píng)估板或測(cè)試板
的設(shè)計(jì),以便調(diào)試DSP軟件程序,驗(yàn)證實(shí)際系統(tǒng)中各項(xiàng)指標(biāo)的可實(shí)現(xiàn)性及應(yīng)用系統(tǒng)的可行性。 步驟13 16,根據(jù)MATLAB的算法模型和DSP評(píng)估板的硬件結(jié)構(gòu),編寫C、 C++程 序或匯編程序。在DSP開(kāi)發(fā)環(huán)境(如CCS)中進(jìn)行編譯、仿真,然后通過(guò)DSP硬件仿真器在 應(yīng)用板或評(píng)估板上進(jìn)行調(diào)試和實(shí)時(shí)仿真。
步驟17,完成DSP應(yīng)用系統(tǒng)。 上述的設(shè)計(jì)流程對(duì)于固定架構(gòu)的VLIW體系結(jié)構(gòu)是完全適用的,這也得到了無(wú)數(shù) 成功設(shè)計(jì)的檢驗(yàn)。但是面對(duì)體系結(jié)構(gòu)可變的DSP處理器,上述設(shè)計(jì)流程就不能發(fā)揮可變架 構(gòu)的優(yōu)勢(shì),也不能提供可能的優(yōu)化建議,不利于系統(tǒng)性能的提高和成本的降低。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問(wèn)題是提供一種超長(zhǎng)指令字處理器的設(shè)計(jì)和優(yōu)化方法,
按照本發(fā)明所述方法,設(shè)計(jì)者可以從任意處理器出發(fā),彌補(bǔ)了傳統(tǒng)開(kāi)發(fā)流程不能發(fā)揮可變
VLIW體系結(jié)構(gòu)優(yōu)勢(shì)的不足,實(shí)現(xiàn)了面向最終應(yīng)用的VLIW處理器開(kāi)發(fā),提高了VLIW處理器的
系統(tǒng)性能并降低了 VLIW處理器的成本。 為解決上述技術(shù)問(wèn)題,本發(fā)明提供方案如下 —種面向應(yīng)用的超長(zhǎng)指令字VLIW處理器的設(shè)計(jì)和優(yōu)化方法,包括 步驟A,接收利用高級(jí)編程語(yǔ)言開(kāi)發(fā)出的針對(duì)具體應(yīng)用的軟件代碼作為當(dāng)前軟件
代碼,進(jìn)入步驟B; 步驟B,將當(dāng)前軟件代碼交叉編譯到當(dāng)前VLIW處理器架構(gòu)上,生成所述當(dāng)前軟件 代碼的機(jī)器碼并進(jìn)入步驟C,其中,所述當(dāng)前VLIW處理器架構(gòu)是通過(guò)處理器架構(gòu)參數(shù)描述 文件指定的; 步驟C,當(dāng)所述機(jī)器碼的性能分析結(jié)果表明滿足所述具體應(yīng)用的要求時(shí),將當(dāng)前軟 件代碼的機(jī)器碼和當(dāng)前VLIW處理器架構(gòu)分別作為最終的機(jī)器碼和最終的VLIW處理器架構(gòu) 輸出;否則,根據(jù)所述性能分析結(jié)果對(duì)當(dāng)前VLIW處理架構(gòu)進(jìn)行硬件優(yōu)化,得到VLIW處理器 優(yōu)化架構(gòu),并將所述VLIW處理優(yōu)化架構(gòu)作為當(dāng)前VLIW處理器架構(gòu)并返回步驟B。
較佳的,上述方法還包括 根據(jù)所述最終的VLIW處理器架構(gòu),生成對(duì)應(yīng)的硬件描述文件,并根據(jù)該硬件描述 文件,生成運(yùn)行所述最終的機(jī)器碼的VLIW處理器芯片。 較佳的,上述方法中,所述步驟C中,在所述機(jī)器碼的性能分析結(jié)果表明不滿足所
述具體應(yīng)用的要求時(shí),進(jìn)一步根據(jù)所述性能分析結(jié)果對(duì)當(dāng)前軟件代碼進(jìn)行軟件優(yōu)化,得到
優(yōu)化后的軟件代碼,并將所述優(yōu)化后的軟件代碼作為當(dāng)前軟件代碼并返回步驟B。 較佳的,上述方法中,所述性能分析結(jié)果具體包括固定算法代碼執(zhí)行所需的時(shí)
間、各個(gè)運(yùn)算單元的利用率和各個(gè)存儲(chǔ)器的使用量。 較佳的,上述方法中,所述步驟C中,進(jìn)一步通過(guò)修改或重新編寫當(dāng)前VLIW處理架 構(gòu)的處理器架構(gòu)參數(shù)描述文件,進(jìn)行所述硬件優(yōu)化。
較佳的,上述方法中,所述步驟C中,所述硬件優(yōu)化具體包括增加或減少運(yùn)算單 元,調(diào)整運(yùn)算單元之間的連接關(guān)系,以及增加或減少寄存器。 較佳的,上述方法中,所述步驟C中,所述增加或減少運(yùn)算單元包括在多個(gè)運(yùn)算 功能相同的運(yùn)算單元中刪除其中利用率低于預(yù)定第一門限值的運(yùn)算單元;增加與利用率高 于預(yù)定第二門限值的運(yùn)算單元功能相同的運(yùn)算單元。 較佳的,上述方法中,所述軟件優(yōu)化包括減少所述軟化代碼中的分支判斷操作, 減少所述軟件代碼中語(yǔ)句間的數(shù)據(jù)相關(guān)性,以及減少所述軟件代碼中的多重循環(huán)操作。
較佳的,上述方法中,所述步驟A中,所述針對(duì)具體應(yīng)用的軟件代碼,是利用所述 高級(jí)編程語(yǔ)言中的能夠被進(jìn)行交叉編譯的編譯器理解的數(shù)據(jù)類型和程序控制語(yǔ)句開(kāi)發(fā)得 到的。 較佳的,上述方法中,所述高級(jí)編程語(yǔ)言包括C語(yǔ)言和Java語(yǔ)言。 從以上所述可以看出,本發(fā)明提供的一種超長(zhǎng)指令字處理器的設(shè)計(jì)和優(yōu)化方法,
避免了傳統(tǒng)設(shè)計(jì)流程初期的處理器選型,本發(fā)明可以從具體應(yīng)用出發(fā),設(shè)計(jì)初期可以使用
任意處理器,從而規(guī)避了傳統(tǒng)的設(shè)計(jì)流程需要從硬件選型出發(fā),根據(jù)對(duì)算法運(yùn)算量的粗略
估計(jì),并極大的依靠設(shè)計(jì)人員的經(jīng)驗(yàn)選擇某種確定架構(gòu)的處理器而帶來(lái)的產(chǎn)品開(kāi)發(fā)的風(fēng)
險(xiǎn),提高了設(shè)計(jì)工作的效率。本發(fā)明所述方法,通過(guò)若干次交叉編譯、性能分析和硬件優(yōu)化
后逐步確定最終的處理器架構(gòu),避免了傳統(tǒng)設(shè)計(jì)方法中處理器選型容易發(fā)生處理器運(yùn)算資
源不足或過(guò)多的情況,實(shí)現(xiàn)了面向最終應(yīng)用的VLIW處理器開(kāi)發(fā),提高了VLIW處理器的系統(tǒng)
性能并降低了 VLIW處理器的成本。
圖1為現(xiàn)有技術(shù)的基于通用DSP芯片的典型開(kāi)發(fā)流程示意圖;
圖2為本發(fā)明實(shí)施例所述VLIW處理器的設(shè)計(jì)和優(yōu)化方法的流程圖。
具體實(shí)施例方式
本發(fā)明提出的VLIW處理器的設(shè)計(jì)和優(yōu)化方法,彌補(bǔ)了傳統(tǒng)開(kāi)發(fā)流程不能發(fā)揮可 變VLIW體系結(jié)構(gòu)優(yōu)勢(shì)的不足。該方法相對(duì)于傳統(tǒng)的設(shè)計(jì)流程,充分發(fā)揮了可變VLIW體系 結(jié)構(gòu)硬件可配置的巨大優(yōu)勢(shì),真正做到面向最終應(yīng)用的軟件編程和硬件配置。以下結(jié)合附 圖通過(guò)具體實(shí)施例對(duì)本發(fā)明作進(jìn)一步說(shuō)明。 可變VLIW架構(gòu)是未來(lái)DSP的主要架構(gòu),也是一種面向應(yīng)用最優(yōu)化的硬件解決方 案??勺僔LIW架構(gòu)通常指處理器的體系結(jié)構(gòu)是可變的,能夠針對(duì)不同的算法由設(shè)計(jì)者改變 處理器本身的硬件結(jié)構(gòu)和指令集。可變的VLIW結(jié)構(gòu)又稱為可重構(gòu)或可裁減的VLIW體系結(jié) 構(gòu),主要分為異構(gòu)多處理器,處理器核可裁減和基本數(shù)據(jù)處理單元可重構(gòu)三個(gè)層面。
可變VLIW體系結(jié)構(gòu)為設(shè)計(jì)者提供了進(jìn)行硬件優(yōu)化的可能。傳統(tǒng)DSP軟件開(kāi)發(fā)流 程主要包括處理器選型和軟件開(kāi)發(fā)兩大階段,可變VLIW體系結(jié)構(gòu)除了提供設(shè)計(jì)者使用軟 件(指令)實(shí)現(xiàn)具體算法的平臺(tái)外,還提供了面向算法的優(yōu)化空間。設(shè)計(jì)者除了能夠進(jìn)行 軟件開(kāi)發(fā)以實(shí)現(xiàn)算法,還能夠面向應(yīng)用調(diào)整和改變處理器的架構(gòu),實(shí)現(xiàn)面向應(yīng)用的處理器 架構(gòu)優(yōu)化。 如圖2所示,本實(shí)施例所述VLIW處理器的設(shè)計(jì)和優(yōu)化方法包括以下步驟
步驟20,接收利用高級(jí)編程語(yǔ)言開(kāi)發(fā)出的針對(duì)具體應(yīng)用的軟件代碼作為當(dāng)前軟件 代碼,進(jìn)入步驟21。 本步驟中,所述高級(jí)編程語(yǔ)言包括C語(yǔ)言和Java語(yǔ)言等高級(jí)語(yǔ)言,通過(guò)利用高級(jí) 編程語(yǔ)言中的能夠被進(jìn)行交叉編譯的編譯器理解的數(shù)據(jù)類型和程序控制語(yǔ)句開(kāi)發(fā)得到針 對(duì)具體應(yīng)用的軟件代碼。 步驟21,將當(dāng)前軟件代碼交叉編譯到當(dāng)前VLIW處理器架構(gòu)上,生成所述當(dāng)前軟件 代碼的機(jī)器碼并進(jìn)入步驟22,其中,所述當(dāng)前VLIW處理器架構(gòu)是通過(guò)處理器架構(gòu)參數(shù)描述 文件指定的。 本步驟中,在第一次進(jìn)行交叉編譯時(shí),所使用的當(dāng)前VLIW處理器架構(gòu)是預(yù)定的 VLIW處理器架構(gòu)。所述處理器架構(gòu)參數(shù)描述文件是提供給交叉編譯的編譯器使用的中間文 件,包括VLIW處理器的所有配置項(xiàng)信息,例如,處理器所有運(yùn)算資源和內(nèi)部寄存器的類型、 個(gè)數(shù)以及連接關(guān)系等參數(shù)。 步驟22,對(duì)所述機(jī)器碼進(jìn)行性能分析在所述機(jī)器碼的性能分析結(jié)果表明滿足所 述具體應(yīng)用的要求時(shí),進(jìn)入步驟24 ;否則,進(jìn)入步驟23。 本步驟中,所述的性能分析結(jié)果具體包括固定算法代碼執(zhí)行所需的時(shí)間、各個(gè)運(yùn) 算單元的利用率和各個(gè)存儲(chǔ)器的使用量等參數(shù)。 步驟23,根據(jù)所述性能分析結(jié)果對(duì)當(dāng)前VLIW處理架構(gòu)進(jìn)行硬件優(yōu)化,得到VLIW處 理器優(yōu)化架構(gòu),并將所述VLIW處理優(yōu)化架構(gòu)作為當(dāng)前VLIW處理器架構(gòu)并返回步驟21。
本步驟中,所述硬件優(yōu)化具體包括增加或減少運(yùn)算單元,調(diào)整運(yùn)算單元之間的連 接關(guān)系,以及增加或減少寄存器等。本步驟中,還可以進(jìn)一步根據(jù)所述性能分析結(jié)果對(duì)當(dāng)前 軟件代碼進(jìn)行軟件優(yōu)化,得到優(yōu)化后的軟件代碼,并將所述優(yōu)化后的軟件代碼作為當(dāng)前軟 件代碼并返回步驟21。 步驟24,將當(dāng)前軟件代碼的機(jī)器碼和當(dāng)前VLIW處理器架構(gòu)分別作為最終的機(jī)器 碼和最終的VLIW處理器架構(gòu)輸出,進(jìn)入步驟25。 步驟25,根據(jù)步驟24得到的最終的VLIW處理器架構(gòu),生成對(duì)應(yīng)的硬件描述文件, 并根據(jù)該硬件描述文件,通過(guò)數(shù)字集成電路的設(shè)計(jì)和實(shí)現(xiàn)流程,生成運(yùn)行所述最終的機(jī)器 碼的VLIW處理器芯片。 以下對(duì)上述步驟20 25進(jìn)行更為具體的說(shuō)明。 本實(shí)施例所述VLIW處理器的設(shè)計(jì)和優(yōu)化方法,根據(jù)設(shè)計(jì)流程,主要包括算法軟件 實(shí)現(xiàn)、算法軟件驗(yàn)證、交叉編譯、性能分析、軟件優(yōu)化、硬件優(yōu)化和硬件生成七個(gè)主要設(shè)計(jì)環(huán) 節(jié),與傳統(tǒng)的DSP設(shè)計(jì)流程相比,刪去了硬件選型環(huán)節(jié),增加了軟件驗(yàn)證和硬件優(yōu)化環(huán)節(jié), 編譯和性能分析的內(nèi)容也有部分改變。 這種設(shè)計(jì)流程包括軟件設(shè)計(jì)與優(yōu)化、硬件設(shè)計(jì)與優(yōu)化兩個(gè)部分。設(shè)計(jì)者從具體應(yīng) 用出發(fā),首先完成第一輪的算法軟件實(shí)現(xiàn)和驗(yàn)證。當(dāng)算法軟件驗(yàn)證完成后,設(shè)計(jì)者可以選用 一個(gè)預(yù)定的VLIW處理器架構(gòu)。該預(yù)定的VLIW處理器架構(gòu)通常有以下兩種選擇第一種是 具有最小配置的VLIW處理器,即該處理器中的運(yùn)算資源個(gè)數(shù)最少,例如,運(yùn)算單元只包括 一個(gè)算術(shù)邏輯單元(ALU)、一個(gè)乘法累加單元(MAC)和一個(gè)桶形移位器單元(Shift),內(nèi)部 寄存器堆的數(shù)量也是最少的;另一種VLIW處理器架構(gòu)是該VILW處理器所有配置項(xiàng)與針對(duì) 該具體應(yīng)用已開(kāi)發(fā)出的其它處理器相同。
上述預(yù)定的VLIW處理器架構(gòu)的選擇通常并不是最終選擇,選擇的目的只是為了 進(jìn)行第一輪的交叉編譯。在第一輪的交叉編譯時(shí),設(shè)計(jì)者需要向編譯器明確指出編譯所用 的處理器架構(gòu)(即上述預(yù)定的VLIW處理器架構(gòu),以處理器架構(gòu)參數(shù)描述文件的形式指明), 同一段軟件的實(shí)現(xiàn)代碼對(duì)不同的處理器架構(gòu)將會(huì)得到不同的交叉編譯結(jié)果,交叉編譯生成 的機(jī)器碼與此時(shí)使用的硬件平臺(tái)密切相關(guān)。通過(guò)分析第一輪交叉編譯所得到的機(jī)器碼,設(shè) 計(jì)者可以選擇軟件優(yōu)化和/或硬件優(yōu)化。如果選擇軟件優(yōu)化,設(shè)計(jì)者將開(kāi)始第二輪的軟件 算法實(shí)現(xiàn)(改進(jìn))、軟件驗(yàn)證、交叉編譯和性能分析。如果設(shè)計(jì)者選擇硬件優(yōu)化,設(shè)計(jì)者所需 要完成的是硬件的優(yōu)化與配置。不論選擇軟件優(yōu)化或硬件優(yōu)化,在優(yōu)化之后都需要再次進(jìn) 行交叉編譯,從而將優(yōu)化后的軟件代碼指定編譯到優(yōu)化后的硬件平臺(tái)上,生成機(jī)器碼。當(dāng)算 法實(shí)現(xiàn)的功能正確并性能滿足具體應(yīng)用的要求時(shí),VLIW處理器架構(gòu)得以確定,此時(shí)可以根 據(jù)最終確定的VLIW處理器架構(gòu)通過(guò)生成器生成對(duì)應(yīng)于上述處理器架構(gòu)的硬件描述文件。 通過(guò)上面的設(shè)計(jì)流程,設(shè)計(jì)者最終將得到面向應(yīng)用的軟件算法實(shí)現(xiàn)(機(jī)器碼)和面向應(yīng)用 的硬件處理器架構(gòu)(硬件描述文件)。帶有處理器架構(gòu)信息的硬件描述文件通過(guò)數(shù)字集成 電路的設(shè)計(jì)和實(shí)現(xiàn)流程,可以生成面向具體應(yīng)用優(yōu)化的專用處理器芯片,這樣的處理器運(yùn) 行特定軟件實(shí)現(xiàn)的機(jī)器碼,即可完成具體的應(yīng)用。與基于固定架構(gòu)的DSP開(kāi)發(fā)不同,上述設(shè) 計(jì)流程能夠從應(yīng)用出發(fā),生成面向應(yīng)用的專用處理器,從而其性能和成本都能達(dá)到最優(yōu)。
基于可變VLIW體系結(jié)構(gòu)的設(shè)計(jì)和優(yōu)化方法,其具體步驟也與傳統(tǒng)的基于固定處 理器架構(gòu)的設(shè)計(jì)方法有所不同。傳統(tǒng)的設(shè)計(jì)方法在具體應(yīng)用確定后通常從處理器選型出 發(fā),根據(jù)對(duì)算法運(yùn)算量的粗略估計(jì),并極大的依靠設(shè)計(jì)人員的經(jīng)驗(yàn),選擇某種確定架構(gòu)的處 理器。處理器的選型是決定性能的關(guān)鍵因素之一,對(duì)于設(shè)計(jì)來(lái)說(shuō)具有極大風(fēng)險(xiǎn)。處理器的 選型偏低會(huì)導(dǎo)致性能無(wú)法滿足要求,選型較高會(huì)導(dǎo)致處理器運(yùn)算資源的極大浪費(fèi),產(chǎn)品成 本大大增高。由于傳統(tǒng)的開(kāi)發(fā)流程通常使用與處理器架構(gòu)關(guān)系密切的較低級(jí)別的開(kāi)發(fā)語(yǔ)言 進(jìn)行開(kāi)發(fā),故而設(shè)計(jì)迭代難度較大。并且,傳統(tǒng)的設(shè)計(jì)流程從硬件選型出發(fā),此時(shí)僅僅有估 算的性能需求,此數(shù)據(jù)與設(shè)計(jì)者的經(jīng)驗(yàn)密切相關(guān),大大增加了產(chǎn)品開(kāi)發(fā)的風(fēng)險(xiǎn),不利于產(chǎn)品 性能的提高和成本降低。 基于可變VLIW體系結(jié)構(gòu)的設(shè)計(jì)和優(yōu)化方法要求設(shè)計(jì)者從軟件實(shí)現(xiàn)出發(fā)。當(dāng)具體 應(yīng)用確定后,設(shè)計(jì)者首先從算法軟件出發(fā),使用與硬件無(wú)關(guān)的高級(jí)編程語(yǔ)言描述算法的實(shí) 現(xiàn),得到針對(duì)具體應(yīng)用的軟件代碼。之所以使用高級(jí)編程語(yǔ)言(如C或Java語(yǔ)言等),是因 為在沒(méi)有確定處理器架構(gòu)之前,用戶不應(yīng)該使用與處理器架構(gòu)和指令集關(guān)系密切的編程語(yǔ) 言來(lái)實(shí)現(xiàn)具體的算法。雖然使用高級(jí)語(yǔ)言開(kāi)發(fā)算法程序,設(shè)計(jì)者也不能隨意使用高級(jí)語(yǔ)言 中的類庫(kù)或頭文件。設(shè)計(jì)者被嚴(yán)格限制在交叉編譯的編譯器能夠理解的高級(jí)語(yǔ)言程序的一 個(gè)子集中,這個(gè)子集僅僅包括一些最基本的數(shù)據(jù)類型和程序控制語(yǔ)句。 完成軟件代碼開(kāi)發(fā)后,設(shè)計(jì)者需要進(jìn)行軟件代碼的驗(yàn)證。這里的驗(yàn)證是一種純軟 件的驗(yàn)證,是獨(dú)立于處理器結(jié)構(gòu)和指令集的驗(yàn)證。使用純軟件的驗(yàn)證有兩個(gè)主要原因,一是 可以使用高級(jí)語(yǔ)言自帶的編譯器和計(jì)算機(jī)的強(qiáng)大的運(yùn)算能力,較為方便的發(fā)現(xiàn)軟件代碼中 的錯(cuò)誤;二是可以使用計(jì)算機(jī)上眾多專用程序分析軟件代碼實(shí)現(xiàn)的功能和性能。此時(shí)VLIW 處理器的架構(gòu)尚未確定,設(shè)計(jì)者并不需要關(guān)心軟件代碼在特定的處理器架構(gòu)上的實(shí)現(xiàn)性 能,而僅僅需要關(guān)心軟件代碼的功能正確。事實(shí)上,不論采用任何具體架構(gòu)的處理器,都不 應(yīng)該也不會(huì)影響軟件代碼的實(shí)現(xiàn)功能。
交叉編譯是指將軟件代碼編譯到另外一種處理器架構(gòu)上(不是運(yùn)行編譯器的計(jì) 算機(jī))。由于使用交叉編譯的編譯器所規(guī)定的算法開(kāi)發(fā)語(yǔ)言(高級(jí)編程語(yǔ)言的一個(gè)子集), 該編譯器能夠正確的分析軟件代碼的詞法和語(yǔ)法。同時(shí),該編譯器又定義了一套處理器架 構(gòu)和指令集的參數(shù)描述規(guī)則(用于將軟件代碼轉(zhuǎn)換成機(jī)器碼的規(guī)則),凡是使用此描述規(guī) 則的處理器均可以被該編譯器理解。編譯器的主要工作是將設(shè)計(jì)者的軟件代碼分配和調(diào)度 到設(shè)計(jì)者的硬件平臺(tái)上,并完成一定的優(yōu)化,生成針對(duì)設(shè)計(jì)者提出的處理器架構(gòu)和指令集 的機(jī)器碼??勺僔LIW體系結(jié)構(gòu)的處理器通?;谝粋€(gè)固定的處理器核框架,由設(shè)計(jì)者定義 并行運(yùn)算的能力和數(shù)據(jù)處理單元的數(shù)量,這種架構(gòu)的變化也同時(shí)帶來(lái)了指令集的變化。這 種架構(gòu)的變換對(duì)于交叉編譯的編譯器來(lái)說(shuō),僅僅是運(yùn)算硬件資源的變化,該編譯器只需將 用戶的軟件代碼分配和調(diào)度到對(duì)應(yīng)的硬件資源上即可。 交叉編譯完成后,設(shè)計(jì)者得到了對(duì)應(yīng)于特定VLIW結(jié)構(gòu)的軟件算法實(shí)現(xiàn)(機(jī)器碼)。 由于基于VLIW結(jié)構(gòu)的處理器主要針對(duì)計(jì)算密集型數(shù)學(xué)運(yùn)算,通常不支持中斷和片外存儲(chǔ) 器訪問(wèn),其程序執(zhí)行所需的時(shí)間能夠精確而嚴(yán)格的保證??梢酝ㄟ^(guò)以下性能參數(shù)對(duì)得到的 機(jī)器碼進(jìn)行性能分析 固定算法代碼執(zhí)行所需的時(shí)間,表示此段代碼的性能,以時(shí)鐘周期數(shù)描述,可以 通過(guò)根據(jù)有多少條機(jī)器碼,每條機(jī)器碼循環(huán)多少次,累加每條機(jī)器碼的循環(huán)次數(shù)得到該參 數(shù); 每個(gè)運(yùn)算資源的利用率,通過(guò)將每個(gè)運(yùn)算資源占用的周期數(shù)除以全部代碼執(zhí)行的 周期數(shù)得到該參數(shù); 存儲(chǔ)器的使用量,通過(guò)計(jì)算在不同生存周期內(nèi)分配在存儲(chǔ)器中變量所占用的存儲(chǔ) 器容量得到該參數(shù)。 上述三個(gè)參數(shù)能夠在交叉編譯后精確地得到,因此設(shè)計(jì)者可以用這些參數(shù)為參 考,作為優(yōu)化的依據(jù)和優(yōu)化的側(cè)重方向。 軟件優(yōu)化通常是所有基于處理器實(shí)現(xiàn)必需的一種優(yōu)化方法。在對(duì)基于可變VLIW 處理器進(jìn)行軟件優(yōu)化時(shí)可以主要考慮如下幾點(diǎn)
1)算法調(diào)整,使用計(jì)算規(guī)模較小的算法。
2)任務(wù)調(diào)整,減少不必要的任務(wù)及中間數(shù)據(jù)。 3)分支調(diào)整,減少分支判斷操作,分支判斷較難并行處理,會(huì)極大損失并行系統(tǒng)的 性能。尤其要避免循環(huán)體內(nèi)的判斷語(yǔ)句。 4)循環(huán)調(diào)整,控制循環(huán)次數(shù),應(yīng)盡量減少多重循環(huán)操作。當(dāng)有二重以上循環(huán)時(shí),優(yōu) 先減少外層循環(huán)次數(shù),展開(kāi)規(guī)模較小的循環(huán)。 5)語(yǔ)句調(diào)整,盡量減少語(yǔ)句間的數(shù)據(jù)相關(guān)性,提高并行運(yùn)算效率。 6)中間變量調(diào)整,控制中間變量規(guī)模,使中間變量存儲(chǔ)在內(nèi)部寄存器中,減少中間
變量訪問(wèn)存儲(chǔ)器的次數(shù)。 硬件優(yōu)化是可變VLIW體系結(jié)構(gòu)處理器獨(dú)有的優(yōu)化方法??勺僔LIW體系結(jié)構(gòu)是未 來(lái)高端處理器的發(fā)展趨勢(shì),其處理器的本質(zhì)特征就是能夠任意增減運(yùn)算單元的數(shù)量,為不 同的算法(應(yīng)用)提供較好的支持。圖3是一種可變VLIW體系結(jié)構(gòu)處理器的框架,此框架 中包含四個(gè)運(yùn)算單元,這四個(gè)運(yùn)算單元能夠同時(shí)進(jìn)行計(jì)算,即同時(shí)執(zhí)行四條微指令。事實(shí) 上,該處理器中的運(yùn)算單元的數(shù)量是可變的。這就給設(shè)計(jì)者提供了另一種優(yōu)化手段,即硬件優(yōu)化。 通過(guò)上述三個(gè)性能參數(shù),設(shè)計(jì)者對(duì)算法在某個(gè)特定的處理器上的運(yùn)行性能有了精 確的了解。硬件優(yōu)化就是針對(duì)上一次編譯所使用的VLIW處理器進(jìn)行裁減和重構(gòu)的,具體 包括增加或減少運(yùn)算單元,調(diào)整運(yùn)算單元之間的連接關(guān)系,以及增加或減少寄存器等。例 如,如果VLIW處理器中某個(gè)運(yùn)算單元有兩個(gè)以上,其中某一個(gè)利用率很低(通常在10%以 下),則可以嘗試將這個(gè)運(yùn)算單元從VLIW處理器中刪除(具體可以通過(guò)修改或重新編寫處 理器架構(gòu)參數(shù)描述文件來(lái)實(shí)現(xiàn))。一般來(lái)說(shuō),刪除利用率較低的運(yùn)算單元不會(huì)對(duì)算法實(shí)現(xiàn)的 性能帶來(lái)較大的影響,是否帶來(lái)影響和影響的程度則需要再次交叉編譯和性能分析得知。 又例如,如果某一步運(yùn)算對(duì)某個(gè)或某幾個(gè)運(yùn)算單元利用率很高,設(shè)計(jì)者可以考慮向VLIW處 理器中增加相同功能的運(yùn)算單元以分擔(dān)瓶頸運(yùn)算單元的計(jì)算量(具體可以通過(guò)修改或重 新編寫處理器架構(gòu)參數(shù)描述文件來(lái)實(shí)現(xiàn))。當(dāng)然,這是一種性能與成本的折衷。增加運(yùn)算單 元固然能夠帶來(lái)性能的提升,但同時(shí)也帶來(lái)了成本的提高,是否要進(jìn)行增加運(yùn)算單元還需 要對(duì)性能與成本作折衷考慮。 不論是軟件優(yōu)化還是硬件優(yōu)化,只要更改了軟件代碼或硬件平臺(tái),都必須重新進(jìn) 行交叉編譯、再分析算法的性能。由于使用高級(jí)語(yǔ)言開(kāi)發(fā)和統(tǒng)一的可變VLIW體系結(jié)構(gòu),大 量的工作由編譯器完成。雖然設(shè)計(jì)迭代的次數(shù)增多,但每一次迭代的工作量和復(fù)雜程度都 大大減少,總的設(shè)計(jì)周期將會(huì)縮短。另外,由于避免了設(shè)計(jì)初期的處理器選型,設(shè)計(jì)者理論 上可以從任意處理器出發(fā),經(jīng)過(guò)幾次交叉編譯、性能分析和硬件優(yōu)化后,對(duì)算法的計(jì)算規(guī)模 和所需的處理器有層層深入的了解,避免了經(jīng)驗(yàn)和估算的風(fēng)險(xiǎn),大大規(guī)避了設(shè)計(jì)的風(fēng)險(xiǎn),提 高了設(shè)計(jì)工作的效率。 綜上,可變VLIW體系結(jié)構(gòu)提供了硬件運(yùn)算資源可增刪的特性。這種特性需要改進(jìn) 的設(shè)計(jì)和優(yōu)化方法與其配合。本實(shí)施例提供了一種這樣的設(shè)計(jì)方法和優(yōu)化方法。這種方法 回避了處理器選型的風(fēng)險(xiǎn),從軟件開(kāi)發(fā)入手,使用高級(jí)語(yǔ)言開(kāi)發(fā),并依靠編譯器和性能分析 得到精確的算法實(shí)現(xiàn)性能。除了軟件優(yōu)化的方式外,本實(shí)施例還提供了可變VLIW結(jié)構(gòu)硬件 優(yōu)化的方式,是完整和改進(jìn)的VLIW設(shè)計(jì)和優(yōu)化方法。 本實(shí)施例所述設(shè)計(jì)和優(yōu)化方法,適用于各種可變VLIW處理器。最后,為了幫助理 解本實(shí)施例所述設(shè)計(jì)和優(yōu)化方法,以下對(duì)其中一種可變的VLIW處理器的結(jié)構(gòu)進(jìn)行簡(jiǎn)單說(shuō) 明。
—種可變VLIW處理器,包括控制路徑、數(shù)據(jù)交換網(wǎng)絡(luò)和多個(gè)數(shù)據(jù)處理單元;
所述控制路徑包括 指令存儲(chǔ)器控制單元,用于根據(jù)處理器狀態(tài)機(jī)的控制,提供對(duì)外部的指令存儲(chǔ)器 的訪問(wèn)控制; 指令譯碼單元,用于對(duì)所述指令存儲(chǔ)器控制單元讀取的VLIW指令進(jìn)行指令譯碼,
并將譯碼得到的微指令發(fā)送給處理器狀態(tài)機(jī)、數(shù)據(jù)交換網(wǎng)絡(luò)和各個(gè)數(shù)據(jù)處理單元,其中,所 述VLIW指令包括指令標(biāo)志位、指令立即數(shù)、數(shù)據(jù)交換網(wǎng)絡(luò)控制指令、主控指令和各個(gè)并行 數(shù)據(jù)處理單元的微指令; 處理器狀態(tài)機(jī),用于根據(jù)接收到的微指令執(zhí)行處理器的控制操作;
所述數(shù)據(jù)處理單元,包括 數(shù)據(jù)處理邏輯單元,與所述數(shù)據(jù)交換網(wǎng)絡(luò)連接,用于根據(jù)接收到的本數(shù)據(jù)處理單元的微指令,對(duì)本數(shù)據(jù)處理單元的數(shù)據(jù)輸入線上輸入的數(shù)據(jù)執(zhí)行相應(yīng)的數(shù)據(jù)運(yùn)算操作,所述數(shù)據(jù)輸入線為全局?jǐn)?shù)據(jù)輸入線、常數(shù)數(shù)據(jù)輸入線、左操作數(shù)輸入線和右操作數(shù)輸入線中的至少一種; 分布式寄存器堆,用于根據(jù)接收到的本數(shù)據(jù)處理單元的微指令,保存本數(shù)據(jù)處理單元的數(shù)據(jù)處理邏輯單元的數(shù)據(jù)處理結(jié)果,和/或?qū)⒆陨肀4娴臄?shù)據(jù)通過(guò)本數(shù)據(jù)處理單元的數(shù)據(jù)輸出線輸出至數(shù)據(jù)交換網(wǎng)絡(luò),所述數(shù)據(jù)輸出線為左操作數(shù)輸出線和右操作數(shù)輸出線中的至少一種; 所述數(shù)據(jù)交換網(wǎng)絡(luò),用于將所有數(shù)據(jù)處理單元中的每一個(gè)數(shù)據(jù)輸出線都分別連接至各個(gè)數(shù)據(jù)處理單元的每一操作數(shù)輸入線,并根據(jù)接收到的數(shù)據(jù)交換網(wǎng)絡(luò)控制指令,控制各個(gè)數(shù)據(jù)處理單元的操作數(shù)輸入線所連接的各個(gè)數(shù)據(jù)輸出線的選通或阻斷,所述操作數(shù)輸入線包括左操作數(shù)輸入線和右操作數(shù)輸入線。 上述可變VLIW處理器中,所述處理器的控制操作包括處理器的運(yùn)行狀態(tài)控制,處理器的循環(huán)控制,處理器的常數(shù)寄存器及全局寄存器讀寫控制。 上述可變VLIW處理器中,所述處理器狀態(tài)機(jī),進(jìn)一步通過(guò)所述數(shù)據(jù)交換網(wǎng)絡(luò)與數(shù)據(jù)處理邏輯單元連接,用于根據(jù)接收到的微指令將本處理器的常數(shù)寄存器和/或全局寄存器中的數(shù)據(jù)發(fā)送至數(shù)據(jù)處理單元的數(shù)據(jù)輸入線。 上述可變VLIW處理器中,數(shù)據(jù)處理單元的微指令包括操作碼、源操作數(shù)地址,目的操作數(shù)地址和寄存器輸出選擇地址; 所述數(shù)據(jù)處理邏輯單元進(jìn)一步用于根據(jù)所述操作碼和源操作數(shù)地址執(zhí)行數(shù)據(jù)運(yùn)算操作;所述分布式寄存器堆進(jìn)一步用于根據(jù)所述目的操作數(shù)地址確定所述數(shù)據(jù)處理結(jié)果的暫存地址,以及根據(jù)所述寄存器輸出選擇地址,將該寄存器輸出選擇地址對(duì)應(yīng)的數(shù)據(jù)輸出至數(shù)據(jù)交換網(wǎng)絡(luò)。 上述可變VLIW處理器中,所述數(shù)據(jù)處理單元為運(yùn)算單元或數(shù)據(jù)存儲(chǔ)器控制單元。
最后應(yīng)當(dāng)說(shuō)明的是,以上實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案而非對(duì)其進(jìn)行限制,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解,可以對(duì)本發(fā)明的技術(shù)方案進(jìn)行修改或者等同替換,而不脫離本發(fā)明技術(shù)方案的精神范圍,其均應(yīng)涵蓋在本發(fā)明的權(quán)利要求范圍當(dāng)中。
權(quán)利要求
一種面向應(yīng)用的超長(zhǎng)指令字VLIW處理器的設(shè)計(jì)和優(yōu)化方法,其特征在于,包括步驟A,接收利用高級(jí)編程語(yǔ)言開(kāi)發(fā)出的針對(duì)具體應(yīng)用的軟件代碼作為當(dāng)前軟件代碼,進(jìn)入步驟B;步驟B,將當(dāng)前軟件代碼交叉編譯到當(dāng)前VLIW處理器架構(gòu)上,生成所述當(dāng)前軟件代碼的機(jī)器碼并進(jìn)入步驟C,其中,所述當(dāng)前VLIW處理器架構(gòu)是通過(guò)處理器架構(gòu)參數(shù)描述文件指定的;步驟C,當(dāng)所述機(jī)器碼的性能分析結(jié)果表明滿足所述具體應(yīng)用的要求時(shí),將當(dāng)前軟件代碼的機(jī)器碼和當(dāng)前VLIW處理器架構(gòu)分別作為最終的機(jī)器碼和最終的VLIW處理器架構(gòu)輸出;否則,根據(jù)所述性能分析結(jié)果對(duì)當(dāng)前VLIW處理架構(gòu)進(jìn)行硬件優(yōu)化,得到VLIW處理器優(yōu)化架構(gòu),并將所述VLIW處理優(yōu)化架構(gòu)作為當(dāng)前VLIW處理器架構(gòu)并返回步驟B。
2. 如權(quán)利要求1所述的方法,其特征在于,所述方法還包括根據(jù)所述最終的VLIW處理器架構(gòu),生成對(duì)應(yīng)的硬件描述文件,并根據(jù)該硬件描述文 件,生成運(yùn)行所述最終的機(jī)器碼的VLIW處理器芯片。
3. 如權(quán)利要求1所述的方法,其特征在于,所述步驟C中,在所述機(jī)器碼的性能分析結(jié) 果表明不滿足所述具體應(yīng)用的要求時(shí),進(jìn)一步根據(jù)所述性能分析結(jié)果對(duì)當(dāng)前軟件代碼進(jìn)行 軟件優(yōu)化,得到優(yōu)化后的軟件代碼,并將所述優(yōu)化后的軟件代碼作為當(dāng)前軟件代碼并返回 步驟B。
4. 如權(quán)利要求l所述的方法,其特征在于,所述性能分析結(jié)果具體包括固定算法代碼 執(zhí)行所需的時(shí)間、各個(gè)運(yùn)算單元的利用率和各個(gè)存儲(chǔ)器的使用量。
5. 如權(quán)利要求4所述的方法,其特征在于,所述步驟C中,進(jìn)一步通過(guò)修改或重新編寫 當(dāng)前VLIW處理架構(gòu)的處理器架構(gòu)參數(shù)描述文件,進(jìn)行所述硬件優(yōu)化。
6. 如權(quán)利要求5所述的方法,其特征在于,所述步驟C中,所述硬件優(yōu)化具體包括增加或減少運(yùn)算單元,調(diào)整運(yùn)算單元之間的連 接關(guān)系,以及增加或減少寄存器。
7. 如權(quán)利要求6所述的方法,其特征在于,所述步驟C中,所述增加或減少運(yùn)算單元包括在多個(gè)運(yùn)算功能相同的運(yùn)算單元中刪 除其中利用率低于預(yù)定第一門限值的運(yùn)算單元;增加與利用率高于預(yù)定第二門限值的運(yùn)算 單元功能相同的運(yùn)算單元。
8. 如權(quán)利要求3所述的方法,其特征在于,所述軟件優(yōu)化包括減少所述軟化代碼中的 分支判斷操作,減少所述軟件代碼中語(yǔ)句間的數(shù)據(jù)相關(guān)性,以及減少所述軟件代碼中的多 重循環(huán)操作。
9. 如權(quán)利要求1所述的方法,其特征在于,所述步驟A中,所述針對(duì)具體應(yīng)用的軟件代 碼,是利用所述高級(jí)編程語(yǔ)言中的能夠被進(jìn)行交叉編譯的編譯器理解的數(shù)據(jù)類型和程序控 制語(yǔ)句開(kāi)發(fā)得到的。
10. 如權(quán)利要求1所述的方法,其特征在于,所述高級(jí)編程語(yǔ)言包括C語(yǔ)言和Java語(yǔ)曰o
全文摘要
本發(fā)明提供了一種超長(zhǎng)指令字處理器的設(shè)計(jì)和優(yōu)化方法。本發(fā)明所述方法包括步驟A,接收利用高級(jí)編程語(yǔ)言開(kāi)發(fā)出的針對(duì)具體應(yīng)用的軟件代碼作為當(dāng)前軟件代碼,進(jìn)入步驟B;步驟B,將當(dāng)前軟件代碼交叉編譯到當(dāng)前VLIW處理器架構(gòu)上,生成所述當(dāng)前軟件代碼的機(jī)器碼;步驟C,在所述機(jī)器碼的性能分析結(jié)果表明滿足所述具體應(yīng)用的要求時(shí),輸出當(dāng)前軟件代碼的機(jī)器碼和當(dāng)前VLIW處理器架構(gòu);否則,根據(jù)所述性能分析結(jié)果對(duì)當(dāng)前VLIW處理架構(gòu)進(jìn)行硬件優(yōu)化,得到VLIW處理器優(yōu)化架構(gòu),并將所述VLIW處理優(yōu)化架構(gòu)作為當(dāng)前VLIW處理器架構(gòu)并返回步驟B。按照本發(fā)明,可以實(shí)現(xiàn)面向最終應(yīng)用的VLIW處理器開(kāi)發(fā),提高了VLIW處理器的系統(tǒng)性能并降低了VLIW處理器的成本。
文檔編號(hào)G06F9/45GK101727513SQ20081022496
公開(kāi)日2010年6月9日 申請(qǐng)日期2008年10月28日 優(yōu)先權(quán)日2008年10月28日
發(fā)明者倪偉新, 盧安, 張現(xiàn)聚, 羅晉 申請(qǐng)人:北京芯慧同用微電子技術(shù)有限責(zé)任公司