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