專利名稱:單指令多數(shù)據(jù)路徑處理器架構(gòu)之條件程序處理的制作方法
技術(shù)領(lǐng)域:
本發(fā)明是有關(guān)于單指令多數(shù)據(jù)路徑(single instruction multipledatapaths(SIMD))處理器結(jié)構(gòu)的條件程序(conditional processing)處理。
背景技術(shù):
并行處理是處理多數(shù)據(jù)項(xiàng)數(shù)組(array of data items)的有效方法。單指令多數(shù)據(jù)路徑處理器為并行處理數(shù)組結(jié)構(gòu)。每一數(shù)據(jù)路徑在一個(gè)時(shí)間內(nèi)只能處理一個(gè)數(shù)據(jù)項(xiàng)。舉一簡單的例子,單指令多數(shù)據(jù)路徑處理器有四個(gè)數(shù)據(jù)路徑,具有四數(shù)據(jù)項(xiàng)數(shù)組的每一數(shù)據(jù)項(xiàng)將由對(duì)應(yīng)的四數(shù)據(jù)路徑其中一個(gè)來處理。
在單指令多數(shù)據(jù)路徑處理器程序執(zhí)行期間,在開始計(jì)算例如是如果-然后-其余(if-then-else)程序塊的條件程序塊之前,可以先使能多個(gè)數(shù)據(jù)路徑。在執(zhí)行條件程序塊前,每一數(shù)據(jù)路徑的PE狀態(tài),即是否使能或禁止的狀態(tài),一定要先存儲(chǔ)起來以免在執(zhí)行條件程序期間任何一種情況改變了PE狀態(tài)。此外,當(dāng)離開條件程序塊后,數(shù)據(jù)路徑的PE狀態(tài)必須要回復(fù)成進(jìn)入條件程序塊前的狀態(tài)。
一種在條件程序運(yùn)算期間管理數(shù)據(jù)路徑PE狀態(tài)的方法是將每一數(shù)據(jù)路徑的PE狀態(tài)保持在寄存器堆棧(stack)中。在條件程序處理期間數(shù)據(jù)路徑的PE狀態(tài)將會(huì)遭到更改,所以事先將PE狀態(tài)推入(push)寄存器堆棧中。當(dāng)完成條件程序塊后,從寄存器堆棧彈出(pop)先前的PE狀態(tài),并以執(zhí)行條件程序塊前的數(shù)據(jù)路徑之PE狀態(tài)來回多個(gè)據(jù)路徑。如果條件程序塊包含多個(gè)條件運(yùn)算(例如,嵌套如果-然后-其余運(yùn)算(nested if-then-else operations)),則堆棧必須包括多重寄存器以存儲(chǔ)在多重條件運(yùn)算時(shí)的數(shù)據(jù)路徑的PE狀態(tài)(并在事后回復(fù)多個(gè)據(jù)路徑的PE狀態(tài))。在嵌套條件運(yùn)算時(shí),因?yàn)椴⑿屑拇嫫骺捎脕碜鞫褩5臄?shù)量有其極限,所以用軟件來管理堆棧顯得很困難。
發(fā)明內(nèi)容
本發(fā)明的目的在于,在條件程序期間,將條件程序之前相關(guān)的數(shù)據(jù)路徑的目前PE狀態(tài)存儲(chǔ)成指示,以維持?jǐn)?shù)據(jù)路徑的PE狀態(tài),并操縱在條件程序期間的數(shù)據(jù)路徑的PE狀態(tài)可能發(fā)生的改變,從而影響到在條件程序期間的指示。本發(fā)明的另一目的在于,執(zhí)行這些步驟的指令集和單指令多數(shù)據(jù)路徑處理器。
在優(yōu)選實(shí)施例中,可能包含一個(gè)以上的下列特征。
在條件程序之后,依據(jù)至少一部份的指示來回復(fù)存儲(chǔ)的數(shù)據(jù)路徑的PE狀態(tài)。而存儲(chǔ)、操縱和回復(fù)步驟由執(zhí)行條件程序的單指令多數(shù)據(jù)路徑處理器的多個(gè)數(shù)據(jù)路徑中的每一個(gè)來執(zhí)行。
在圖解實(shí)施例中,條件程序包含如果程序(if-processing)語句。存儲(chǔ)步驟包含存儲(chǔ)表示數(shù)據(jù)路徑的目前PE狀態(tài)的指示的值。操縱步驟包含依據(jù)在條件程序期間數(shù)據(jù)路徑的PE狀態(tài)來改變值。如果在存儲(chǔ)步驟期間數(shù)據(jù)路徑的PE狀態(tài)禁止時(shí),則值增加。如果在條件程序期間數(shù)據(jù)路徑的PE狀態(tài)為使能時(shí),值保持原來的值而不會(huì)改變。
在如果程序(if-processing)語句執(zhí)行后,依據(jù)至少一部份的值來回多個(gè)據(jù)路徑存儲(chǔ)的PE狀態(tài)?;貜?fù)步驟包含如果數(shù)值超過限定(threshold)時(shí),則指定數(shù)據(jù)路徑的PE為禁止?fàn)顟B(tài),否則指定數(shù)據(jù)路徑的PE為使能狀態(tài)。如果值超過限定則改變(例如,減少)該值。
條件程序塊可包括多個(gè)如果程序(if-processing)語句。在本說明書中,存儲(chǔ)、操縱和回復(fù)步驟用以執(zhí)行多個(gè)如果程序語句中的每一個(gè)。
條件程序塊可包括其它程序(else-processing)語句。操縱步驟還包括依據(jù)是否如果程序語句的程序改變數(shù)據(jù)路徑的PE狀態(tài)而在執(zhí)行其它程序語句前來改變(例如,轉(zhuǎn)換)或不改變值。
舉例而言,如果數(shù)據(jù)路徑所存儲(chǔ)的PE狀態(tài)為使能狀態(tài)且如果程序語句的程序改變PE狀態(tài)為禁止?fàn)顟B(tài),則操縱步驟包括改變值來表示使能狀態(tài)。如果數(shù)據(jù)路徑所存儲(chǔ)的PE狀態(tài)為使能狀態(tài)且如果程序語句的程序并未改變PE狀態(tài),則操縱步驟包括改變值來表示禁止?fàn)顟B(tài)。如果數(shù)據(jù)路徑所存儲(chǔ)的處理器禁止?fàn)顟B(tài)為使能狀態(tài)且如果程序語句的程序并未改變PE狀態(tài),則操縱步驟包括維持值來表示禁止?fàn)顟B(tài)。
本發(fā)明的另一目的在于,指令以一分支運(yùn)算(branch operation)來結(jié)合一個(gè)以上的PE狀態(tài)之存儲(chǔ)和操縱步驟。
本發(fā)明的其它優(yōu)點(diǎn),包括以最少的硬件開銷(hardware overhead)來實(shí)現(xiàn)準(zhǔn)確地追蹤(和正確地回復(fù))數(shù)據(jù)路徑的PE狀態(tài),即使當(dāng)條件程序塊包括多個(gè)嵌套條件運(yùn)算。尤其是,以單一寄存器來追蹤每一數(shù)據(jù)路徑的PE狀態(tài),因此可消除為了維持PE狀態(tài)的追蹤所需的多重寄存器。此外,在條件程序塊的開始、過程和結(jié)束時(shí)迅速地存儲(chǔ)、操縱和回多個(gè)據(jù)路徑的PE狀態(tài)。以一分支運(yùn)算來結(jié)合一個(gè)以上PE狀態(tài)的存儲(chǔ)及轉(zhuǎn)換的步驟可大大地減少軟件開銷(software overhead)并可增加程序的速度。
本發(fā)明的其它優(yōu)點(diǎn)由下列描述、附圖和權(quán)利要求表示。
圖1單指令多數(shù)據(jù)路徑處理器的方塊流程圖;圖2在條件程序期間單指令多數(shù)據(jù)路徑處理器的數(shù)據(jù)路徑的PE狀態(tài)的維持程序流程圖;以及圖3利用SAVE_PE、RESTORE_PE和FLIP_PE指令的程序表。
其中,相同的附圖標(biāo)記表示相同的元件。
具體實(shí)施例方式
參考圖1,單指令多數(shù)據(jù)路徑處理器(SIMD)10包括指令超高速緩沖存儲(chǔ)器12,控制邏輯單元14,串行數(shù)據(jù)路徑16和多個(gè)并行數(shù)據(jù)路徑標(biāo)示為18a,18b,18c,18,…,18n。并行數(shù)據(jù)路徑18寫入內(nèi)存20。每一數(shù)據(jù)路徑18皆連結(jié)到PE位22。具體地說,并行數(shù)據(jù)路徑18a連結(jié)到PE位22a,并行數(shù)據(jù)路徑18b連結(jié)到PE位22b,以下類推。當(dāng)PE使能時(shí),所連結(jié)的并行數(shù)據(jù)路徑使能且并行數(shù)據(jù)路徑寫入數(shù)據(jù)項(xiàng)。舉例而言,PE 22a使能時(shí),并行數(shù)據(jù)路徑18a寫入數(shù)據(jù)項(xiàng);PE 22b使能時(shí),并行數(shù)據(jù)路徑18b寫入數(shù)據(jù)項(xiàng)。如果PE 22n使能時(shí),并行數(shù)據(jù)路徑18n寫入數(shù)據(jù)項(xiàng)。當(dāng)PE禁止時(shí),所連結(jié)的并行數(shù)據(jù)路徑禁止且并行數(shù)據(jù)路徑無法寫入數(shù)據(jù)項(xiàng)。
運(yùn)算時(shí),控制邏輯單元14從指令超高速緩沖存儲(chǔ)器12讀取指令。指令送往串行數(shù)據(jù)路徑16來提供指令給并行數(shù)據(jù)路徑18。除非個(gè)別處理器的使能位被禁止,否則每一并行數(shù)據(jù)路徑18同時(shí)讀取和同時(shí)寫入。
當(dāng)程序代碼(例如,程序塊包括一個(gè)以上的如果-然后-其它程序(if-then-else-processing)語句)的指令使單指令多數(shù)據(jù)路徑處理器10在程序代碼之間執(zhí)行條件程序塊時(shí),須計(jì)算每一數(shù)據(jù)路徑的目前PE狀態(tài),如此在條件程序塊執(zhí)行期間如果數(shù)據(jù)路徑的任何一PE狀態(tài)被修改,在完成條件程序塊時(shí)PE狀態(tài)就能被回復(fù)。條件程序塊經(jīng)常包括多個(gè)條件程序運(yùn)算,其中一些條件程序塊在其它條件程序運(yùn)算時(shí)執(zhí)行。為了保證優(yōu)選運(yùn)算,在進(jìn)入每一嵌套條件運(yùn)算前存儲(chǔ)每一數(shù)據(jù)路徑的PE狀態(tài),且在完成條件運(yùn)算后回復(fù)存儲(chǔ)的PE狀態(tài)。
如上所討論,條件程序運(yùn)算其中一種為如果-然后-其它的條件運(yùn)算。當(dāng)在如果-然后-其它程序期間數(shù)據(jù)路徑的PE狀態(tài)改變時(shí),發(fā)生有趣的現(xiàn)象。特別是,當(dāng)數(shù)據(jù)路徑的PE狀態(tài)為禁止時(shí),在包括如果-然后-其它程序塊的運(yùn)算期間,數(shù)據(jù)路徑的PE狀態(tài)再也不會(huì)改變成使能狀態(tài)。本發(fā)明利用此現(xiàn)象并通過提供及修改PE狀態(tài)的指示(indication)來追蹤每一數(shù)據(jù)路徑的PE狀態(tài)。
簡短地總結(jié),當(dāng)數(shù)據(jù)路徑進(jìn)入條件程序塊時(shí),將它的PE狀態(tài)指示設(shè)定成一值來表示數(shù)據(jù)路徑目前的PE狀態(tài)(由數(shù)據(jù)路徑的PE位來顯示使能或禁止?fàn)顟B(tài)),且存儲(chǔ)該值(例如,在與數(shù)據(jù)路徑相關(guān)的并行寄存器中)。因此目前的PE狀態(tài)存儲(chǔ)成其非直接的指示。在如果-然后-其它程序塊期間,該值依據(jù)條件程序期間數(shù)據(jù)路徑的PE狀態(tài)作必要的更新。當(dāng)數(shù)據(jù)路徑完成如果-然后-其它程序塊時(shí),該值用以將數(shù)據(jù)路徑的PE狀態(tài)回復(fù)到如同在進(jìn)入在如果-然后-其它程序塊前的數(shù)據(jù)路徑的PE狀態(tài)。結(jié)果,正確地追蹤到數(shù)據(jù)路徑的PE狀態(tài),即使經(jīng)過了多個(gè)嵌套條件程序運(yùn)算時(shí),在每一條件運(yùn)算后仍精準(zhǔn)地回復(fù)(當(dāng)然,最終在完成所有的條件處理方塊之后)。將開銷(overhead)降至最低,因?yàn)閱我患拇嫫饔靡源鎯?chǔ)PE狀態(tài)的指示(即,值),而不是為塊中的每一嵌套條件運(yùn)算都提供不同寄存器來存儲(chǔ)數(shù)據(jù)路徑的PE狀態(tài)信息。
圖2圖解在如果-然后-其它的示范性的條件程序塊中維持單指令多數(shù)據(jù)路徑(SIMD)處理器10的數(shù)據(jù)路徑的狀態(tài)的程序50。首先,將數(shù)據(jù)路徑的PE狀態(tài)的指示(保存在圖1中其中一個(gè)并行寄存器R中)初始化成為限定值(threshold)(步驟52)。為下面討論的目的,以-1來當(dāng)作限定值。當(dāng)如果程序塊開始計(jì)算時(shí)(換句話說,當(dāng)存儲(chǔ)PE狀態(tài)時(shí)),如果數(shù)據(jù)路徑的PE狀態(tài)為禁止的狀態(tài)(步驟54),則增加該值(步驟56)。否則,值不變(如步驟58)。
在如果程序期間,依據(jù)如果程序的結(jié)果來判定修不修改數(shù)據(jù)路徑的PE狀態(tài)(步驟59)。如果條件程序塊(conditional processing block)包括其它程序塊(else-processing block)時(shí)(步驟60),程序判定在執(zhí)行其它程序前是否轉(zhuǎn)換數(shù)據(jù)路徑的PE狀態(tài);當(dāng)條件程序塊不包括其它程序時(shí),則跳過步驟62(步驟64)。在步驟62期間,如果在執(zhí)行如果-然后-其它程序塊之前使能數(shù)據(jù)路徑的PE狀態(tài),則程序50根據(jù)存儲(chǔ)的PE狀態(tài)(換句話說,在執(zhí)行如果-然后-其它程序塊之前的數(shù)據(jù)路徑的PE狀態(tài))來倒置(invert)數(shù)據(jù)路徑的PE狀態(tài)。然而,如果在執(zhí)行如果-然后-其它程序塊之前禁止數(shù)據(jù)路徑的PE狀態(tài),則它仍被禁止,因此程序50將不對(duì)它作改變。
在完成其它程序塊后(或在條件程序塊不包括“其它(else)”語句時(shí)的如果程序塊的條件下),程序50回復(fù)存儲(chǔ)的PE狀態(tài)(換句話說,在數(shù)據(jù)路徑進(jìn)入條件程序塊之前的數(shù)據(jù)路徑的當(dāng)前PE狀態(tài))。如果指示的值小于0,則程序50使能PE狀態(tài)(步驟66);否則,禁止數(shù)據(jù)路徑的PE狀態(tài)。最后,如果該值大于或等于0,這里指值超過-1的限定,則減小指示的值(步驟68)。
條件程序塊可能包括其它條件程序語句。舉例而言,它可能包括以嵌套的關(guān)系來安排的額外如果-然后-其它程序語句或如果程序語句。果真如此,則由他們所提供的條件程序狀態(tài)來執(zhí)行程序50的多種步驟。
為實(shí)現(xiàn)圖2的程序50,由編譯器(compiler)在編譯程序的期間將三個(gè)指令插入編譯碼中以便在單指令多數(shù)據(jù)路徑處理器10中執(zhí)行。此三個(gè)指令為SAVE_PE(P)RESTORE_PE(P)FLIP_PE(P)其中P指在單指令多數(shù)據(jù)路徑處理器10中的用以存儲(chǔ)數(shù)據(jù)路徑的PE狀態(tài)指示的并行寄存器。在程序編譯期間,編譯器在如果程序塊開始之前(換句話說,就在“如果”程序語句之前)先插入指令SAVE_PE(P)(以執(zhí)行程序50的步驟54-58),并在如果程序塊后插入指令RESTORE_PE(P)(以執(zhí)行步驟66和68)。如果程序包括如果程序塊中的其它程序塊,即,如果-然后-其它程序塊,編譯器在其它程序塊開始之前(換句話說,就在“其它”程序語句之前)先插入指令FLIP_PE(P)(以執(zhí)行步驟60和64),并在其它程序塊結(jié)束后插入指令RESTORE_PE(P)。
如果數(shù)據(jù)路徑當(dāng)時(shí)為禁止?fàn)顟B(tài)(換言之,PE=0),指令SAVE_PE(P)增加存儲(chǔ)在寄存器P中其初始值為-1的指示。否則,指令并不會(huì)更改指示的值。結(jié)果,測試在寄存器中的值是否小于0,如此可以判定出是否先前數(shù)據(jù)路徑的PE狀態(tài)為使能或禁止的狀態(tài)。
指令RESTORE_PE(P)執(zhí)行兩個(gè)功能。如果PE狀態(tài)指示的值大于-1(換句話說,存儲(chǔ)的數(shù)據(jù)路徑的PE狀態(tài)為禁止?fàn)顟B(tài)),指令RESTORE_PE(P)設(shè)定數(shù)據(jù)路徑的PE為禁止?fàn)顟B(tài)。否則為使能狀態(tài)。如果值大于或等于0時(shí),則指令RESTORE_PE(P)還減少存儲(chǔ)在寄存器P的PE狀態(tài)的指示的值。否則,指令RESTORE_PE(P)不會(huì)改變存儲(chǔ)的PE狀態(tài)的指示的值。在此例中,指示的值不會(huì)減少到低于-1。
指令SAVE_PE(P)一直是與指令RESTORE_PE(P)一起出現(xiàn)。最后,無論在執(zhí)行如果程序塊時(shí)PE狀態(tài)是否(或是如何)改變,假如在如果程序塊的開始之前的數(shù)據(jù)路徑處于使能PE狀態(tài),則在如果程序塊結(jié)束后其仍回復(fù)成使能PE狀態(tài)。
舉例而言,想一下,當(dāng)進(jìn)入如果程序塊時(shí)數(shù)據(jù)路徑處于使能PE狀態(tài)。所存儲(chǔ)狀態(tài)指示的值為-1。指令SAVE_PE(P)和指令RESTORE_PE(P)兩者皆不改變存儲(chǔ)的狀態(tài)指示的值。因此,在如果程序塊結(jié)束后的值仍為-1,且離開如果程序塊時(shí)將數(shù)據(jù)路徑指定成使能PE狀態(tài)。
換句話說,如果在進(jìn)入如果程序塊時(shí)數(shù)據(jù)路徑被禁止,指令SAVE_PE(P)造成狀態(tài)指示的值由-1增加至0。在如果程序塊結(jié)束時(shí),指令RESTORE_PE(P)使值減回-1。然而,因?yàn)橹荡笥?,在離開如果程序塊后數(shù)據(jù)路徑的PE被設(shè)定成禁止?fàn)顟B(tài)。
指令FLIP_PE(P)用于如果-然后-其它程序塊的“其它”部份。指令FLIP_PE(P)的運(yùn)算乃依據(jù)數(shù)據(jù)路徑的目前PE狀態(tài)和存儲(chǔ)的數(shù)據(jù)路徑的PE狀態(tài)。簡單地說,如果“如果”語句的執(zhí)行禁止數(shù)據(jù)路徑(換句話說,將相關(guān)的PE位由1改成0),則指令FLIP_PE(P)將再度使能數(shù)據(jù)路徑(換句話說,將PE位改回1)。然而,當(dāng)如果程序塊開始時(shí),數(shù)據(jù)路徑已被使能(換句話說,存儲(chǔ)的PE=1),且如果程序塊執(zhí)行完后數(shù)據(jù)路徑仍被使能,指令FLIP_PE(P)將數(shù)據(jù)路徑禁止(換句話說,將PE改變成0)。最后,如果存儲(chǔ)的數(shù)據(jù)路徑的PE狀態(tài)為禁止(PE=0),則在執(zhí)行完如果程序塊后仍將繼續(xù)禁止數(shù)據(jù)路徑。在本例中,指令FLIP_PE(P)將使數(shù)據(jù)路徑維持禁止(PE=0)。指令FLIP_PE(P)的運(yùn)算總結(jié)在下表
對(duì)應(yīng)到圖3,表100表示利用指令SAVE_PE、RESTORE_PE和FLIP_PE在包括兩個(gè)如果程序運(yùn)算102和104以及一個(gè)其它程序塊106的條件程序塊101為例。在此例中,如果程序運(yùn)算104嵌套在如果程序運(yùn)算102和其它程序運(yùn)算106中。此表包括占位程序代碼108(stub of program code 108)和單指令多數(shù)據(jù)路徑編譯器所產(chǎn)生的編譯碼(assembly code)110。此表100圖解編譯碼110和操縱單指令多數(shù)據(jù)路徑處理器10的四條數(shù)據(jù)路徑DP0、DP1、DP2、DP3的寄存器。在此表中,P1和P2表示在執(zhí)行條件程序塊期間分別存儲(chǔ)數(shù)據(jù)所使用到的并行寄存器。P3為存儲(chǔ)PE狀態(tài)指示的值的寄存器,且PE為用以存儲(chǔ)各個(gè)數(shù)據(jù)路徑的PE位的寄存器(圖1中的22)。
在本例中,在執(zhí)行條件程序塊的101之前,數(shù)據(jù)路徑DP0、DP1和DP2使能且DP3禁止。如行111所示。
如上所描述,編譯器在第一如果程序塊102之前插入指令SAVE_PE(P3)112,在第二(嵌套的)如果程序塊104之前插入指令SAVE_PE(P3)114,在第二如果程序塊的離開處插入RESTORE_PE(P3)116,在其它程序塊106開始處插入指令FLIP_PE(P3)118,并且在其它程序塊106結(jié)尾插入指令RESTORE_PE(P3)120。
如行122所示,存儲(chǔ)在寄存器P1的數(shù)據(jù)值分別初始化成1,0,-1和-1。如行124所示,寄存器P2起初沒有使用。行111如上面所示的數(shù)據(jù)路徑的初始化的PE狀態(tài)。行127圖解指令112 SAVE_PE(P3)112的運(yùn)算。因?yàn)镈P0-DP2目前為使能,所以這些數(shù)據(jù)路徑存儲(chǔ)在P3(行126)的值并未增加他們的初始值-1。但是因?yàn)镈P3為禁止,指令sAVE_PE(P3)112使存儲(chǔ)在P3的DP3的值增加至0。
行128表示如果語句102的運(yùn)算。特別地,如果P1大于或等于0且數(shù)據(jù)路徑目前為使能的狀態(tài),則數(shù)據(jù)路徑的PE狀態(tài)為使能。因?yàn)镈P0和DP1的P1大于或等于0且PE為使能(行111),所以該兩個(gè)數(shù)據(jù)路徑的PE都為使能。因?yàn)镈P2和DP3的P1沒有大于或等于0,所以PE為禁止。
在行130,DP0和DP1的P2設(shè)定為1。因?yàn)镈P2和DP3為禁止,所以這些數(shù)據(jù)路徑的P2的內(nèi)容不改變。
行132表示在如果程序塊104中指令SAVE_PE(P3)114的運(yùn)算。因?yàn)镈P0和DP1的目前PE狀態(tài)(如行128表示)為使能,指令114并不會(huì)增加存儲(chǔ)在寄存器P3的這些數(shù)據(jù)路徑的值。然而,指令114增加存儲(chǔ)在P3的DP2和DP3的值,其原因?yàn)檫@些數(shù)據(jù)路徑為禁止。
行134表示如果語句104的運(yùn)算。DP0仍為使能,但DP1更改為禁止。DP2和DP3仍為禁止。
如行135所示,在下個(gè)運(yùn)算中,存儲(chǔ)在P2的DP0的值更改為2,因?yàn)镈P1為禁止所以DP1的值仍為1。
行136和138表示位于如果程序塊104的結(jié)束點(diǎn)的指令RESTORE_PE(P3)118的運(yùn)算結(jié)果。重新調(diào)用(recall)指令RESTORE的執(zhí)行,如果狀態(tài)指示的值小于0則使能數(shù)據(jù)路徑(PE設(shè)成1),否則便禁止,如果目前指示的值大于0則減少狀態(tài)的值。套用這些規(guī)則到本例中,數(shù)據(jù)路徑DP0因?yàn)橹噶頢AVE_PE(P3)114所存儲(chǔ)的使能(如行132的P3所存儲(chǔ)的-1值)狀態(tài)所以仍為使能(PE=1)。因?yàn)樵谶M(jìn)入如果語句104之前DP1處于使能狀態(tài),所以指令RESTORE_PE(P3)116回復(fù)數(shù)據(jù)路徑DP1為使能PE狀態(tài)。因?yàn)樵谌绻Z句104之前DP2和DP3為禁止,所以它們保持禁止(如行132所示)。此外,存儲(chǔ)在P3的DP0和DP1目前的值-1未被改變,存儲(chǔ)在P3的DP2和DP3目前的值分別被減為-1和0。比較行128和136,很明顯地DP0-DP3的PE狀態(tài)在離開如果程序塊104時(shí)的值和進(jìn)入如果程序塊104時(shí)的值相同。
行140表示指令FLIP_PE(P3)118對(duì)PE位的PE狀態(tài)的影響。在此注明,其它語句106與如果語句102為一起出現(xiàn)。因此,數(shù)據(jù)路徑的PE狀態(tài)和指令SAVE_PE(P3)112(如行127所示)所存儲(chǔ)的PE狀態(tài)具有相關(guān)性。因?yàn)榇鎯?chǔ)的DP0和DP1的PE狀態(tài)為使能,且DP0和DP1當(dāng)前為使能,所以指令FLIP_PE(P3)118禁止這些數(shù)據(jù)路徑。結(jié)果DP0和DP1的PE狀態(tài)改變?yōu)?(如行140所示)。
另一方面,DP2所存儲(chǔ)的PE狀態(tài)為使能(如行127的值-1所示),且DP2目前的PE狀態(tài)為禁止(如行138的PE=0所示)。因此,指令FLIP_PE(P3)118使能DP2(如行140的PE=1所示)。
當(dāng)指令SAVE_PE(P3)112所存儲(chǔ)的數(shù)據(jù)路徑DP3的PE狀態(tài)為禁止時(shí)(如行127所示),則仍保持禁止(如行138的PE=0所示)。因此,指令FLIP_PE(P3)118維持DP3為禁止。如行142的PE=0所示。
因?yàn)橹挥袛?shù)據(jù)路徑DP2為目前使能,在其它語句106中的特定運(yùn)算僅由數(shù)據(jù)路徑DP2執(zhí)行。如行142所示。
行144和146圖解在條件程序塊108結(jié)束時(shí)執(zhí)行指令REsTORE_PE(P3)120的結(jié)果。因?yàn)镈P0-DP2目前的PE狀態(tài)的指示的值為-1(如行138所示),指令RESTORE_PE(P3)120指定DP0-DP2為使能PE狀態(tài)(如行144的PE=1所示),且不改變指示的值(如行146所示)。即,DP0和DP1回復(fù)成使能狀態(tài),DP2仍保持為使能狀態(tài)。另一方面,因?yàn)镈P3未使能,指令RESTORE_PE(P3)120將DP3維持在禁止的狀態(tài)(如行144的PE=0所示),并且將DP3的P3值由0(如行138所示)減少成-1(如行146所示)。
通過比較行111和144,很明顯地DP0-DP3的狀態(tài)在條件程序塊108時(shí)結(jié)束時(shí)的值和進(jìn)入條件程序塊108時(shí)的值相同。
在條件程序期間可以以一分支運(yùn)算來結(jié)合存儲(chǔ)PE狀態(tài)和設(shè)定PE位。在一并公開(copending)的申請中更詳細(xì)的討論此觀點(diǎn)。以下列指令來作解釋if(SAVE_PE(PE),PE=Pa=0)go to X該指令處理“如果”語句的所有需要的工作。依上述討論的原理,SAVE_PE(PE)將數(shù)據(jù)路徑的目前PE狀態(tài)存儲(chǔ)在寄存器Pb中。依據(jù)寄存器Pa的內(nèi)容來設(shè)定PE位,且如果等于0則分支指令將引導(dǎo)至目的X。舉例而言,如果所有的PE位皆設(shè)成0,數(shù)據(jù)路徑的分支指令繞過(換句話說,跳過)條件程序塊的其余的塊,因?yàn)闆]有一數(shù)據(jù)路徑為使能而執(zhí)行任何條件程序塊的工作。
同樣地,F(xiàn)LIP指令以一分支指令來結(jié)合,以下列指令來舉例if(FLIP_PE(Pb)) go to X該指令將依上述討論的原理來倒置PE位,且如果他們?nèi)紱]被設(shè)定則分支指令將引導(dǎo)至目的X。依此方式,如果他們?nèi)嘉挥诮筆E狀態(tài)時(shí),則數(shù)據(jù)路徑將繞過后來的“其它”處理程序。
由程序代碼是否確定來產(chǎn)生其中一個(gè)或兩個(gè)分支指令的功能。這是指,如果取其中一個(gè)分支指令,則通過定義跳過工作并且程序運(yùn)行地比較快。如果程序員想要程序有相同的運(yùn)行時(shí)間,不管是否提供分支的條件(例如,如果程序代碼必須滿足實(shí)時(shí)的限制(deadlines)),他或她在處理器的多個(gè)寄存器中將要設(shè)定判定位(DET)。如果設(shè)定DET,即使所有數(shù)據(jù)路徑的PE狀態(tài)為禁止時(shí),沒有一分支指令將被執(zhí)行。
本發(fā)明的優(yōu)選實(shí)施例,在不脫離本發(fā)明的精神和范圍內(nèi),可作改變和改進(jìn)。此外,其它實(shí)施例皆在權(quán)利要求范圍內(nèi)。
權(quán)利要求
1.一種用以保持?jǐn)?shù)據(jù)路徑在條件程序期間的PE狀態(tài)方法,包括在上述條件程序之前將上述數(shù)據(jù)路徑的目前微處理使能的狀態(tài)存儲(chǔ)成該路徑的指示;以及在上述條件程序期間操縱上述指示,以反映在上述條件程序期間可能發(fā)生的上述數(shù)據(jù)路徑的上述微處理使能狀態(tài)的變化。
2.如權(quán)利要求1所述的方法,其中還包括在條件程序之后,依據(jù)至少一部份的上述指示來回復(fù)存儲(chǔ)的上述數(shù)據(jù)路徑的上述微處理使能的狀態(tài)。
3.如權(quán)利要求2所述的方法,其中還包括對(duì)執(zhí)行上述條件程序的SIMD的多個(gè)數(shù)據(jù)路徑中的每一個(gè)來執(zhí)行回復(fù)步驟。
4.如權(quán)利要求1所述的方法,其中上述條件程序包括如果程序語句,上述存儲(chǔ)步驟包括將上述指示存儲(chǔ)成表示上述數(shù)據(jù)路徑的上述目前微處理器狀態(tài)的值。
5.如權(quán)利要求4所述的方法,其中上述操縱步驟包括依據(jù)在上述條件程序期間的上述數(shù)據(jù)路徑之上述微處理器狀態(tài)來改變上述值。
6.如權(quán)利要求5所述的方法,其中上述操縱步驟包括在存儲(chǔ)步驟期間如果上述數(shù)據(jù)路徑的上述微處理器狀態(tài)為禁止時(shí),則將增加上述值。
7.如權(quán)利要求4所述的方法,其中操縱步驟包括如果在條件程序期間,當(dāng)上述數(shù)據(jù)路徑的上述微處理器狀態(tài)未改變時(shí),則將不改變值的初始值。
8.如權(quán)利要求4所述的方法,其中還包括在執(zhí)行上述如果程序語句后,依據(jù)至少一部份的上述值來回復(fù)上述數(shù)據(jù)路徑的上述微處理器狀態(tài)。
9.如權(quán)利要求8所述的方法,其中回復(fù)步驟包括如果上述值超過限定時(shí),則指定上述數(shù)據(jù)路徑為禁止PE狀態(tài),否則指定上述數(shù)據(jù)路徑為使能PE狀態(tài)。
10.如權(quán)利要求9所述的方法,其中還包括如果上述值超過限定時(shí),改變上述值。
11.如權(quán)利要求10所述的方法,其中上述改變包括減少上述值。
12.如權(quán)利要求8所述的方法,其中條件程序塊包括多個(gè)上述如果條件語句,且還包括,對(duì)每一上述如果程序語句執(zhí)行上述存儲(chǔ)、操縱或回復(fù)步驟。
13.如權(quán)利要求4所述的方法,其中條件程序塊包括,其它程序語句,上述操縱步驟還包括在執(zhí)行上述其它程序語句之前,依據(jù)上述如果程序語句的程序是否改變上述數(shù)據(jù)路徑的上述PE狀態(tài),來判定改不改變上述值。
14.如權(quán)利要求13所述的方法,其中如果上述數(shù)據(jù)路徑的上述存儲(chǔ)的PE狀態(tài)為使能狀態(tài)且上述如果程序語句的上述程序?qū)⑸鲜鯬E狀態(tài)改變?yōu)榻範(fàn)顟B(tài),上述操縱程序包括改變上述值以表示上述使能狀態(tài)。
15.如權(quán)利要求13所述的方法,其中如果上述數(shù)據(jù)路徑的上述存儲(chǔ)的PE狀態(tài)為使能狀態(tài)且上述如果程序語句的上述程序未改變上述PE狀態(tài),上述操縱程序包括改變上述值以表示上述禁止?fàn)顟B(tài)。
16.如權(quán)利要求13所述的方法,其中如果上述數(shù)據(jù)路徑的上述存儲(chǔ)的PE狀態(tài)為禁止?fàn)顟B(tài),上述操縱程序包括維持上述值以表示上述禁止?fàn)顟B(tài)。
17.計(jì)算機(jī)指令集,用以維持在條件程序期間的數(shù)據(jù)路徑的PE狀態(tài),包括使上述數(shù)據(jù)路徑產(chǎn)生下列效果的指令在條件程序之前,以將上述數(shù)據(jù)路徑的目前PE狀態(tài)存儲(chǔ)為該路徑的指示;以及在上述條件程序期間操縱上述指示,以反映在上述條件程序期間可能發(fā)生的上述數(shù)據(jù)路徑的上述微處理使能狀態(tài)的變化。
18.如權(quán)利要求17所述的方法,其中還包括指令,在上述條件程序后使上述數(shù)據(jù)路徑,依據(jù)至少一部份上述指示來回復(fù)上述數(shù)據(jù)路徑的上述存儲(chǔ)的PE狀態(tài)。
19.如權(quán)利要求17所述的方法,其中上述條件程序包括如果程序語句,上述指令還包括使上述數(shù)據(jù)路徑存儲(chǔ)上述指示,用以表示上述數(shù)據(jù)路徑的上述存儲(chǔ)的PE狀態(tài)的值。
20.如權(quán)利要求19所述的方法,其中還包括指令,在上述如果程序語句執(zhí)行完后使上述數(shù)據(jù)路徑,依據(jù)至少一部份上述值來回復(fù)上述數(shù)據(jù)路徑的上述存儲(chǔ)的PE狀態(tài)。
21.如權(quán)利要求19所述的方法,其中上述條件程序塊包括其它程序塊,上述指令集還包括指令使上述數(shù)據(jù)路徑,依據(jù)上述如果程序語句的程序是否改變上述數(shù)據(jù)路徑的上述PE狀態(tài),在執(zhí)行上述其它程序語句之前來改變或不改變上述值。
22.單指令多數(shù)據(jù)路徑處理器包括多個(gè)數(shù)據(jù)路徑,每一上述數(shù)據(jù)路徑具有維持該路徑的PE狀態(tài)的能力,因此在條件程序期間通過執(zhí)行一個(gè)以上的指令使上述數(shù)據(jù)路徑在上述條件程序之前將上述數(shù)據(jù)路徑的目前微處理使能的狀態(tài)存儲(chǔ)成該路徑的指示;以及在上述條件程序期間操縱上述指示,以反映在上述條件程序期間可能發(fā)生的上述數(shù)據(jù)路徑的上述微處理使能狀態(tài)的變化。
23.在條件程序期間數(shù)據(jù)路徑所執(zhí)行的計(jì)算機(jī)指令集,包括指令使上述數(shù)據(jù)路徑在上述條件程序之前使上述數(shù)據(jù)路徑的目前PE狀態(tài)存儲(chǔ)成指示;建立上述條件程序的上述PE狀態(tài);以及如果上述建立的PE狀態(tài)并不滿足上述指令的條件時(shí),分支指令繞過上述條件狀態(tài)。
24.如權(quán)利要求23項(xiàng)所述的指令集,其中還包括指令使上述數(shù)據(jù)路徑如果選取的事件發(fā)生時(shí),倒置上述建立的PE狀態(tài);以及如果上述倒置的PE狀態(tài)并不滿足選取的條件時(shí),分支指令繞過上述條件狀態(tài)。
全文摘要
在條件程序期間將數(shù)據(jù)路徑在條件程序開始前的目前PE(處理器使能)狀態(tài)存儲(chǔ)成指示以維持?jǐn)?shù)據(jù)路徑的PE狀態(tài),并操縱在條件程序期間數(shù)據(jù)路徑可能發(fā)生PE狀態(tài)改變所影響的在條件程序期間的指示。其中條件程序塊為如果-然后-其它程序塊,在如果程序期間將PE狀態(tài)存儲(chǔ)成指示來當(dāng)作表示目前PE狀態(tài)的值,且操縱步驟包括依據(jù)如果程序塊的PE狀態(tài)來改變值。依據(jù)如果程序是否改變數(shù)據(jù)路徑的PE狀態(tài)并在其它程序塊執(zhí)行前來判定是否倒置PE狀態(tài)。在條件程序塊結(jié)束點(diǎn),將依據(jù)值的致少一部份來回復(fù)多個(gè)據(jù)路徑已存儲(chǔ)的PE狀態(tài)。由指令集和單指令多數(shù)據(jù)路徑處理器來完成所提供的步驟。指令集也包括以分支運(yùn)算來結(jié)合一個(gè)以上PE存儲(chǔ)和操縱步驟的指令。
文檔編號(hào)G06F9/38GK1486465SQ01821987
公開日2004年3月31日 申請日期2001年11月9日 優(yōu)先權(quán)日2000年11月28日
發(fā)明者約翰·L·雷福德, 約翰 L 雷福德 申請人:奇普賴茨設(shè)計(jì)公司