專利名稱:支持simd指令的可編程數(shù)據(jù)處理電路的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及具有包含SIMD(單指令多數(shù)據(jù))指令的指令集的可編程數(shù)據(jù)處理電路。本發(fā)明還涉及完成圖像數(shù)據(jù)內(nèi)插的方法。
背景技術(shù):
在James Abel,Kumar Balasubramanian,Mike Bargeron,TomCraver和Mike Philpot發(fā)表在Intel Technology Journal Q2,1999上的″Applications Tuning for Streaming SIMD Extensions″中說明了Intel Pentium(R)III處理器的指令集中對SIMD指令的使用,該篇文章可以從www.intel.com/technology/itj/q21999/articles/art_5.htm獲得。這篇文章將被引用為Abel等人。響應(yīng)SIMD指令,處理器將操作數(shù)和結(jié)果寄存器的內(nèi)容看作一系列的多個數(shù)(例如32位寄存器中的四個8位數(shù))。處理器并行地多次執(zhí)行SIMD指令所規(guī)定的操作,每次使用來自相應(yīng)輸入寄存器的不同的一對數(shù)作為操作數(shù)。處理器將包含由這些并行執(zhí)行的操作產(chǎn)生的相應(yīng)數(shù)的組合結(jié)果寫入指令規(guī)定的結(jié)果寄存器。
處理器指令集中這種類型的SIMD指令的存在減少了完成必須對大量數(shù)據(jù)應(yīng)用相同的函數(shù)的任務(wù)(例如圖像處理任務(wù),諸如計算機(jī)圖形處理、圖像壓縮或解壓縮)所必須執(zhí)行的指令的總數(shù)量。指令總數(shù)的減少提高了完成這種任務(wù)的速度并且降低了這種任務(wù)的執(zhí)行中所占用的功耗。
當(dāng)用SIMD指令執(zhí)行任務(wù)時,對齊可能會引發(fā)問題。對齊問題是能夠從存儲器將操作數(shù)數(shù)據(jù)裝入用于向SIMD指令提供操作數(shù)的寄存器的方式的結(jié)果。通常操作數(shù)數(shù)據(jù)只能從基本地址間距的某個整數(shù)倍的地址開始裝入。大多數(shù)情況下這不是問題,因為必須要處理的數(shù)據(jù)(例如連續(xù)像素的數(shù)據(jù))是從對齊的地址開始連續(xù)地存儲,因此所有數(shù)據(jù)都可以用連續(xù)的裝入指令裝入。Abel等人提到高速緩沖存儲器行分割環(huán)境中的對齊問題。對于特殊情況,Abel等人說明了支持從未對齊的地址裝入的″moveups″指令的使用。另外,Abel等人說明了″shuffling″指令,它可以用來重新整理來自寄存器的數(shù)。使用這種類型的指令的需要增加了必須要執(zhí)行的指令的數(shù)量。
對齊問題的一個例子發(fā)生在圖像數(shù)據(jù)的內(nèi)插期間,圖像數(shù)據(jù)的內(nèi)插涉及對相鄰像素的信息組合。Abel等人說明了一種內(nèi)插方法,其中使用了SIMD指令的并行性將相同像素的不同色彩分量內(nèi)插在一起。在這種情況下,連續(xù)像素的色彩分量集被連續(xù)存儲在存儲器中。
或者,可以將相鄰相素的一個色彩分量的像素數(shù)據(jù)存儲在連續(xù)相鄰的存儲位置中。優(yōu)選地,可以使用SIMD指令并行地為多個像素位置產(chǎn)生內(nèi)插數(shù)據(jù)。在這種情況下,通常SIMD指令的第一操作數(shù)應(yīng)該包含第一多個相鄰像素的像素數(shù)據(jù),第二操作數(shù)應(yīng)該包含第二多個相鄰像素的像素數(shù)據(jù),第二多個像素的像素位置相對于第一多個像素的像素位置有固定偏移量的偏移(通常是一個像素位置)。但是,在這種情況下不得不從非對齊位置裝入至少一個操作數(shù),這增加了所需指令的數(shù)量。
其中,本發(fā)明的一個目標(biāo)是為可編程處理器提供一指令集,該指令集支持使用以相距不是對齊間距整數(shù)倍的地址間距存儲在存儲器中的操作數(shù)來完成SIMD操作所需指令數(shù)量的減少。
其中,本發(fā)明的一個目標(biāo)是為可編程處理器提供一個指令集,該指令集支持使用以可選擇的非對齊地址間距存儲在存儲器中的操作數(shù)來完成SIMD操作所需指令的數(shù)量的減少。
發(fā)明內(nèi)容
本發(fā)明提供了依照權(quán)利要求1的數(shù)據(jù)處理電路。根據(jù)本發(fā)明,該數(shù)據(jù)處理電路的指令集包含一種新型的SIMD指令。響應(yīng)這個SIMD指令,N(例如N=4或N=8)個算術(shù)電路并行完成N個相應(yīng)的相同操作。該SIMD指令從該SIMD指令選擇的第一和第二寄存器定義該SIMD指令的第一系列N個相應(yīng)的SIMD指令操作數(shù)和第二系列N個相應(yīng)的SIMD指令操作數(shù)。在執(zhí)行該SIMD指令時,每個算術(shù)電路被安排分別接收來自第一和第二系列的相應(yīng)的第一操作數(shù)和相應(yīng)的第二操作數(shù)。指令執(zhí)行單元被設(shè)計為使得第一和第二系列可能有部分重疊。也就是說,來自第一和第二寄存器的操作數(shù)中至少一個但又不是所有操作數(shù)由兩個算術(shù)單元使用。通常,第一和第二系列中至少有一個所包含的N個操作數(shù)中有一部分是取自第一寄存器,并且一部分取自第二寄存器。
在一個實施例中,該SIMD指令被應(yīng)用于信號樣本的內(nèi)插或過濾,其中連續(xù)的輸出樣本位置的內(nèi)插值是從輸入樣本位置的相應(yīng)的操作數(shù)對計算出的N個SIMD結(jié)果。在這個實施例中,各個連續(xù)對的一個操作數(shù)與前一對的另一操作數(shù)重疊。
優(yōu)選地,第一和第二寄存器中的第一系列的位置是可編程可選擇的。因而,在內(nèi)插或過濾應(yīng)用中,即使已經(jīng)用對齊的裝入操作裝入操作數(shù)寄存器的內(nèi)容,但仍然可以通過編程將為其計算起始SIMD結(jié)果的起始輸入樣本位置調(diào)節(jié)到各個樣本位置。這在必須為從任意位置(例如從任意定位的窗口開始)開始存儲的一個數(shù)組進(jìn)行過濾或內(nèi)插時尤其有用。第二系列優(yōu)選地相對第一系列有一個預(yù)定的相對位置,例如偏移操作數(shù)寄存器中的一個操作數(shù)位置。
在一個實施例中,對位置的選擇由SIMD指令的操作代碼控制。在另一實施例中,位置由來自SIMD指令選擇的額外寄存器的操作數(shù)控制。這樣只需要最少的不同指令類型。優(yōu)選地,該額外寄存器還對過濾或內(nèi)插供應(yīng)系數(shù),它們被共同提供給所有算術(shù)電路。
在另一實施例中,該數(shù)據(jù)處理電路包含耦合在一組寄存器(通常是寄存器文件)和算術(shù)電路之間的操作數(shù)分配電路。在這個實施例中,由指令數(shù)據(jù)和/或操作數(shù)數(shù)據(jù)控制該操作數(shù)分配電路用于選擇至少第一系列操作數(shù)的位置。
在另一實施例中,該SIMD指令還有從額外的操作數(shù)寄存器的預(yù)定位置提供的更多操作數(shù),該位置與第一和第二操作數(shù)的所選位置無關(guān)。例如,在過濾或內(nèi)插應(yīng)用中,該SIMD指令優(yōu)選地計算N個積和。在這種情況下可以從該額外的操作數(shù)寄存器提供N個先前的和?;蛘呖梢詮乃阈g(shù)電路中包括的累加器寄存器提供這些和,但這限制了使用SIMD指令的靈活性。
采用這種類型的SIMD指令,能夠從多個位置的操作數(shù)值a[]的數(shù)組并行計算象r[i]=s[i]+w1*a[i+offset]+w2*a[i+offset+1]這樣的結(jié)果數(shù)組r[i]。通過使用結(jié)果r作為這種類型的指令的另一次執(zhí)行的輸入值s(其中使用了其它操作數(shù)或偏移),可以用最少數(shù)量的指令在處理電路的程序中實現(xiàn)有更大的支持范圍(影響結(jié)果的位置的范圍)的內(nèi)插或過濾操作。
另外,該指令集優(yōu)選地還可以包含傳統(tǒng)的SIMD指令,響應(yīng)這些傳統(tǒng)的SIMD指令算術(shù)電路并行完成N個相同的操作,每個算術(shù)電路使用相應(yīng)的第一操作數(shù)(來自寄存器中該額外的SIMD指令選擇的第一寄存器)和相應(yīng)的第二操作數(shù)(來自寄存器中該額外的SIMD指令選擇的第二寄存器)。
將使用下面附圖中所示非限制性示例更詳細(xì)地說明本發(fā)明的這些和其它目標(biāo)和有利方面。
圖1示出了一個數(shù)據(jù)處理電路;圖2示出了一個功能單元的一部分;圖3示出了傳統(tǒng)SIMD指令的數(shù)據(jù)流;圖4a-c示出了新型SIMD指令的數(shù)據(jù)流;圖5示出了具有簡化數(shù)據(jù)流的功能單元;圖6示了具有另一操作數(shù)輸入的功能單元;圖7示出了具有公共操作數(shù)的操作數(shù)輸入的功能單元;圖8示出了具有被加數(shù)輸入的功能單元;圖9示出了一個算術(shù)電路。
具體實施例方式
圖1示出了其中能夠?qū)崿F(xiàn)本發(fā)明的數(shù)據(jù)處理電路的示例。該數(shù)據(jù)處理電路包含指令發(fā)出電路10、多個功能單元12a,b、寄存器文件14和數(shù)據(jù)存儲器16。指令發(fā)出電路10具有與功能單元12a,b以及寄存器文件14的地址端口耦合的發(fā)出槽輸出11a、11b。功能單元12a,b具有與寄存器文件耦合的操作數(shù)/結(jié)果通信線路13a,b。第一功能單元12a具有與數(shù)據(jù)存儲器16耦合的地址/數(shù)據(jù)接口15。
在操作中,指令發(fā)出電路10通過發(fā)出槽11a,b發(fā)出指令。每個指令包含一操作代碼(提供給功能單元12a,b)、至少一個操作數(shù)寄存器地址(提供給寄存器文件14)和至少一個結(jié)果寄存器地址(提供給寄存器文件14)。響應(yīng)該(一個或多個)操作數(shù)寄存器地址,寄存器文件14從尋址到的(一個或多個)寄存器讀取操作數(shù)數(shù)據(jù)并將該操作數(shù)數(shù)據(jù)提供給功能單元12a,b,功能單元12a,b執(zhí)行該指令。響應(yīng)操作代碼,功能單元12a,b用該操作數(shù)數(shù)據(jù)作為輸入完成所選擇的操作。功能單元12a,b將該操作的(一個或多個)結(jié)果作為結(jié)果數(shù)據(jù)寫入寄存器文件14,寄存器文件14將該結(jié)果數(shù)據(jù)寫入由(一個或多個)結(jié)果寄存器地址所尋址的(一個或多個)寄存器。
應(yīng)該強調(diào)該圖中的數(shù)據(jù)處理電路的結(jié)構(gòu)只是一個示例,可以使用很多其它結(jié)構(gòu)。盡管已經(jīng)使用了特定結(jié)構(gòu)的處理電路來闡述本發(fā)明,但應(yīng)該理解該處理電路僅是可以用來實現(xiàn)本發(fā)明的處理電路的一個示例,并且在任何情況下都只示出了最少量的細(xì)節(jié)。例如,盡管示出了具有兩個發(fā)出槽11a,b和兩個功能單元12a,b的處理電路,但應(yīng)該理解可以使用更多或更少的發(fā)出槽和/或功能單元。作為另一個例子,盡管為簡單起見沒有提及流水線技術(shù),但應(yīng)該理解通??梢允褂昧魉€技術(shù)以使不同指令的處理的不同部分可以重疊并且可以在不同時間發(fā)出一條指令的不同部分。此外,盡管示出了與分離的發(fā)出槽耦合的分離的功能單元,但應(yīng)該理解這些功能單元的功能可以被合并到單個功能單元中,或者不同的功能單元可以與相同的發(fā)出槽相耦合,以便這些功能單元中的一個或多個在它們接收到適當(dāng)?shù)闹噶顣r開始活動。此外,盡管為簡單起見只示出了單個寄存器文件14,但應(yīng)該理解在實踐中該寄存器文件可以代表任意寄存器組,例如包含多個寄存器文件,可能還有相互不同的位寬度的寄存器。發(fā)出槽中的不同字段可以尋址這些寄存器文件中的不同寄存器文件。此外,盡管只示出了單條線以表示不同部分之間的連接,但將會理解每條線一般象征多個用于并行提供多個比特的導(dǎo)線。
第一功能單元12a是通過執(zhí)行對數(shù)據(jù)存儲器16的存取操作來響應(yīng)操作代碼的存儲器存取單元。例如,響應(yīng)讀操作代碼,功能單元12a可以將地址和讀控制信號提供給存儲器,接收存儲器已經(jīng)從該地址讀取的返回數(shù)據(jù)并將該數(shù)據(jù)寫入寄存器文件14。另一例子是響應(yīng)寫操作代碼,功能單元12a可以提供地址、寫數(shù)據(jù)和寫控制信號給存儲器,該寫數(shù)據(jù)即是從寄存器文件14接收到的操作數(shù)數(shù)據(jù)。結(jié)果,數(shù)據(jù)存儲器16將把該寫數(shù)據(jù)存儲在該地址所尋址的位置。通常,存儲器存取單元支持快速裝入和/或存儲指令,該指令能夠只從所選擇的地址(稱為對齊地址)開始將數(shù)據(jù)裝入寄存器,以使連續(xù)的對齊地址之間的間距對應(yīng)于能夠一起裝入單個寄存器的存儲器位置的數(shù)量。
第二功能單元12b包括能夠執(zhí)行各種不同的SIMD(單指令多數(shù)據(jù))指令的算術(shù)處理器。
圖2示出了這種算術(shù)處理器的一個實施例的例子。在這個示例中功能單元12b有兩個操作數(shù)輸入20a,b、輸入連接22a,b、操作數(shù)分配電路24、多個算術(shù)電路26a-d、以及輸出連接28和結(jié)果輸出29。通常,輸入20a,b各自包含在功能上并行耦合到寄存器文件14(未示出)的多個導(dǎo)線。例如,可以為每個輸入20a,b并行使用32位或64位導(dǎo)線。輸入連接22a,b不需要對應(yīng)于實際的電路,而是僅僅示出輸入20a,b可以被看作是被再分成了多個操作數(shù)。例如,32位輸入20a,b可以被再分成四個8位操作數(shù),64位輸入20a,b可以被再分成四個16位操作數(shù)或八個8位操作數(shù)。通常,每個輸入20a,b代表并行的多個導(dǎo)線,可以為提供給操作數(shù)分配電路24的輸入的各個操作數(shù)而將它們分成組。
操作數(shù)分配電路24的輸出與算術(shù)電路26a-d相應(yīng)的輸入相耦合。算術(shù)電路26a-d的輸出與輸出連接28相耦合,而輸出連接28的輸出與結(jié)果輸出29相耦合。示出輸出連接28也只是為了表示輸出29可以被看作再分成了多個結(jié)果。通常,每個算術(shù)電路26a-d的輸出代表多個并行的導(dǎo)線,它們可被合成為輸出29。例如,可以為輸出29并行使用32或64位導(dǎo)線。例如,32位輸出29可以被再分成來自相應(yīng)的算術(shù)電路26a-d的4個8位結(jié)果,64位輸出29可以被再分成來自相應(yīng)的算術(shù)電路26a-d的4個16位結(jié)果,或者來自相應(yīng)的算術(shù)電路26a-d的8個8位操作數(shù)(未示出)。
用于從指令發(fā)出電路10(未示出)接收操作代碼的輸入27與算術(shù)電路26a-d中的每一個以及操作數(shù)分配電路24耦合。對于一SIMD操作,每個算術(shù)電路26a-d通過在它的輸入操作數(shù)上完成相同的操作來響應(yīng)。對于傳統(tǒng)SIMD指令的執(zhí)行,操作數(shù)分配電路24被安排通過將來自第一輸入20a中相應(yīng)位置的操作數(shù)提供給算術(shù)電路26a-d的第一輸入并將來自第二輸入20b中的相應(yīng)位置的對應(yīng)操作數(shù)提供給算術(shù)電路26a-d的第一輸入,而響應(yīng)選擇這種傳統(tǒng)SIMD指令的操作代碼。
圖3示出了這種傳統(tǒng)SIMD指令的數(shù)據(jù)流。這里來自相應(yīng)寄存器的輸入30a,b被示為分成了對應(yīng)于相應(yīng)操作數(shù)的字段。圓環(huán)32表示操作,字段和操作之間的箭頭象征數(shù)據(jù)流。例如,這個SIMD指令可以是向量ADD指令,其匯編語言表示類似ADDVECTOR R1,R2,R3這里,″ADDVECTOR″代表操作代碼,它標(biāo)識了必須執(zhí)行的操作,R1和R2代表寄存器的地址,它們各自的內(nèi)容將被看作多個操作數(shù),該指令被通過進(jìn)行多個加法操作而執(zhí)行,第一加法操作將來自R1和R2所尋址的寄存器中的第一位置的操作數(shù)相加,第二加法操作將來自R1和R2所尋址的寄存器中的第二位置的操作數(shù)相加,等等。R3表示響應(yīng)該指令存儲多個由此得到的和的寄存器的地址。當(dāng)然,對于其它操作,象減法操作、乘法操作等,也有類似的傳統(tǒng)SIMD指令。
SUBVECTOR R1,R2,R3MULVECTOR R1,R2,R3圖4a示出了依照本發(fā)明的SIMD指令的一個示例的數(shù)據(jù)流。在這個例子中使用來自第一輸入30a的第一和第二字段的操作數(shù)進(jìn)行操作,使用來自第一輸入30a的第二和第三字段的操作數(shù)完成相同操作,使用來自第一輸入30a的第三和第四字段的操作數(shù)完成相同操作,使用來自第一輸入30a的第四字段的操作數(shù)和來自第二輸入30b的第一字段的操作數(shù)完成相同操作。該SIMD指令可以是加法指令,例如ADDADJACENT R1,R2,R3這里來自R1所尋址的寄存器中的成對的相鄰位置的操作數(shù)被加在一起,而R2所尋址的寄存器被看作是R1所尋址的寄存器的延伸。加法操作的結(jié)果被存儲在R3所尋址的寄存器中。當(dāng)然,對于來自寄存器中成對的相鄰位置的操作數(shù),可以有用于其它操作的其它指令,例如減法、乘法、乘累加(MAC,multiply accumulate)操作等SUBADJACENT R1,R2,R3MULADJACENT R1,R2,R3MACADJACENT R1,R2,R3操作數(shù)分配電路24實現(xiàn)了操作數(shù)的分配。響應(yīng)來自輸入27的選擇了傳統(tǒng)類型的SIMD指令的操作代碼,操作數(shù)分配電路24依照圖3的數(shù)據(jù)流將操作數(shù)傳輸?shù)剿阈g(shù)電路26a-d。響應(yīng)來自輸入27的選擇了新型SIMD指令的操作代碼,操作數(shù)分配電路24依照圖4a的數(shù)據(jù)流將操作數(shù)傳輸?shù)剿阈g(shù)電路26a-d。
應(yīng)該理解本發(fā)明并不限于圖4a所示類型的數(shù)據(jù)流。響應(yīng)其它指令,操作數(shù)分配電路24可以提供圖4b或4c中所示數(shù)據(jù)流。圖4b示出了對一SIMD指令的操作代碼的響應(yīng),其中,算術(shù)電路26a,b分別從第一輸入的第一、第二、第三和第四字段接收它們的第一操作數(shù),分別從第一輸入的第四字段、第二輸入的第一、第二和第三字段接收第二操作數(shù)。這種指令的匯編語言表示如ADD14 R1,R2,R3或MAC14 R1,R2,R3等這里操作代碼ADD14或MAC14表示操作和R1所尋址的寄存器中的第一操作數(shù)的位置。
圖4c示出了對一SIMD指令的操作代碼的響應(yīng),其中算術(shù)電路26a,b分別從第一輸入的第二、第三和第四字段以及從第二輸入的第一字段接收它們的第一操作數(shù),分別從第一輸入的第三和第四段以及第二輸入的第一和第二字段接收第二操作數(shù)。
這種指令的匯編語言表示如ADD23 R1,R2,R3或MAC23 R1,R2,R3等。
當(dāng)然,不需要對位置的所有組合進(jìn)行相同操作的操作代碼只提供程序中頻繁需要的特定組合足矣。
在迄今所給的例子中,操作數(shù)分配電路24在來自指令發(fā)出電路10的操作代碼的控制下從字段對操作數(shù)進(jìn)行選擇?;蛘?,可以在從寄存器文件14接收到的另一操作數(shù)的控制下或在這種操作數(shù)和來自指令發(fā)出電路的操作代碼的組合的控制下進(jìn)行該選擇。
圖5示出了功能電路12b的一個實施例,它具有與寄存器文件14(未示出)耦合的額外操作數(shù)輸入50。在這個實施例中,由指令發(fā)出電路10發(fā)出的指令包含額外操作數(shù)寄存器選擇地址,指令發(fā)出電路10將它提供給寄存器文件14。這種指令的例子的匯編語言表示如ADDSUCCESSIVE Rp,R1,R2,R3這里寄存器地址Rp指定提供該額外操作數(shù)的寄存器的地址。
在這個實施例中,操作數(shù)分配電路24在來自該額外操作數(shù)輸入50的額外操作數(shù)和來自指令發(fā)出電路10的操作代碼的組合的控制下完成對操作數(shù)的選擇。在這個實施例中,操作代碼可以用來表示是否需要常規(guī)流(如圖3中所示),以及來自額外操作數(shù)輸入50的該額外操作數(shù)是否控制使用哪種操作數(shù)選擇。
在一個例子中,該額外操作數(shù)從第一輸入30a選擇第一字段用于操作數(shù),操作數(shù)分配電路24從第一輸入30a中的那個字段和后續(xù)字段開始、并從第二輸入30b的第一字段繼續(xù),為相應(yīng)算術(shù)電路26a-d選擇四個第一操作數(shù)。在這種情況下,可以安排操作數(shù)分配電路24從第一輸入30a中該所選擇的字段之后的下一字段以及第一輸入30a中的后續(xù)字段(如果有的話)開始、并從第二輸入30b的第一字段繼續(xù),為相應(yīng)算術(shù)電路26a-d選擇四個第二輸入。這樣,例如可以選擇圖4c的數(shù)據(jù)流。在這種情況下,該額外操作數(shù)可以是四個值如0、1、2、3之一,每個值表示不同的位置。在這種情況下,為此目的,該額外操作數(shù)有兩位就足夠了。
在另一例子中,可以安排操作數(shù)分配電路24在該額外操作數(shù)或另外兩個操作數(shù)的控制下獨立地選擇兩個起始操作數(shù)的位置。因而,該額外操作數(shù)可以包含兩個字段,第一字段用于在第一或第二輸入中選擇第一字段,第二字段用于在第一或第二輸入中選擇第二字段。在這種情況下,可以安排操作數(shù)分配電路24從第一輸入30a中的第一字段開始(如果有的話)并從第二輸入30b的第一字段繼續(xù),為相應(yīng)算術(shù)電路26a-d選擇四個第一操作數(shù)。同樣,可以安排操作數(shù)分配電路24從第一輸入30a的第二字段(如果有的話)開始并從第二輸入30b的第一字段繼續(xù),為相應(yīng)算術(shù)電路26a-d選擇四個第二操作數(shù)。這樣,如果該額外操作數(shù)的第一字段選擇了第一輸入的第一字段并且該額外操作數(shù)的第二字段選擇了第一輸入的第四字段,就可以實現(xiàn)圖4b的數(shù)據(jù)流。在這種情況下,為此目的該額外的操作數(shù)對相應(yīng)的字段有兩個兩位就足夠了。
在又一實施例中,該額外操作數(shù)包含用于各個操作數(shù)的獨立選擇的選擇字段。因而,如果每個寄存器被看作包含N個操作數(shù),該額外寄存器可以包含2N個2logN位的字段以選擇操作數(shù)。但是,已經(jīng)發(fā)現(xiàn)對于實際的程序,更少的選擇就足夠了,例如只為第一操作的第一操作數(shù)選擇一個偏移(從連續(xù)的位置中選擇其余的操作數(shù)),或者為第一操作的第一和第二操作數(shù)選擇兩個偏移(從連續(xù)的位置中選擇其余的操作數(shù))。
圖6示出了在僅僅使用受限操作數(shù)選擇時可以使用的簡化功能單元的部分,其中每個算術(shù)電路而不是最后一個算術(shù)電路26d的第二操作數(shù)充當(dāng)下一算術(shù)電路的第一操作數(shù)。這樣,操作數(shù)分配電路24可以顯著簡化。操作數(shù)分配電路24可以實現(xiàn)為一組多路復(fù)用器,例如每個多路復(fù)用器用于將可選輸入可選地耦合到算術(shù)電路26d的相應(yīng)操作數(shù)輸入。但是,本發(fā)明的其它實現(xiàn)也是可能的。例如,可以提供多個算術(shù)電路26a-d用于只執(zhí)行一種類型的指令,該類型的指令使用來自這個類型的指令中所尋址的寄存器的預(yù)定字段的操作數(shù)數(shù)據(jù)。在這種情況下,可以硬布線算術(shù)電路的輸入以接收所尋址的寄存器的內(nèi)容的預(yù)定部分,響應(yīng)表示這種類型的指令的操作代碼,算術(shù)電路被激活以將結(jié)果寫入結(jié)果寄存器。在這種情況下,操作數(shù)分配電路24只需要包含相關(guān)的布線連接。
圖7示出了又一實施例,其中提供了額外輸入60,該輸入上可以提供被共同饋送給所有算術(shù)電路26a-d的額外操作數(shù)數(shù)據(jù)。在這種情況下,該功能單元的指令的匯編語言表示如OPCODE Rp,Rc,R1,R2,R3其中Rc表示具有算術(shù)電路26a-d公共的(一個或多個)額外操作數(shù)的寄存器的地址。例如,該額外操作數(shù)數(shù)據(jù)可以代表過濾器系數(shù)。在一個實施例中,可以用這樣的指令實現(xiàn)下列計算b
=w0*a[offset+0]+w1*a[offset+1]b[1]=w0*a[offset+1]+w1*a[offset+2]b[2]=w0*a[offset+2]+w1*a[offset+3]b[3]=w0*a[offset+3]+w1*a[offset+4]這里a
,a[1],a[2],a[3],a[4]等表示R1和R2尋址的寄存器(R2所尋址的寄存器被看作R1所尋址的寄存器的延伸)中相應(yīng)字段中存儲的操作數(shù)數(shù)據(jù)。操作數(shù)″offset″是從Rp所尋址的寄存器獲得的,并且表示R1和R2所尋址的寄存器中的起始字段位置。每個算術(shù)電路26a-d計算b
、b[1]、b[2]和b[3]中相應(yīng)的一個,這些結(jié)果被寫到R3所尋址的寄存器的相應(yīng)字段(部分)。
在這個實施例中,Rc所尋址的寄存器包含系數(shù)w0、w1,它們被提供給各個算術(shù)電路26a-d。在另一實施例中,控制操作數(shù)分配電路24的操作數(shù)和共同提供給算術(shù)電路26a-d的操作數(shù)可以取自單個額外操作數(shù)。例如,對32位的寄存器來說,可以從單個操作數(shù)中的相應(yīng)字段提供兩個8位系數(shù)和一個2位偏移選擇OPCODE Rs,Rpc,R1,R2,R3這里,假定在來自Rpc所尋址的寄存器的一個操作數(shù)中組合提供位置和系數(shù)信息。這些字段由Rs的內(nèi)容選擇。
圖8示出了該功能單元的又一實施例,其中已經(jīng)添加了附加的操作數(shù)連接70,其與輸入72耦合,輸入72從該附加操作數(shù)連接向算術(shù)電路26a-d中的相應(yīng)算術(shù)電路饋送相應(yīng)操作數(shù)。此外,已經(jīng)向輸出連接28添加了附加的結(jié)果連接74。這個功能單元可以用來例如響應(yīng)一指令完成下列計算b
=s
+w0*a[offset+0]+w1*a[offset+1]b[1]=s[1]+w0*a[offset+1]+w1*a[offset+2]b[2]=s[2]+w0*a[offset+2]+w1*a[offset+3]
b[3]=s[3]+w0*a[offset+3]+w1*a[offset+4]這是使用來自寄存器中連續(xù)的相鄰字段的操作數(shù)的乘加指令。
圖9示出了可以用于這個目的的算術(shù)電路26,包含用于計算乘積w0*a[..]和w1*a[..]的乘法器90a,b以及加法電路92。
在這個例子中,該功能單元輸出被加數(shù)s[..]和乘積w0*a[..]及w1*a[..]的相應(yīng)和。相應(yīng)算術(shù)電路26a-d的被加數(shù)s[..]是從Rs所尋址的寄存器的預(yù)定字段獲取的,公共系數(shù)是從Rpc所尋址的寄存器獲取的,操作數(shù)a[]是從R1和R2所尋址的寄存器的相應(yīng)字段獲取的。得到這些操作數(shù)的位置由來自Rpc所尋址的寄存器的偏移信息控制。來自不同算術(shù)電路26a-d的結(jié)果被合并在一起并寫入由R3所尋址的寄存器。
優(yōu)選地,存儲結(jié)果的寄存器(R3)的寬度(位數(shù))至少兩倍于用來提供操作數(shù)a[..]的寄存器(R1,R2)的寬度。這是用來解決不丟失精度的情況下需要2M位表示兩個M位的數(shù)的乘積的事實。如果使用了累加(將一個數(shù)加上乘積),需要的位數(shù)甚至更多,如2M+2位。可以根據(jù)結(jié)果的相關(guān)寬度選擇該寬度。因而,例如,如果從32位輸入寄存器(R1,R2)提供了四個8位操作數(shù)a[..](M=8),那么優(yōu)選地使用64位輸出寄存器(R3)存儲4個16位結(jié)果(M=16)。另外,響應(yīng)該指令,結(jié)果優(yōu)選地還被以截短的精度存儲在另一結(jié)果寄存器R4中,R4與輸入寄存器(R1,R2)具有相同的寬度。在這個另一結(jié)果寄存器中,只存儲了各個結(jié)果b[..]的一部分,例如只有最有效的一半位,或者只有最有效相關(guān)的一半位,例如來自各個結(jié)果的多個預(yù)定位置的位,如4-12位。優(yōu)選地,用于提供和s[..]的寄存器(Rs)的寬度也兩倍于用來提供操作數(shù)a[..]的寄存器(R1,R2)的寬度。這可以用于使用下列指令的多維內(nèi)插(如2維圖像內(nèi)插)的實現(xiàn)MAC Rs,Rpc1,R1,R2,R3,R4MAC R3,Rpc2,R1′,R2′,R3,R4這里假定R1所尋址的寄存器包含沿著圖像線的相鄰像素位置的N(如N=4)個像素值(如像素值p[i,j],p[i+1,j],p[i+2,j],p[i+3,j],整數(shù)j指行,而i指起始像素位置),R2所尋址的寄存器包含跟隨在R1的那些值之后的位置的像素值(如像素值p[i+4,j],p[i+5,j],p[i+6,j],p[i+7,j])。Rpc1所尋址的寄存器包含兩個系數(shù)w00、w01。同樣,假定R1′和R2′各自包含沿著與R1和R2的圖像線相鄰的下一條圖像線的相鄰像素位置的N個(如N=4)像素值(如,分別是像素值p[i,j+1],p[i+1,j+1],p[i+2,j+1],p[i+3,j+1]和p[i+4,j+1],p[i+5,j+1],p[i+6,j+1],p[i+7,j+1])。Rpc2所尋址的寄存器包含兩個系數(shù)w10和w11。Rs所尋址的寄存器包含零值。在這種情況下,在兩個操作之后,R3所尋址的寄存器中的結(jié)果將包含b
=w00p[i+0,j]+w01p[i+1,j]+w10p[i+0,j+1]+w11p[i+1,j+1]b[1]=w00p[i+1,j]+w01p[i+2,j]+w10p[i+1,j+1]+w11p[i+2,j+1]b[2]=w00p[i+2,j]+w01p[i+3,j]+w10p[i+2,j+1]+w11p[i+3,j+1]b[3]=w00p[i+3,j]+w01p[i+4,j]+w10p[i+3,j+1]+w11p[i+4,j+1]因而,通過執(zhí)行兩條指令已經(jīng)完成了四個4-像素內(nèi)插。為了內(nèi)插整個圖像,可以結(jié)合裝入連續(xù)的像素組重復(fù)該操作。
優(yōu)選地,另外該功能單元支持至少一個指定偏移的操作數(shù),例如作為Rpc1和Rpc2尋址的寄存器中的操作數(shù)的一部分。這樣,在該程序的控制下可以選擇R1、R2和R1′、R2′所尋址的寄存器上的起始像素值p[i+0,j]和p[i+0,j+1]的位置。這使得能夠為從數(shù)據(jù)存儲器中的任意地址開始存儲的像素值產(chǎn)生結(jié)果,而不需要結(jié)合使用對齊地址的裝入操作的額外重新排列。因而,可以用下列指令處理沿著一條線的一系列像素
LOAD A,R1INC4 ALOAD A,R2LOAD A′,R1′INC4 A′LOAD A′,R2′repeatMACRs,Rpc1,R1,R2,R3,R4INC4 ALOAD A,R1MAC R3,Rpc2,R1′,R2′,R3,R4STORE A″,R4INC4 A″INC4 A′LOAD A′,R1′MACRs,Rpc1,R2,R1,R3,R4INC4 ALOAD A,R2MAC R3,Rpc2,R2′,R1′,R3,R4STORE A″,R4INC4 A″INC4 A′LOAD A′,R2′這里來自成組的相鄰存儲器位置的像素值被裝入由R1和R2以及R1′和R2′尋址的寄存器并用來產(chǎn)生(MAC指令中)成組的四個內(nèi)插結(jié)果。這里使用的來自用來產(chǎn)生第一內(nèi)插結(jié)果的寄存器R1、R2的第一像素的偏移由Rpc1尋址的寄存器控制。來自下一組相鄰存儲位置的后續(xù)像素值被裝入R1(和R1′),R1和R2的角色在內(nèi)插指令(MAC)中互換。這之后循環(huán)繼續(xù)。
應(yīng)該理解這個程序中的存儲器存取指令(LOAD和STORE)都使用了對齊地址。因而,幫助實現(xiàn)了從未對齊的起始地址開始存儲的像素數(shù)據(jù)的內(nèi)插。如果在圖像中任意可選擇的位置上開始的相對較小的窗口中需要內(nèi)插,這尤其能提高速度。
盡管已經(jīng)對二維圖像處理闡述了本發(fā)明的應(yīng)用,但應(yīng)該理解本發(fā)明并不限于這個應(yīng)用。本發(fā)明還可應(yīng)用于一維數(shù)組處理或三維和更高維度的數(shù)組處理。此外,盡管已經(jīng)闡述了涉及對像素和系數(shù)的乘積求和的SIMD指令,但應(yīng)該理解還可使用其它指令。
根據(jù)本發(fā)明,處理電路被安排在它的指令集中包括特定的新型指令。眾所周知,處理器的指令集規(guī)范一般足以告知技術(shù)人員能夠選擇什么實現(xiàn)方式來實現(xiàn)處理器。指令集定義了處理器的機(jī)器程序中可以包括的各個不同類型的指令(指令,在這里使用時,指機(jī)器程序的“原子”,是在不以不是指令自身的片斷結(jié)束的情況下程序能夠分割成的最小單位)。依照本發(fā)明的處理電路的指令集包含使處理電路執(zhí)行SIMD操作的指令,意義在于通過使用來自各自包含多個潛在操作數(shù)的寄存器的操作數(shù)并行執(zhí)行相同類型的操作產(chǎn)生多個結(jié)果。該并行執(zhí)行的操作數(shù)使用重疊的操作數(shù)系列。優(yōu)選地,該指令有一額外的操作數(shù),該操作書指示寄存器中必須從那里獲取操作數(shù)的位置;或者,不同的操作代碼指示不同的位置。
權(quán)利要求
1.一種數(shù)據(jù)處理電路,包括-一組寄存器(14),包括指令可選擇的寄存器,每個寄存器包含適合存儲相應(yīng)的SIMD指令操作數(shù)和/或結(jié)果的多個N個部分;-指令執(zhí)行電路(12b),具有包含SIMD指令的指令集,該指令執(zhí)行電路包含多個算術(shù)電路(26a-d),用于響應(yīng)該SIMD指令并行完成N個相應(yīng)的相同的操作,該SIMD指令定義來自該SIMD指定選擇的寄存器中的第一寄存器和第二寄存器的該SIMD指令的第一系列N個相應(yīng)的SIMD指令操作數(shù)和第二系列N個相應(yīng)的SIMD指令操作數(shù),當(dāng)執(zhí)行該SIMD指令時,各個算術(shù)電路(26a,b)被安排分別從該第一和第二系列接收相應(yīng)的第一操作數(shù)和相應(yīng)的第二操作數(shù),其中該指令執(zhí)行電路(12b)被安排用于選擇該第一和第二系列以使它們部分重疊。
2.根據(jù)權(quán)利要求1的數(shù)據(jù)處理電路,其中該指令執(zhí)行電路(12b)被安排從寄存器中的第一和第二寄存器的相應(yīng)部分至少提取出第二系列的操作數(shù)。
3.根據(jù)權(quán)利要求1的數(shù)據(jù)處理電路,其中該指令執(zhí)行電路(12b)被安排在程序的控制下選擇寄存器的第一和第二寄存器中所述第一系列的至少一個位置。
4.根據(jù)權(quán)利要求3的數(shù)據(jù)處理電路,包括-指令發(fā)出電路(10),與指令執(zhí)行電路(12b)和寄存器組(14)耦合,用于提供指令數(shù)據(jù)以選擇SIMD指令并分別選擇寄存器中的第一和第二寄存器;-操作數(shù)分配電路(24),耦合在所述寄存器組和算術(shù)電路之間,并由指令數(shù)據(jù)和/或操作數(shù)數(shù)據(jù)控制,用于選擇第一系列的一位置,第一系列的可選位置包括其中第一系列跨越寄存器中的第一和第二寄存器的一些部分延伸的的至少一個位置。
5.根據(jù)權(quán)利要求3的數(shù)據(jù)處理電路,其中該SIMD指令選擇一額外的寄存器,并且該指令執(zhí)行電路(12b)被安排在來自所選擇的額外寄存器的信息的控制下控制第一系列的位置。
6.根據(jù)權(quán)利要求3的數(shù)據(jù)處理電路,其中該指令執(zhí)行電路(12b)被安排從關(guān)于第一系列的預(yù)定相對位置選擇第二系列。
7.根據(jù)權(quán)利要求1的數(shù)據(jù)處理電路,其中該SIMD指令選擇包含用于存儲相應(yīng)的SIMD指令操作數(shù)的多個部分的額外寄存器,該指令執(zhí)行電路(12b)將來自該額外寄存器中的預(yù)定位置的部分耦合到算術(shù)電路(26a-d)中的相應(yīng)預(yù)定電路以提供額外的操作數(shù)。
8.根據(jù)權(quán)利要求7的數(shù)據(jù)處理電路,其中該指令執(zhí)行電路(12b)被安排在程序的控制下在寄存器的第一和第二寄存器中至少選擇第一系列的一位置,以使所述預(yù)定位置不受對第一系列的位置的編程選擇的影響。
9.根據(jù)權(quán)利要求7的數(shù)據(jù)處理電路,其中各個算術(shù)電路(26a-d)被安排計算來自該額外寄存器的操作數(shù)和來自第一和第二系列的操作數(shù)與對所有算術(shù)電路(26a-d)公共的系數(shù)的乘積之和。
10.根據(jù)權(quán)利要求9的數(shù)據(jù)處理電路,其中該指令選擇一附加的寄存器,所述系數(shù)被從該附加的寄存器提供給算術(shù)電路(26a-d)。
11.根據(jù)權(quán)利要求10的數(shù)據(jù)處理電路,其中該指令執(zhí)行電路(12b)被安排在來自該指令選擇的附加寄存器的數(shù)據(jù)的控制下在寄存器的第一和第二寄存器中選擇第一系列的至少一個位置。
12.根據(jù)權(quán)利要求9的數(shù)據(jù)處理電路,被用包含所述SIMD指令的程序編程以并行完成對成組的像素的像素內(nèi)插。
13.根據(jù)權(quán)利要求1的數(shù)據(jù)處理電路,其中所述指令集包含一額外的SIMD指令,所述指令執(zhí)行電路被安排使算術(shù)電路響應(yīng)該額外的SIMD指令并行完成N個相同的額外操作,每個算術(shù)電路使用來自該額外的SIMD指令所選擇的寄存器中的第一寄存器的相應(yīng)的第一操作數(shù)以及來自該額外的SIMD指令所選擇的寄存器中的第二寄存器的相應(yīng)的第二操作數(shù)。
14.在可編程的指令處理電路上執(zhí)行計算機(jī)程序的一種方法,該可編程指令處理電路具有包含SIMD指令的指令集,該計算機(jī)程序包含該SIMD指令的至少一個實例,該方法包括-響應(yīng)SIMD指令取回由該SIMD指令所選擇的第一和第二寄存器的內(nèi)容,每個寄存器存儲多個N個相應(yīng)的SIMD操作數(shù),該SIMD指令在來自第一和第二寄存器的操作數(shù)之間定義第一系列N個操作數(shù)和第二系列N個操作數(shù),該第一和第二系列有重疊;-響應(yīng)該SIMD指令并行完成N個相應(yīng)的相同的操作,每個操作分別使用來自第一系列和第二系列的相應(yīng)的第一操作數(shù)和相應(yīng)的第二操作數(shù)。
15.根據(jù)權(quán)利要求14的方法,包括-接收圖像數(shù)據(jù)值的二維數(shù)組;-使用SIMD指令計算內(nèi)插的圖像數(shù)據(jù)值。
16.一種包含機(jī)器可讀指令的計算機(jī)程序產(chǎn)品,當(dāng)被執(zhí)行時使可編程指令處理電路執(zhí)行權(quán)利要求14的方法,所述指令包括所述SIMD指令。
全文摘要
一種包含指令執(zhí)行電路(12b)的數(shù)據(jù)處理電路,該指令執(zhí)行電路的指令集包含SIMD指令。該指令執(zhí)行電路包含多個算術(shù)電路(26a-d),這些算術(shù)電路被安排響應(yīng)SIMD指令并行完成N個相應(yīng)的相同的操作。SIMD指令定義并選擇寄存器中的第一和第二寄存器。SIMD指令定義SIMD指令的來自所尋址的寄存器的第一系列N個相應(yīng)的SIMD指令操作數(shù)以及第二系列N個相應(yīng)的SIMD指令操作數(shù)。每個算術(shù)電路(26a,b)在執(zhí)行SIMD指令時分別從該第一和第二系列接收相應(yīng)的第一和相應(yīng)的第二操作數(shù)。指令執(zhí)行電路(12b)用于選擇第一和第二系列以使它們部分重疊。優(yōu)選地,至少一個系列的操作數(shù)的位置在程序控制下,優(yōu)選地是在操作數(shù)數(shù)據(jù)的控制下。優(yōu)選地程序控制相對于第一寄存器的起始處選擇一個系列的開始,如果該系列沒有從第一寄存器的起始處開始該系列就繼續(xù)到第二寄存器中。
文檔編號G06F9/318GK101052947SQ200580037957
公開日2007年10月10日 申請日期2005年11月2日 優(yōu)先權(quán)日2004年11月3日
發(fā)明者A·A·M·范維爾 申請人:皇家飛利浦電子股份有限公司