專利名稱:使得能夠每寄存器處理多個(gè)帶符號(hào)獨(dú)立數(shù)據(jù)元的裝置、方法和編譯器的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及在計(jì)算機(jī)寄存器中并行處理數(shù)據(jù)的系統(tǒng)、方法和編譯器。
背景技術(shù):
計(jì)算機(jī)處理器的運(yùn)行是依照計(jì)算機(jī)程序提供的指令通過不同的寄存器處理數(shù)據(jù)元。寄存器的容量為2的冪。例如,一個(gè)寄存器可以具有八比特的容量,其能夠在單個(gè)處理周期中處理一個(gè)八比特以下的數(shù)據(jù)元。舉例來說,8比特寄存器可以在單個(gè)周期中處理一個(gè)4比特?cái)?shù)據(jù)元。當(dāng)然,寄存器的大小一般大于8比特,也就是說,寄存器的容量可以是16比特、32比特或者64比特等等。寄存器采用的操作的類型的非限定性實(shí)例包括乘以常數(shù)、加法、減法、邏輯左移、邏輯右移、“與”和“或”操作。
在數(shù)據(jù)元已經(jīng)被處理之后,它們可以被發(fā)送到另一個(gè)寄存器進(jìn)行進(jìn)一步處理,或者它們可以被存儲(chǔ)或輸出。為了說明,在打印機(jī)領(lǐng)域中,依照一個(gè)計(jì)算機(jī)程序,一個(gè)服務(wù)器微處理器通過它的各寄存器處理一個(gè)輸入的數(shù)據(jù)流,它可以輸出一個(gè)所謂的JPEG格式打包圖像數(shù)據(jù)的數(shù)據(jù)流到一個(gè)打印機(jī)處理器,然后對(duì)該數(shù)據(jù)進(jìn)行合適的操作以指示打印機(jī)設(shè)備如何打印該圖像。
處理器本身執(zhí)行機(jī)器語言形式的指令,所述指令是有關(guān)什么數(shù)據(jù)元通過哪些寄存器處理的低級(jí)指令。然而,大部分軟件是用高級(jí)編程代碼例如C語言寫的,高級(jí)語言具有自然人可讀和能用相對(duì)較短、能快速書寫的命令表達(dá)相對(duì)復(fù)雜的處理操作的優(yōu)點(diǎn)。編譯器接收高級(jí)編程代碼,從許多選擇中決定最好的方法把它映射成匯編語言,傳遞該映射到匯編程序,然后該匯編程序?qū)⒃搮R編語言映射成處理器可讀的所謂機(jī)器語言。該高級(jí)語言可以是例如具有擴(kuò)展或者宏的C或者C++程序設(shè)計(jì)語言,而低級(jí)語言可以是其中某些擴(kuò)展或宏已經(jīng)過解釋或移除的C語言?;蛘?,低級(jí)語言可以是機(jī)器語言或者匯編語言。有時(shí),程序設(shè)計(jì)員可以選擇直接以低級(jí)語言編寫比程序的其他部分執(zhí)行更頻繁的部分程序。盡管寫起來更麻煩,但代碼的這些所謂的“手工制作”部分不需要由高級(jí)語言編譯器進(jìn)行翻譯,從而便于在運(yùn)行時(shí)更快速地處理。
不管處理器是否從編譯器或者直接從手工制作程序接收機(jī)器代碼,本發(fā)明進(jìn)行了中肯的觀測(cè),發(fā)現(xiàn)情況常常是寄存器空間被浪費(fèi)了。具體來說,如上所述,在每一個(gè)處理周期中,一個(gè)寄存器可能沒有使用它的全部空間。例如,當(dāng)一個(gè)16比特容量的寄存器被用于處理4比特?cái)?shù)據(jù)元時(shí),每個(gè)周期中寄存器有12比特的空間被浪費(fèi)了。這減緩了處理時(shí)間,引起了額外的數(shù)據(jù)緩沖需求(從而附帶產(chǎn)生高速緩存未中問題),從而整體上沒有充分利用處理器容量。因此,本發(fā)明認(rèn)識(shí)到對(duì)處理器性能可適用的可能的改進(jìn)是在單個(gè)周期內(nèi)在一個(gè)寄存器中處理多個(gè)數(shù)據(jù)元。
本發(fā)明還認(rèn)識(shí)到實(shí)現(xiàn)上述認(rèn)識(shí)不是沒有價(jià)值的,特別是如果要處理的不僅僅是正值,而是既有正值又有負(fù)值(也就是“有符號(hào)的”),這是由于可能超出寄存器容量,和/或可能在處理期間破壞數(shù)據(jù)。換句話說,在本發(fā)明的用法中,一個(gè)“有符號(hào)的”數(shù)據(jù)元不限于非負(fù)值,并且希望在單個(gè)處理周期內(nèi)通過單個(gè)寄存器處理多個(gè)帶符號(hào)的數(shù)據(jù)元。此外,本發(fā)明認(rèn)為對(duì)于穩(wěn)定性來說,最好處理器不要被制造商限定為每寄存器僅接受預(yù)定比特大小的多個(gè)數(shù)據(jù)元,而希望程序編制器能夠靈活地定義寄存器能按照具體應(yīng)用程序可能發(fā)出的命令接收的各種數(shù)據(jù)元的比特大小。在考察了上述方面后,本發(fā)明在這里提供了解決的方法。
本發(fā)明進(jìn)一步認(rèn)識(shí)到編譯器可以被用于實(shí)現(xiàn)上述認(rèn)識(shí)。
發(fā)明內(nèi)容
本發(fā)明提供了一種處理多個(gè)帶符號(hào)多比特?cái)?shù)據(jù)元的裝置,包括寄存器;處理器,連接到所述寄存器上;和程序,可訪問地存儲(chǔ)在所述處理器中,當(dāng)在所述處理器上執(zhí)行時(shí),該程序與所述處理器合作以在所述寄存器中同時(shí)處理多個(gè)帶符號(hào)多比特?cái)?shù)據(jù)元,該同時(shí)處理包括在所述寄存器中打包至少第一和第二帶符號(hào)多比特?cái)?shù)據(jù)元;和應(yīng)用所述處理器使用同樣的操作同時(shí)處理該至少第一和第二帶符號(hào)多比特?cái)?shù)據(jù)元。
本發(fā)明還提供了一種編譯多個(gè)帶符號(hào)多比特?cái)?shù)據(jù)元的裝置,包括處理器;編譯器,與所述處理器合作,接收高級(jí)代碼、輸出低級(jí)代碼以使所述處理器能夠在單個(gè)寄存器中同時(shí)處理多個(gè)多比特?cái)?shù)據(jù)元,所述低級(jí)代碼邏輯包括在所述寄存器中打包至少第一和第二帶符號(hào)多比特?cái)?shù)據(jù)元;和應(yīng)用所述處理器使用同樣的操作同時(shí)處理該至少第一和第二帶符號(hào)多比特?cái)?shù)據(jù)元。
本發(fā)明還提供了一種在數(shù)據(jù)處理裝置中控制多個(gè)帶符號(hào)多比特?cái)?shù)據(jù)元的裝置,該裝置包括控制把至少把第一和第二帶符號(hào)多比特?cái)?shù)據(jù)元打包到單個(gè)寄存器中的模塊;控制所述數(shù)據(jù)處理裝置使用同樣的操作同時(shí)處理所述至少第一和第二帶符號(hào)多比特?cái)?shù)據(jù)元的模塊。
本發(fā)明還提供了一種在數(shù)據(jù)處理裝置中編譯多個(gè)帶符號(hào)多比特?cái)?shù)據(jù)元的編譯器,該編譯器包括把至少把第一和第二帶符號(hào)多比特?cái)?shù)據(jù)元打包到單個(gè)寄存器中的模塊;使所述數(shù)據(jù)處理裝置使用同樣的操作同時(shí)處理所述至少第一和第二帶符號(hào)多比特?cái)?shù)據(jù)元的模塊。
本發(fā)明還提供了一種處理多個(gè)帶符號(hào)多比特?cái)?shù)據(jù)元的裝置,包括處理器;連接到所述處理器的至少第一和第二寄存器;其特征在于,在所述第一寄存器中打包的第一和第二帶符號(hào)多比特?cái)?shù)據(jù)元,所述處理器使用同樣的操作同時(shí)處理所述至少第一和第二帶符號(hào)多比特?cái)?shù)據(jù)元。
本發(fā)明還提供了一種在數(shù)據(jù)處理裝置中處理多個(gè)帶符號(hào)多比特?cái)?shù)據(jù)元的方法,包括下列步驟確定要在單個(gè)寄存器中被分配以分別保存第一和第二帶符號(hào)多比特?cái)?shù)據(jù)元的第一和第二精度;將所述第一和第二帶符號(hào)多比特?cái)?shù)據(jù)元打包到所述寄存器中;使所述數(shù)據(jù)處理裝置使用同樣的操作同時(shí)處理所述至少第一和第二帶符號(hào)多比特?cái)?shù)據(jù)元;確定要在單個(gè)寄存器中被分配以分別保存第三和第四帶符號(hào)多比特?cái)?shù)據(jù)元的第三和第四精度,至少下列之一第一和第二精度彼此不同,第二和第四精度彼此不同;把第三和第四數(shù)據(jù)元打包到所述寄存器中;和使所述數(shù)據(jù)處理裝置使用同樣的操作同時(shí)處理所述第三和第四帶符號(hào)多比特?cái)?shù)據(jù)元。
將通用計(jì)算機(jī)按照本發(fā)明的步驟編程以允許在單個(gè)寄存器中使用多于一個(gè)的比特的帶符號(hào)數(shù)據(jù)元。本發(fā)明可以被實(shí)現(xiàn)為一件產(chǎn)品-由數(shù)字處理裝置例如計(jì)算機(jī)使用的機(jī)器部件,其有形地實(shí)現(xiàn)一個(gè)可以通過數(shù)字處理器裝置去執(zhí)行本發(fā)明的邏輯的可執(zhí)行指令程序。本發(fā)明實(shí)現(xiàn)在使數(shù)字處理裝置執(zhí)行本發(fā)明的方法步驟的關(guān)鍵機(jī)器部件中。
因此,一個(gè)通用計(jì)算機(jī)包括采用該方法的邏輯,以在至少一個(gè)第一寄存器中建立至少第一和第二帶符號(hào)多比特?cái)?shù)據(jù)元。該邏輯同時(shí)處理多數(shù)據(jù)元。
假如需要,數(shù)據(jù)元可以是彼此獨(dú)立的。第一數(shù)據(jù)元可以從一個(gè)第一數(shù)據(jù)組中提供,而第二數(shù)據(jù)元可以從一個(gè)第二數(shù)據(jù)組中提供,或者兩個(gè)數(shù)據(jù)元可以從同一數(shù)據(jù)組的不同部分提供。寄存器本身可以傳遞內(nèi)容到計(jì)算子系統(tǒng),該子系統(tǒng)包括但不限于加法器、乘法器或移位器,在數(shù)據(jù)元上同時(shí)執(zhí)行的操作可以是而不限于乘以一個(gè)常量,或乘以一個(gè)已知精度的變量,或者一個(gè)加法,或者一個(gè)邏輯左移。
此外,較大的數(shù)據(jù)元可以在寄存器之間拆分,然后在處理之后重新合并。也就是,第一數(shù)據(jù)元可以是第一部分?jǐn)?shù)據(jù)元,與之有關(guān)的第二部分?jǐn)?shù)據(jù)元建立在第二寄存器中,第一和第二部分?jǐn)?shù)據(jù)元在處理之后合并。
如下所述,對(duì)于每一個(gè)在單個(gè)周期中在寄存器中被處理的數(shù)據(jù)元,向其寄存器分配相應(yīng)的精度,使得可以由一個(gè)數(shù)據(jù)元代表的最大負(fù)數(shù)比相應(yīng)的精度代表的最大負(fù)數(shù)大一值。這可以包括基于[-2N-1+1]到[+2N+1+1]確定一個(gè)用于數(shù)據(jù)元的精度邊界(precision bound),其中N是數(shù)據(jù)元中的比特?cái)?shù)。
另外,在一個(gè)優(yōu)選的實(shí)施例中,在執(zhí)行邏輯運(yùn)算之前,確定用于任何乘法常量為達(dá)到所需精度所需的凈比特?cái)?shù)。然后,使用所述凈比特?cái)?shù)和乘法常量,確定精度的凈比特?cái)?shù)。寄存器中的空間按照確定的精度被分配。
一旦寄存器已經(jīng)通過為每個(gè)寄存器分配多個(gè)帶符號(hào)數(shù)據(jù)元的空間而建立,數(shù)據(jù)元的處理就通過按照精度的凈比特?cái)?shù)把多個(gè)數(shù)據(jù)元打包到(pack into)各寄存器而執(zhí)行。然后,用相同的操作數(shù)對(duì)每一個(gè)寄存器中的所有數(shù)據(jù)元同時(shí)操作。然后,數(shù)據(jù)元被傳遞用于進(jìn)一步處理、存儲(chǔ)或輸出。
當(dāng)使一個(gè)寄存器中的第一和第二數(shù)據(jù)元彼此獨(dú)立時(shí),該邏輯將第一數(shù)據(jù)元中的符號(hào)位加到第二數(shù)據(jù)元中的最低有效位。或者,體現(xiàn)于邏輯中的方法包括屏蔽第一和第二數(shù)據(jù)元中的符號(hào)位,將符號(hào)位加回寄存器,舍棄每一個(gè)數(shù)據(jù)元中的符號(hào)位位置上的值。
此外,如下文詳細(xì)所述,可以確定是否包含一個(gè)在零值附近的數(shù)據(jù)元。同樣,可以這樣進(jìn)行右移位運(yùn)算在第一寄存器中保存用于一個(gè)打包到(packed in)第二寄存器的數(shù)據(jù)元的符號(hào)位,然后將按照右移位算法要移出數(shù)據(jù)元的至少一個(gè)最低有效位歸零。第一寄存器中的符號(hào)位被恢復(fù)到第二寄存器中的數(shù)據(jù)元。另外,可在單個(gè)處理周期中對(duì)單個(gè)寄存器中的至少兩個(gè)數(shù)據(jù)元確認(rèn)算法相等性。通常,可以按每個(gè)數(shù)據(jù)元一個(gè)周期進(jìn)行算術(shù)比較。
在另一方面,一種計(jì)算機(jī)程序裝置包括一個(gè)能由數(shù)字處理裝置讀取的計(jì)算機(jī)程序存儲(chǔ)裝置。一個(gè)程序在該程序存儲(chǔ)裝置上,該程序包括可以由數(shù)字處理裝置執(zhí)行的指令,用于執(zhí)行處理多比特帶符號(hào)數(shù)據(jù)元的方法。該程序包括計(jì)算機(jī)可讀碼裝置,用于把至少第一和第二數(shù)據(jù)元寫入單個(gè)寄存器。計(jì)算機(jī)可讀碼裝置同時(shí)處理所述數(shù)據(jù)元。
再一個(gè)方面,一個(gè)處理器包括至少第一和第二寄存器。至少第一和第二帶符號(hào)多比特?cái)?shù)據(jù)元在第一寄存器中,處理器使用一個(gè)操作數(shù)對(duì)第一和第二數(shù)據(jù)元同時(shí)操作。
在另一方面,一個(gè)計(jì)算機(jī)實(shí)現(xiàn)的方法包括,對(duì)于一個(gè)第一程序,確定將在單個(gè)寄存器中分配用于分別保存第一和第二帶符號(hào)數(shù)據(jù)元的第一和第二精度。所述數(shù)據(jù)元被打包到(packed into)寄存器,然后對(duì)之操作。對(duì)于一個(gè)第二程序,確定將在單個(gè)寄存器中分配用于分別保存第三和第四帶符號(hào)數(shù)據(jù)元的第三和第四精度。第一和第三精度和/或第二和第四精度可以彼此不同。第三和第四數(shù)據(jù)元被打包到寄存器,然后對(duì)之操作。
相應(yīng)地,一個(gè)通用計(jì)算機(jī)包括一個(gè)編譯器,用于接收高級(jí)代碼,并輸出低級(jí)代碼以使處理器能夠在單個(gè)寄存器中同時(shí)處理多個(gè)多比特?cái)?shù)據(jù)元。由編譯器輸出的低級(jí)代碼邏輯包括在一個(gè)第一寄存器中建立至少第一和第二帶符號(hào)多比特?cái)?shù)據(jù)元,然后同時(shí)處理所述數(shù)據(jù)元。用于這些打包的數(shù)據(jù)元(packed elements)的精度確定他們的打包結(jié)構(gòu)(packing configuration)。在本說明書中,“輸入精度”指在同時(shí)操作之前各數(shù)據(jù)元的初始精度,而“輸出精度”指在同時(shí)操作完成之前各數(shù)據(jù)元的最終最大精度。
在一個(gè)優(yōu)選的實(shí)施例中,在產(chǎn)生用于打包(packing)數(shù)據(jù)的指令和用于同時(shí)操作的指令之前,編譯器可以訪問一個(gè)標(biāo)記或一個(gè)配置狀態(tài)(configuration state)以決定是否由程序編制器(programmer)或者編譯器從輸入精度計(jì)算輸出精度。當(dāng)由程序編制器確定時(shí),輸出精度可以由編譯器指令、變量定義或者配置文件指定給編譯器。與此相反,當(dāng)輸出精度由編譯器從輸入精度確定時(shí),編譯器計(jì)算將對(duì)數(shù)據(jù)執(zhí)行的操作的數(shù)量和類型,對(duì)每一個(gè)加法或減法將輸入精度擴(kuò)展一個(gè)比特,并擴(kuò)展充分的比特?cái)?shù)以適應(yīng)乘法操作,同時(shí)當(dāng)需要時(shí)通過擴(kuò)展一個(gè)比特來保證可以由一個(gè)數(shù)據(jù)元代表的最大值負(fù)數(shù)比可以輸出精度表示的最大負(fù)數(shù)大一。
編譯器也可以產(chǎn)生代碼以進(jìn)行使處理之后的數(shù)據(jù)元彼此獨(dú)立的操作,假如要執(zhí)行的程序的需求如此要求的話。為此,編譯器可以訪問編譯器指令或特定高級(jí)語言(HLL)語法以決定是否使數(shù)據(jù)元彼此獨(dú)立,即何時(shí)拆分?jǐn)?shù)據(jù)元。
在另一方面,一個(gè)計(jì)算機(jī)程序裝置包括一個(gè)可以由數(shù)字處理裝置讀取的計(jì)算機(jī)程序存儲(chǔ)設(shè)備。一個(gè)編譯器程序在該程序存儲(chǔ)裝置上。該編譯器程序包括產(chǎn)生低級(jí)代碼的指令,所述低級(jí)代碼可由數(shù)字處理裝置執(zhí)行,用于處理多比特帶符號(hào)數(shù)據(jù)元。該編譯程序包括一個(gè)用于輸出一個(gè)低級(jí)代碼的計(jì)算機(jī)可讀代碼裝置,其把至少第一和第二數(shù)據(jù)元打包到單個(gè)寄存器中。同樣,該編譯器程序包括計(jì)算機(jī)可讀代碼裝置,用于輸出低級(jí)代碼以同時(shí)處理數(shù)據(jù)元。
在又一方面,一個(gè)方法包括定義用于編譯器的至少一個(gè)編譯器指令。該編譯器指令定義至少一個(gè)用于數(shù)據(jù)元的起始精度,或要打包到一個(gè)公共寄存器中,由一算法彼此同時(shí)操作的各數(shù)據(jù)元的多個(gè)數(shù)據(jù)源,或者不編譯通過編譯器接收的代碼的預(yù)定部分的指令。
參照隨后的附圖,本發(fā)明的結(jié)構(gòu)和操作方面的細(xì)節(jié)可以得到更好的附圖中相同的標(biāo)記指相同的部件,其中圖1是本發(fā)明的系統(tǒng)的示意圖;圖2A是一個(gè)替代系統(tǒng)的示意圖;圖2B是另一個(gè)替代系統(tǒng)的示意圖;圖3是一個(gè)數(shù)據(jù)寄存器中多個(gè)獨(dú)立比特的略圖;圖4是本發(fā)明總體邏輯的流程圖;圖5A是用于核實(shí)對(duì)于某過程本發(fā)明的規(guī)則能被滿足的程序編制器/編譯器邏輯的流程圖;圖5B是程序初始化邏輯的流程圖;圖5C是用于核實(shí)對(duì)于某過程本發(fā)明的規(guī)則能被滿足的邏輯的流程圖;圖6是寄存器建立邏輯的流程圖;圖7是總體執(zhí)行邏輯的流程圖;圖8和9是用于在單個(gè)寄存器中實(shí)行獨(dú)立數(shù)據(jù)元的可選邏輯流的流程圖;圖10是用于確定在零附近是否包含一個(gè)數(shù)據(jù)元的邏輯的流程圖;圖11是用于算術(shù)右移的邏輯的流程圖;和圖12是用于算術(shù)比較的邏輯的流程圖。
具體實(shí)施方式
先參考附圖1和2,示出了一個(gè)總體上標(biāo)記為10的系統(tǒng),用于使處理器的每個(gè)單個(gè)寄存器能夠同時(shí)處理多個(gè)帶符號(hào)獨(dú)立多比特?cái)?shù)據(jù)元。圖1和2示出多種非限制性的方法,其中可利用本發(fā)明提供的處理效率。例如,在圖1中,一個(gè)可以使用一個(gè)軟件實(shí)現(xiàn)的編譯器11的服務(wù)器處理器12接收一個(gè)單源輸入數(shù)據(jù)流,例如為代表圖像的“TIFF”格式,該處理器對(duì)數(shù)據(jù)流的處理與不利用本發(fā)明相比快m倍,輸出例如JPEG格式的打包圖像數(shù)據(jù),其中m在下面進(jìn)一步按照每周期每寄存器的數(shù)據(jù)元定義。JPEG數(shù)據(jù)被發(fā)送到一個(gè)打印機(jī)微處理器14,后者命令一個(gè)打印機(jī)裝置16去打印圖像。應(yīng)該理解,本發(fā)明通常應(yīng)用到所有的數(shù)據(jù)類型,而不僅僅是圖像數(shù)據(jù),同時(shí)它也可以應(yīng)用到單處理器系統(tǒng)或多處理器系統(tǒng)。例如,本發(fā)明應(yīng)用到數(shù)據(jù)通信和數(shù)據(jù)處理、聲音打包、糾錯(cuò)編碼、多通道解析(multiple channel resolution)等等。因?yàn)樵诖丝墒褂幂^少處理器進(jìn)行并行處理,成本/功率/尺寸/重量可以降低。
圖1和2A示出了使用編譯器11的服務(wù)器微處理器。應(yīng)該理解,本發(fā)明的編譯器可以存在于任何地方,僅僅最終的機(jī)器代碼需要被寫入到微處理器用于執(zhí)行。圖2A示出系統(tǒng)10的優(yōu)點(diǎn)可以被進(jìn)一步利用以使服務(wù)器處理器微處理器去同時(shí)處理來自第一和第二數(shù)據(jù)組的兩個(gè)獨(dú)立數(shù)據(jù)流,以輸出相應(yīng)的第一和第二輸出流到單個(gè)打印機(jī)微處理器18,或者到相應(yīng)的第一和第二打印機(jī)微處理器18、20。接下來,每個(gè)打印機(jī)處理器18、20可以控制自己的打印機(jī)裝置(在圖2A中僅僅示出裝置22),或者,單個(gè)打印機(jī)微處理器可以控制兩個(gè)打印機(jī)裝置。無論如何,不同的圖像(其是不同數(shù)據(jù)流的實(shí)例)或者相同圖像(數(shù)據(jù)流)的不同部分可以同時(shí)通過系統(tǒng)10處理,這樣,處理代碼的核心保持不變。
圖2B示出,合并圖像數(shù)據(jù)輸出1&2可以從一個(gè)服務(wù)器微處理器12A發(fā)送到一個(gè)編程為拆分所述數(shù)據(jù)的打印機(jī)微處理器14A,以節(jié)省在微處理器12A、14A之間網(wǎng)絡(luò)連接的帶寬。在這種情況下,例如,數(shù)據(jù)輸出1&2可以是到相應(yīng)的打印機(jī)裝置16A中的相應(yīng)的色彩引擎(color engine)的兩個(gè)彩色分量。
在一個(gè)預(yù)定的實(shí)施例中,處理器12可以是由紐約Armonk的國際商用機(jī)器公司(IBM)制造的個(gè)人計(jì)算機(jī),或者處理器12可以是任何的計(jì)算機(jī),包括在諸如AS400等商標(biāo)下售出的具有附隨的IBM網(wǎng)絡(luò)站的計(jì)算機(jī)?;蛘?,該處理器12可以是UNIX服務(wù)器,或者OS/2服務(wù)器,或者Windows NT服務(wù)器,或者IBM工作站,或者一個(gè)IBM便攜式計(jì)算機(jī)。另外,實(shí)現(xiàn)本發(fā)明寄存器的本發(fā)明處理器可以是一個(gè)數(shù)字信號(hào)處理器(DSP),專門的硬件、依照標(biāo)準(zhǔn)程序庫建立的用于處理子系統(tǒng)和算術(shù)邏輯部件(ALU)的芯片。這里使用的術(shù)語“計(jì)算機(jī)寄存器”指所有這些數(shù)據(jù)處理單元中的寄存器。
考慮到本發(fā)明結(jié)構(gòu)的上述概述,應(yīng)該理解本發(fā)明的邏輯依照下面討論的流程圖在圖1所示的結(jié)構(gòu)上被執(zhí)行。這里的流程圖描述了實(shí)現(xiàn)在計(jì)算機(jī)程序軟件中和/或編程步驟的本發(fā)明的邏輯的結(jié)構(gòu)。本領(lǐng)域技術(shù)人員能明白,所述流程圖描述了按本發(fā)明運(yùn)作的邏輯部件,例如計(jì)算機(jī)程序代碼部件或電子邏輯電路的結(jié)構(gòu)。顯然,本發(fā)明在其實(shí)質(zhì)性的實(shí)施例中通過一個(gè)機(jī)器部件實(shí)現(xiàn),使邏輯部件指令一個(gè)數(shù)字處理裝置(也就是計(jì)算機(jī))去執(zhí)行與圖中所示相應(yīng)的功能步驟序列。
換句話說,部分邏輯可以通過一個(gè)編譯器程序11實(shí)現(xiàn),該程序作為一系列計(jì)算機(jī)可執(zhí)行指令通過處理器12執(zhí)行。這些指令可以例如存在處理器12的RAM中,或一個(gè)硬盤上,或處理器12的光驅(qū)中,或者指令可以被存儲(chǔ)在一個(gè)DASD陣列、磁帶、電子只讀存儲(chǔ)器中,或者其它合適的數(shù)據(jù)存儲(chǔ)器中。
現(xiàn)在參看圖3,處理器12的寄存器24被示意性的示出。在該實(shí)例中,寄存器24是一個(gè)16比特寄存器,并且它包括第一和第二數(shù)據(jù)元26、28。這里參照寄存器用于描述的術(shù)語“左”和“右”是與圖3的順序和標(biāo)記一致的。最低有效位和最高有效位的另外的寄存器順序需要另一種協(xié)議(convention)。
對(duì)于在圖3中示出的說明性的實(shí)例,第一(最右)數(shù)據(jù)元包括兩個(gè)保護(hù)位和八個(gè)數(shù)據(jù)位,因此總體“精度”為+(10),同時(shí)第二(左)數(shù)據(jù)元28具有兩個(gè)保護(hù)位和4個(gè)數(shù)據(jù)位,因而精度為六(6)。按照專注于二進(jìn)制補(bǔ)碼計(jì)算的本發(fā)明,最左邊的保護(hù)位是一個(gè)“符號(hào)位”,因?yàn)樗幻枋鰯?shù)據(jù)元的符號(hào)。
應(yīng)該理解,按照本發(fā)明的原理,寄存器24可以是任何足以容納“m”個(gè)數(shù)據(jù)元的大小,同時(shí)數(shù)據(jù)元可以具有相同或不同的大小。因此,本發(fā)明的寄存器可以是容納兩個(gè)16比特?cái)?shù)據(jù)元的32比特寄存器,或者它可以容納兩個(gè)以上的N比特?cái)?shù)據(jù)元,或者他可以是一個(gè)容納4個(gè)16比特?cái)?shù)據(jù)元的64比特寄存器等等。無論如何,每一個(gè)數(shù)據(jù)元是一個(gè)多比特?cái)?shù)據(jù)元,其既可以是正的,也可以是負(fù)的,因此,它是一個(gè)“帶符號(hào)”的數(shù)據(jù)元,數(shù)據(jù)元26、28的大小在處理器28的制造期間沒有被約束為單一的、預(yù)定的大小,而是可依據(jù)特定應(yīng)用由程序編制器定義。應(yīng)該進(jìn)一步理解,寄存器24存儲(chǔ)數(shù)據(jù)元,當(dāng)適當(dāng)?shù)臅r(shí)候,該寄存器發(fā)送數(shù)據(jù)元到計(jì)算子系統(tǒng),該子系統(tǒng)包括但不限于加法器、乘法器或移位器。
圖4示出了在此考慮四個(gè)發(fā)展階段。按照本發(fā)明,編譯器11可以采用邏輯,或者如母申請(qǐng)公開的那樣,部分邏輯可以由程序員采用。第一步,在方框30,是算法設(shè)計(jì),這里確定考慮中的特定處理是否可以符合本發(fā)明。當(dāng)通過編譯器11采用時(shí),在下詳細(xì)所述,方框30的步驟對(duì)應(yīng)于讀取諸如C等高級(jí)語言代碼的編譯器11,并決定如何把高級(jí)語言代碼翻譯成低級(jí)代碼。
框32代表的第二步是程序初始化,其中在本發(fā)明的寄存器中執(zhí)行本發(fā)明的細(xì)節(jié)通過編譯器11確定,這樣就產(chǎn)生了合適地初始化代碼。然后,在框33中進(jìn)行寄存器設(shè)置(register set up),這里編譯器產(chǎn)生用于把輸入數(shù)據(jù)打包到目標(biāo)處理器寄存器中的代碼。第四個(gè)階段是執(zhí)行,由框34表示,其中產(chǎn)生的代碼在目標(biāo)處理器由操作員、自動(dòng)腳本程序或者其它能使產(chǎn)生的代碼運(yùn)行的其它裝置執(zhí)行。按照本發(fā)明,所有的這些階段下面進(jìn)一步討論,使用框32、33和34代表編譯器11如何實(shí)際地使高級(jí)語言轉(zhuǎn)為匯編語言。如上所述,編譯器另一方面可產(chǎn)生由傳統(tǒng)的編譯器編譯的傳統(tǒng)的高級(jí)語言指令。
對(duì)于第一階段(算法設(shè)計(jì)),現(xiàn)在參考圖5A。在框36開始,每一個(gè)原始數(shù)據(jù)元指示的所需精度所需的比特?cái)?shù)被確定。然后在框38,對(duì)于每一個(gè)將被操作的數(shù)據(jù)元,對(duì)數(shù)據(jù)元將經(jīng)歷的每一操作可能需要的附加精度位數(shù)被確定。例如,將兩個(gè)數(shù)據(jù)元加到一起可能引起輸出數(shù)據(jù)元比輸入數(shù)據(jù)元大一位。
從框38,邏輯移到判定菱形框40,這里確定在框38中分配的精度是否滿足最大負(fù)數(shù)規(guī)則(maximum negative number rule)。“最大負(fù)數(shù)”的意思是具有最大絕對(duì)值的負(fù)數(shù)。特別的,在判定菱形框40,判斷可由數(shù)據(jù)元代表的最大負(fù)數(shù)是否比以相應(yīng)的精度代表的最大負(fù)數(shù),例如以N位的二進(jìn)制補(bǔ)碼表示的-2N-1大一。若否,則在框42,對(duì)數(shù)據(jù)元分配一個(gè)附加精度位。在框44,充分的空間被分配到寄存器中用于數(shù)據(jù)元的最優(yōu)打包,例如確定如何用將被與其它數(shù)據(jù)元一起同時(shí)保存在一個(gè)寄存器中的可用數(shù)據(jù)元最有效地填充可用寄存器,從而使未使用寄存器容量最低。例如,對(duì)于一個(gè)8比特的原始數(shù)據(jù)元,其將經(jīng)歷最多6個(gè)加法操作,分配到該數(shù)據(jù)元的精度將是(8+6)=14。
圖5B示出了程序初始化邏輯,在判定菱形框45.1,它確定是否進(jìn)行等同性比較。若有,在框45.2,在對(duì)齊數(shù)據(jù)元(element alignments)上打包等同性比較項(xiàng),即,將要比較的項(xiàng)打包到相應(yīng)寄存器中的相同寄存器位置,圖5B的流程還描述了在判定菱形框45.3,接下來判斷是否進(jìn)行范圍比較,若有,用于每一個(gè)這種比較的下界將在框45.4中確定。然后,在框45.5,在對(duì)齊數(shù)據(jù)元(element alignments)上打包下界項(xiàng)。從框45.5,邏輯將移到框45.6去打包比較范圍。
從框45.6,或當(dāng)判斷為否時(shí)從判定菱形框45.3,邏輯流到判定菱形框45.65,在此確定是否需要知道數(shù)據(jù)元的符號(hào)位置。假如是的話,一個(gè)掩碼在框45.7產(chǎn)生,用于屏蔽下面討論的符號(hào)位位置。從框45.7,或當(dāng)判斷為否時(shí)從判定菱形框45.65,邏輯流到判定菱形框45.8,在此確定是否進(jìn)行邏輯右移操作。假如是的話,在框45.9產(chǎn)生一個(gè)掩碼,用于清除下面討論的被移位的比特位置。
關(guān)于第一階段(算法邏輯),現(xiàn)在參照?qǐng)D5C,其第一部分(直到框39)是代表程序員采用的邏輯。從框35開始,將被編譯的程序用高級(jí)語言寫成。在框35.1,識(shí)別出可按照下面的說明被并行化(parallelized)的程序部分。移動(dòng)到框35.2,編譯器指令被插入到程序中,識(shí)別所述“可并行化的”部分。
舉例來說,如下討論的圖7-9描述了各種執(zhí)行邏輯,所述邏輯提供對(duì)兩個(gè)或更多獨(dú)立數(shù)據(jù)流的同時(shí)操作,例如在兩個(gè)或更多將被并行打印的不同圖像上執(zhí)行相同的算法。當(dāng)情況是這樣時(shí),編譯器11必須在算法調(diào)用點(diǎn)和算法定義上知道這種情況可能發(fā)生,編譯器指令被用于傳送這種情況到編譯器11。下面是這樣的指令的一個(gè)實(shí)例/*在調(diào)用算法時(shí)*/#begin parallel_algorithm_callssignal_processing_algorithm(data_pointer_1);signal_processing_algorithm(data_pointer_2);signal_processing_algorithm(data_pointer 3);signal_processing_algorithm(data_pointer_4);#end parallel_algrithm_calls/*在算法定義上*/#parallel_algorithmvoid_signal_processing_algorithm(int*data_pointer){
/*......*/}一個(gè)內(nèi)嵌可平行化計(jì)算(in-line parallelizable computation)可以以相同方式規(guī)定,例如編譯指令內(nèi)部的說明來規(guī)定。還有另一個(gè)編譯指令可以被定義為阻止編譯器11對(duì)程序員不希望優(yōu)化的代碼(例如,假如代碼是由程序員(以機(jī)器語言)手寫的)執(zhí)行并行化優(yōu)化邏輯。可以應(yīng)用到一個(gè)循環(huán)的這樣一個(gè)指令的實(shí)例是#begin optimization_keepoutwhile(condition){/*......*/}#end optimization_keepout下一步,在框36,確定由每一個(gè)原始數(shù)據(jù)元支配的所需精度所需的比特?cái)?shù),例如,對(duì)將被操作的每一個(gè)數(shù)據(jù)元確定輸入精度。在判定菱形框37,它確定編譯器是否確定輸出精度,若是,程序員(程序編制器,programmer)在框38.4使用編譯器指令,或通過定義合適的變量類型,或通過使用配置文件,來指定輸入精度。下面示出一個(gè)舉例的編譯器指令。這里所有示出的實(shí)例使用用于“C”編程語言的語法,對(duì)于本領(lǐng)域技術(shù)人員來說,向其它編程語言的擴(kuò)展將是顯而易見的??梢詳U(kuò)展的其它編程語言包括但不僅僅限于RORTRAN,Pascal,Ada和Java。例如,假如支持編譯器的指令是依如下所示的舉例的語法,程序員可以寫出以下所示的編譯器指令以定義一個(gè)初始精度#fixed_precision 9int variable_name為了定義一個(gè)9比特定點(diǎn)變量?;蛘呒偃缇幾g器支持變量說明語法,例如在下面實(shí)例中顯示的,上述步驟同樣可以通過定義一個(gè)新的整數(shù)類型作為定點(diǎn)(9)變量名稱(variable_name)而進(jìn)行。如上所述,定義初始精度的第三種方法可以是在編譯時(shí)包括一個(gè)指定用于選定值的變量范圍、名稱和精度的配置文件。
另一方面,假如編譯器11不確定輸出精度,程序員必定這樣做,因此在這種情況下,邏輯從判定菱形框37移動(dòng)到框38。在框38,對(duì)于每一個(gè)將被操作的數(shù)據(jù)元,確定數(shù)據(jù)元將經(jīng)歷的每一個(gè)操作可能需要的附加精度位數(shù)。例如,將兩個(gè)數(shù)據(jù)元加在一起可以導(dǎo)致輸出數(shù)據(jù)元比輸入信元大一個(gè)比特。
從框38,邏輯轉(zhuǎn)到判定菱形框38.1,在此確定在框38中分配的精度是否滿足最大負(fù)數(shù)規(guī)則?!白畲筘?fù)數(shù)”的意思是具有最大絕對(duì)值的負(fù)數(shù)。具體地,在判定菱形框38.1,確定可以由數(shù)據(jù)元代表的最大負(fù)數(shù)是否比可以相應(yīng)精度表示的最大負(fù)數(shù),例如以N位二進(jìn)制補(bǔ)碼表示的-2N-1大一。若否,則在框38.2中為數(shù)據(jù)元分配一個(gè)附加精度位。所得輸出精度在框38.3中以編譯器指令、變量類型或配置文件的形式規(guī)定。
應(yīng)該注意,這里,當(dāng)輸出精度由編譯器確定時(shí),與由程序員確定輸出精度相比,系統(tǒng)更能耐受對(duì)程序員的錯(cuò)誤。但是,當(dāng)輸出精度由程序員確定時(shí),則編譯器11具有兩種選擇。首先,編譯器可以產(chǎn)生指令以執(zhí)行精度的運(yùn)行期檢查以保證不發(fā)生下溢(可能包括最大值負(fù)數(shù)的發(fā)生)和上溢,假如發(fā)生的話則提供環(huán)繞式運(yùn)算和飽和式運(yùn)算(wrapand saturation)?;蛘?,編譯器11可以假定程序設(shè)計(jì)者已經(jīng)正確的提供了足夠的精度,其優(yōu)點(diǎn)是比運(yùn)行期檢查消耗更少的執(zhí)行周期,但是其缺點(diǎn)是潛在地允許下溢和上溢,這可能會(huì)破壞整個(gè)寄存器的內(nèi)容。因此,按照預(yù)想,程序員可以使用較慢但更穩(wěn)定的方法使編譯器產(chǎn)生指令去執(zhí)行運(yùn)行期檢查以校驗(yàn)執(zhí)行情況,然后在執(zhí)行校驗(yàn)之后的編譯期間禁止運(yùn)行期檢查以加速執(zhí)行。
無論如何,來自框38.3的輸出精度或者來自框38.4的輸入精度被發(fā)送到編譯器11,圖5C中的剩余部分代表編譯器11邏輯。在框39,編譯器11讀取上面提到的文件。在框39通過分析高級(jí)代碼或通過讀取編譯器指令識(shí)別任何并行化指令。繼續(xù)到判定菱形框40,編譯器11確定它是否要確定輸出精度(例如,通過對(duì)操作計(jì)數(shù))。編譯器通過訪問一個(gè)編譯器指令、一個(gè)標(biāo)記、或一個(gè)配置文件作出該決定。假如該測(cè)試的結(jié)果是肯定的,將被并行操作的數(shù)據(jù)元的輸入精度在框41.1讀出,然后由編譯器11在框41.2基本上重復(fù)上面結(jié)合框38.1、38.2、38.3討論的邏輯,以生成輸出精度。相反,當(dāng)編譯器11不確定數(shù)據(jù)元的輸出精度時(shí),這意味著來自框38.3的精度在框41.3中讀出。
繼續(xù)到框42,將被并行處理的變量被分組。下一步,在框43,編譯器11在寄存器中分配足夠的空間用于數(shù)據(jù)元的最優(yōu)打包,即確定如何用將與其它數(shù)據(jù)元一起同時(shí)保存在一個(gè)寄存器中的可用數(shù)據(jù)元最有效地填充可用寄存器,從而使未使用寄存器容量最小。例如,對(duì)于將經(jīng)歷最多六個(gè)加法操作的8比特原始數(shù)據(jù)元的緊密打包,分配給該數(shù)據(jù)元的精度將是(8+6)=14。在框44.1,訪問所產(chǎn)生的執(zhí)行下述“并行化”方法的指令,程序的不可并行化部分在框44.2被編譯/翻譯。得到的低級(jí)代碼在框44.3輸出用于如下所述在一個(gè)處理器上運(yùn)行以并行處理數(shù)據(jù)元。
圖5B示出了由編譯器執(zhí)行的和以編譯器11輸出的低級(jí)代碼實(shí)現(xiàn)的程序初始化邏輯。在判定菱形框45.1,編譯器確定是否要進(jìn)行相等性比較。若有,編譯器產(chǎn)生代碼以在框45.2中對(duì)齊在數(shù)據(jù)元(elementalignments)上打包相等性比較項(xiàng),即,將要相互比較的項(xiàng)打包到相應(yīng)的寄存器中,或者在相同的寄存器位置的常量或者變量中。圖5A中的流程還描述了在判定菱形框45.3,編譯器確定是否要進(jìn)行范圍的比較,若是,則編譯器確定每一個(gè)這種比較的下界,或者編譯器產(chǎn)生用于在框45.4確定每一個(gè)這種比較的下界的代碼。然后,在框45.4,編譯器45.4產(chǎn)生用于在對(duì)齊數(shù)據(jù)元(element alignments)上打包下界項(xiàng)(lower boundary terms)的代碼。邏輯從框45.5移到框45.6,在此編譯器產(chǎn)生打包比較范圍的代碼。
邏輯從框45.6,或者當(dāng)判斷結(jié)果為否時(shí)從判定菱形框45.1轉(zhuǎn)到判定菱形框45.65,這里確定是否需要知道數(shù)據(jù)元的符號(hào)位置。如果需要,編譯器在框45.5產(chǎn)生一個(gè)掩碼,用于如下所述屏蔽符號(hào)位位置。邏輯從框45.7,或者當(dāng)判斷結(jié)果為否時(shí)從判定菱形框45.65轉(zhuǎn)到判定菱形框45.8,這里確定是否要執(zhí)行邏輯右移操作。如果是,編譯器在框45.9產(chǎn)生一個(gè)掩碼,用于如下所述清除移位比特位置。
圖6示出了由編譯器11的輸出代碼執(zhí)行的寄存器設(shè)置邏輯。具體地,應(yīng)該理解,剩余的圖的邏輯由編譯器11產(chǎn)生的代碼執(zhí)行。從框46開始,對(duì)于一個(gè)具有“m”個(gè)值的寄存器,將第m個(gè)值左移(同樣按照?qǐng)D3中描述的方向)一個(gè)其右邊的值的寬度,例如1,……,(m-1)個(gè)值的寬度。在框48,包括在框46中移位的值的數(shù)據(jù)元被加到指定的寄存器???0表示框46和48的處理被循環(huán),直到將要打包到寄存器中的所有數(shù)據(jù)被加到該寄存器中。邏輯在位置55結(jié)束。應(yīng)該理解原始數(shù)據(jù)元可以被分成在不同的寄存器中作為其自身中的和自身的數(shù)據(jù)元處理的子數(shù)據(jù)元,然后在處理之后進(jìn)行合并。例如,假如兩個(gè)完整的數(shù)據(jù)元加上特定處理可能需要的兩組額外精度不能放入一個(gè)寄存器中,則一個(gè)完整的數(shù)據(jù)元加上一個(gè)部分?jǐn)?shù)據(jù)元連同兩組額外精度可以通過一個(gè)寄存器處理,同時(shí)剩余的子數(shù)據(jù)元可以通過目標(biāo)處理器的另一個(gè)寄存器處理。當(dāng)所有的數(shù)據(jù)元已知為正,并且已經(jīng)被打包,不具有保護(hù)位時(shí),該打包處理(packing process)可以是更簡單,可以由每隔一個(gè)選擇一個(gè)數(shù)據(jù)元的移位屏遮蔽操作組成,將結(jié)果留在兩個(gè)寄存器中,保護(hù)位等于數(shù)據(jù)元的輸入精度。
當(dāng)依照本發(fā)明要處理的所有數(shù)據(jù)元都滿足上述條件時(shí),沒有發(fā)生預(yù)先借位的左進(jìn)位傳送(依照?qǐng)D3中示出的舉例寄存器24)可能從不發(fā)生。這是所希望的,因?yàn)椴蝗坏脑挍]有預(yù)先借位的左進(jìn)位傳送會(huì)指出數(shù)據(jù)元上溢到鄰近數(shù)據(jù)元中。此外,滿足最大負(fù)數(shù)測(cè)試保證了借位僅僅遵從下溢情況下的借位。因?yàn)樗峁┚o鄰受影響的數(shù)據(jù)元右側(cè)的數(shù)據(jù)元變號(hào)所需的借位。于是在任何一個(gè)處理周期中,寄存器中的每一個(gè)數(shù)據(jù)元至多有一個(gè)借位,而且該借位由相鄰(右側(cè))數(shù)據(jù)元的符號(hào)位(符號(hào)位是一個(gè)數(shù)據(jù)元的最高有效位)中出現(xiàn)的“1”位表示。
一旦寄存器設(shè)置處理已經(jīng)完成,則輸入數(shù)據(jù)流可以通過執(zhí)行圖7中示出的邏輯進(jìn)行處理,其中編譯器產(chǎn)生用于圖中所示邏輯的低級(jí)代碼。在框56,按照前述的空間分配,數(shù)據(jù)元被打包到處理器12的寄存器中。特別的,在框56中,多個(gè)多比特帶符號(hào)的數(shù)據(jù)元被打包到處理器12的至少一個(gè)寄存器中。然后,在每一個(gè)處理周期中,在每一個(gè)保持多個(gè)數(shù)據(jù)元的寄存器中,通過同樣的操作,即,通過由程序?qū)崿F(xiàn)的操作,同時(shí)處理所述數(shù)據(jù)元。一個(gè)周期的操作包括兩個(gè)寄存器的相加/相減,立即值的相加/相減,邏輯左移,單個(gè)值或已知精度的變量的正或負(fù)乘法(positive or negative multiplication),等同運(yùn)算,帶符號(hào)位的“與”操作,符號(hào)位的“或”操作。同樣,寄存器中最高位(最左)比特上的數(shù)據(jù)元的算術(shù)比較可以針對(duì)單個(gè)周期內(nèi)的預(yù)定量執(zhí)行,假如該最高位比特在比較后可以被舍棄,寄存器中低位數(shù)據(jù)元(lower-order elements)的這種比較需要一個(gè)額外的周期以復(fù)制該數(shù)據(jù)元并將其移位到另一個(gè)寄存器或同一寄存器中的最高位(highest-order bit)。算術(shù)右移,邏輯右移、某些比較和非操作都要求額外的周期,但是對(duì)于所有的數(shù)據(jù)元都可以在多個(gè)周期中完成。對(duì)于獨(dú)立寄存器中將被彼此比較、彼此相加或彼此相減的數(shù)據(jù)元,相應(yīng)數(shù)據(jù)元必須對(duì)齊,即,第一寄存器中將與第二寄存器的第二數(shù)據(jù)元比較、相加或相減的第一數(shù)據(jù)元在第一寄存器中占據(jù)的位置必須與第二數(shù)據(jù)元在第二寄存器中的位置相同。
在同時(shí)操作之后,邏輯轉(zhuǎn)移到判定菱形框59,其中判斷數(shù)據(jù)元是否要拆分。特別的,單個(gè)寄存器中將被同時(shí)操作的數(shù)據(jù)元按照上述的編譯器指令的定義或在一并行執(zhí)行模塊結(jié)束后可能需要是彼此獨(dú)立的。在編譯器產(chǎn)生的代碼中,在該代碼執(zhí)行同時(shí)操作之后,假如數(shù)據(jù)元需要被拆分,則編譯器必須插入低級(jí)代碼以執(zhí)行該拆分。該邏輯反映在判定菱形框59中,其表示在生成同時(shí)在單個(gè)寄存器中對(duì)打包的獨(dú)立數(shù)據(jù)元進(jìn)行操作的指令之后,生成指令以依照下面討論的圖8或圖9的邏輯分離數(shù)據(jù)元。通常,對(duì)于獨(dú)立的數(shù)據(jù)元,邏輯移到框62,其中在一個(gè)寄存器中的被處理的數(shù)據(jù)元被拆分并發(fā)送到獨(dú)立的寄存器或存儲(chǔ)器。在框64,作為一個(gè)大的數(shù)據(jù)元的子數(shù)據(jù)元的數(shù)據(jù)元被彼此合并。從框64,或在寄存器中的打包數(shù)據(jù)元不需要彼此獨(dú)立的情況下從判定菱形框59,數(shù)據(jù)元被發(fā)送用于存儲(chǔ)、輸出、或在框66中進(jìn)一步處理。
圖8-12描述了在編譯器11的輸出中實(shí)現(xiàn)的本分明的各種優(yōu)選的細(xì)節(jié)。參看圖8,示出了使一個(gè)寄存器中的數(shù)據(jù)元彼此獨(dú)立的第一邏輯流。從框68開始,在圖7的框58操作數(shù)據(jù)元之后,最右數(shù)據(jù)元(同樣以圖3中所示的寄存器24為例)的符號(hào)位被加到左邊緊鄰的數(shù)據(jù)元的最低有效位。框70表示當(dāng)超過兩個(gè)數(shù)據(jù)元被包含在一個(gè)寄存器中時(shí),遞歸執(zhí)行框68的步驟,有效的消除數(shù)據(jù)元之間的所有借位。
或者,圖9的邏輯可以被調(diào)用以使數(shù)據(jù)元獨(dú)立。從圖9的框72開始,當(dāng)一個(gè)寄存器中的數(shù)據(jù)元必須在處理之后完全獨(dú)立,且緊隨一個(gè)數(shù)據(jù)元的符號(hào)位的比特與符號(hào)位相同(意味著符號(hào)位可以被舍棄)時(shí),將一個(gè)選擇寄存器中所有符號(hào)位的掩碼應(yīng)用到該寄存器的一個(gè)拷貝上,并在框74加回寄存器中。這清除了所有的符號(hào)位,直到一個(gè)進(jìn)位或借位,數(shù)據(jù)元的被清除的符號(hào)位位置的數(shù)據(jù)元從它的右相鄰位獲取進(jìn)位或借位。“屏蔽符號(hào)位”的意思是使用在符號(hào)位位置上為“1”、在別處為“0”的模板(pattern)對(duì)寄存器執(zhí)行按位“與”操作。最左數(shù)據(jù)元的符號(hào)位的屏蔽和舍棄可以進(jìn)行也可以不進(jìn)行,因?yàn)樽钭髷?shù)據(jù)元在它的左邊沒有其他的數(shù)據(jù)元與其相互作用。
然后,在框76,在傳遞數(shù)據(jù)元之前,每一個(gè)數(shù)據(jù)元的最左(或前符號(hào)位)位置上的值被舍棄或忽略。盡管上述的操作導(dǎo)致每一數(shù)據(jù)元精度的減少,與圖8所示的遞歸方法相比,能在更少的周期中使數(shù)據(jù)元彼此獨(dú)立,而且符號(hào)位位置上被破壞的數(shù)據(jù)被舍棄。該舍棄可以這樣進(jìn)行作為寄存器中為比較而進(jìn)行的左側(cè)調(diào)整的一部分,進(jìn)行一個(gè)額外的左移,或者用掩碼選擇性地剔除每一個(gè)被破壞的位。
現(xiàn)在參看圖10,其中示出了用于確定一個(gè)數(shù)據(jù)元是否被包含在零點(diǎn)附近(例如量化到零的JPEG)、以編譯器產(chǎn)生的低級(jí)代碼實(shí)現(xiàn)的邏輯。在框80,范圍的打包下界(packed lower boundaries of therange)在一個(gè)周期內(nèi)從寄存器中減去。移到判定菱形框82,其中確定被檢測(cè)(例如進(jìn)行比較)的數(shù)據(jù)元的符號(hào)位是否可以依照前述討論的原則舍棄。若是,在框84,加上上述的符號(hào)位掩碼以屏蔽符號(hào)位。然后,在框88,被檢測(cè)數(shù)據(jù)元與單個(gè)邏輯測(cè)試中的相應(yīng)范圍進(jìn)行比較。因?yàn)橐呀?jīng)為數(shù)據(jù)元提供了一個(gè)額外的未使用精度位,符號(hào)位在每一個(gè)數(shù)據(jù)元的左起第二位置上仍然存在。在框88,來自框84的處理被循環(huán),直到所有的數(shù)據(jù)元都已被比較。
相反,當(dāng)判定菱形框82的判斷為否時(shí),在框86,符號(hào)位被加入到鄰近數(shù)據(jù)元。然后,在框88,被測(cè)試數(shù)據(jù)元與單個(gè)邏輯測(cè)試中的上界比較,框86和88的處理被循環(huán),直到所有的數(shù)據(jù)都已被比較。
與圖10的討論相關(guān),在框88的比較之后,數(shù)據(jù)元應(yīng)被屏蔽為零,或者一次左移一位,這樣,對(duì)于寄存器中最左側(cè)非屏蔽數(shù)據(jù)元,總是針對(duì)邊界進(jìn)行比較。
圖11示出了用于算術(shù)右移的由編譯器產(chǎn)生的低級(jí)代碼實(shí)現(xiàn)的邏輯。從框92開始,每一個(gè)數(shù)據(jù)元的符號(hào)位被保存在一個(gè)獨(dú)立的寄存器中。移到框94,如上述圖8和圖9討論的那樣使數(shù)據(jù)元獨(dú)立,然后在框96,算術(shù)右移一個(gè)位置。下一步,在框97,一個(gè)寄存器中的數(shù)據(jù)元的符號(hào)位位置在一個(gè)周期中被清除。在框98,每一個(gè)數(shù)據(jù)元的符號(hào)位被“或”回到寄存器,如框99所示重復(fù)框96和98中的步驟,直到移位完成。假如在框99中確定要執(zhí)行更多的操作,打包格式可以通過從右到左一次減去一個(gè)新符號(hào)位而恢復(fù),使它們?cè)诩拇嫫髦行胁ㄊ叫羞M(jìn)(ripple)。如圖11所示,這是這樣完成的在框99.2中將符號(hào)位自加,然后在框99.3將符號(hào)位“或”回到數(shù)據(jù)元中。
圖12示出了如何使用一個(gè)附加精度位去進(jìn)行算術(shù)比較。從框100開始,本分明定義了一個(gè)作為正確值的4位數(shù)據(jù)元xxxx0值,xxxx1值表示右側(cè)相鄰值的符號(hào)位已經(jīng)從該值借用。然后在框102,該值與所述附加精度位比較。
雖然在此圖示的和詳細(xì)描述的特定系統(tǒng)、方法和編譯器技術(shù)完全能夠?qū)崿F(xiàn)本發(fā)明上面描述的目的,應(yīng)該理解,這是本發(fā)明目前最優(yōu)的實(shí)施例,因而代表了本發(fā)明的預(yù)期比較寬的主題,本發(fā)明的范圍完全包括對(duì)于本領(lǐng)域的技術(shù)人員來說很明顯的其他的實(shí)施例,而且本分明的范圍僅由所附的權(quán)利要求
加以限制。權(quán)利要求
中,單數(shù)的元素意指“至少一個(gè)”。對(duì)于本領(lǐng)域普通技術(shù)人員來說,上述最佳實(shí)施例中描述的數(shù)據(jù)元的已知或?qū)淼乃薪Y(jié)構(gòu)和功能上的等同物明確地包含于此并為權(quán)利要求
所包括。此外,對(duì)于某一個(gè)裝置和某個(gè)方法,不需要針對(duì)本分明試圖解決的每個(gè)問題,因?yàn)檫@將通過本分明的權(quán)利要求
包括。此外,不管數(shù)據(jù)元、組成部分或方法步驟是否在權(quán)利要求
中明確記述,本分明的公開中的數(shù)據(jù)元、組成部分或者方法步驟都不是用來貢獻(xiàn)于公眾。任何權(quán)利要求
中的元素都不應(yīng)依據(jù)U.S.C.§112第六段進(jìn)行解釋,除非該元素明確地用“用于...的裝置”這樣的用語記述。
權(quán)利要求
1.一種處理多個(gè)帶符號(hào)多比特?cái)?shù)據(jù)元的裝置,包括寄存器,處理器,連接到所述寄存器上,和程序,可訪問地存儲(chǔ)在所述處理器中,當(dāng)在所述處理器上執(zhí)行時(shí),該程序與所述處理器合作以在所述寄存器中同時(shí)處理多個(gè)帶符號(hào)多比特?cái)?shù)據(jù)元,該同時(shí)處理包括在所述寄存器中打包至少第一和第二帶符號(hào)多比特?cái)?shù)據(jù)元;和應(yīng)用所述處理器使用同樣的操作同時(shí)處理該至少第一和第二帶符號(hào)多比特?cái)?shù)據(jù)元。2.按照權(quán)利要求
1的裝置,其中所述至少第一和第二帶符號(hào)多比特?cái)?shù)據(jù)元是彼此獨(dú)立的。
3.按照權(quán)利要求
1或2所述的裝置,其中當(dāng)在處理器上執(zhí)行時(shí),所述程序和所述處理器合作以將多個(gè)數(shù)據(jù)元同時(shí)從所述寄存器發(fā)送到至少一個(gè)計(jì)算子系統(tǒng)。
4.按照權(quán)利要求
1或2所述的裝置,其中當(dāng)在處理器上執(zhí)行時(shí),所述程序和所述處理器合作以通過從下述操作中選出的一個(gè)操作來處理數(shù)據(jù)元(a)乘以一個(gè)常量或乘以一個(gè)已知精度的變量,或者(b)加法,或者(c)邏輯左移,(d)減法,或(e)按位與,或(f)按位或。
5.按照權(quán)利要求
1或2所述的裝置,其中第一數(shù)據(jù)元包括第一部分?jǐn)?shù)據(jù)元和相關(guān)的第二部分?jǐn)?shù)據(jù)元,第二部分?jǐn)?shù)據(jù)元被建立在第二寄存器中,其中,當(dāng)在處理器上執(zhí)行時(shí),所述程序和所述處理器合作以在處理之后合并第一和第二部分?jǐn)?shù)據(jù)元。
6.按照權(quán)利要求
1或2所述的裝置,包括多個(gè)寄存器,其中,當(dāng)在處理器上執(zhí)行時(shí),所述程序與處理器合作,在所述寄存器中的單個(gè)寄存器中同時(shí)處理多個(gè)多比特?cái)?shù)據(jù)元。
7.按照權(quán)利要求
6的裝置,其中當(dāng)在處理器上執(zhí)行時(shí),所述程序與處理器合作,在多個(gè)所述寄存器中的一系列的每一個(gè)中同時(shí)處理多個(gè)多比特?cái)?shù)據(jù)元。
8.按照權(quán)利要求
1或2所述的裝置,當(dāng)在處理器上執(zhí)行時(shí),所述程序和所述處理器合作,對(duì)要在單個(gè)周期內(nèi)在寄存器中被處理的數(shù)據(jù)元在寄存器中分配相應(yīng)的精度,使得可由一個(gè)數(shù)據(jù)元代表的最大負(fù)數(shù)比可以以所述相應(yīng)的精度表示的最大負(fù)數(shù)大一。
9.按照權(quán)利要求
8的裝置,其中當(dāng)在處理器上執(zhí)行時(shí),所述程序和所述處理器合作,基于[-2N-1+1]到[2N+1-1]確定用于數(shù)據(jù)元的精度邊界,其中N是所述數(shù)據(jù)元中的比特?cái)?shù)。
10.按照權(quán)利要求
1或2所述的裝置,其中當(dāng)在處理器上執(zhí)行時(shí),所述程序和所述處理器合作,將多個(gè)數(shù)據(jù)元打包到至少一個(gè)單個(gè)寄存器中;對(duì)該單個(gè)寄存器中的所有數(shù)據(jù)元同時(shí)操作;在該操作動(dòng)作之后,傳遞該數(shù)據(jù)元以進(jìn)一步處理、存儲(chǔ)或輸出。
11.按照權(quán)利要求
10的裝置,其中當(dāng)在處理器上執(zhí)行時(shí),所述程序和所述處理器合作,對(duì)于一個(gè)單個(gè)寄存器中要彼此獨(dú)立的至少第一和第二數(shù)據(jù)元,將第一數(shù)據(jù)元中的符號(hào)位加到第二數(shù)據(jù)元中的最低有效位上。
12.按照權(quán)利要求
10的裝置,其中當(dāng)在處理器上執(zhí)行時(shí),所述程序和所述處理器合作,將至少一個(gè)相對(duì)較大的數(shù)據(jù)元拆分成兩個(gè)或更多的子數(shù)據(jù)元,將所述子數(shù)據(jù)元打包到獨(dú)立的相應(yīng)寄存器中;在處理之后重新合并所述子數(shù)據(jù)元。
13.按照權(quán)利要求
1或2所述的裝置,其中當(dāng)在處理器上執(zhí)行時(shí),所述程序和所述處理器合作,在單個(gè)處理周期中在單個(gè)寄存器中對(duì)至少兩個(gè)數(shù)據(jù)元進(jìn)行至少一個(gè)等同確認(rèn)。
14.一種編譯多個(gè)帶符號(hào)多比特?cái)?shù)據(jù)元的裝置,包括處理器;編譯器,與所述處理器合作,接收高級(jí)代碼、輸出低級(jí)代碼以使所述處理器能夠在單個(gè)寄存器中同時(shí)處理多個(gè)多比特?cái)?shù)據(jù)元,所述低級(jí)代碼邏輯包括在所述寄存器中打包至少第一和第二帶符號(hào)多比特?cái)?shù)據(jù)元;和應(yīng)用所述處理器使用同樣的操作同時(shí)處理該至少第一和第二帶符號(hào)多比特?cái)?shù)據(jù)元。
15.按照權(quán)利要求
14的裝置,其中所述編譯器訪問至少下述之一編譯器指令、標(biāo)記或配置文件,以決定什么時(shí)候使數(shù)據(jù)元彼此獨(dú)立。
16.按照權(quán)利要求
14或15所述的裝置,其中第一數(shù)據(jù)元從第一數(shù)據(jù)組提供,而第二數(shù)據(jù)元從不同于第一數(shù)據(jù)組的第二數(shù)據(jù)組提供。
17.按照權(quán)利要求
14或15所述的裝置,其中,對(duì)要在單個(gè)周期內(nèi)在寄存器中要處理的每個(gè)數(shù)據(jù)元,編譯器在寄存器中分配相應(yīng)的輸出精度。
18.按照權(quán)利要求
17的裝置,其中編譯器至少部分基于輸入精度確定輸出精度。
19.按照權(quán)利要求
17的裝置,其中編譯器接收輸出精度作為輸入。
20.按照權(quán)利要求
18的裝置,其中編譯器至少部分基于對(duì)數(shù)據(jù)元的操作增加至少一個(gè)精度位。
21.按照權(quán)利要求
14或15所述的裝置,其中輸出精度或輸入精度借助于編譯器指令、配置文件或變量定義來定義。
22.按照權(quán)利要求
14的裝置,其中編譯器產(chǎn)生指令,把來自相應(yīng)數(shù)據(jù)源的多個(gè)數(shù)據(jù)元打包到一個(gè)公共寄存器中,以由一個(gè)算法對(duì)其同時(shí)操作。
23.一種在數(shù)據(jù)處理裝置中控制多個(gè)帶符號(hào)多比特?cái)?shù)據(jù)元的裝置,該裝置包括控制把至少把第一和第二帶符號(hào)多比特?cái)?shù)據(jù)元打包到單個(gè)寄存器中的模塊;控制所述數(shù)據(jù)處理裝置使用同樣的操作同時(shí)處理所述至少第一和第二帶符號(hào)多比特?cái)?shù)據(jù)元的模塊。
24.按照權(quán)利要求
23的裝置,所述裝置進(jìn)一步控制為要在單個(gè)周期內(nèi)在寄存器中被處理的每一個(gè)數(shù)據(jù)元,在寄存器中分配相應(yīng)的精度,使得可由一個(gè)數(shù)據(jù)元代表的最大負(fù)數(shù)比可以以相應(yīng)的精度上表示的最大負(fù)數(shù)大一的模塊。
25.按照權(quán)利要求
23或24所述的裝置,進(jìn)一步包括按照凈精度位數(shù)把多個(gè)數(shù)據(jù)元打包到至少一個(gè)單個(gè)寄存器中的模塊;同時(shí),所述控制所述數(shù)據(jù)處理裝置使用同樣的操作同時(shí)處理所述至少第一和第二帶符號(hào)多比特?cái)?shù)據(jù)元的模塊控制對(duì)該單個(gè)寄存器中所有數(shù)據(jù)元的同時(shí)操作;在該操作動(dòng)作之后,傳遞所述數(shù)據(jù)元以進(jìn)一步處理、存儲(chǔ)或輸出。
26.按照權(quán)利要求
23或24所述的裝置,進(jìn)一步包括將至少一個(gè)較大的數(shù)據(jù)元拆分成兩個(gè)或更多的子數(shù)據(jù)元,將這些子數(shù)據(jù)元打包到相應(yīng)的獨(dú)立寄存器中的模塊;和在處理之后重新合并所述子數(shù)據(jù)元的模塊。
27.按照權(quán)利要求
23或24所述的裝置,進(jìn)一步包括在單個(gè)處理周期中對(duì)單個(gè)寄存器中的至少兩個(gè)數(shù)據(jù)元進(jìn)行至少一個(gè)等同確認(rèn)操作的模塊。
28.一種在數(shù)據(jù)處理裝置中編譯多個(gè)帶符號(hào)多比特?cái)?shù)據(jù)元的編譯器,該編譯器包括把至少把第一和第二帶符號(hào)多比特?cái)?shù)據(jù)元打包到單個(gè)寄存器中的模塊;使所述數(shù)據(jù)處理裝置使用同樣的操作同時(shí)處理所述至少第一和第二帶符號(hào)多比特?cái)?shù)據(jù)元的模塊。29.按照權(quán)利要求
28的編譯器,進(jìn)一步包括指示是否應(yīng)在至少一個(gè)周期中檢驗(yàn)精度的標(biāo)記。
30.按照權(quán)利要求
28的編譯器,進(jìn)一步包括定義輸入精度的編譯器指令。
31.按照權(quán)利要求
28的編譯器,進(jìn)一步包括定義要打包到公共寄存器中并由一個(gè)算法同時(shí)操作的各數(shù)據(jù)元的多個(gè)數(shù)據(jù)源的編譯器指令。
32.按照權(quán)利要求
28的編譯器,進(jìn)一步包括指示是否應(yīng)檢驗(yàn)精度裝置;響應(yīng)所述指示裝置,用于檢查所述打包數(shù)據(jù)元上溢、下溢或達(dá)到可以所述精度表示的最大負(fù)數(shù)的裝置;當(dāng)打包數(shù)據(jù)元在一個(gè)周期內(nèi)上溢、下溢或達(dá)到可以所述精度表示的最大值負(fù)數(shù)時(shí),在所述數(shù)據(jù)元中進(jìn)行環(huán)繞式或飽和式運(yùn)算以防止寄存器中其他數(shù)據(jù)元的破壞,或發(fā)出由程序中的錯(cuò)誤處理例程處理的出錯(cuò)信號(hào)的裝置。
33.一種處理多個(gè)帶符號(hào)多比特?cái)?shù)據(jù)元的裝置,包括處理器;連接到所述處理器的至少第一和第二寄存器;其特征在于,在所述第一寄存器中打包的第一和第二帶符號(hào)多比特?cái)?shù)據(jù)元,所述處理器使用同樣的操作同時(shí)處理所述至少第一和第二帶符號(hào)多比特?cái)?shù)據(jù)元。34.按照權(quán)利要求
33的裝置,還包括所述第二寄存器中的第三數(shù)據(jù)元,該第一和第三數(shù)據(jù)元是第四數(shù)據(jù)元的子數(shù)據(jù)元。
35.按照權(quán)利要求
33或34所述的裝置,其中所述第一和第二數(shù)據(jù)元是彼此獨(dú)立的。
36.按照權(quán)利要求
33或34所述的裝置,其中所述第一數(shù)據(jù)元具有第一大小,所述第二數(shù)據(jù)元具有不同于第一大小的第二大小。
37.按照權(quán)利要求
33或34所述的裝置,其中所述第一數(shù)據(jù)元來自一個(gè)第一圖象數(shù)據(jù)流,而第二數(shù)據(jù)元來自一個(gè)第二圖像數(shù)據(jù)流。
38.按照權(quán)利要求
33或34所述的裝置,其中所述第一和第二數(shù)據(jù)元來自于同一圖像數(shù)據(jù)流的不同部分。
39.一種在數(shù)據(jù)處理裝置中處理多個(gè)帶符號(hào)多比特?cái)?shù)據(jù)元的方法,包括下列步驟確定要在單個(gè)寄存器中被分配以分別保存第一和第二帶符號(hào)多比特?cái)?shù)據(jù)元的第一和第二精度;將所述第一和第二帶符號(hào)多比特?cái)?shù)據(jù)元打包到所述寄存器中;使所述數(shù)據(jù)處理裝置使用同樣的操作同時(shí)處理所述至少第一和第二帶符號(hào)多比特?cái)?shù)據(jù)元;確定要在單個(gè)寄存器中被分配以分別保存第三和第四帶符號(hào)多比特?cái)?shù)據(jù)元的第三和第四精度,至少下列之一第一和第二精度彼此不同,第二和第四精度彼此不同;把第三和第四數(shù)據(jù)元打包到所述寄存器中;和使所述數(shù)據(jù)處理裝置使用同樣的操作同時(shí)處理所述第三和第四帶符號(hào)多比特?cái)?shù)據(jù)元。40.按照權(quán)利要求
39的方法,其中寄存器同時(shí)發(fā)送多個(gè)數(shù)據(jù)元到至少一個(gè)計(jì)算子系統(tǒng)。
41.按照權(quán)利要求
39或40所述的方法,其中所述操作是乘以一個(gè)常數(shù)或一個(gè)已知精度的變量,或加法,或邏輯左移,或減法,或按位“與”,或按位“或”。
42.按照權(quán)利要求
39或40所述的方法,其中第一數(shù)據(jù)元從第一數(shù)據(jù)組提供,而第二數(shù)據(jù)元從不同于第一數(shù)據(jù)組的第二數(shù)據(jù)組提供。
43.按照權(quán)利要求
39或40所述的方法,其中第一數(shù)據(jù)元從第一數(shù)據(jù)組提供,第二數(shù)據(jù)元也從第一數(shù)據(jù)組提供。
專利摘要
一種用于數(shù)據(jù)處理的系統(tǒng),包括使用這里闡述的規(guī)則(44),把每一寄存器的多個(gè)帶符號(hào)數(shù)據(jù)元打包到一個(gè)處理器的寄存器中,而且使用相同的操作數(shù)(36)在單個(gè)周期內(nèi)對(duì)寄存器中的數(shù)據(jù)元同時(shí)操作。所述數(shù)據(jù)元可以按照編譯器指令的定義彼此獨(dú)立,一個(gè)寄存器中的數(shù)據(jù)元的大小可以彼此不同。一個(gè)較大的數(shù)據(jù)元可被拆分到多個(gè)寄存器??捎锰幚韱蝹€(gè)圖像所需的寄存器數(shù)同時(shí)處理代表兩個(gè)圖像的數(shù)據(jù)流。單個(gè)圖像還可以以接近N倍快的速度被處理,其中N是每一寄存器中數(shù)據(jù)元的數(shù)量。
文檔編號(hào)G06F9/30GKCN1257462SQ01819585
公開日2006年5月24日 申請(qǐng)日期2001年9月26日
發(fā)明者邁克爾·T.·布拉迪, 瓊·L.·米切爾, 詹妮弗·Q.·特萊勒維茨 申請(qǐng)人:國際商業(yè)機(jī)器公司導(dǎo)出引文BiBTeX, EndNote, RefMan