亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

在寄存器和存儲(chǔ)器之間移動(dòng)數(shù)據(jù)的數(shù)據(jù)處理設(shè)備和方法

文檔序號(hào):6501710閱讀:364來源:國(guó)知局
專利名稱:在寄存器和存儲(chǔ)器之間移動(dòng)數(shù)據(jù)的數(shù)據(jù)處理設(shè)備和方法
技術(shù)領(lǐng)域
本發(fā)明涉及用于在寄存器和存儲(chǔ)器之間移動(dòng)數(shù)據(jù)的數(shù)據(jù)處理設(shè)備和方法。
背景技術(shù)
當(dāng)需要對(duì)若干個(gè)單獨(dú)的數(shù)據(jù)元素執(zhí)行特定的數(shù)據(jù)處理操作時(shí),一種加速執(zhí)行這樣一種操作的已知方法是使用SIMD(單指令多數(shù)據(jù))方法。按照SIMD方法,所述多個(gè)數(shù)據(jù)元素并排地放在寄存器內(nèi),然后并行地對(duì)那些數(shù)據(jù)元素執(zhí)行操作。
但是,SIMD方法實(shí)際性能上的優(yōu)點(diǎn)只有在這些數(shù)據(jù)元素可以無須重大的系統(tǒng)開銷即能以適當(dāng)?shù)捻樞蚺帕性诩拇嫫鲀?nèi)才能充分現(xiàn)實(shí)。一般,執(zhí)行SIMD操作之前,這些相關(guān)的數(shù)據(jù)元素需要從存儲(chǔ)器裝入這些寄存器,而情況往往是,所述SIMD操作所需要的數(shù)據(jù)元素并非連續(xù)地定位在存儲(chǔ)器的地址空間內(nèi)。作為實(shí)例,存儲(chǔ)器中的數(shù)據(jù)可能代表像素值的紅、綠和藍(lán)分量(亦即,RGB數(shù)據(jù)),而相應(yīng)地當(dāng)數(shù)據(jù)從連續(xù)的存儲(chǔ)器塊裝入寄存器時(shí),寄存器內(nèi)的這些數(shù)據(jù)元素也將代表對(duì)每一個(gè)像素重復(fù)的紅、綠和藍(lán)分量??赡芟M麑?duì)檢索到的全部紅分量執(zhí)行特定的操作,于是相應(yīng)地出現(xiàn)了如何將紅分量安排成能夠?qū)ζ涫┬蠸IMD操作的問題。
按照一種已知的技術(shù),來自連續(xù)的存儲(chǔ)器塊的數(shù)據(jù)(包括要進(jìn)行SIMD處理的所需的數(shù)據(jù)元素)從存儲(chǔ)器裝入一個(gè)或多個(gè)寄存器。如果認(rèn)為寄存器內(nèi)的每一個(gè)數(shù)據(jù)元素占用不同處理通道,則處理器可以設(shè)置成以不同方法對(duì)不同通道執(zhí)行操作,以便對(duì)特定的數(shù)據(jù)元素執(zhí)行所需的SIMD處理。作為另一方案,可以為特定的操作開發(fā)某些定制的指令。盡管這些技術(shù)的使用可以避免在執(zhí)行SIMD操作以前對(duì)數(shù)據(jù)進(jìn)行重排序的必要性,但是這些方法都相對(duì)比較復(fù)雜,而且要為不同操作定義的不同指令和/或處理,使所需代碼尺寸明顯增大。因此,這樣的方法并非通用的解決方案。
另外,可以看出,這樣的方法在浪費(fèi)資源帶寬方面造成巨大的系統(tǒng)開銷。例如,若特定的寄存器具有存入八個(gè)數(shù)據(jù)元素的能力,但是該寄存器內(nèi)的一些位置包含不準(zhǔn)備經(jīng)受SIMD操作的數(shù)據(jù)元素,則不可能從使用SIMD操作得到最大的潛在益處。作為具體實(shí)例,若在特定的寄存器內(nèi)只有四個(gè)數(shù)據(jù)元素要經(jīng)受SIMD操作,則只利用了寄存器支持的一半的潛在帶寬。
一個(gè)替換的先有技術(shù)方法是用與上述相同的方法把所需的數(shù)據(jù)從存儲(chǔ)器裝入一個(gè)或多個(gè)寄存器,但是這時(shí)為了對(duì)數(shù)據(jù)進(jìn)行重排序,使得要經(jīng)受SIMD操作的數(shù)據(jù)元素并排放置在一個(gè)或多個(gè)寄存器內(nèi),要使用附加的指令來指定某些重新排列的操作。盡管這使后來的SIMD操作最大限度地使用寄存器的可用帶寬成為可能,但為了根據(jù)需要將數(shù)據(jù)重排序,要求在執(zhí)行SIMD操作之前執(zhí)行一個(gè)或多個(gè)其他指令,由此對(duì)性能造成明顯的沖擊。這可能對(duì)從使用SIMD操作現(xiàn)實(shí)的潛在益處造成明顯的消極影響。
在矢量處理的不同技術(shù)領(lǐng)域中,已知提供裝入(load)指令,它可以通過指定起始地址和步距從存儲(chǔ)器中不連續(xù)的地址收集各個(gè)數(shù)據(jù)元素。這例如,可以允許從特定的地址起每隔二個(gè)數(shù)據(jù)元素裝入寄存器。也可以設(shè)置類似的存儲(chǔ)指令。
在矢量處理系統(tǒng)中,這樣一種方法可以是有利的,因?yàn)檫@樣的系統(tǒng)一般地并不在存儲(chǔ)系統(tǒng)中使用高速緩存,而且一般不尋求訪問各連續(xù)的存儲(chǔ)器塊。因此,在實(shí)現(xiàn)這樣的跨越功能所需的裝入/存儲(chǔ)硬件中增大復(fù)雜性被認(rèn)為是值得的。
但是,可以用來對(duì)并排放置在特定的寄存器內(nèi)的數(shù)據(jù)元素執(zhí)行早先描述的SIMD操作的數(shù)據(jù)處理系統(tǒng)通常希望訪問各連續(xù)的存儲(chǔ)器塊,并且相應(yīng)地不希望為了支持這樣的跨越功能而增大基本的裝入/存儲(chǔ)硬件的復(fù)雜性。作為實(shí)例,考慮早先的實(shí)例,其中這些數(shù)據(jù)代表像素的紅、綠和藍(lán)分量,這時(shí)它可能要求針對(duì)特定的像素順序訪問這些紅、綠和藍(lán)數(shù)據(jù)元素,而這些數(shù)據(jù)元素一般被存儲(chǔ)在連續(xù)的存儲(chǔ)器塊內(nèi)。盡管增大裝入/存儲(chǔ)單元的復(fù)雜性,以便支持跨越功能,使把紅分量引入一個(gè)特定的寄存器,把藍(lán)分量引入另一個(gè)寄存器而把綠分量引入另一個(gè)寄存器成為可能,但這會(huì)要求為每個(gè)分量發(fā)出單獨(dú)的指令,還會(huì)明顯增大檢索所述數(shù)據(jù)所需的存儲(chǔ)器訪問次數(shù)。具體地說,可以看出,在所述實(shí)例中每個(gè)數(shù)據(jù)元素都是從不連續(xù)的存儲(chǔ)器位置訪問的,而且因而潛在地要為每個(gè)數(shù)據(jù)元素單獨(dú)進(jìn)行訪問,而事實(shí)上,所需的數(shù)據(jù)確實(shí)占用連續(xù)的存儲(chǔ)器塊。因此,下面將指出,使用這樣一種方法不只增大所述裝入/存儲(chǔ)硬件的復(fù)雜性,而且對(duì)訪問數(shù)據(jù)的速度發(fā)生非常重大的有害影響。
因此,為了支持有效的SIMD處理操作,最好提供一種改善的技術(shù),用來在指定的寄存器和連續(xù)的存儲(chǔ)器塊之間移動(dòng)數(shù)據(jù)元素。
發(fā)明概要從第一方面看,本發(fā)明提供一種數(shù)據(jù)處理設(shè)備,它包括寄存器數(shù)據(jù)存儲(chǔ)體,具有多個(gè)寄存器,可以用來保存數(shù)據(jù)元素;處理器,可以用來并行地對(duì)在至少一個(gè)寄存器中被訪問的多個(gè)數(shù)據(jù)元素執(zhí)行數(shù)據(jù)處理操作;訪問邏輯,可以用來響應(yīng)單一訪問指令,在指定的寄存器和連續(xù)的存儲(chǔ)器塊之間移動(dòng)多個(gè)數(shù)據(jù)元素,數(shù)據(jù)元素以具有結(jié)構(gòu)格式的結(jié)構(gòu)的陣列的形式保存在所述連續(xù)的存儲(chǔ)器塊中,所述結(jié)構(gòu)格式具有多個(gè)分量;所述單一訪問指令識(shí)別所述結(jié)構(gòu)格式中分量的數(shù)目;以及所述訪問邏輯可以用來在多個(gè)數(shù)據(jù)元素被移動(dòng)時(shí)對(duì)它們進(jìn)行重新排列,使得每一個(gè)指定的寄存器保存一個(gè)分量的數(shù)據(jù)元素,同時(shí)所述數(shù)據(jù)元素以所述結(jié)構(gòu)的陣列的形式被保存在存儲(chǔ)器中。
按照本發(fā)明,設(shè)置這樣的處理器,它可以用來并行地對(duì)在至少一個(gè)寄存器中被訪問的多個(gè)數(shù)據(jù)元素執(zhí)行數(shù)據(jù)處理操作。相應(yīng)地,所述處理器能對(duì)數(shù)據(jù)元素執(zhí)行SIMD操作。還設(shè)置訪問邏輯,它響應(yīng)單一訪問指令,在指定的寄存器和連續(xù)的存儲(chǔ)器塊之間移動(dòng)多個(gè)數(shù)據(jù)元素,數(shù)據(jù)元素以具有結(jié)構(gòu)格式的結(jié)構(gòu)的陣列的形式存儲(chǔ)在所述連續(xù)的存儲(chǔ)器塊。所述結(jié)構(gòu)格式具有多個(gè)分量。因而,考慮早先實(shí)例的紅、綠和藍(lán)數(shù)據(jù)元素,若希望對(duì)紅、綠和藍(lán)數(shù)據(jù)元素執(zhí)行不同操作,則所述結(jié)構(gòu)格式可以認(rèn)為具有3個(gè)分量。類似地,若存儲(chǔ)器中的數(shù)據(jù)代表復(fù)數(shù),每個(gè)復(fù)數(shù)有實(shí)部和虛部,那么,在所述實(shí)例中所述結(jié)構(gòu)格式可以有兩個(gè)分量,就是實(shí)部分量和虛部分量,假定需要對(duì)那些分量執(zhí)行不同操作。
按照本發(fā)明,單一訪問指令識(shí)別所述結(jié)構(gòu)格式中分量的數(shù)目。另外,所述訪問邏輯可以用來在所述數(shù)據(jù)元素移動(dòng)時(shí)對(duì)它們進(jìn)行重新排列,使得每一個(gè)指定的寄存器存儲(chǔ)一個(gè)分量的數(shù)據(jù)元素,同時(shí),數(shù)據(jù)元素以所述結(jié)構(gòu)陣列的形式存儲(chǔ)在存儲(chǔ)器中。
采用這樣一種方法,通過從連續(xù)的存儲(chǔ)器塊裝入或存入連續(xù)的存儲(chǔ)器塊,可以以非常有效的方式訪問所需的數(shù)據(jù)元素,同時(shí)另外還能夠在訪問過程中發(fā)生所述數(shù)據(jù)任何所需的重新排列。因而,如果從存儲(chǔ)器裝入,那么所述數(shù)據(jù)元素以適當(dāng)?shù)捻樞虼鎯?chǔ)在所述寄存器中,以便允許在沒有進(jìn)一步延遲的情況下繼續(xù)進(jìn)行SIMD操作,而如果進(jìn)行存儲(chǔ)操作,那么已經(jīng)經(jīng)受SIMD操作的數(shù)據(jù)元素在沒有任何進(jìn)一步延遲情況下以正確的結(jié)構(gòu)格式被返回存儲(chǔ)到存儲(chǔ)器中。
因而本發(fā)明提供一種在寄存器和存儲(chǔ)器之間移動(dòng)數(shù)據(jù)元素的特別有效的技術(shù),以便更充分地實(shí)現(xiàn)使用SIMD操作的性能優(yōu)勢(shì)。
下面將指出,參與所述訪問的指定的寄存器可以以若干種方法識(shí)別。例如,可以使用某些默認(rèn)寄存器。但是,在一個(gè)實(shí)施例中,所述單一訪問指令識(shí)別指定的寄存器、指定的寄存器的數(shù)目是分量的數(shù)目的倍數(shù)。通過保證指定的寄存器的數(shù)目是分量的數(shù)目的倍數(shù),所述訪問邏輯便可以保證任何特定的寄存器都只存儲(chǔ)一個(gè)分量的數(shù)據(jù)元素,還可以容易地確定哪些分量分配給哪些寄存器。例如,若所述結(jié)構(gòu)格式具有3個(gè)分量,并且通過所述指令來識(shí)別3個(gè)指定的寄存器,則顯然一個(gè)分量可以分配給每一個(gè)寄存器。類似地,若識(shí)別出六個(gè)指定的寄存器,則這些寄存器可以以任何預(yù)先規(guī)定的方式分配,例如,頭兩個(gè)寄存器可以分配給第一分量,第二兩個(gè)寄存器分配給第二分量,而最后兩個(gè)寄存器分配給第三分量。
下面將指出,這些數(shù)據(jù)元素可能采取各種各樣的形式,而且在同一數(shù)據(jù)處理設(shè)備內(nèi)可以支持?jǐn)?shù)據(jù)元素的不同形式。在這樣的實(shí)施例中,單一訪問指令最好包括數(shù)據(jù)類型信息,識(shí)別與要移動(dòng)的數(shù)據(jù)元素相聯(lián)系的數(shù)據(jù)類型。數(shù)據(jù)類型信息可以識(shí)別用于規(guī)定數(shù)據(jù)類型的任何相關(guān)信息。作為實(shí)例,數(shù)據(jù)類型信息可能識(shí)別要移動(dòng)的數(shù)據(jù)元素的尺寸。在其他實(shí)施例中,它還可以識(shí)別其它方面,諸如數(shù)據(jù)是有符號(hào)還是無符號(hào)的等。
在某些實(shí)施例中,要移動(dòng)的數(shù)據(jù)元素可以屬于不同數(shù)據(jù)類型。作為實(shí)例,一個(gè)分量的數(shù)據(jù)元素的數(shù)據(jù)類型可以不同于另一個(gè)分量的數(shù)據(jù)元素。在一個(gè)特定實(shí)例中,一個(gè)分量的數(shù)據(jù)元素可以具有與另一個(gè)分量的數(shù)據(jù)元素不同尺寸。但是,在一個(gè)特定的實(shí)施例中,要移動(dòng)的數(shù)據(jù)元素中的每一個(gè)具有同樣的數(shù)據(jù)類型,而且相應(yīng)地所述數(shù)據(jù)類型信息只需要識(shí)別關(guān)于單一數(shù)據(jù)類型的信息。因而這簡(jiǎn)化了單一訪問指令內(nèi)數(shù)據(jù)類型信息的有效編碼。
下面將指出,可以以各種各樣的方法識(shí)別指定的寄存器。但是,在一個(gè)實(shí)施例中,所指定的寄存器具有固定的彼此關(guān)系。通過對(duì)所指定的寄存器的識(shí)別設(shè)置這樣的限制,這便于在單一訪問指令范圍內(nèi)對(duì)指定的寄存器進(jìn)行有效的編碼。
所述固定的關(guān)系可以采取各種各樣的形式。但是,在一個(gè)實(shí)施例中,按照所述固定的關(guān)系,所指定的寄存器被n個(gè)中間寄存器隔開,其中n是2m-1并且其中m是大于或等于零的整數(shù)。在本發(fā)明的一個(gè)實(shí)施例中,寄存器數(shù)據(jù)存儲(chǔ)體內(nèi)的寄存器可以以若干種方法命名。例如,所述寄存器數(shù)據(jù)存儲(chǔ)體可以考慮包括若干個(gè)64位寄存器,它們每一個(gè)都可以單獨(dú)地識(shí)別,或者作為另一方案,可以認(rèn)為由128位寄存器數(shù)目的一半構(gòu)成,其中每一個(gè)都可以單獨(dú)識(shí)別。另外,可以動(dòng)態(tài)地改變所述寄存器的樣式(view)。因而,可能希望把特定分量的數(shù)據(jù)元素裝入第一64位寄存器,然后把同一分量的其他數(shù)據(jù)元素裝入相鄰的64位寄存器。此后,可以把所述兩個(gè)寄存器看作單一128位寄存器,用于后來的SIMD操作。通過以上述方式定義指定的寄存器之間固定的關(guān)系,便可以支持這樣的功能。
作為非常具體的實(shí)例,當(dāng)把RGB數(shù)據(jù)從存儲(chǔ)器裝入寄存器時(shí),第一單一訪問指令可以用來把紅分量的數(shù)據(jù)元素裝入第一寄存器,把綠分量的數(shù)據(jù)元素裝入第三寄存器,而把藍(lán)分量的數(shù)據(jù)元素裝入第五寄存器。然后,隨后的單一訪問指令可以用來把紅分量的其他數(shù)據(jù)元素裝入第二寄存器,把綠分量的其他數(shù)據(jù)元素裝入第四寄存器,和把藍(lán)分量的其他數(shù)據(jù)元素裝入第六寄存器。此后,要對(duì)所述紅分量的數(shù)據(jù)元素執(zhí)行的SIMD操作可以把128位寄存器(實(shí)際上由所述64位寄存器1和2構(gòu)成)指定為源寄存器。
雖然可以以上述方式定義所述固定關(guān)系以便支持上述功能,但是在一個(gè)實(shí)施例中,指定的寄存器是所述寄存器數(shù)據(jù)存儲(chǔ)體內(nèi)的一系列相鄰的寄存器。這在所述單一訪問指令內(nèi)提供特別有效的編碼。
下面將指出,單一訪問指令可以采取各種各樣的形式。但是,在一個(gè)實(shí)施例中,單一訪問指令是單一裝入指令,所述訪問邏輯可以用來響應(yīng)該單一裝入指令,以便把所述多個(gè)數(shù)據(jù)元素從所述連續(xù)的存儲(chǔ)器塊裝入所述指定的寄存器,而且在把所述數(shù)據(jù)元素存儲(chǔ)在所述指定的寄存器之前,通過使不同分量的數(shù)據(jù)元素去交錯(cuò)來重新排列所述數(shù)據(jù)元素,使得不同分量的數(shù)據(jù)元素存儲(chǔ)在所述指定的寄存器的不同寄存器中。
按照所述實(shí)施例,可以用非常有效的方式來管理存儲(chǔ)器訪問,因?yàn)樵L問連續(xù)的存儲(chǔ)器塊的數(shù)據(jù)元素,然后使各個(gè)數(shù)據(jù)元素去交錯(cuò),使得一個(gè)分量的數(shù)據(jù)元素存儲(chǔ)在與另一個(gè)分量的數(shù)據(jù)元素不同寄存器中。這避免在所述單一裝入指令之后執(zhí)行其他指令的必要性,以便在可以執(zhí)行任何SIMD操作以前將所述數(shù)據(jù)重新排列,因此使更充分地實(shí)現(xiàn)SIMD操作的性能優(yōu)勢(shì)成為可能。
按照本發(fā)明一個(gè)實(shí)施例,單一訪問指令可以是單一存儲(chǔ)指令,所述訪問邏輯可以用來響應(yīng)該單一存儲(chǔ)指令,把多個(gè)數(shù)據(jù)元素從所述指定的寄存器存入所述連續(xù)的存儲(chǔ)器塊,并且在把數(shù)據(jù)元素存儲(chǔ)在所述連續(xù)的存儲(chǔ)器塊之前,通過使不同分量的數(shù)據(jù)元素交錯(cuò)來重新排列所述數(shù)據(jù)元素,使得所述數(shù)據(jù)元素以所述結(jié)構(gòu)陣列的形式存儲(chǔ)在所述連續(xù)的存儲(chǔ)器塊中。
設(shè)置一個(gè)把所述數(shù)據(jù)元素從存儲(chǔ)器裝入寄存器以便允許在沒有延遲情況下繼續(xù)進(jìn)行SIMD操作的有效機(jī)構(gòu),下面將指出,從性能觀點(diǎn)看,提供一種類似的有效的技術(shù),一旦所述處理器不再需要這些數(shù)據(jù)元素時(shí),把它們返回存儲(chǔ)到存儲(chǔ)器也是有好處的。按照本發(fā)明的實(shí)施例,訪問邏輯響應(yīng)單一存儲(chǔ)指令而通過使不同分量的數(shù)據(jù)元素交錯(cuò),重新排列所述數(shù)據(jù)元素使得所述數(shù)據(jù)元素隨后以結(jié)構(gòu)陣列的形式存儲(chǔ)在連續(xù)的存儲(chǔ)器塊中。對(duì)所述存儲(chǔ)器的訪問仍然是非常有效的,因?yàn)樗龃鎯?chǔ)器訪問將是對(duì)連續(xù)的存儲(chǔ)器塊的訪問。
在本發(fā)明的一個(gè)實(shí)施例中,單一訪問指令識(shí)別要訪問的結(jié)構(gòu)的數(shù)目。因而這提供額外的靈活性,因?yàn)樵谘b入指令實(shí)例中有可能裝入不完全填充整個(gè)寄存器的數(shù)據(jù)元素的子集。類似地,當(dāng)執(zhí)行存儲(chǔ)指令時(shí),它能夠把寄存器內(nèi)的數(shù)據(jù)元素子集返回存儲(chǔ)到存儲(chǔ)器。
在一個(gè)特定的實(shí)施例中,當(dāng)單一訪問指令是單一裝入指令時(shí),若結(jié)構(gòu)的數(shù)目不足以使指定的寄存器被數(shù)據(jù)元素填滿,則訪問邏輯可以用來使指定的寄存器的任何未填滿部分被一個(gè)或多個(gè)預(yù)定值填滿。下面將指出,所述預(yù)定值可以采取各種各樣的形式。在一個(gè)特定的實(shí)施例中,用邏輯零來填充所述指定的寄存器剩余的未填滿部分。
下面將指出,存儲(chǔ)器的尋址方法可以采取各種各樣的形式。但是,在一個(gè)實(shí)施例中,單一訪問指令識(shí)別要使用的尋址方式,以便識(shí)別要移動(dòng)的數(shù)據(jù)元素。在一個(gè)特定的實(shí)施例中,尋址方式識(shí)別連續(xù)的存儲(chǔ)器塊的起始地址。一般,起始地址不直接編碼在指令內(nèi),而是在所述指令內(nèi)識(shí)別寄存器,并安排所述寄存器來保存所述起始地址。
下面將指出,指定的寄存器可以具有任何適當(dāng)?shù)某叽?。例如,若不同分量的?shù)據(jù)元素具有不同大小,則指定的寄存器具有不同大小可能是適合的。但是,在一個(gè)實(shí)施例中,所述指定的寄存器具有同樣的尺寸。
在本發(fā)明的一個(gè)實(shí)施例中,單一訪問指令可以識(shí)別要對(duì)數(shù)據(jù)元素進(jìn)行的變換,而訪問邏輯可以用來在數(shù)據(jù)元素移動(dòng)時(shí)對(duì)該數(shù)據(jù)元素施加所述變換。所述變換可能采取各種各樣的形式。但是,作為實(shí)例,所述變換可能規(guī)定,在數(shù)據(jù)元素從存儲(chǔ)器裝入時(shí)和存入寄存器之前要對(duì)數(shù)據(jù)元素進(jìn)行符號(hào)擴(kuò)展。因此,作為具體實(shí)例,若數(shù)據(jù)元素是帶符號(hào)的8位數(shù)據(jù)類型,則單一訪問指令可以識(shí)別變換,應(yīng)該把這些數(shù)據(jù)元素符號(hào)擴(kuò)展至16位,然后以帶符號(hào)的16位值的形式存入寄存器。在所述指令內(nèi)指定這樣的變換的一個(gè)路徑是指定要訪問的數(shù)據(jù)元素的數(shù)據(jù)類型和所需的結(jié)果數(shù)據(jù)類型。采用這樣一個(gè)方法便可以設(shè)置有效的機(jī)構(gòu)來允許數(shù)據(jù)元素在從存儲(chǔ)器裝入寄存器時(shí),或在把它們從寄存器返回存儲(chǔ)到存儲(chǔ)器時(shí)進(jìn)行變換。
從第二方面看,本發(fā)明提供一種操作數(shù)據(jù)處理設(shè)備的方法,所述設(shè)備包括寄存器數(shù)據(jù)存儲(chǔ)體,具有多個(gè)寄存器,可以用來保存數(shù)據(jù)元素;以及處理器,可以用來并行地對(duì)在至少一個(gè)寄存器中的被訪問的多個(gè)數(shù)據(jù)元素執(zhí)行數(shù)據(jù)處理操作,所述方法包括以下步驟(a)響應(yīng)單一訪問指令,在指定的寄存器和連續(xù)的存儲(chǔ)器塊之間移動(dòng)多個(gè)數(shù)據(jù)元素,其中數(shù)據(jù)元素是以具有結(jié)構(gòu)格式的結(jié)構(gòu)陣列的形式保存的,所述結(jié)構(gòu)格式具有多個(gè)分量;所述單一訪問指令識(shí)別所述結(jié)構(gòu)格式中的分量的數(shù)目,并且所述方法還包括以下步驟(b)當(dāng)數(shù)據(jù)元素移動(dòng)時(shí)重新排列多個(gè)數(shù)據(jù)元素,使得指定的寄存器保存一個(gè)分量的數(shù)據(jù)元素,而同時(shí)以結(jié)構(gòu)陣列的形式把數(shù)據(jù)元素保存在存儲(chǔ)器中。
從第三方面看,本發(fā)明提供一種包括計(jì)算機(jī)程序的計(jì)算機(jī)程序產(chǎn)品,所述計(jì)算機(jī)程序包括至少一個(gè)單一訪問指令,當(dāng)執(zhí)行所述至少一個(gè)單一訪問指令時(shí)使數(shù)據(jù)處理設(shè)備按照本發(fā)明第二方面的方法運(yùn)行。


現(xiàn)將只以舉例的方式參照在附圖中圖解說明的本發(fā)明的推薦的實(shí)施例進(jìn)一步描述本發(fā)明,附圖中圖1示意地圖解說明一個(gè)集成電路,它既支持傳統(tǒng)的標(biāo)量數(shù)據(jù)處理,又支持SIMD數(shù)據(jù)處理;圖2示意地圖解說明SIMD寄存器數(shù)據(jù)存儲(chǔ)體的讀出和寫入端口配置;圖3示意地圖解說明SIMD讀出和寫入操作,其中目的地寄存器是源寄存器寬度的兩倍;圖4表示用于不同數(shù)據(jù)處理操作的源寄存器尺寸和目的地寄存器尺寸之間不同類型的關(guān)系;圖5示意地圖解說明可以用來按照本技術(shù)定義數(shù)據(jù)處理指令的語法;圖6示意地圖解說明看做64位寄存器和128位寄存器的SIMD寄存器數(shù)據(jù)存儲(chǔ)體;圖7示意地圖解說明64位和128位寄存器之間的重疊(″alising″);圖8示意地圖解說明存儲(chǔ)在不同大小的寄存器內(nèi)的多個(gè)數(shù)據(jù)元素;圖9示意地圖解說明引用SIMD矢量寄存器中的標(biāo)量數(shù)值;圖10示意地圖解說明數(shù)據(jù)處理指令,其中處理通道的數(shù)目和數(shù)據(jù)元素尺寸保持恒定;圖11A和11B示意地圖解說明數(shù)據(jù)處理指令,其中處理通道的數(shù)目保持恒定而數(shù)據(jù)元素尺寸發(fā)生變化;圖12圖解說明SIMD寄存器數(shù)據(jù)存儲(chǔ)體和標(biāo)量寄存器數(shù)據(jù)存儲(chǔ)體之間的數(shù)據(jù)轉(zhuǎn)移;圖13,14和15示意地圖解說明不同寄存器轉(zhuǎn)移指令的操作;圖16是流程圖,圖解說明其中也許有效地使用圖14和15中圖解說明的類型的寄存器轉(zhuǎn)移指令的情況的實(shí)例;圖17是示意圖,示意地圖解說明按照一個(gè)實(shí)施例數(shù)據(jù)元素如何從連續(xù)的存儲(chǔ)器塊裝入某些指定的寄存器;圖18示意地圖解說明按照實(shí)施例可能存在于存儲(chǔ)器內(nèi)的不同結(jié)構(gòu)的某些實(shí)例;圖19A至19C圖解說明按照一個(gè)實(shí)施例單一存儲(chǔ)指令的特定實(shí)例的操作;圖20A至20C圖解說明按照一個(gè)實(shí)施例單一裝入指令的特定實(shí)例的操作;圖21A至21C圖解說明按照一個(gè)實(shí)施例單一裝入指令另一個(gè)特定實(shí)例的操作;圖22A至22C圖解說明按照一個(gè)實(shí)施例單一裝入指令的再一個(gè)特定實(shí)例的操作;圖23是方塊圖,更詳細(xì)地圖解說明圖1的重排序邏輯內(nèi)設(shè)置的邏輯;圖24-26圖解說明按照實(shí)施例用于單一訪問指令四個(gè)不同序列的通過重排序邏輯的數(shù)據(jù)流程;圖27圖解說明已知的折疊操作;圖28圖解說明一個(gè)實(shí)施例的折疊操作;圖29圖解說明另一個(gè)實(shí)施例的折疊操作;圖30a至30d圖解說明不同折疊指令的操作;
圖31示意地圖解說明設(shè)置成執(zhí)行設(shè)置在圖1的SIMD處理邏輯內(nèi)的折疊操作的邏輯;圖32圖解說明矢量-標(biāo)量(vector-by-scalar)指令的操作;圖33圖解說明圖1的SIMD寄存器文件中標(biāo)量操作數(shù)的配置;圖34示意地圖解說明設(shè)置成執(zhí)行設(shè)置在圖1的SIMD處理邏輯內(nèi)的矢量-標(biāo)量操作的邏輯;圖35表示按照先有技術(shù)的右移和高端填充的方法;圖36示意地表示按照本技術(shù)一個(gè)實(shí)施例的右移和變窄(narrow)操作;圖37示意地表示按照本技術(shù)的左移和變窄;圖38示意地表示按照本技術(shù)實(shí)施例的向上類型變換(cast up)和左移;圖39示意地表示數(shù)據(jù)元素移位不同位數(shù);圖40示意地表示傳統(tǒng)的多路復(fù)用器;圖41示意地表示其中按位選擇源值a或b的實(shí)施例;圖42示意地表示其中在數(shù)據(jù)元素的基礎(chǔ)上選擇源值a或b的替代實(shí)施例;圖43示意地表示與本技術(shù)提供的3個(gè)多路復(fù)用指令對(duì)應(yīng)的多路復(fù)用器配置的3個(gè)實(shí)例;;圖44示意地圖解說明取決于字節(jié)序方式以不同布局存儲(chǔ)多個(gè)數(shù)據(jù)元素的SIMD寄存器;圖45示意地圖解說明按照第一實(shí)例的存儲(chǔ)器訪問邏輯和數(shù)據(jù)元素重排序邏輯的操作;圖46示意地圖解說明按照第二實(shí)例的存儲(chǔ)器訪問邏輯和數(shù)據(jù)元素重排序邏輯的操作;圖47示意地更詳細(xì)地圖解說明圖45和46的數(shù)據(jù)元素重排序邏輯的示范實(shí)施例;圖48示意地圖解說明包括用作表寄存器、結(jié)果寄存器和索引寄存器的兩個(gè)寄存器的寄存器數(shù)據(jù)存儲(chǔ)體;圖49示意地圖解說明查表擴(kuò)展指令的操作;圖50示意地圖解說明其他查表擴(kuò)展指令重新使用索引寄存器內(nèi)的索引值以前對(duì)索引寄存器執(zhí)行的處理;圖51示意地圖解說明查表指令的操作,其中零值寫入結(jié)果寄存器中與超位索引值對(duì)應(yīng)的位置上;圖52圖解說明按照一個(gè)實(shí)施例圖1的LSU如何與存儲(chǔ)系統(tǒng)和存儲(chǔ)器管理單元耦合;圖53A至53D是簡(jiǎn)圖,示意地圖解說明按照一個(gè)實(shí)施例要訪問的數(shù)據(jù)塊的不同實(shí)例;圖54A和54B是簡(jiǎn)圖,示意地圖解說明按照一個(gè)實(shí)施例要訪問的數(shù)據(jù)塊的另一個(gè)實(shí)例;圖55A至55C示意地分別圖解說明交錯(cuò)操作、去交錯(cuò)操作和轉(zhuǎn)置操作;圖56A和56B示意地圖解說明按照一個(gè)實(shí)施例如何執(zhí)行交錯(cuò)和轉(zhuǎn)置操作;圖57A至57C圖解說明按照一個(gè)實(shí)施例的指令序列如何可以用來將圖像像素陣列轉(zhuǎn)置;圖58圖解說明一個(gè)實(shí)施例的指令如何可以用來交錯(cuò)復(fù)數(shù)的實(shí)部和虛部;圖59A和59B圖解說明按照一個(gè)實(shí)施例的兩個(gè)指令的序列如何可以用來并行地執(zhí)行兩個(gè)復(fù)數(shù)的乘法;圖60示意地表示返回高半部部的加法運(yùn)算及其關(guān)聯(lián)的指令;圖61示意地表示利用四舍五入的返回高半部部的加法運(yùn)算及其關(guān)聯(lián)的指令;返回高半部圖62示意地表示返回高半部部的減法運(yùn)算及其關(guān)聯(lián)的指令;返回高半部圖63表示從指令產(chǎn)生的可能的常數(shù)表,所述常數(shù)表具有數(shù)據(jù)部分、abcdefgh和與其相聯(lián)系的控制部分;圖64表示常數(shù)產(chǎn)生邏輯;圖65表示具有常數(shù)產(chǎn)生邏輯的數(shù)據(jù)處理器;圖66A和66B示意地表示響應(yīng)具有產(chǎn)生的常數(shù)的兩種類型指令的數(shù)據(jù)處理器;以及圖67表示按照本技術(shù)的掩碼位屏蔽的產(chǎn)生。
實(shí)施例的描述圖1示意地圖解說明數(shù)據(jù)處理系統(tǒng)(集成電路)2,它包括標(biāo)量數(shù)據(jù)處理功能和SIMD數(shù)據(jù)處理功能??梢园褬?biāo)量數(shù)據(jù)處理部分看作是標(biāo)準(zhǔn)ARM處理器核,ARM處理器核包括標(biāo)量寄存器數(shù)據(jù)存儲(chǔ)體4、乘法器6、位移器8、加法器10、指令流水線12和標(biāo)量譯碼器14以及許多其它電路元件(為清晰起見,圖中未示出)。工作時(shí),這樣的一個(gè)標(biāo)量處理器核在標(biāo)量寄存器數(shù)據(jù)存儲(chǔ)體4內(nèi)存儲(chǔ)固定長(zhǎng)度的32位數(shù)據(jù)值并在沿著指令流水線12傳送并提供給標(biāo)量譯碼器14的數(shù)據(jù)處理指令的控制下利用乘法器6、位移器8和加法器10處理所述固定長(zhǎng)度的32位數(shù)據(jù)值。標(biāo)量譯碼器14產(chǎn)生控制信號(hào),所述控制信號(hào)以傳統(tǒng)方法控制標(biāo)量處理元素的操作。
如在圖1中圖解說明的,集成電路2包括不同專用SIMD處理元素,包括SIMD寄存器數(shù)據(jù)存儲(chǔ)體20、專用SIMD處理邏輯18和重排序邏輯24。裝入存儲(chǔ)單元22與所述標(biāo)量部分共享,并且可以是標(biāo)量處理器內(nèi)傳統(tǒng)上找到的裝入存儲(chǔ)單元的相同的或修改的版本。
利用附加的流水線級(jí)來擴(kuò)展指令流水線12,所述附加流水線級(jí)用來通過專用SIMD譯碼器16控制SIMD處理操作。(下面將指出,在其他實(shí)施例中,可以與標(biāo)量流水線平行設(shè)置SIMD流水線。)SIMD譯碼器16產(chǎn)生SIMD控制信號(hào),控制SIMD處理元件,諸如讀出SIMD寄存器、寫入SIMD寄存器和配置SIMD處理邏輯,以便執(zhí)行所需數(shù)據(jù)處理操作。SIMD流水線級(jí)跟在標(biāo)量級(jí)后面,使得處理器的SIMD部分有效地看到對(duì)所述標(biāo)量部分的不同執(zhí)行點(diǎn)。這可以造成某些聯(lián)鎖的必要性,如下面將要討論的。
重排序邏輯24服務(wù)于以下目的把從耦合到集成電路2的存儲(chǔ)器(未示出)檢索到的數(shù)據(jù)元素重排序成更適宜于所需的SIMD處理操作的順序。重排序邏輯24,它的操作和優(yōu)點(diǎn)將在下面進(jìn)一步討論。在裝入存儲(chǔ)單元(LSU)22和重排序邏輯24之間還設(shè)置裝入和存儲(chǔ)FIFO(先進(jìn)先出)23和23′。
在所述實(shí)例中可以認(rèn)為標(biāo)量寄存器數(shù)據(jù)存儲(chǔ)體4分為固定數(shù)目的固定長(zhǎng)度的寄存器,諸如傳統(tǒng)的16個(gè)32位ARM寄存器。反之,SIMD寄存器數(shù)據(jù)存儲(chǔ)體20提供存儲(chǔ)塊,可以根據(jù)與所涉及的SIMD數(shù)據(jù)處理指令相聯(lián)系的參數(shù),以靈活的方式對(duì)它們進(jìn)行尋址/訪問。更具體地說,SIMD數(shù)據(jù)處理指令指定源和目的地寄存器的數(shù)目、數(shù)據(jù)元素大小和與所述數(shù)據(jù)處理指令相聯(lián)系的寄存器大小。這些參數(shù)由SIMD譯碼器16和寄存器數(shù)據(jù)存儲(chǔ)體20的讀出/寫入端口組合在一起,以便控制不同部分和相應(yīng)地存儲(chǔ)在SIMD寄存器數(shù)據(jù)存儲(chǔ)體20內(nèi)的數(shù)據(jù)元素到所訪問的寄存器的映射。因而,可以有效地把不同大小的SIMD寄存器、不同數(shù)據(jù)元素大小等等共同化名(aliased together)(亦即,可以認(rèn)為這些寄存器是重疊的并且在需要的時(shí)候可以通過不同寄存器說明符、寄存器尺寸和數(shù)據(jù)元素尺寸組合進(jìn)行訪問。在所述示范實(shí)施例中,可以認(rèn)為SIMD譯碼器16和讀出/寫入端口提供寄存器訪問邏輯)。
圖2示意地圖解說明可以為SIMD寄存器數(shù)據(jù)存儲(chǔ)體20設(shè)置的讀出和寫入端口配置。在所述實(shí)例中,32個(gè)SIMD寄存器能夠由SIMD數(shù)據(jù)處理指令內(nèi)的寄存器指定字段(5位)指定。N個(gè)讀出端口與SIMD寄存器數(shù)據(jù)存儲(chǔ)體20相聯(lián)系。所支持的最小粒度是64位寄存器數(shù)值。在所述實(shí)例中,直接支持的寄存器大小是64位和128位。本領(lǐng)域的技術(shù)人員不難理解,可以將這種配置按比例縮放,以便直接支持256位和更高的寄存器大小,或通過利用所支持的指令將尺寸較小的寄存器合成來間接地支持更高的寄存器大小。圖2示意地圖解說明M個(gè)多路分解器用作SIMD寄存器數(shù)據(jù)存儲(chǔ)體20的寫入端口。下面將指出,在實(shí)踐中,這樣的多路分解器是以到達(dá)SIMD寄存器數(shù)據(jù)存儲(chǔ)體內(nèi)的存儲(chǔ)器元件行的適當(dāng)?shù)亩ㄏ蚴鼓苄盘?hào)以及多路復(fù)用器的把所需的輸入路由到它們的目的地的操作的形式來提供的。
圖3圖解說明特定的實(shí)例,其中每一個(gè)包含多個(gè)數(shù)據(jù)元素的兩個(gè)64位SIMD寄存器值(表示為D雙字長(zhǎng))相乘,以便產(chǎn)生多個(gè)輸出數(shù)據(jù)元素,所述多個(gè)輸出數(shù)據(jù)元素一起存儲(chǔ)在128位寄存器(標(biāo)示為Q四倍長(zhǎng)字)中。各單獨(dú)的讀出端口設(shè)置成從SIMD寄存器數(shù)據(jù)存儲(chǔ)體20讀出源SIMD寄存器值D1和D2。兩個(gè)寫入端口共同操作,以便分別允許把128位結(jié)果的第一Q[63:0]部分和第二Q[127:64]部分返回寫入到SIMD寄存器存儲(chǔ)體20。下面將指出,所述D寄存器和所述Q寄存器內(nèi)的數(shù)據(jù)元素尺寸可以改變。作為實(shí)例,每一個(gè)源D寄存器內(nèi)可以包含四個(gè)16-位數(shù)據(jù)元素,而所述目的地Q寄存器包含一組作為所述乘法的結(jié)果的相應(yīng)的四個(gè)32位數(shù)據(jù)元素。在所述實(shí)例中,將會(huì)看出,并行處理的通道的數(shù)目(四)如何保持恒定,而所述數(shù)據(jù)元素尺寸根據(jù)正在執(zhí)行的乘法操作的需要如何從16位增大至32位。
圖4圖解說明可以支持的源寄存器尺寸和目的地寄存器尺寸之間的不同類型的關(guān)系。在最上面的實(shí)例中假定并行處理通道的數(shù)目保持恒定,而且數(shù)據(jù)元素的尺寸保持恒定。在第二和第四實(shí)例中,并行處理的通道的數(shù)目保持恒定,但在源和目的地之間,數(shù)據(jù)元素尺寸發(fā)生變化。在第三實(shí)例中,兩個(gè)源元素具有不同的數(shù)據(jù)元素大小。如下面將進(jìn)一步描述的,SIMD處理結(jié)構(gòu)和現(xiàn)有系統(tǒng)的技術(shù)支持這些不同類型的數(shù)據(jù)處理指令。最后3個(gè)實(shí)例是單一輸入變量的一元運(yùn)算。第五實(shí)例保持相同的數(shù)據(jù)元素尺寸。第六實(shí)例使數(shù)據(jù)元素尺寸加大一倍,而第七實(shí)例使數(shù)據(jù)元素的尺寸縮小一倍。
圖5示意地圖解說明SIMD數(shù)據(jù)處理指令的語法。所述語法的第一部分指定所涉及的SIMD算符,在這種情況下是乘法操作。這后跟著指示輸出數(shù)據(jù)元素尺寸和輸出數(shù)據(jù)元素的其他特性的字段。在所述實(shí)例中,輸出數(shù)據(jù)元素長(zhǎng)度是16位,而且是帶符號(hào)的整數(shù)。下一個(gè)字段指示輸入數(shù)據(jù)元素的尺寸和特性,在這種情況下,是帶符號(hào)的8位整數(shù)。下一個(gè)字段指示目的地寄存器尺寸和寄存器說明符。在所述實(shí)例中,具有寄存器說明符12的所述128位四字SIMD寄存器將用作SIMD目的地寄存器。兩個(gè)源SIMD寄存器各自是具有寄存器說明符(分別是″1″和″4″)的雙字64位寄存器。下面描述所述語法的其他信息。
定義一組數(shù)據(jù)類型來代表不同數(shù)據(jù)格式。這在表0中描述。大部分指令使用至少一個(gè)數(shù)據(jù)類型限定符來確定精確的操作。但是,操作不一定支持所有數(shù)據(jù)類型。所述數(shù)據(jù)類型用作所述字段的后綴,指示數(shù)據(jù)元素尺寸和特性。

表0圖6圖解說明如何可以把SIMD寄存器數(shù)據(jù)存儲(chǔ)體20看作分為32個(gè)64位寄存器或16個(gè)128位寄存器。這些寄存器映射到相同的物理的SIMD寄存器數(shù)據(jù)存儲(chǔ)體20和相應(yīng)地在一起用別名稱呼。作為實(shí)例,寄存器D0內(nèi)的數(shù)據(jù)元素也可以作為寄存器Q0內(nèi)的數(shù)據(jù)元素被訪問。
圖7進(jìn)一步示意地圖解說明64位和128位寄存器之間的重疊。如圖解說明的,128位寄存器Q(n)對(duì)應(yīng)于兩個(gè)64位寄存器D(2n+1)和D(2n)。
圖8示意地圖解說明可以存儲(chǔ)在不同大小的SIMD寄存器內(nèi)的范例數(shù)據(jù)元素。在圖8的上部,以或者包含四個(gè)32位數(shù)據(jù)元素或者包含八個(gè)16位數(shù)據(jù)元素的形式圖解說明128位SIMD寄存器。所述數(shù)據(jù)元素根據(jù)需要可以是帶符號(hào)的或不帶符號(hào)的整數(shù)、浮點(diǎn)數(shù)或其它格式的數(shù),并適應(yīng)要執(zhí)行的并行處理。
圖8的下部圖解說明64位SIMD寄存器,它可以或者包含兩個(gè)帶符號(hào)的32位整數(shù)或者包含四個(gè)不帶符號(hào)的16位整數(shù)??梢杂性S多其它可能性,而且對(duì)本技術(shù)領(lǐng)域的技術(shù)人員將是顯而易見的。
圖9示意地圖解說明如何可以引用SIMD寄存器內(nèi)的各個(gè)標(biāo)量值。圖解說明的SIMD寄存器26包含四個(gè)帶符號(hào)的整數(shù)值。若把所述SIMD寄存器看作寄存器Dn,則不同的各自帶符號(hào)的整數(shù)值可以標(biāo)示為Dn[3]至Dn
。例如,當(dāng)執(zhí)行選擇SIMD寄存器內(nèi)哪一個(gè)數(shù)據(jù)元素并將其移到標(biāo)量寄存器數(shù)據(jù)存儲(chǔ)體4內(nèi)的寄存器或由其中移出的寄存器轉(zhuǎn)移指令時(shí),采取這種引用SIMD寄存器內(nèi)的各個(gè)數(shù)據(jù)元素的方式。
圖10圖解說明如何可以在兩個(gè)源寄存器和目的地寄存器之間在處理通道的數(shù)目保持恒定和數(shù)據(jù)元素尺寸保持恒定的情況下執(zhí)行SIMD數(shù)據(jù)處理指令。在所述實(shí)例中,源SIMD寄存器是具有四個(gè)并行處理通道的D寄存器(64位和包含四個(gè)16位數(shù)據(jù)元素)。目的地SIMD寄存器也是64位D寄存器,包含四個(gè)結(jié)果16位數(shù)據(jù)元素值。
與圖10形成對(duì)照,圖11A圖解說明其中目的地SIMD寄存器寬度是所述源SIMD寄存器的兩倍的實(shí)例。處理通道的數(shù)目保持恒定,但數(shù)據(jù)元素尺寸加大一倍。所述類型的行為適合用于SIMD操作,諸如乘法、加法、減法和移位(特別是左移)。圖11B圖解說明其中目的地SIMD寄存器的寬度是源SIMD寄存器的一半。所述指令類型對(duì)加法和移位(特別是右移)是有用的。
在源和目的地之間改變數(shù)據(jù)元素尺寸而同時(shí)處理通道的數(shù)目維持不變的能力,允許在不要求作為所執(zhí)行的數(shù)據(jù)處理操作產(chǎn)生的數(shù)據(jù)元素尺寸變化的結(jié)果而將數(shù)據(jù)元素重排序或?qū)⒅噶顚?duì)折的情況下構(gòu)建SIMD數(shù)據(jù)處理指令序列。這在處理速度、代碼密度、功率消耗等等方面是重大的優(yōu)點(diǎn)。
圖12示意地圖解說明通過寄存器轉(zhuǎn)移邏輯28耦合在一起的標(biāo)量寄存器數(shù)據(jù)存儲(chǔ)體4和SIMD寄存器數(shù)據(jù)存儲(chǔ)體20。從標(biāo)量譯碼器14或SIMD譯碼器16之一或兩個(gè)接收的控制信號(hào)響應(yīng)指令流水線12內(nèi)的寄存器轉(zhuǎn)移指令而控制寄存器轉(zhuǎn)移邏輯28,以便在標(biāo)量寄存器數(shù)據(jù)存儲(chǔ)體4內(nèi)的指定的寄存器和SIMD寄存器數(shù)據(jù)存儲(chǔ)體20的指定的寄存器內(nèi)的指定位置之間移動(dòng)數(shù)據(jù)。從標(biāo)量寄存器向SIMD寄存器移動(dòng)的數(shù)據(jù)值也可以拷貝到SIMD寄存器內(nèi)的所有位置上,如在圖13中圖解說明的。所述類型的利用復(fù)制的寄存器轉(zhuǎn)移指令非常適宜于利用需要通過SIMD處理邏輯18應(yīng)用于SIMD寄存器內(nèi)不同的其它操作數(shù)的數(shù)值,諸如按比例縮放的數(shù)值,把所有處理通道快速插裝到SIMD寄存器內(nèi)。
圖14圖解說明不同類型的寄存器轉(zhuǎn)移指令。在所述實(shí)例中,32位標(biāo)量數(shù)值A(chǔ)移動(dòng)到SIMD寄存器內(nèi)的指定位置(通道)。其他通道維持它們?cè)瓉淼臄?shù)值不變。所述標(biāo)量值不復(fù)制到整個(gè)標(biāo)量寄存器中。目的地標(biāo)量寄存器內(nèi)的位置可以通過寄存器轉(zhuǎn)移指令內(nèi)的適當(dāng)字段值改變。所述類型的操作允許利用從標(biāo)量寄存器數(shù)據(jù)存儲(chǔ)體檢索到的數(shù)據(jù)值把各個(gè)數(shù)據(jù)元素插裝到SIMD寄存器內(nèi)。
圖15圖解說明寄存器轉(zhuǎn)移指令的另一種類型。在所述實(shí)例中,來自SIMD寄存器內(nèi)的16位數(shù)據(jù)元素被從所述SIMD寄存器內(nèi)的指定可變位置取出并拷貝到所述標(biāo)量寄存器之一。因?yàn)樗鰳?biāo)量寄存器是32位寄存器,所以所述數(shù)據(jù)元素在所述實(shí)例中進(jìn)行符號(hào)擴(kuò)展。所述數(shù)據(jù)元素可以代之以被零擴(kuò)展,取決于特定算法或系統(tǒng)的要求。
圖16是流程圖,示意地圖解說明一個(gè)實(shí)例類型的處理,其中可以有利地使用圖14和圖15的寄存器轉(zhuǎn)移指令。在步驟30,并行地對(duì)多個(gè)通道執(zhí)行某個(gè)SIMD處理,其中每個(gè)通道都包含它們自己的數(shù)據(jù)元素。有時(shí),所述處理過程要求執(zhí)行所述SIMD處理邏輯18不支持的,或只能效率不高地支持的數(shù)據(jù)處理。在這種情況下,為了允許執(zhí)行這種復(fù)雜的數(shù)據(jù)操作,希望單獨(dú)地把各個(gè)數(shù)據(jù)元素在整個(gè)標(biāo)量處理系統(tǒng)中移動(dòng)。步驟32選擇第一個(gè)要移動(dòng)的數(shù)據(jù)元素。然后,步驟34執(zhí)行寄存器轉(zhuǎn)移指令,諸如在圖15中圖解說明的。步驟36對(duì)現(xiàn)在處于所述系統(tǒng)標(biāo)量部分的各個(gè)數(shù)據(jù)元素執(zhí)行所需的復(fù)雜的處理。當(dāng)所述復(fù)雜的處理已經(jīng)完成時(shí),步驟38執(zhí)行寄存器轉(zhuǎn)移指令,諸如在圖14中圖解說明的,以便現(xiàn)在把修改后的數(shù)據(jù)元素送回它原來的位置。步驟40判斷是否已經(jīng)達(dá)到最后一個(gè)數(shù)據(jù)元素,若非如此,則在處理過程回到步驟34以前的步驟42,選擇下一個(gè)數(shù)據(jù)元素。若要求對(duì)其執(zhí)行復(fù)雜的操作的全部數(shù)據(jù)元素都已經(jīng)在所述標(biāo)量系統(tǒng)移動(dòng)、對(duì)其進(jìn)行了所需的處理并將其移回到SIMD系統(tǒng),則處理過程從步驟40進(jìn)到步驟44,在這里繼續(xù)進(jìn)行并行的SIMD處理。
為訪問所述寄存器數(shù)據(jù)存儲(chǔ)體而指定SIMD寄存器的數(shù)據(jù)處理指令包括一個(gè)或多個(gè)寄存器字段,所述一個(gè)或多個(gè)寄存器字段把待訪問的寄存器的寄存器numver編碼。所用的5位寄存器說明符設(shè)計(jì)成與ARM矢量浮點(diǎn)(VFP)單元使用的相同,就是說,指定寄存器是指令位是*對(duì)于目的地寄存器D=bit[22]Rd=bits[15:12]*對(duì)于第一源寄存器說明符N=bit[7]Rn=bits[19:16]*對(duì)于第二源寄存器說明符m=bit[5]Rm=bits[3:0]另外,這樣選擇這些位的使用,以便分別以與VFP指定雙精度和單精度寄存器的方式一致地對(duì)Di寄存器和字標(biāo)量進(jìn)行編碼,并且對(duì)Qi寄存器和半字標(biāo)量的編碼遵循相同的原則。以下描述如何使用(D,Rd);(N,Rn)和(M,Rm)用法類似QdQi寄存器號(hào)是(D,Rd[3],Rd[2],Rd[1]),相應(yīng)的Di寄存器號(hào)是(D,Rd[3],Rd[2],Rd[1],0)和(D,Rd[3],Rd[2],Rd[1],1)Rd
應(yīng)為零DdDi寄存器號(hào)是(D,Rd[3],Rd[2],Rd[1],Rd
)字標(biāo)量Di寄存器號(hào)是(0,Rd[3],Rd[2],Rd[1],Rd
)字[D]按小尾端方式選自寄存器半字標(biāo)量Di寄存器號(hào)是(0,0,Rd[2],Rd[1],Rd
)半字[(D,Rd[[3)]按小尾端方式選自寄存器。
字節(jié)標(biāo)量Di寄存器號(hào)是(0,0,0,Rd[1],Rd
)字節(jié)[(D,Rd[3],Rd[2])]按小尾端方式選自寄存器因此,可以認(rèn)為位D,Rd[3],Rd[2],Rd[1]和Rd
可以映射到5位連續(xù)字段,所述5位連續(xù)字段可以旋轉(zhuǎn)若干位的位置,取決于所述寄存器號(hào)的寄存器尺寸。在實(shí)踐中,不是以單獨(dú)的操作的形式來映射或旋轉(zhuǎn)寄存器編碼位的,而是向寄存器提供訪問邏輯,以便利用根據(jù)寄存器尺寸施加的可移動(dòng)掩碼來形成用于訪問所述寄存器數(shù)據(jù)存儲(chǔ)體的行地址和列地址,以便選擇正確的位部分用作行和部分列地址。
按照實(shí)施例,為在SIMD寄存器文件20(見圖1)和存儲(chǔ)器之間移動(dòng)數(shù)據(jù)而提供裝入和存儲(chǔ)指令。裝入指令可以用來把數(shù)據(jù)元素從存儲(chǔ)器裝入指定的寄存器,而存儲(chǔ)指令用來把數(shù)據(jù)元素從指定的寄存器存儲(chǔ)到存儲(chǔ)器。這些裝入和存儲(chǔ)指令用來支持利用SIMD處理邏輯18的算法所需的數(shù)據(jù)的移動(dòng)。所述實(shí)施例的裝入和存儲(chǔ)指令指定所裝入和存儲(chǔ)的數(shù)據(jù)元素的尺寸,而所述信息用來提供寄存器內(nèi)的相容次序,而與存儲(chǔ)系統(tǒng)的字節(jié)序無關(guān)。
這些實(shí)施例的裝入和存儲(chǔ)指令允許若干數(shù)據(jù)元素從連續(xù)的存儲(chǔ)器塊裝入SIMD寄存器文件20或從SIMD寄存器文件20存儲(chǔ)到存儲(chǔ)器。按照一個(gè)實(shí)施例,訪問可以以任何字節(jié)對(duì)齊方式執(zhí)行,而且裝入或存儲(chǔ)多達(dá)32字節(jié)。
一些實(shí)施例的裝入和存儲(chǔ)指令被認(rèn)為能訪問來自存儲(chǔ)器的數(shù)據(jù),其中數(shù)據(jù)元素排列成結(jié)構(gòu),而且每一個(gè)結(jié)構(gòu)具有若干分量。按照一個(gè)實(shí)施例,存儲(chǔ)器中所述結(jié)構(gòu)包含一個(gè)和四個(gè)分量之間,其中一個(gè)分量可以具有SIMD處理邏輯18所識(shí)別的任何數(shù)據(jù)類型尺寸,在推薦的實(shí)施例中,這些數(shù)據(jù)類型大小是8,16,32或64位。
實(shí)施例中使用的結(jié)構(gòu)格式的某些公用的實(shí)例列于下表

表1
對(duì)于任何特定的裝入或存儲(chǔ)指令,作為訪問對(duì)象的存儲(chǔ)器中的每一個(gè)結(jié)構(gòu)都將具有相同的結(jié)構(gòu)格式,相應(yīng)地將包括相同數(shù)目的分量。裝入和存儲(chǔ)指令設(shè)置成識(shí)別所述結(jié)構(gòu)格式中分量的數(shù)目,而所述信息由重排序邏輯24使用,以便當(dāng)執(zhí)行裝入操作時(shí),提供數(shù)據(jù)元素的去交錯(cuò),而當(dāng)執(zhí)行存儲(chǔ)操作時(shí),提供數(shù)據(jù)元素的交錯(cuò),允許在寄存器中這樣設(shè)置數(shù)據(jù),使得所述結(jié)構(gòu)的不同數(shù)據(jù)元素出現(xiàn)在不同寄存器。在圖17中針對(duì)裝入指令用來從連續(xù)的存儲(chǔ)器塊把若干數(shù)據(jù)元素裝入3個(gè)指定的寄存器的情況,示意地圖解說明所述概念。在所述實(shí)例中,所述指定的寄存器是3個(gè)64位寄存器D0220,D1225和D2230。在所述實(shí)例中,所述結(jié)構(gòu)格式是3D矢量格式,相應(yīng)地每一個(gè)結(jié)構(gòu)210在存儲(chǔ)器200中具有3個(gè)分量215。
如圖1所示,把裝入指令從指令流水線12路由到標(biāo)量譯碼器14,產(chǎn)生適當(dāng)?shù)拇鎯?chǔ)器訪問控制信號(hào),送往裝入存儲(chǔ)單元(LSU)22。然后,LSU從連續(xù)的存儲(chǔ)器塊訪問所需的四個(gè)結(jié)構(gòu)A
,A[1],A[2]和A[3]。相應(yīng)地,LSU 22可以以它的正常方式運(yùn)行。此后,通過重排序邏輯24來路由數(shù)據(jù),設(shè)置成所述重排序邏輯24設(shè)置成將每一個(gè)結(jié)構(gòu)中的3個(gè)分量去交錯(cuò),使得屬于X分量的數(shù)據(jù)元素被路由到寄存器D0220,屬于Y的數(shù)據(jù)元素被路由到寄存器D1225,而屬于分量Z的元素被路由到寄存器D2230。
以裝入操作的一部分的形式從結(jié)構(gòu)的陣列裝入并把信息分解到各單獨(dú)的寄存器的能力可以用來允許數(shù)據(jù)立即就緒用于有效的SIMD處理。
重排序邏輯24還設(shè)置成,當(dāng)把數(shù)據(jù)從指定的寄存器返回存儲(chǔ)到連續(xù)的存儲(chǔ)器塊時(shí),執(zhí)行類似的處理,在所述實(shí)例中,重排序邏輯24執(zhí)行交錯(cuò)操作,以便在把數(shù)據(jù)存入存儲(chǔ)器之前重現(xiàn)所述結(jié)構(gòu)格式。
如從圖1可以看到的,在那些裝入指令達(dá)到指令流水線12的SIMD各級(jí)之前,這些指令從指令流水線被路由到標(biāo)量譯碼器14。這使得與在其他情況下可能達(dá)到的相比,能夠較早出現(xiàn)把數(shù)據(jù)裝入SIMD寄存器文件20的過程,并具有如下好處,即,隨后的SIMD處理指令在它開始執(zhí)行以前一般地不必等待數(shù)據(jù)裝入,由此從而顯著地縮短裝入操作的傳輸延遲時(shí)間。但是,存儲(chǔ)指令將需要通過指令流水線直到它們可以被路由到SIMD譯碼器16為止,由此可以用適當(dāng)?shù)目刂菩盘?hào)來控制對(duì)來自SIMD寄存器文件20的數(shù)據(jù)的訪問,并在數(shù)據(jù)通過LSU 22被返回存儲(chǔ)到所述存儲(chǔ)器之前在重排序邏輯24內(nèi)適當(dāng)?shù)刂嘏判?。但是,可以?zhí)行存儲(chǔ)指令的某些部分,同時(shí)在指令流水線12的ARM部分中例如檢查所地址、存儲(chǔ)器訪問許可等,以便保證所述指令不會(huì)導(dǎo)致數(shù)據(jù)中斷。
可以把這些實(shí)施例的裝入和存儲(chǔ)指令看作遵循單一語法。所述語法可以表達(dá)如下V(LD|ST)<st>,<dt>{@<a>}<reglist>,{<n>,}<addr>
其中


按照實(shí)施例,尋址方式可以采取各種各樣的形式,具體地說3種形式圖解說明如下;//<addr> ;//address=Rn[Rn]?。?/address Rn,Rn=Rn+傳輸尺寸(其中″傳輸尺寸″是所訪問的存儲(chǔ)器數(shù)量)[Rn],Rm;//address=Rn,Rn=Rn+Rm上面討論的語義允許裝入或存儲(chǔ)單個(gè)結(jié)構(gòu)或多個(gè)結(jié)構(gòu),把邏輯零寫入寄存器中不被存儲(chǔ)器數(shù)據(jù)填充的剩余部分,并利用包含標(biāo)量限定符(例如,D0)的寄存器清單來插入寄存器。下面將指出,在各實(shí)施例中,所提供的實(shí)際的裝入和存儲(chǔ)指令一般是上述語法所有可能的組合的子集。
在結(jié)構(gòu)格式方面,圖18圖解說明三個(gè)可能的結(jié)構(gòu)格式實(shí)例,和它們對(duì)應(yīng)的”st”值。如可以從圖18中可以看到的,第一結(jié)構(gòu)250只有單一個(gè)分量,并相應(yīng)地st值為1。在第二個(gè)實(shí)例中,結(jié)構(gòu)255具有2個(gè)分量,例如,代表復(fù)數(shù)的實(shí)部x和虛部y,而相應(yīng)地s t值為2。最后,在第三個(gè)實(shí)例中,結(jié)構(gòu)260具有3個(gè)分量,代表R,G和B數(shù)據(jù)元素,相應(yīng)地st值為3。
為了幫助圖解說明利用實(shí)施例的裝入和存儲(chǔ)指令時(shí)可用的某些功能,圖19-22圖解說明裝入和存儲(chǔ)指令的具體實(shí)例。首先考慮條19A-19C,圖19A圖解說明由存儲(chǔ)指令指定的寄存器清單狀態(tài)VST 2.16{D0,D1,D2,D3}[r1]所述指令用來把多個(gè)結(jié)構(gòu)從指定的寄存器文件存儲(chǔ)到連續(xù)的存儲(chǔ)器塊。如可以看出的,圖19A識(shí)別包括4個(gè)指定的寄存器D0270,D1280,D2290,D3300的寄存器。如圖19B所示,可以認(rèn)為這些寄存器是被分為”st”(亦即,2)個(gè)”dt”尺寸(亦即,16位)數(shù)據(jù)元素的矢量。在寄存器D0中,這些數(shù)據(jù)元素用數(shù)字275標(biāo)記,在寄存器D0中,這些數(shù)據(jù)元素用數(shù)字275標(biāo)記,在D1中用數(shù)字285標(biāo)記,在D2中用數(shù)字295標(biāo)記,在D3中用數(shù)字305標(biāo)記。如圖19C所示,重排序邏輯24設(shè)置成交錯(cuò)來自這兩個(gè)矢量的數(shù)據(jù)元素,使得每一個(gè)數(shù)據(jù)元素314按結(jié)構(gòu)312所需的結(jié)構(gòu)格式存儲(chǔ)在存儲(chǔ)器310中。
圖20A至20C是一組類似的簡(jiǎn)圖,圖解說明所述指令執(zhí)行的操作。
VLD2.16{D0,D1},#1,[r1]圖20A圖解說明寄存器清單(reglist)狀態(tài)的集合,標(biāo)識(shí)寄存器D0 270和D1 280。然后,圖20B圖解說明這些寄存器如何被分為dt大小的(亦即,16位)數(shù)據(jù)元素的st(亦即,2)個(gè)矢量。
與圖19A至19C的實(shí)例形成對(duì)照,所述指令指定″n″個(gè)參數(shù),標(biāo)識(shí)要訪問的結(jié)構(gòu)的數(shù)目,在所述實(shí)例中,n是1。相應(yīng)地,對(duì)于所述裝入指令,需要在有效的地址開始從存儲(chǔ)器讀出n×st(亦即,1×2)個(gè)數(shù)據(jù)元素,然后從第一矢量的最低的索引元素開始將其以循環(huán)分配方式分布在各矢量中。所述處理在圖20C中圖解說明,并產(chǎn)生寫入寄存器D0最低的16位的第一分量314的數(shù)據(jù)元素xo,而同時(shí)第二分量的數(shù)據(jù)元素yo寫入寄存器D1最低的16位。按照所述實(shí)施例,一旦全部數(shù)據(jù)元素都已經(jīng)裝入,所述寄存器狀態(tài)沒有寫入的任何部分都設(shè)置為零。應(yīng)該指出,對(duì)于等效的存儲(chǔ)指令,n×st個(gè)數(shù)據(jù)元素以與裝入相反的方式存儲(chǔ)。
圖21A至21C圖解說明另一個(gè)特定實(shí)例,其中所述指令用的語法擴(kuò)展到允許指定兩個(gè)數(shù)據(jù)類型,就是說,要訪問的數(shù)據(jù)元素用的數(shù)據(jù)類型和要裝入這些寄存器或存儲(chǔ)到存儲(chǔ)器的結(jié)果數(shù)據(jù)元素用的數(shù)據(jù)類型。相應(yīng)地圖21A至21C圖解說明所述指令所執(zhí)行的操作VLD 2.32.S 16{D0,D1,D2,D 3},[r1]
如圖21A所示,收集所述寄存器清單狀態(tài),標(biāo)識(shí)寄存器D0270,D1 280,D2 290和D3 300。然后,如圖21B所示,把所述寄存器狀態(tài)分為dt大小(亦即,32位)的數(shù)據(jù)元素的st(亦即,2)個(gè)矢量,因?yàn)樗鲋噶钜?guī)定到所述數(shù)據(jù)元素被存入寄存器時(shí)它們的長(zhǎng)度是32位。
如所述指令還指定的,存儲(chǔ)器中的數(shù)據(jù)元素是16位長(zhǎng)度,因此相應(yīng)地一旦所述數(shù)據(jù)元素已經(jīng)從存儲(chǔ)器310被訪問,它們將通過用來擴(kuò)展16位數(shù)據(jù)元素中的每一個(gè)的某些變換邏輯340(它們?nèi)芜x地可以作為重排序邏輯24的一部分被引入)來形成各新的32位數(shù)據(jù)元素342。將這些數(shù)據(jù)元素去交錯(cuò),使得第一分量的數(shù)據(jù)元素存儲(chǔ)在寄存器D0和D1內(nèi),而同時(shí)第二分量的數(shù)據(jù)元素存儲(chǔ)在寄存器D2和D3內(nèi)。
圖22A至22C圖解說明另一個(gè)實(shí)例并具體地圖解說明所述指令的操作。
VLD2.16{D0[2],D1[2]},[r1]盡管所述指令可以與以前的指令共享相同的語法,但所述指令在概念上是不同類型的指令,因?yàn)樗皇菑倪B續(xù)的存儲(chǔ)器塊裝入數(shù)據(jù)元素,在所述連續(xù)的存儲(chǔ)器塊中數(shù)據(jù)元素是以結(jié)構(gòu)的陣列的形式存儲(chǔ)的,所述裝入指令只裝入單個(gè)結(jié)構(gòu)。另外,所述裝入的單一結(jié)構(gòu)的數(shù)據(jù)元素可以放入所述指定的寄存器內(nèi)任何選擇的處理通道。因而,當(dāng)考慮64位寬的寄存器和16位數(shù)據(jù)元素時(shí),存在四個(gè)可能的處理通道,可以把數(shù)據(jù)元素放入所述四個(gè)可能的處理通道內(nèi)。在推薦的實(shí)施例中,選擇通過標(biāo)識(shí)特定通道來指示所述寄存器清單數(shù)據(jù)內(nèi)的用于特定指令的選擇的通道。
考慮圖22A,可以看出,當(dāng)收集寄存器清單狀態(tài)時(shí),它標(biāo)識(shí)寄存器D0的通道2 320和寄存器D1的通道2 325。如圖22B所示,然后它們分為dt大小(亦即,16位)數(shù)據(jù)元素的st(亦即,2)個(gè)矢量。此后,如圖22C所示,一旦已經(jīng)從存儲(chǔ)器310訪問結(jié)構(gòu)312,重排序邏輯24被安排來把數(shù)據(jù)元素xo送至寄存器D0 330的通道2,而同時(shí)把數(shù)據(jù)元素yo送至D1寄存器335的通道2。在所述實(shí)例中,下面將指出,可以在從0至3的范圍內(nèi)標(biāo)識(shí)這些通道。
對(duì)于有興趣的讀者,下表標(biāo)識(shí)可以在特定的實(shí)施例中提供的各種不同類型的裝入和存儲(chǔ)指令


表2


表3


表4


表5在一個(gè)實(shí)施例中,圖1的重排序邏輯24采取在圖23中圖解說明的形式。圖23的邏輯在它的輸入端包括兩個(gè)多路復(fù)用器350、355,它們?cè)谘b入指令時(shí)設(shè)置成從與在圖1中圖解說明的LSU 22相聯(lián)系的裝入FIFO 23接收數(shù)據(jù),或在存儲(chǔ)指令時(shí)設(shè)置成從SIMD寄存器存儲(chǔ)體20接收數(shù)據(jù)。另外,在某些情況下,裝入指令還可以使圖23的邏輯從SIMD寄存器存儲(chǔ)體20接收數(shù)據(jù)。控制多路復(fù)用器350、355以便在不同輸入之間進(jìn)行選擇,并把選擇的輸入路由到相關(guān)的輸入寄存器360、365。在一個(gè)實(shí)施例中,每一個(gè)輸入寄存器都能存儲(chǔ)64位數(shù)據(jù)。然后,把存儲(chǔ)在所述輸入寄存器的數(shù)據(jù)通過縱橫多路復(fù)用器375讀入到寄存器高速緩存380,縱橫控制寄存器370向縱橫多路復(fù)用器提供驅(qū)動(dòng)信號(hào),以便把從所述輸入寄存器接收的數(shù)據(jù)的各個(gè)字節(jié)送往寄存器高速緩存中所需的位置??刂萍拇嫫髦械闹涤芍噶钭g碼器導(dǎo)出。
如圖23所示,可以把寄存器高速緩存380看作由四個(gè)寄存器構(gòu)成,并且在一個(gè)實(shí)施例中,每一個(gè)寄存器的長(zhǎng)度是64位。
在已經(jīng)把數(shù)據(jù)存入寄存器高速緩存380之后,那么可以通過輸出多路復(fù)用器385將它或者讀出到與LSU 22(在存儲(chǔ)指令時(shí))相聯(lián)系的存儲(chǔ)數(shù)據(jù)FIFO 23′,或者讀出到SIMD寄存器文件20(裝入指令時(shí))。
盡管字節(jié)縱橫多路復(fù)用器375可以以字節(jié)粒度讀出輸入寄存器,并以字節(jié)粒度寫入寄存器高速緩存,但是寫入多路復(fù)用器385以64位粒度從寄存器高速緩存讀出。
重排序邏輯24在很大程度上是自主的,獨(dú)立于SIMD處理邏輯18的其余部分,但是以與集成電路內(nèi)其它功能單元相同的方式獲得程序指令中的指令。在一個(gè)實(shí)施例中,它具有兩個(gè)控制它本身的寄存器文件讀出端口和兩個(gè)寫入端口。為了檢測(cè)出危險(xiǎn)并加于避免,重排序邏輯24可以設(shè)置成利用記分板與某些互鎖邏輯(未示出)通信。
來自SIMD寄存器文件20的存儲(chǔ)指令相對(duì)于其它SIMD指令,是超越順序執(zhí)行的,但是相對(duì)于其它來自SIMD寄存器文件的存儲(chǔ)指令仍舊是按順序執(zhí)行的。掛起的存儲(chǔ)保持在一個(gè)隊(duì)列中,并且當(dāng)存儲(chǔ)數(shù)據(jù)就緒時(shí),它讀出和通過重排序邏輯24傳送進(jìn)入與LSU 22相聯(lián)系的存儲(chǔ)FIFO 23′。
在一個(gè)實(shí)施例中,所有在存儲(chǔ)器和SIMD寄存器文件20之間傳遞的數(shù)據(jù)都通過重排序邏輯24確定路由。但是,在一個(gè)替代方案實(shí)施例中,可以針對(duì)確定不必重新排列的情況,設(shè)置繞過重排序邏輯24的旁路路徑。
寄存器高速緩存380稱作″高速緩存″,因?yàn)樵谀承顟B(tài)下在它們寫入SIMD寄存器文件20以前它對(duì)寄存器的值起高速緩存作用。寄存器高速緩存以數(shù)據(jù)從重排序邏輯24輸出的格式保存數(shù)據(jù)。
圖24A至24C圖解說明重排序邏輯24實(shí)現(xiàn)執(zhí)行VLD3.16{D0,D1,D2},[r1]類型的指令時(shí)所需的重排序的操作。
一旦數(shù)據(jù)已經(jīng)通過LSU 22裝入,便在第一周期(如圖24A所示)把檢索到的數(shù)據(jù)的64位通過多路復(fù)用器350裝入輸入寄存器360,而同時(shí)通過多路復(fù)用器355把下一個(gè)64位裝入輸入寄存器365。在圖24A至24C圖解說明的實(shí)例中,假設(shè)所述結(jié)構(gòu)格式代表具有分量x、y、z的3D矢量。在下一個(gè)周期,如圖24B所示,把輸入寄存器內(nèi)的16位數(shù)據(jù)元素通過字節(jié)縱橫多路復(fù)用器375讀入寄存器高速緩存380,多路復(fù)用器375將所述數(shù)據(jù)重排序,使得與x分量有關(guān)的任何數(shù)據(jù)元素都放入所述寄存器高速緩存的第一寄存器,與y分量有關(guān)的任何數(shù)據(jù)元素都放入第二寄存器,與z分量有關(guān)的任何數(shù)據(jù)元素都放入第三寄存器。另外,在所述周期過程中,來自FIFO 23數(shù)據(jù)的下一個(gè)64位數(shù)據(jù)通過多路復(fù)用器350裝入輸入寄存器360。
在下一個(gè)周期,如圖24C所示,來自輸入寄存器360的數(shù)據(jù)元素通過字節(jié)縱橫多路復(fù)用器確定路由,進(jìn)入所述寄存器高速緩存,同時(shí)把x、y和z分量去交錯(cuò),如較早討論的。如圖24C所示,這使寄存器高速緩存在第一寄存器包含四個(gè)x分量,在第二寄存器包含四個(gè)y分量,而在第三寄存器包含四z分量。然后,可以通過寫入多路復(fù)用器385把寄存器高速緩存的內(nèi)容(一次兩個(gè)寄存器)輸出到由裝入指令指定的寄存器。
圖25A-25D圖解說明通過重排序邏輯(以便執(zhí)行當(dāng)執(zhí)行指令VLD3.16{D0[1],D1[1],D2[1]],[r1]時(shí)所需的必要的重排序}的數(shù)據(jù)流程的第二實(shí)例。按照所述指令,數(shù)據(jù)要裝入寄存器D0、D1和D2的特定通道,就是說,那些寄存器內(nèi)四個(gè)16位寬通道中第二個(gè)16位寬通道。在數(shù)據(jù)元素可以存儲(chǔ)在特定的寄存器通道以前,需要取出寄存器的當(dāng)前內(nèi)容,使得隨后寫入寄存器時(shí),寄存器的內(nèi)容作為整體寫入。所述特征避免提供任何只把寫入SIMD寄存器文件20中寄存器的一部分的必要性。相應(yīng)地,在第一周期過程中,如圖25A所示,寄存器D0和D1的當(dāng)前內(nèi)容通過多路復(fù)用器350、355從SIMD寄存器文件讀出到輸入寄存器360、365。在下一個(gè)周期,如圖25B所示,這些內(nèi)容通過縱橫多路復(fù)用器375讀出到寄存器高速緩存380,使D0的內(nèi)容放入第一寄存器,而D1的內(nèi)容放入寄存器高速緩存的第二寄存器。在同一周期過程中,寄存器D2的內(nèi)容通過多路復(fù)用器350從SIMD寄存器文件取出,并存儲(chǔ)在輸入寄存器360。
在下一個(gè)周期,如圖25C所示,寄存器D2的內(nèi)容通過縱橫多路復(fù)用器375讀出到寄存器高速緩存380,使得它們存儲(chǔ)在寄存器高速緩存的第三寄存器。在相同的周期過程中,作為裝入對(duì)象的數(shù)據(jù)結(jié)構(gòu)一般已經(jīng)通過LSU取出,它從裝入FIFO 23通過多路復(fù)用器350讀出到輸入寄存器360。在圖25C圖解說明的實(shí)例中,再一次考慮,存儲(chǔ)器中的結(jié)構(gòu)代表帶有分量x、y和z的3D矢量數(shù)據(jù)。在下一個(gè)周期,如圖25D所示,x、y和z分量通過縱橫多路復(fù)用器375讀出到數(shù)據(jù)元素的第二通道,使得數(shù)據(jù)元素xo寫入寄存器高速緩存,覆蓋寄存器D0第二通道以前的內(nèi)容,分量yo寫入寄存器高速緩存內(nèi),覆蓋寄存器D1第二通道以前存儲(chǔ)的數(shù)據(jù)元素,而分量z0寫入寄存器高速緩存,覆蓋寄存器D2第二通道以前存儲(chǔ)的數(shù)據(jù)元素。
下面將指出,此刻SIMD寄存器文件中的寄存器D0、D1和D2實(shí)際內(nèi)容尚未改變。但是,存儲(chǔ)在寄存器高速緩存中的數(shù)據(jù)現(xiàn)在可以通過寫入多路復(fù)用器385返回輸出到寄存器D0、D1和D2,以便覆蓋以前的內(nèi)容。結(jié)果,可以看出,單一裝入指令可以用來把特定結(jié)構(gòu)的分量從存儲(chǔ)器裝入,然后把所述結(jié)構(gòu)的各個(gè)分量插入不同寄存器選擇的通道位置上。
圖25E至25H圖解說明通過重排序邏輯(以便執(zhí)行當(dāng)執(zhí)行與以上參照?qǐng)D25A至25D討論的裝入指令互補(bǔ)的存儲(chǔ)指令時(shí)所需的必要的重排序)的數(shù)據(jù)流程的第三實(shí)例。相應(yīng)地,圖25E至25H圖解說明當(dāng)執(zhí)行指令VST 3.16{D0[1],D1[1],D2[1]},[r1]時(shí)執(zhí)行必要的重排序所需的步驟。因而,按照所述指令,數(shù)據(jù)準(zhǔn)備從寄存器D0、D1和D2第二個(gè)16位寬的通道返回存儲(chǔ)到存儲(chǔ)器。如圖25E所示,在第一周期過程中,寄存器D0和D1的當(dāng)前內(nèi)容通過多路復(fù)用器350、355從SIMD寄存器文件讀出到輸入寄存器360、365。在下一個(gè)周期,如圖25F所示,第二通道中的數(shù)據(jù)元素,亦即,xo和yo,通過縱橫多路復(fù)用器375讀入寄存器高速緩存380的第一寄存器。在同一周期過程中,通過多路復(fù)用器350從SIMD寄存器文件檢索出寄存器D2的內(nèi)容并將其存儲(chǔ)在輸入寄存器360中。
在下一個(gè)周期,如圖25G所示,寄存器D2第二通道中的數(shù)據(jù)元素通過縱橫多路復(fù)用器375讀出到寄存器高速緩存380的第一寄存器。然后,在下一個(gè)周期,如圖25H所示,x、y和z分量現(xiàn)在可以由寫入多路復(fù)用器385輸出到LSU,以便返回存儲(chǔ)到存儲(chǔ)器。下面將指出,在所述階段,數(shù)據(jù)元素現(xiàn)在已經(jīng)重排序成為存儲(chǔ)在存儲(chǔ)器中所需要的結(jié)構(gòu)格式。
圖26A至26E圖解說明在執(zhí)行以下四指令序列過程中,在所述重排序邏輯內(nèi)發(fā)生的重排序VLD 3.16{D0,D1,D2},#1,[r1]VLD 3.16{D0[1],D1[1],D2[1]},[r2]VLD 3.16{D0[2],D1[2],D2[2]},[r3]VLD 3.16{D0[3],D1[3],D2[3]},[r4]一旦由第一裝入指令識(shí)別的數(shù)據(jù)已經(jīng)通過LSU檢索出,便通過多路復(fù)用器350將其讀出,在第一周期過程中(見圖26A)進(jìn)入輸入寄存器360。在下一個(gè)周期,通過縱橫多路復(fù)用器375將所述數(shù)據(jù)讀入到寄存器高速緩存380,使得x、y和z分量被放入寄存器高速緩存的不同寄存器。第一指令內(nèi)的″#1″象征每一個(gè)數(shù)據(jù)元素都應(yīng)該放入每一個(gè)寄存器的最低位數(shù)據(jù)通道,而且剩余通道應(yīng)該用邏輯0值填充,如圖26B所示。在該周期過程中,還檢索出由第二裝入指令識(shí)別的數(shù)據(jù)元素并使其進(jìn)入輸入寄存器360。在下一個(gè)周期過程中(見圖26C),存儲(chǔ)在輸入寄存器360的數(shù)據(jù)元素通過縱橫多路復(fù)用器375移入寄存器高速緩存380,其中將它們存儲(chǔ)在第二通道。在該周期過程中,還把第三個(gè)裝入指令的數(shù)據(jù)元素放置在輸入寄存器360內(nèi)。
在下一個(gè)周期,把輸入寄存器360的內(nèi)容通過縱橫多路復(fù)用器375路由到寄存器高速緩存的第三通道,而同時(shí)檢索出第四裝入指令對(duì)象的數(shù)據(jù)元素并使其進(jìn)入輸入寄存器360。這如圖26D所示。
最后,如圖26E所示,在下一個(gè)周期,這些數(shù)據(jù)元素通過縱橫多路復(fù)用器375確定路由,進(jìn)入寄存器高速緩存380,其中它們被存儲(chǔ)在第四通道。此后,可以把寄存器高速緩存每一個(gè)寄存器中的64位寬的數(shù)據(jù)塊輸出到SIMD寄存器文件的指定的寄存器。
應(yīng)該指出,與在圖25A至25D中采取的方法形成對(duì)照,使用參照?qǐng)D26A至26E圖解說明的第一VLD指令(從而一旦已經(jīng)把數(shù)據(jù)元素放入特定通道,剩余通道便用0值填滿)避免了在進(jìn)行任何更新以前從所述SIMD寄存器文件檢索寄存器D0至D2中任何一個(gè)的當(dāng)前內(nèi)容的必要性。觀察圖26A至26E便可以看出,在所述實(shí)例中,寄存器高速緩存380起″直通寫入高速緩存″的作用,因?yàn)樗鼘?duì)用于裝入指令序列的數(shù)據(jù)元素進(jìn)行高速緩存,而且當(dāng)完成每一指令時(shí),把數(shù)據(jù)寫到SIMD寄存器文件的相關(guān)寄存器。但是,在執(zhí)行所述序列中的每一個(gè)后續(xù)指令時(shí)通常不必從所述寄存器文件讀出。
在數(shù)據(jù)處理時(shí)往往需要通過在所有元素之間施加交換和關(guān)聯(lián)操作符′op′來把所謂元素矢量簡(jiǎn)化成單一元素。將作為折疊操作來描述這種過程。折疊操作的典型實(shí)例是對(duì)矢量的元素求和,或求出矢量中元素的最大值。
在并行處理的體系結(jié)構(gòu)中,將參照?qǐng)D27描述用來執(zhí)行這樣的折疊操作的已知的方法。要折疊的數(shù)據(jù)元素
至[3]被包含在寄存器r1中。下面將指出,并行處理體系結(jié)構(gòu)的好處是,它可以允許同時(shí)對(duì)多個(gè)數(shù)據(jù)元素執(zhí)行同一操作。這是參照所謂并行處理通道可以更清晰地理解的概念。在所述實(shí)例中,每一個(gè)并行處理通道包含數(shù)據(jù)元素
至[3]之一。
首先,在步驟A,發(fā)出第一指令,使所述數(shù)據(jù)元素旋轉(zhuǎn)兩位,以便在寄存器r2中形成旋轉(zhuǎn)后的數(shù)據(jù)元素。這把不同數(shù)據(jù)元素放入每一個(gè)處理通道,使得單指令多數(shù)據(jù)(SIMD)操作在步驟B得以施行。
此后,在步驟B,發(fā)布第二指令,以便對(duì)每一個(gè)通道中的數(shù)據(jù)元素執(zhí)行SIMD操作。在所述實(shí)例中,把這些多個(gè)并行操作結(jié)果數(shù)據(jù)元素存儲(chǔ)在寄存器r3。相應(yīng)地可以看出,現(xiàn)在r3中的各項(xiàng)包含寄存器r1一半數(shù)據(jù)元素的組合結(jié)果(亦即,r3包含
op[2];[1]op[3];[2]op
;和[3]op[1])。
接著,在步驟C發(fā)布第三指令,所述第三指令使存儲(chǔ)在寄存器r3中的所述結(jié)果被旋轉(zhuǎn)一個(gè)并行處理通道并且被存儲(chǔ)在寄存器r4。存儲(chǔ)在r3中的數(shù)據(jù)元素相對(duì)于r4的數(shù)據(jù)元素的旋轉(zhuǎn)再一次使不同數(shù)據(jù)元素能夠占用相同的并行處理通道。
最后,在步驟D,發(fā)布第四指令,這導(dǎo)致對(duì)存儲(chǔ)在每一個(gè)通道的數(shù)據(jù)元素執(zhí)行其他單指令多數(shù)據(jù)操作,并將結(jié)果存儲(chǔ)在寄存器r5。
相應(yīng)地,可以看出,可以通過僅僅利用四個(gè)指令來組合整個(gè)寄存器的數(shù)據(jù)元素,而把結(jié)果存儲(chǔ)在寄存器r5的每一項(xiàng)(亦即,r5中的每一項(xiàng)包含
op[1]op[2]op[3])??梢愿鶕?jù)需要從寄存器r5中的四項(xiàng)中的任何一項(xiàng)讀出結(jié)果數(shù)據(jù)元素。
圖28圖解說明一個(gè)實(shí)施例的折疊指令的原理。不同于并行處理通道的傳統(tǒng)配置(參照?qǐng)D27所描述的),在所述并行處理通道傳統(tǒng)配置中每一個(gè)并行處理通道在整個(gè)通道中具有等于一個(gè)數(shù)據(jù)元素寬度的固定寬度,在本實(shí)施例中,所述并行處理通道的配置情況就不一樣。在新的配置中,在其輸入端每一個(gè)并行處理通道的寬度等于至少兩個(gè)源數(shù)據(jù)元素的寬度,而在其輸出端,一般地等于一個(gè)結(jié)果數(shù)據(jù)元素的寬度。已經(jīng)發(fā)現(xiàn),這樣安排并行處理通道,較之先有技術(shù)配置提供重大的優(yōu)點(diǎn),因?yàn)閱我患拇嫫鲀?nèi)的數(shù)據(jù)元素組(例如,數(shù)據(jù)元素對(duì))可以是并行處理操作的對(duì)象。如從下面的討論將會(huì)清晰看到的,這免去執(zhí)行先有技術(shù)配置的數(shù)據(jù)處理操作(亦即,旋轉(zhuǎn)操作)的必要性,因?yàn)闆]有必要為了允許并行地出現(xiàn)多個(gè)操作而把數(shù)據(jù)元素安排在其他寄存器正確的項(xiàng)位置上。
相應(yīng)地,源數(shù)據(jù)元素d
至d[3]設(shè)置在寄存器各自的項(xiàng)中??梢园严噜彽脑磾?shù)據(jù)元素d
和d[1]看作成對(duì)的源數(shù)據(jù)元素。也可以把源數(shù)據(jù)元素d[2]和d[3]看作成對(duì)的源數(shù)據(jù)元素。因而,在所述實(shí)例中,有兩對(duì)源數(shù)據(jù)元素。
在步驟(A),對(duì)寄存器中的每對(duì)源數(shù)據(jù)元素執(zhí)行操作,以便產(chǎn)生結(jié)果數(shù)據(jù)元素,對(duì)相鄰一對(duì)源數(shù)據(jù)元素執(zhí)行同一操作。
因而,下面將指出,所述源數(shù)據(jù)元素對(duì)和相應(yīng)的結(jié)果數(shù)據(jù)元素全都占用并行處理的同一通道??梢钥闯?,步驟(A)之后結(jié)果數(shù)據(jù)元素的數(shù)目是源數(shù)據(jù)元素的數(shù)目的一半。也可以數(shù)據(jù)元素d[2]op d[3]和d
op d[1]看作成對(duì)的源數(shù)據(jù)元素。
在步驟(B),對(duì)一對(duì)源數(shù)據(jù)元素執(zhí)行另一個(gè)相同的操作,以便產(chǎn)生結(jié)果數(shù)據(jù)元素d
op d[1]op d[2]op d[3]??梢钥闯?,步驟(B)之后結(jié)果數(shù)據(jù)元素的數(shù)目也是源數(shù)據(jù)元素的數(shù)目的一半。如以前指出的,所述操作是交換和關(guān)聯(lián)操作,無論這些源數(shù)據(jù)元素的組合的精確次序如何,都會(huì)產(chǎn)生相同的結(jié)果數(shù)據(jù)元素。
因而,可以看出,源數(shù)據(jù)元素的數(shù)目可以減半,每一個(gè)操作的結(jié)果是,可以對(duì)那些源數(shù)據(jù)元素執(zhí)行同一操作,以便產(chǎn)生所需的結(jié)果。相應(yīng)地,可以看出,所需的結(jié)果數(shù)據(jù)元素可以剛好在兩個(gè)操作中產(chǎn)生,而圖27先有技術(shù)設(shè)施需要執(zhí)行至少四個(gè)操作。下面將指出,通過對(duì)源寄存器內(nèi)的數(shù)據(jù)元素組執(zhí)行并行處理操作來實(shí)現(xiàn)效率上的改善。盡管為清晰起見,已經(jīng)用僅僅兩對(duì)源數(shù)據(jù)元素進(jìn)行圖解說明,但是下面將指出,任何數(shù)目的源數(shù)據(jù)元素對(duì)都可以成為所述操作的對(duì)象。另外,盡管為清晰起見,已經(jīng)圖解說明對(duì)各源數(shù)據(jù)元素對(duì)進(jìn)行的操作,但是下面將指出,任何數(shù)目的源數(shù)據(jù)元素(例如,3個(gè)、4個(gè)或4個(gè)以上)都可以作為所述操作的對(duì)象。
在實(shí)踐中,為了提高效率,安排折疊指令來對(duì)由寄存器數(shù)據(jù)文件20中所支持的最小寄存器尺寸確定的最小數(shù)目的數(shù)據(jù)元素執(zhí)行并行操作。圖29圖解說明一種實(shí)現(xiàn)方案,它產(chǎn)生數(shù)目與源數(shù)據(jù)元素的數(shù)目相同的結(jié)果數(shù)據(jù)元素。
在寄存器Dn中提供源數(shù)據(jù)元素d
至d[3]。為了產(chǎn)生相同數(shù)目的結(jié)果數(shù)據(jù)元素,還在寄存器Dm中提供源數(shù)據(jù)元素d
至d[3]。下面將指出,寄存器Dn和Dm很可能是帶有SIMD處理邏輯18的相同的寄存器,分兩次從寄存器Dn讀出每一個(gè)源數(shù)據(jù)元素,以便產(chǎn)生重復(fù)的結(jié)果數(shù)據(jù)元素。
在步驟(A),發(fā)布單一SIMD指令,每對(duì)源數(shù)據(jù)元素都具有對(duì)其執(zhí)行的操作并產(chǎn)生相應(yīng)的結(jié)果數(shù)據(jù)元素。
在步驟(B),發(fā)布另一個(gè)單一SIMD指令,使每對(duì)源數(shù)據(jù)元素具有對(duì)其執(zhí)行的操作,以便產(chǎn)生相應(yīng)的結(jié)果數(shù)據(jù)元素。
相應(yīng)地,可以看出,已經(jīng)把所有源數(shù)據(jù)元素組合起來產(chǎn)生結(jié)果數(shù)據(jù)元素。
圖30a至30d圖解說明遵循在別處描述的相同的語法的不同折疊指令的操作。下面將指出,其中兩個(gè)源寄存器表明,它們可以是相同的寄存器。另外,下面將指出,每一個(gè)源寄存器都可以被指定為目的地寄存器,以便減少利用的寄存器空間數(shù)量。
圖30A圖解說明SIMD折疊指令的操作,由此,來自相同寄存器的用′n′位代表的源數(shù)據(jù)元素對(duì)具有對(duì)其執(zhí)行的操作,以便產(chǎn)生由2n位代表的結(jié)果數(shù)據(jù)元素。使結(jié)果數(shù)據(jù)元素提升為2n位,減少了出現(xiàn)溢出的幾率。當(dāng)提升結(jié)果數(shù)據(jù)元素時(shí),一般對(duì)它們進(jìn)行符號(hào)擴(kuò)展或用0填充。概括各折疊指令的以下實(shí)例支持這樣一種操作助記符數(shù)據(jù)類型操作數(shù)格式說明VSUM .S16.S8 Dd,Dm (相鄰一對(duì)元素相加并提升).S32.S16Qd,Qm.S64.S32.U16.U8.U32.U16.U64.U32在圖30A所示的特定實(shí)例中(VSUM.S32.S16Dd,Dm),包含四個(gè)16位數(shù)據(jù)元素的64位寄存器Dm被折疊并且被存儲(chǔ)在包含兩個(gè)32位結(jié)果數(shù)據(jù)元素的64位寄存器Dd。
圖30b圖解說明SIMD折疊指令的操作,由此來自不同寄存器的用′n′位代表的源數(shù)據(jù)元素對(duì)具有對(duì)其執(zhí)行的操作,以便產(chǎn)生也用′n′位代表的結(jié)果數(shù)據(jù)元素。概括最大值和最小值指令的以下實(shí)例支持這樣一種操作
助記符 數(shù)據(jù)類型 操作數(shù)格式 說明VSUM .I8 Dd,Dn,Dm(將相鄰元素相加).I16.I32.F32助記符數(shù)據(jù)類型 操作數(shù)格式 說明VFMX .S8 Dd,Dn,Dm(求相鄰對(duì)的最大值).S16.S32.U8.U16.U32.F32助記符數(shù)據(jù)類型 操作數(shù)格式 描述VFMN .S8 Dd,Dn,Dm (求相鄰對(duì)的最小值).S16.S32.U8.U16.U32.F32在圖30b所示的特定實(shí)例中(VSUM.I16Dd,Dn,Dm),兩個(gè)64位寄存器Dm,Dn,每一個(gè)都包含四個(gè)16位數(shù)據(jù)元素,折疊和存儲(chǔ)在包含四個(gè)16位結(jié)果數(shù)據(jù)元素的64位寄存器Dd中。
圖30c圖解說明SIMD折疊指令的操作,由此來自用′n′位代表的同一寄存器的源數(shù)據(jù)元素對(duì)具有對(duì)其執(zhí)行的操作,以便產(chǎn)生也用′n′位代表的結(jié)果數(shù)據(jù)元素。在圖30c所示的特定實(shí)例中,包含八個(gè)16位數(shù)據(jù)元素的128位寄存器Qm,被折疊和存儲(chǔ)在包含四個(gè)16位結(jié)果數(shù)據(jù)元素的64位寄存器Dd中。
圖30d圖解說明類似于圖30b的SIMD折疊指令的操作,但是其中Dm=Dn,這使結(jié)果數(shù)據(jù)值復(fù)制到目的地寄存器中。來自同一寄存器的用′n′位表達(dá)的幾個(gè)源數(shù)據(jù)元素對(duì),具有對(duì)其執(zhí)行的操作,以便產(chǎn)生也用′n′位表達(dá)的結(jié)果數(shù)據(jù)元素,每一個(gè)都復(fù)制到寄存器的另一個(gè)項(xiàng)目上。在圖30d所示的特定實(shí)例中,包含四個(gè)16位數(shù)據(jù)元素的64-位寄存器Dm,被折疊和存儲(chǔ)在包含兩組兩個(gè)16位結(jié)果數(shù)據(jù)元素的64位寄存器Dd中,。
圖31示意地圖解說明實(shí)例SIMD折疊邏輯,它可以支持折疊指令,而且作為SIMD處理邏輯18的一部分提供。為清晰起見,圖中示出的的邏輯用來支持選擇每一個(gè)相鄰對(duì)的最大值。但是,下面將指出,所述邏輯可以容易地適合于為其它操作提供支持,如下面將要更詳細(xì)描述的。
所述邏輯從寄存器Dm接收源數(shù)據(jù)元素(Dm
至Dm[3]),任選地連同來自寄存器Dn的源數(shù)據(jù)元素(Dn
至Dn[3])。作為另一方案,所述邏輯從寄存器Qm接收源數(shù)據(jù)元素(Qm
至Qm[7])。向相關(guān)的折疊操作邏輯單元400提供每對(duì)相鄰的源數(shù)據(jù)元素。每一個(gè)折疊操作邏輯單元400都具有算術(shù)單元410,算術(shù)單元410把一個(gè)源數(shù)據(jù)元素從另一個(gè)源數(shù)據(jù)元素減去并提供它大于至多路復(fù)用器420的路徑415的指示。根據(jù)經(jīng)由路徑415提供的指示,多路復(fù)用器從操作邏輯單元400輸出數(shù)值較大的源數(shù)據(jù)元素。因而,可以看出,每一個(gè)折疊操作邏輯單元400被安排來經(jīng)由各自的路徑425、435、445,455上輸出相關(guān)聯(lián)的相鄰數(shù)據(jù)元素對(duì)中的最大值。
選擇和分布邏輯450接收結(jié)果數(shù)據(jù)元素并根據(jù)需要經(jīng)由路徑431至434提供這些數(shù)據(jù),用于存儲(chǔ)在SIMD寄存器數(shù)據(jù)文件20中寄存器Dd的各項(xiàng),以便支持上述指令?,F(xiàn)將描述選擇和分布邏輯450的操作。
為了支持在圖30a中圖解說明的指令,向較低的兩個(gè)折疊操作邏輯單元400提供源數(shù)據(jù)元素Dm
至Dm[3]。折疊操作邏輯單元400經(jīng)由路徑425和435輸出數(shù)據(jù)元素。路徑431和432將以符號(hào)擴(kuò)展或零擴(kuò)展的格式提供Dm
op Dm[1],而同時(shí)路徑433和434將以符號(hào)擴(kuò)展或零擴(kuò)展的格式提供Dm[2]op Dm[3]。這是通過SIMD譯碼器16響應(yīng)該折疊指令產(chǎn)生信號(hào)而達(dá)到的,所述折疊指令使多路復(fù)用器470選擇它們的B輸入、使多路復(fù)用器460或者選擇符號(hào)擴(kuò)展或者選擇零擴(kuò)展、使多路復(fù)用器490選擇它們的E輸入、而使多路復(fù)用器480選擇它的D輸入。
為了支持在圖30b中圖解說明的指令,向較低的兩個(gè)折疊操作邏輯單元400提供源數(shù)據(jù)元素Dm
至Dm[3],而同時(shí)向較高的兩個(gè)折疊操作邏輯單元400提供源數(shù)據(jù)元素Dn
至Dn[3]。折疊操作邏輯單元400經(jīng)由路徑425、435、445和455輸出數(shù)據(jù)元素。路徑431將提供Dm
op Dm[1],路徑432將提供Dm[2]op Dm[3],路徑433將提供Dn
opDn[1],而路徑434將提供Dn[2]op Dn[3]。這是通過SIMD譯碼器16響應(yīng)該折疊指令產(chǎn)生信號(hào)來實(shí)現(xiàn)的,所述折疊指令使多路復(fù)用器470選擇它們的A輸入、使多路復(fù)用器480選擇它們的C輸入、而使多路復(fù)用器490選擇它們的E輸入。
為了支持在圖30c中圖解說明的指令,向折疊操作邏輯單元400邏輯單元提供源數(shù)據(jù)元素Qm
至Qm[7]。折疊操作邏輯單元400經(jīng)由路徑425、435、445和455輸出數(shù)據(jù)元素。路徑431將提供Qm
opQm[1],路徑432將提供Qm[2]op Qm[3],路徑433將提供Qm[4]opQm[5],而路徑434將提供Qm[6]op Qm[7]。這是通過S IMD譯碼器16響應(yīng)該折疊指令產(chǎn)生信號(hào)來實(shí)現(xiàn)的,所述折疊指令使多路復(fù)用器470選擇它們的A輸入、使多路復(fù)用器480選擇它們的C輸入、而使多路復(fù)用器490選擇它們的E輸入。
為了支持在圖30d中圖解說明的指令,向較低的兩個(gè)折疊操作邏輯單元400提供源數(shù)據(jù)元素Dm
至Dm[3]。折疊操作邏輯單元400經(jīng)由路徑425和435輸出數(shù)據(jù)元素。路徑431將提供Dm
op Dm[1],路徑432將提供Dm[2]op Dm[3],路徑433將提供Dm
op Dm[1],而路徑434將提供Dm[2]op Dm[3]。這是通過S IMD譯碼器16響應(yīng)該折疊指令產(chǎn)生信號(hào)來實(shí)現(xiàn)的,所述折疊指令使多路復(fù)用器470選擇它們的A輸入、使多路復(fù)用器480選擇它們的D輸入,而使多路復(fù)用器490選擇它們的F輸入。作為另一方案,下面將指出,作為代替還可以向上面的兩個(gè)折疊操作邏輯單元400提供源數(shù)據(jù)元素,并可以執(zhí)行與參照?qǐng)D30b圖解說明的同一操作,這會(huì)減少選擇和分布邏輯450的復(fù)雜性。
相應(yīng)地,可以看出,所述邏輯能夠在一個(gè)直接從源數(shù)據(jù)元素的單一的操作中,從兩個(gè)相鄰源數(shù)據(jù)元素產(chǎn)生結(jié)果數(shù)據(jù)元素。
如上所述,折疊操作邏輯單元400可以設(shè)置成對(duì)所述源數(shù)據(jù)元素執(zhí)行任何數(shù)目的操作。例如,可以容易地設(shè)置其他邏輯來選擇性地允許多路復(fù)用器420經(jīng)由路徑425提供所述源數(shù)據(jù)元素的最小值。作為另一方案,算術(shù)單元410可以設(shè)置成選擇性地對(duì)所述源數(shù)據(jù)元素進(jìn)行加法、減去、比較或乘法,并輸出結(jié)果數(shù)據(jù)元素。因而,下面將指出,本實(shí)施例的方法在可以利用這種配置執(zhí)行的折疊操作的范圍內(nèi)有利地提供大量靈活性。
另外,下面將指出,盡管參照?qǐng)D31描述的邏輯支持16位操作,但是可以提供類似的邏輯來支持32位或8位或任何其它大小的操作。
圖32圖解說明矢量-標(biāo)量(vector-by-scalar)SIMD指令的操作。所述SIMD指令遵循在別處描述的相同的語法。下面將指出,如前所述,其中兩個(gè)源寄存器表明它們可以是同一寄存器。另外,每一個(gè)源寄存器可以被指定作為目的地寄存器,以便減少所使用的寄存器空間數(shù)量并允許數(shù)據(jù)元素的有效的循環(huán)。
寄存器Dm存儲(chǔ)若干數(shù)據(jù)元素Dm
至Dm[3]。這些數(shù)據(jù)元素中間的每一個(gè)都代表可選的標(biāo)量操作數(shù)。所述矢量-標(biāo)量SIMD指令指定數(shù)據(jù)元素之一作為標(biāo)量操作數(shù),并利用所述標(biāo)量操作數(shù)并行地對(duì)另一個(gè)寄存器Dn中的所有數(shù)據(jù)元素執(zhí)行操作,其結(jié)果存儲(chǔ)在寄存器Dd中相應(yīng)的一項(xiàng)。下面將指出,存儲(chǔ)在寄存器Dm,Dn和Dd中的數(shù)據(jù)元素全都具有不同的尺寸。具體地說,可以相對(duì)于所述源數(shù)據(jù)元素提升結(jié)果數(shù)據(jù)元素。提升可能涉及從一種數(shù)據(jù)類型至另一種的轉(zhuǎn)換的零填充或符號(hào)擴(kuò)展。這可能具有額外的優(yōu)點(diǎn),就是確保不會(huì)出現(xiàn)溢出。
在涉及數(shù)據(jù)元素矩陣的情況下,能夠?yàn)镾IMD操作選擇一個(gè)標(biāo)量操作數(shù)是特別有效的。不同標(biāo)量操作數(shù)可以寫入SIMD寄存器文件20,然后容易地選擇用于不同的矢量-標(biāo)量操作,而不必重寫數(shù)據(jù)元素或旋轉(zhuǎn)數(shù)據(jù)元素。以下范例乘法指令支持這樣一個(gè)操作乘標(biāo)量助記符數(shù)據(jù)類型操作數(shù)格式說明VMUL .I16Dd,Dn,Dm[x](Vd[i]=Vn[i]*Vm[x]).I32Qd,Qn,Dm[x].F32.S32.S16Qd,Dn,Dm[x].S64.S32.U32.U16.U64.U32乘-累計(jì)標(biāo)量助記符數(shù)據(jù)類型操作數(shù)格式 說明VMLA .I16Dd,Dn,Dm[x](Vd[i]=Vd[i]+(Vn[i]*Vm[x])).132Qd,Qn,Dm[x].F32.S32.S16Qd,Dn,Dm[x].S64.S32.U32.U16.U64.U32乘-減標(biāo)量助記符數(shù)據(jù)類型操作數(shù)格式 說明VMLS .I16Dd,Dn,Dm[x](Vd[i]=Vd[i]-(Vn[i]*Vm[x])).132Qd,Qn,Dm[x].F32.S32.S16Qd,Dn,Dm[x].S64.S32.U32.U16.U64.U32Vd,Vn和Vm描述從選擇的寄存器格式和選擇的數(shù)據(jù)類型構(gòu)造的元素的矢量。矢量?jī)?nèi)的元素利用陣列符號(hào)[x]選擇。例如,Vd
選擇矢量Vd中的最低的元素。
用疊代器i來允許矢量定義;對(duì)所有i值保持所述語義,其中i小于矢量?jī)?nèi)元素的數(shù)目。所述指令定義提供′數(shù)據(jù)類型′和′操作數(shù)格式′列;通過從每一列取一個(gè)來構(gòu)成有效指令。
圖33圖解說明S1MD寄存器文件20中的標(biāo)量操作數(shù)H0至H31的配置。如在別處指出的,所述指令字段中用于指定數(shù)據(jù)元素在SIMD寄存器文件20中的位置的位的最佳數(shù)目是5位。這使指定32個(gè)可能的位置成為可能。下面將指出,把標(biāo)量操作數(shù)映射到SIMD寄存器文件20的一種可能的辦法是把每一個(gè)操作數(shù)放入寄存器D0到D31中的每一個(gè)的第一項(xiàng)。但是,作為代替,SIMD寄存器文件20設(shè)置成對(duì)可選的標(biāo)量操作數(shù)映射或取別名到SIMD寄存器文件20中第一32邏輯項(xiàng)上。這樣映射所述標(biāo)量操作數(shù)提供重大的優(yōu)點(diǎn)。首先,通過標(biāo)量操作數(shù)在連續(xù)項(xiàng)的定位來把用來存儲(chǔ)標(biāo)量操作數(shù)的D寄存器的數(shù)目減到最小,這本身使可用來存儲(chǔ)其它數(shù)據(jù)元素的D寄存器的數(shù)目最大化。通過把標(biāo)量操作數(shù)存儲(chǔ)在連續(xù)項(xiàng)中來使矢量?jī)?nèi)所有標(biāo)量操作數(shù)被訪問成為可能,這當(dāng)執(zhí)行矩陣或?yàn)V波操作時(shí)特別有利。例如,矩陣-矢量乘法要求對(duì)從矢量選擇的每一個(gè)標(biāo)量執(zhí)行矢量-標(biāo)量操作。另外,以這種方法存儲(chǔ)來自至少一些寄存器的可選的標(biāo)量操作數(shù)使從那些寄存器選擇所有標(biāo)量操作數(shù)成為可能。
圖34示意地圖解說明被安排來執(zhí)行實(shí)施例的矢量-標(biāo)量操作的邏輯。
從寄存器Dm提供源數(shù)據(jù)元素(Dm
至Dm[3])。向標(biāo)量選擇邏輯510提供每一個(gè)源數(shù)據(jù)元素,所述邏輯包括若干多路復(fù)用器500。向每一個(gè)多路復(fù)用器500的一個(gè)輸入端提供每一個(gè)源數(shù)據(jù)元素(亦即,每一個(gè)多路復(fù)用器接收源數(shù)據(jù)元素Dm
至Dm[3])。因而,可以看出,每一個(gè)多路復(fù)用器都可以輸出源數(shù)據(jù)元素Dm
至Dm[3]中的任何一個(gè)。在所述實(shí)施例中,每一個(gè)多路復(fù)用器設(shè)置成輸出相同的源數(shù)據(jù)元素。因而,標(biāo)量選擇邏輯510可以設(shè)置成選擇和輸出標(biāo)量操作數(shù)。這是通過SIMD譯碼器16響應(yīng)矢量-標(biāo)量指令產(chǎn)生信號(hào)來實(shí)現(xiàn)的,所述指令使多路復(fù)用器輸出源數(shù)據(jù)元素Dm
至Dm[3]之一作為選擇的標(biāo)量操作數(shù)。
矢量-標(biāo)量操作邏輯520接收選擇的標(biāo)量操作數(shù),而且還接收從寄存器Dn提供的源數(shù)據(jù)元素Dn
至Dn[3]。向矢量-標(biāo)量操作邏輯520提供每一個(gè)源數(shù)據(jù)元素,所述操作邏輯包括若干操作單元530。向操作單元530之一提供每一個(gè)源數(shù)據(jù)元素(亦即,每一個(gè)操作單元接收源數(shù)據(jù)元素Dm
至Dm[[]之一并選擇標(biāo)量操作數(shù))。在支持上述指令時(shí),矢量-標(biāo)量操作邏輯520對(duì)兩個(gè)數(shù)據(jù)元素執(zhí)行操作,并輸出結(jié)果數(shù)據(jù)元素,用于存儲(chǔ)在SIMD寄存器數(shù)據(jù)文件20中寄存器的各自的項(xiàng)。這是通過SIMD譯碼器16響應(yīng)矢量-標(biāo)量指令產(chǎn)生信號(hào)來實(shí)現(xiàn)的,所述指令使操作單元530對(duì)所接收的數(shù)據(jù)元素執(zhí)行所需的操作。
相應(yīng)地,可以看出,所述邏輯使源寄存器數(shù)據(jù)元素之一被選擇作為標(biāo)量操作數(shù)并利用相同的標(biāo)量操作數(shù)對(duì)來自另一個(gè)寄存器的所有源數(shù)據(jù)元素執(zhí)行矢量-標(biāo)量操作成為可能。
圖35表示在SIMD處理過程中處理移位和變窄操作的一個(gè)已知的辦法。如可以看到的,需要3個(gè)單獨(dú)的指令(SHR,SHR和PACKLO)來執(zhí)行所述操作。為清晰起見,在圖35中和在圖36和38中,中間值用點(diǎn)線表示。
圖36表示按照本技術(shù)的右移和變窄操作。本實(shí)施例的體系結(jié)構(gòu)特別適用于處理移位和變窄操作,并可以響應(yīng)單一指令這樣做。所述指令由SIMD譯碼器16(見圖1)中的指令譯碼器譯碼。在所述實(shí)例中,位于SIMD寄存器文件20中寄存器Qn(見圖1)中的數(shù)據(jù)被右移5位,然后剩余數(shù)據(jù)四舍五入,然后把16個(gè)右手側(cè)位傳輸至也位于SIMD寄存器文件20內(nèi)的目的地寄存器Dd。根據(jù)所述指令,所述硬件能夠任選地支持四舍五入和/或數(shù)據(jù)的飽和。一般地右移指令并不要求飽和,因?yàn)楫?dāng)處理整數(shù)右移時(shí),一般地產(chǎn)生較小的數(shù)。但是,當(dāng)右移和狹窄時(shí),飽和可能是適當(dāng)?shù)摹?br> 飽和是這樣一種處理過程,它可以用來通過選擇最接近允許數(shù)值來把數(shù)據(jù)元素限制至某些范圍。例如,若兩個(gè)不帶符號(hào)的8位整數(shù)利用8位寄存器做乘法,那么所述結(jié)果可能溢出。在這種情況下,可以給定的最準(zhǔn)確的結(jié)果是二進(jìn)制11111111,因而,將使所述數(shù)目飽和,以便給出所述數(shù)值。當(dāng)移位和狹窄時(shí),可能出現(xiàn)類似的問題,由此一個(gè)變窄后的數(shù)目無法裝入較窄的空間。在這種情況下,在一個(gè)不帶符號(hào)的數(shù)的情況下,當(dāng)移位步驟中放棄的任何位不是零時(shí),那么,使所述數(shù)飽和為最大允許值。在有符號(hào)數(shù)的情況下,問題就更復(fù)雜。在這種情況下,當(dāng)最高位不同于任何被放棄的位時(shí),那么,必須使所述數(shù)飽和至最大允許正數(shù)或者最大值允許負(fù)數(shù)。
在輸入的數(shù)據(jù)元素類型不同于輸出的地方,也可能出現(xiàn)飽和,例如,有符號(hào)的數(shù)值可能被移動(dòng)和變窄,輸出不帶符號(hào)數(shù)值。輸出不同數(shù)據(jù)類型的能力可能是非常有用的。例如,在像素處理時(shí)亮度是不帶符號(hào)的數(shù)值,但是,在處理所述數(shù)值過程中,把它作為有符號(hào)的數(shù)值處理可能是適當(dāng)?shù)摹5?,在處理之后?yīng)該輸出不帶符號(hào)的數(shù)值,從有符號(hào)的數(shù)值簡(jiǎn)單地變換為不帶符號(hào)的數(shù)值就會(huì)引起問題,除非提供使所述數(shù)值飽和的能力。例如,若在處理過程中,由于略微誤差,所述亮度數(shù)值已經(jīng)丟失,變?yōu)樨?fù)數(shù),簡(jiǎn)單地把所述負(fù)的有符號(hào)的數(shù)值作為不帶符號(hào)的數(shù)值輸出將是毫無意義的。因而,輸出不帶符號(hào)的數(shù)值之前使任何負(fù)數(shù)飽和至零的能力是非常有用的工具。
下面在表6和7給出用于不同移位指令的可能的格式的實(shí)例。如可以看到的,所述指令規(guī)定,它是前端具有V的矢量指令,然后用SH指定移位,并且在利用即時(shí)存取的移位的情況下,用R或L來表示方向右或左。于是,所述指令包括兩種類型,如表0中所示,第一是目的地寄存器中的數(shù)據(jù)元素尺寸,第二是源寄存器中的元素尺寸。下一個(gè)信息包括目的地寄存器和源寄存器的命名,并且隨后可以給定即時(shí)存取值,所述值表示數(shù)據(jù)移動(dòng)的位數(shù)前面加一個(gè)#號(hào)??梢允褂脤?duì)所述指令一般格式的修改符,Q用來指示所述操作使用飽和整數(shù)算術(shù),而R用來指示所述操作執(zhí)行四舍五入。所述指令格式的更多細(xì)節(jié)在例如表0中描述。
表7表示用于通過符號(hào)變量移位的指令。所述指令和通過即時(shí)存取左移相同,但是不是提供利用所述指令的即時(shí)存取,而是利用所述指令來提供表示其中存儲(chǔ)有符號(hào)變量的矢量的寄存器地址。在這種情況下,負(fù)數(shù)指示右手移位。因?yàn)橐苿?dòng)的位數(shù)存儲(chǔ)在矢量中,所以可以為每一個(gè)數(shù)據(jù)元素存儲(chǔ)不同的有符號(hào)變量,使得它們每一個(gè)都可以移動(dòng)不同數(shù)量。所述處理更詳細(xì)地如圖39所示。
表6通過即時(shí)存取移位即時(shí)存取移位使用編碼在所述指令內(nèi)的即時(shí)存取值來使源矢量的所有元素移位相同的數(shù)量。變窄版本允許使數(shù)值向下轉(zhuǎn)型,這可以包括飽和,而同時(shí)長(zhǎng)版本允許任何定點(diǎn)數(shù)向上轉(zhuǎn)型。
提供帶有累計(jì)版本的移位來支持在許多數(shù)字信號(hào)處理算法中找到的有效的按比例縮放和累計(jì)。右移指令還提供四舍五入選項(xiàng)。四舍五入是通過實(shí)際上加入要四舍五入的數(shù)的一半執(zhí)行的。因而,當(dāng)右移n位時(shí),在它移位之前在所述數(shù)值上加上2n-1。因而,在下表中若n>=1,則round(n)=2n-1,若n<=0,則等于0。
包括按位提取指令,以便允許數(shù)據(jù)的有效填充。




表7移位有符號(hào)的變量在本節(jié)中的移位是對(duì)受第二矢量中指定的帶符號(hào)移位數(shù)量控制的元素的一個(gè)矢量執(zhí)行的移位。支持帶符號(hào)移位數(shù)量,允許支持按指數(shù)值的移位,它可能合理地是負(fù)數(shù);負(fù)數(shù)控制數(shù)值將執(zhí)行右移。矢量移位允許每一個(gè)元素移動(dòng)不同的數(shù)量,但是可以用來通過以下方法將所有通道移位相同的數(shù)量在執(zhí)行所述移位以前將移位控制操作數(shù)復(fù)制到矢量的所有通道。帶符號(hào)移位控制值是具有與要移動(dòng)的操作數(shù)的最小操作數(shù)元素尺寸相同的尺寸的元素。但是,只利用每一個(gè)通道的低8位來解釋位移器變量,以便確定所述移位數(shù)量。四舍五入和飽和選項(xiàng)也是可用的。


因而,如可以看到的,硬件支持既能指定源數(shù)據(jù)元素尺寸又能指定結(jié)果數(shù)據(jù)元素尺寸,而且有時(shí)指定將被移動(dòng)的數(shù)據(jù)的位數(shù)。這使之變得極其可適配,而且是功能強(qiáng)大的工具。
圖36中所示的右移和變窄操作具有若干可能的用途。例如,在涉及要求某種準(zhǔn)確度的定點(diǎn)數(shù)的計(jì)算中,在執(zhí)行計(jì)算的同時(shí)向32位數(shù)據(jù)值的中央某處放置例如16位數(shù),減少數(shù)據(jù)上溢或下溢風(fēng)險(xiǎn)可能是適當(dāng)?shù)?。?jì)算結(jié)束時(shí),可以要求16位數(shù),并因而進(jìn)行如圖36所示的移位和變窄將是適當(dāng)?shù)摹1炯夹g(shù)所設(shè)想的不同源和目的地寄存器不同大小的可能性在這里特別有效,并允許不同大小的數(shù)據(jù),以便在SIMD處理過程中保持在特定通道內(nèi)。
類似于在圖36中圖解說明的移位和變窄操作的其他用途可能是彩色像素?cái)?shù)據(jù)的處理。SIMD處理特別適合于視頻數(shù)據(jù),因?yàn)橐曨l數(shù)據(jù)包括全都要求對(duì)其執(zhí)行同一操作的許多像素。因而,不同像素?cái)?shù)據(jù)可以處在寄存器的不同通道中,而且單一的指令可以對(duì)全部數(shù)據(jù)執(zhí)行相同的操作。視頻數(shù)據(jù)往往以紅、綠和藍(lán)數(shù)據(jù)的形式到來。這需要在可以對(duì)其執(zhí)行有意義的操作以前單獨(dú)輸出。圖37表示紅、綠和藍(lán)數(shù)據(jù)的典型實(shí)例,它們存在于16位數(shù)據(jù)元素中。在所述實(shí)例中,表示藍(lán)數(shù)據(jù)可以通過左移3位和變窄操作提取。左移3位把藍(lán)數(shù)據(jù)發(fā)送到所述數(shù)據(jù)元素中間的右邊,如點(diǎn)線寄存器示意地表示的(代表中間數(shù)值),所述數(shù)據(jù)左移所引起的數(shù)據(jù)值右邊的3個(gè)空位填充3個(gè)零。變窄操作造成藍(lán)數(shù)據(jù)和所述3個(gè)零被轉(zhuǎn)移到結(jié)果的8位數(shù)據(jù)元素。
除移位和變窄以外,本技術(shù)也可以用來向上轉(zhuǎn)型和移位,所述處理如圖38所示。在這種情況下,執(zhí)行所述向上轉(zhuǎn)型,后跟左移。所述操作可以用來例如把32位數(shù)值轉(zhuǎn)移至64位數(shù)值,所述32位數(shù)值放入所述64位數(shù)值內(nèi)適當(dāng)?shù)奈恢?。在所述?shí)例中,表示兩個(gè)32位值通過放置在通道的最高位,同時(shí)作為最低位增加幾個(gè)零,而轉(zhuǎn)移到64位值。
圖39表示利用指示每一個(gè)數(shù)據(jù)元素應(yīng)該移動(dòng)的位數(shù)的值的矢量的可能性,所述值是帶符號(hào)的整數(shù),負(fù)數(shù)指示右移。使用為每一個(gè)數(shù)據(jù)元素保存一個(gè)數(shù)值的寄存器,而且每一個(gè)數(shù)據(jù)元素移動(dòng)由位于它的通道中的數(shù)值所指定的數(shù)量。先前在表7中提出了用于這樣的操作的指令。
圖40示意地表示簡(jiǎn)單的多路復(fù)用操作。在所述多路復(fù)用操作中,多路復(fù)用器700或者選擇數(shù)值a或者選擇數(shù)值b在D處輸出,取決于控制位c的值。c用來在a和b之間選擇輸出。c往往是根據(jù)判決的結(jié)果,諸如a>b。所述體系結(jié)構(gòu)的實(shí)施例提供在SIMD處理過程中執(zhí)行多路復(fù)用操作的能力。SIMD處理不適用于執(zhí)行跳轉(zhuǎn)操作,因而,可以不利用標(biāo)準(zhǔn)的if then else指令執(zhí)行多路復(fù)用,而是建立掩碼,所述掩碼用來指示要選擇兩個(gè)源寄存器a和b的哪些部分。
所述掩碼由各控制值構(gòu)成,所述各控制值用來指示要選擇兩個(gè)源寄存器a和b中哪些部分。在某些實(shí)施例中,某些位置之一可能指示將選擇b的某些部分,而同時(shí)在所述位置上的零指示將選擇a的相應(yīng)的部分。所述掩碼存儲(chǔ)在通用寄存器中,從而減少對(duì)專用寄存器的需求。
所述掩碼的產(chǎn)生取決于要執(zhí)行的多路復(fù)用操作并響應(yīng)該操作而建立。例如,在上面給定的情況下,執(zhí)行a和b的比較。這可以一部分一部分地執(zhí)行,例如,對(duì)SIMD處理中相應(yīng)的數(shù)據(jù)元素進(jìn)行比較。比較b和a相應(yīng)的數(shù)據(jù)元素,并把數(shù)值寫入通用寄存器所述部分,就是說,根據(jù)b大于a或b等于或者小于a,用來存儲(chǔ)所述控制值。這可以利用對(duì)全部數(shù)據(jù)元素進(jìn)行大于指令VCGT的比較來并行地執(zhí)行。在所述系統(tǒng)的實(shí)施例的指令集中提供所述指令。下面表8表示一些由所述體系結(jié)構(gòu)實(shí)施例提供的寬范圍比較指令。
表8比較和選擇可以執(zhí)行對(duì)產(chǎn)生掩碼的變量的比較和測(cè)試,所述比較和測(cè)試用來提供數(shù)據(jù)平面選擇和掩蔽。它還提供指令來選擇最大值和最小值,包括折疊版本,所述折疊版本可以在矢量化代碼結(jié)束時(shí)使用,以便求出矢量?jī)?nèi)的最大值或最小值。



一旦已經(jīng)建立掩碼,單指令便可以用來利用包含掩碼的通用寄存器,控制寄存器C來選擇a或b。因而,數(shù)據(jù)處理器由C控制來執(zhí)行a或b選擇的多路復(fù)用操作。
圖41示意地表示所述系統(tǒng)的一個(gè)實(shí)施例,其中源值a或b的選擇是按位執(zhí)行的。在這種情況下,控制寄存器730已經(jīng)通過比較寄存器a710和b720中的數(shù)據(jù)元素利用數(shù)據(jù)填充。因而,例如八位寬的數(shù)據(jù)元素a0與具有相同尺寸的數(shù)據(jù)元素b0比較。在這種情況下,a小于或等于b,因而,八個(gè)零插入控制寄存器730相應(yīng)的部分。若a大于b8,則1插入控制寄存器730的相應(yīng)部分。類似的比較是并行地針對(duì)所有數(shù)據(jù)元素執(zhí)行的并產(chǎn)生相應(yīng)的控制位。產(chǎn)生控制矢量的比較操作對(duì)應(yīng)于指令VCGT.S8c,a,b.。于是,選擇可以通過存儲(chǔ)在源寄存器的位之間執(zhí)行簡(jiǎn)單的邏輯運(yùn)算非常簡(jiǎn)單地逐位執(zhí)行,每一個(gè)結(jié)果位都寫入目的地寄存器,在所述實(shí)例中,是寄存器730,亦即,結(jié)果覆蓋所述控制值。按位選擇的優(yōu)點(diǎn)是它與數(shù)據(jù)類型和寬度無關(guān),而且適當(dāng)?shù)脑?,可以比較不同大小的數(shù)據(jù)元素。
圖42表示替代實(shí)施例,其中控制不是按位執(zhí)行的,而是在數(shù)據(jù)元素的基礎(chǔ)上執(zhí)行的。在所示實(shí)施例中,若控制寄存器C730中的數(shù)據(jù)元素大于或等于零,則相應(yīng)的數(shù)據(jù)元素在源寄存器b720中,它寫入目的地寄存器(在這種情況下,寄存器720)。如在所述實(shí)例中,如果C是帶符號(hào)的整數(shù),則當(dāng)決定選擇a或b時(shí),只需考慮C的最高位。
在其他實(shí)施例中,C的其它特性可以用來確定是選擇來自寄存器a710的數(shù)據(jù)元素還是來自寄存器b720的數(shù)據(jù)。這樣的特性的實(shí)例包括C是奇數(shù)還是偶數(shù),其中再一次只需要考慮所述控制值的一個(gè)位,在這種情況下,是最低位;或者C是否等于零、不等于零或大于零。
一般地說,ARM指令和事實(shí)上許多其它RISC指令都只提供帶有任何指令的3個(gè)操作數(shù)。多路復(fù)用操作一般要求四個(gè)操作數(shù)來指定兩個(gè)源寄存器a和b,控制寄存器C和目的地寄存器D?,F(xiàn)有的系統(tǒng)的實(shí)施例利用以下事實(shí)一般地說,繼多路復(fù)用操作之后,不再需要兩組源數(shù)據(jù)或控制數(shù)據(jù)中至少一組。因而,目的地寄存器選擇為或者兩個(gè)源寄存器之一或者控制寄存器。這只作為控制寄存器起作用,是通用寄存器,而不是特殊寄存器。在所述系統(tǒng)的實(shí)施例中,在所述指令集中設(shè)置3個(gè)不同指令,一個(gè)指令專用用來寫回源寄存器,另一個(gè)指令用來寫回其他源寄存器,而第三指令用來寫入控制寄存器。每一個(gè)指令都要求剛好3個(gè)操作數(shù),指定兩個(gè)源寄存器和一個(gè)控制寄存器。這3個(gè)指令在下面表9中指定。
表9邏輯和按位選擇

圖43示意地表示與所述系統(tǒng)設(shè)置的3個(gè)多路復(fù)用指令對(duì)應(yīng)的多路復(fù)用器裝置的3個(gè)實(shí)例。圖43a表示多路復(fù)用器701接線來執(zhí)行所述指令按位選擇VBSL。在所述實(shí)例中,與在圖41和42中圖解說明的實(shí)例相反,當(dāng)C為假(0)時(shí),選擇A,而當(dāng)C為真(1)時(shí),選擇B。在所圖解說明的實(shí)施例中,目的地寄存器與控制寄存器相同,使得結(jié)果值覆蓋所述控制值。若要求反向選擇,亦即,當(dāng)C為真時(shí)選擇A,而當(dāng)C為假時(shí)選擇B,則所述相同的電路可以簡(jiǎn)單地交換操作數(shù)A和B使用。
圖43b表示與指令BIT對(duì)應(yīng)的多路復(fù)用器702,若真則按位插入,而源寄存器A中的結(jié)果同時(shí)起源和目的地寄存器的作用,而且用結(jié)果數(shù)據(jù)覆蓋。在所述實(shí)例中,當(dāng)C為真時(shí),B寫入A,而若C為假則存在于寄存器的數(shù)值保持不變。在所述實(shí)施例中,若要求反向選擇,亦即,若C為假而不是為真時(shí)要求寫入B,這不可能簡(jiǎn)單地切換寄存器,因?yàn)樗銎骷]有多路復(fù)用器701的對(duì)稱性。
圖43c表示多路復(fù)用器703,它編排成對(duì)應(yīng)于圖43b的反向選擇,亦即,若為假則所述指令BIF按位插入。在所述實(shí)施例中,當(dāng)C為假時(shí),寄存器A中的數(shù)值寫入寄存器B,而當(dāng)C為真時(shí),寄存器B中的數(shù)值保持不變。因?yàn)樵趫D43b中,在所述系統(tǒng)中沒有對(duì)稱性。
圖44示意地圖解說明存儲(chǔ)在存儲(chǔ)器內(nèi)的數(shù)據(jù)字節(jié)序列B0至B7。這些字節(jié)是按照字節(jié)不變尋址存儲(chǔ)的,由此相同的數(shù)據(jù)字節(jié)將響應(yīng)讀出給定的存儲(chǔ)器地址而返回,而不管當(dāng)前的字節(jié)序方式。所述存儲(chǔ)器還支持不對(duì)齊尋址,由此可以從存儲(chǔ)器讀出半字、字或較大的多字節(jié)數(shù)據(jù)元素,在任意存儲(chǔ)器字節(jié)地址開始。
當(dāng)從所述系統(tǒng)的存儲(chǔ)器在小尾端方式下讀出八個(gè)字節(jié)的數(shù)據(jù)B0至B7時(shí),則字節(jié)B0至B7按照?qǐng)D44所示的順序布置在寄存器800內(nèi)。寄存器800包含四個(gè)數(shù)據(jù)元素,每一個(gè)都包括一個(gè)16位的半字。圖44還表示當(dāng)所述系統(tǒng)操作在大尾端方式下時(shí),數(shù)據(jù)B0至B7的相同的八個(gè)字節(jié)正在讀入寄存器802。
在所述實(shí)例中,數(shù)據(jù)一旦從存儲(chǔ)器讀入各自的SIMD寄存器800、802,便經(jīng)受調(diào)正操作,這使數(shù)據(jù)元素尺寸加大一倍。相應(yīng)地,所述結(jié)果寫入兩個(gè)目的地SIMD寄存器804、806。如將會(huì)從圖44看出的,分別寫入這些寄存器對(duì)804、806中的第一或第二的所述結(jié)果值根據(jù)所述字節(jié)序方式改變,數(shù)據(jù)已經(jīng)以該字節(jié)序方式從存儲(chǔ)器讀出。相應(yīng)地,進(jìn)一步處理調(diào)正后的結(jié)果值的SIMD計(jì)算機(jī)程序可能必需改變來根據(jù)所述字節(jié)序方式考慮數(shù)據(jù)的不同布置。這造成不利的后果,即,導(dǎo)致需要產(chǎn)生兩個(gè)不同形式的計(jì)算機(jī)程序來以數(shù)據(jù)已經(jīng)存儲(chǔ)在存儲(chǔ)器內(nèi)所述方式應(yīng)付不同字節(jié)序。
圖45通過設(shè)置重排序邏輯808解決所述問題。所述數(shù)據(jù)處理系統(tǒng)包括存儲(chǔ)器訪問邏輯810,用來從指定的存儲(chǔ)器地址開始,從存儲(chǔ)器讀出數(shù)據(jù)B0至B7八數(shù)據(jù)字節(jié),并且利用所述存儲(chǔ)器的字節(jié)不變尋址特性。存儲(chǔ)器訪問邏輯810的輸出相應(yīng)地呈現(xiàn)在相同的輸出通道從給定的存儲(chǔ)器地址讀出的字節(jié),而與所述字節(jié)序方式無關(guān)。因而,在數(shù)據(jù)元素是半字的圖解說明的實(shí)例中,在一種字節(jié)序方式下從特定的存儲(chǔ)器地址恢復(fù)的字節(jié)可以是半字的最高位部分,而在另一種字節(jié)序方式下這是半字的最低位部分。
數(shù)據(jù)元素重排序邏輯808負(fù)責(zé)對(duì)通過存儲(chǔ)器訪問邏輯810從存儲(chǔ)器檢索到的數(shù)據(jù)元素進(jìn)行重排序,使得裝入SIMD寄存器812的數(shù)據(jù)元素的形式將與已經(jīng)存儲(chǔ)在小尾端形式中而且不重新排列裝入的數(shù)據(jù)一致,而與存儲(chǔ)系統(tǒng)內(nèi)使用的字節(jié)序方式無關(guān)。在存儲(chǔ)系統(tǒng)內(nèi)正在使用小尾端方式的情況下,數(shù)據(jù)元素重排序邏輯808不會(huì)將字節(jié)重排序,并且不加改變地讓其通過。但是,在數(shù)據(jù)以大尾端形式存儲(chǔ)在存儲(chǔ)系統(tǒng)內(nèi)的情況下,數(shù)據(jù)元素重排序邏輯808用來反轉(zhuǎn)每一個(gè)半字內(nèi)字節(jié)從存儲(chǔ)器讀出的順序,使得半字?jǐn)?shù)據(jù)元素將在SIMD寄存器812內(nèi)以小尾端形式出現(xiàn)。這樣,單一SIMD計(jì)算機(jī)程序可以對(duì)傳輸進(jìn)入SIMD寄存器的數(shù)據(jù)元素執(zhí)行正確的數(shù)據(jù)處理操作,而與它們存儲(chǔ)在存儲(chǔ)器內(nèi)的字節(jié)序方式無關(guān)。從圖45將會(huì)看出,數(shù)據(jù)元素重排序邏輯808響應(yīng)表示所述字節(jié)序方式正在被存儲(chǔ)器使用的信號(hào)和表示所涉及的數(shù)據(jù)元素尺寸的信號(hào)。正在使用的字節(jié)序方式將控制是否需要求重排序,而若需要,則所述尺寸將控制所施加的重排序的屬性。將會(huì)看出,當(dāng)數(shù)據(jù)以小尾端方式存儲(chǔ)在存儲(chǔ)器內(nèi),而且SIMD寄存器是小尾端時(shí),不需要重排序。相反,若SIMD寄存器采取大尾端形式,則當(dāng)數(shù)據(jù)以大尾端形式存儲(chǔ)在存儲(chǔ)器內(nèi)時(shí),將不需要重排序,但是當(dāng)數(shù)據(jù)以小尾端形式存儲(chǔ)在存儲(chǔ)器內(nèi)時(shí),則將需要重排序。
圖46圖解說明類似于圖45的實(shí)例,除在所述實(shí)例中數(shù)據(jù)元素是32位數(shù)據(jù)字外。如將要看出的,當(dāng)這些數(shù)據(jù)字以大尾端形式存儲(chǔ)在存儲(chǔ)器內(nèi)時(shí),由數(shù)據(jù)元素重排序邏輯808進(jìn)行的重排序反轉(zhuǎn)四字節(jié)數(shù)據(jù)元素由存儲(chǔ)器訪問邏輯810檢索到的字節(jié)順序,使得它們以與已經(jīng)以小尾端形式存所述存儲(chǔ)器內(nèi)并不重排序地裝入的數(shù)據(jù)一致的形式存入SIMD寄存器812內(nèi)。
下面將指出,在這里處理器系統(tǒng)作為整體描述的上下文中,存儲(chǔ)器訪問邏輯810和數(shù)據(jù)元素重排序元件808可能形成以前描述的裝入存儲(chǔ)單元的一部分。當(dāng)為標(biāo)量寄存器內(nèi)的數(shù)據(jù)采取特定的字節(jié)序而把數(shù)據(jù)讀入標(biāo)量寄存器時(shí),數(shù)據(jù)元素重排序邏輯808還可以用來補(bǔ)償存儲(chǔ)系統(tǒng)字節(jié)序。
圖47更詳細(xì)地圖解說明數(shù)據(jù)元素重排序邏輯808。將會(huì)看出,這是作為3層多路復(fù)用器控制通過各自控制信號(hào)Z,Y和X形成的。這3層分別負(fù)責(zé)翻轉(zhuǎn)相鄰字節(jié)、相鄰半字和相鄰數(shù)據(jù)字的位置。當(dāng)標(biāo)志指示大尾端方式而尺寸信號(hào)分別指示64,32或16位數(shù)據(jù)元素尺寸時(shí),控制信號(hào)X、Y和Z從字節(jié)序信號(hào)解碼,如在圖47中圖解說明的。下面將指出,數(shù)據(jù)元素重排序邏輯的許多其它形式都可以用來實(shí)現(xiàn)如在圖45和46中圖解說明的相同的功能結(jié)果。
用來執(zhí)行存儲(chǔ)器字節(jié)不變尋址的存儲(chǔ)器訪問指令方便地使用保存在處理器標(biāo)量寄存器存儲(chǔ)體的寄存器內(nèi)的存儲(chǔ)器地址指針。所述處理器支持改變數(shù)據(jù)元素尺寸的數(shù)據(jù)處理指令以及對(duì)SIMD寄存器內(nèi)選擇的數(shù)據(jù)元素執(zhí)行操作的數(shù)據(jù)處理指令。
圖48圖解說明寄存器數(shù)據(jù)存儲(chǔ)體900,它包括寄存器清單各自用作表寄存器D0、D1;索引寄存器D7;以及結(jié)果寄存器D5。將會(huì)看出,表寄存器D0、D1是寄存器數(shù)據(jù)存儲(chǔ)體900內(nèi)連續(xù)編號(hào)的寄存器。結(jié)果寄存器D7和索引寄存器D5任意地相對(duì)于表寄存器并且彼此相對(duì)地定位。該圖中示出與數(shù)據(jù)處理對(duì)應(yīng)的指令的語法。
圖49示意地圖解說明查表擴(kuò)展指令的操作。所述指令指定要用作表寄存器塊的寄存器清單,諸如通過在清單指定第一寄存器和在清單寄存器的數(shù)目(例如,1個(gè)至4個(gè))。所述指令還指定要用作索引寄存器D7的寄存器和要用作結(jié)果寄存器D5的寄存器。所述查表擴(kuò)展指令進(jìn)一步指定存儲(chǔ)在表寄存器D0、D1內(nèi)和準(zhǔn)備選擇并寫入結(jié)果寄存器D5的數(shù)據(jù)元素的數(shù)據(jù)元素尺寸。在所圖解說明的實(shí)例中,表寄存器D0、D1每一個(gè)都包含八個(gè)數(shù)據(jù)元素。相應(yīng)地,索引值具有范圍內(nèi)的跨度0至15。在所述預(yù)定的范圍外的索引值不會(huì)引起查表,而代之以所述結(jié)果寄存器D5內(nèi)相應(yīng)的位置將保持不變。如圖解說明的,第四和第六索引值就是這樣超范圍的。其他索引值指向表寄存器D0、D1內(nèi)各自的數(shù)據(jù)元素,而這些數(shù)據(jù)元素存入結(jié)果寄存器D5內(nèi)相應(yīng)的位置。在索引寄存器D7內(nèi)索引值的位置和結(jié)果寄存器D5內(nèi)數(shù)據(jù)元素位置之間存在一對(duì)一的對(duì)應(yīng)關(guān)系。結(jié)果寄存器D5內(nèi)標(biāo)記為″U″的值指示存儲(chǔ)在那些位置上的值在查表擴(kuò)展指令操作過程中保留。因而,無論所述指令執(zhí)行之前那些位置上存儲(chǔ)什么位,所述指令執(zhí)行之后那些位置內(nèi)存儲(chǔ)的仍舊不變。
圖50圖解說明來自圖49的索引值,然后它經(jīng)受SIMD減法操作,由此給索引值中的每一個(gè)都施加16的偏移量。這使以前的范圍內(nèi)的索引值變?yōu)槌恢?。先前的超位值現(xiàn)在移入范圍內(nèi)。因而,當(dāng)索引寄存器D7包含現(xiàn)在修改后的索引值在另一個(gè)查表擴(kuò)展指令下重新使用時(shí),第四和第六索引值現(xiàn)在是在范圍內(nèi),而結(jié)果在表寄存器D0、D1中執(zhí)行查表(或在其它可以在所述第二查表擴(kuò)展指令中指定的不同寄存器中執(zhí)行查表),這在第二查表擴(kuò)展指令執(zhí)行之前也已經(jīng)重新裝入。因而,索引寄存器D7內(nèi)的單一組索引值可以加上偏移量,然后以重新裝入的表寄存器D0、D1重新使用,以便給出用于較大的表的作用。
圖51進(jìn)一步圖解說明除所述查表擴(kuò)展指令以外可以設(shè)置的查表指令。這些指令之間的差異是,當(dāng)在一個(gè)查表指令中遇到超位索引值時(shí),結(jié)果寄存器D5內(nèi)與所述索引值對(duì)應(yīng)的位置寫入零值而不是保持不變。所述類型的行為在某些編程情況是有用的。圖51的實(shí)例圖解說明3個(gè)表寄存器而不是兩個(gè)表寄存器。第一、第三、第四、第六和第七索引值超出范圍。第二、第五和第八索引值在范圍內(nèi),并且導(dǎo)致在所述表寄存器內(nèi)對(duì)相應(yīng)的數(shù)據(jù)元素進(jìn)行查表。
如早期所指出的,裝入和存儲(chǔ)指令是為在SIMD寄存器文件20(見圖1)和存儲(chǔ)器之間移動(dòng)數(shù)據(jù)而設(shè)置的。每一個(gè)這樣的裝入和存儲(chǔ)指令都將指定起始地址,所述起始地址識(shí)別存儲(chǔ)器內(nèi)訪問操作(是裝入操作還是存儲(chǔ)操作)應(yīng)開始的位置。按照這些實(shí)施例的裝入和存儲(chǔ)指令,作為裝入或存儲(chǔ)指令對(duì)象的數(shù)據(jù)的數(shù)量可以針對(duì)每一個(gè)指令改變。在特定的實(shí)施例中,數(shù)據(jù)的數(shù)量通過識(shí)別數(shù)據(jù)類型″dt″(亦即,每一個(gè)數(shù)據(jù)元素的尺寸)來識(shí)別,并通過識(shí)別SIMD寄存器清單和任選地識(shí)別要訪問的數(shù)目結(jié)構(gòu)來識(shí)別要訪問的數(shù)據(jù)元素的數(shù)目。
執(zhí)行SIMD處理時(shí),往往有這樣的情況,即,針對(duì)需要的數(shù)據(jù)元素執(zhí)行的訪問操作往往是不對(duì)齊訪問(這里亦稱為字節(jié)對(duì)準(zhǔn)訪問)。換句話說,起始地址往往不對(duì)齊,而在這樣的情況下,LSU 22需要分配可能要求允許訪問操作執(zhí)行的訪問操作最大訪問次數(shù)。
盡管在可能的實(shí)現(xiàn)方案中,LSU 22設(shè)置成假定每次訪問都是不對(duì)齊的,但這意味著LSU 22在起始地址事實(shí)上與一定的多個(gè)字節(jié)對(duì)準(zhǔn)的情況下不能改善訪問操作的效率。
盡管LSU 22將能夠根據(jù)起始地址確定所述起始地址是否具有預(yù)定的對(duì)齊方式,但LSU 22一般必須在實(shí)際上計(jì)算所述起始地址以前一次提交所述訪問操作的訪問次數(shù)。在特定的實(shí)施例中,LSU 22具有流水線體系結(jié)構(gòu),而要用來執(zhí)行任何特定的訪問操作的訪問次數(shù)在流水線的譯碼階段由LSU確定。但是,起始地址往往是在流水線后續(xù)執(zhí)行階段計(jì)算,例如,通過給基地址加入偏移量值,因此LSU 22不能等待在確定多少次訪問要分配給所述訪問操作以前確定所述起始地址。
按照一個(gè)實(shí)施例,在所述訪問指令內(nèi)提供對(duì)齊方式指定字段,這里亦稱為對(duì)齊方式限定符來減輕這個(gè)問題。在特定的實(shí)施例中,對(duì)齊方式限定符可以取第一數(shù)值,指示起始地址被作為字節(jié)對(duì)準(zhǔn)處理,亦即,不對(duì)齊。下面將指出,可以通過對(duì)齊方式指定字段的任何預(yù)定的編碼來提供所述第一數(shù)值。另外,所述對(duì)齊方式限定符可以采取多個(gè)第二值中的任何一個(gè),指示不同的預(yù)定對(duì)齊方式,所述起始地址將被看作是與所述多個(gè)第二值一致,在一個(gè)特定的實(shí)施例中,所述多個(gè)可用的第二值如下表所表明的

表10現(xiàn)將參照?qǐng)D52在一個(gè)實(shí)施例中描述使用所述對(duì)齊方式指定字段信息的方式。如圖52所示,LSU 22一般將通過預(yù)定寬度的數(shù)據(jù)總線連接到存儲(chǔ)系統(tǒng)。所述存儲(chǔ)系統(tǒng)往往由不同層次的存儲(chǔ)器構(gòu)成,存儲(chǔ)器的第一層次往往是高速緩存,這是所述LSU通過數(shù)據(jù)總線進(jìn)行通信的層次。因此,如圖52所示,LSU 22設(shè)置成通過數(shù)據(jù)總線1020與存儲(chǔ)器層次1的高速緩存1010通信,在該特定實(shí)例中,考慮具有64位寬度的數(shù)據(jù)總線。高速緩存命中時(shí),進(jìn)行針對(duì)層次1高速緩存的內(nèi)容的訪問,而高速緩存沒有命中時(shí),層次1高速緩存1010將通過一個(gè)或多個(gè)其他總線1030與存儲(chǔ)系統(tǒng)1000的其它部件通信。
存儲(chǔ)系統(tǒng)的不同部件可以是分布式的,而在圖52圖解說明的實(shí)例中,假設(shè)層次1高速緩存1010設(shè)置在芯片上,亦即,包含在圖1的集成電路2內(nèi),而同時(shí)存儲(chǔ)系統(tǒng)1000的余下部分設(shè)置在芯片外。芯片上和芯片外之間的界限由在圖52中點(diǎn)線1035表示。但是,本專業(yè)的技術(shù)人員將會(huì)意識(shí)到,其它配置也可以使用,例如,存儲(chǔ)系統(tǒng)全部可以設(shè)置在芯片外,或者可以在存儲(chǔ)系統(tǒng)在芯片上的部件和存儲(chǔ)系統(tǒng)在芯片外的部件之間設(shè)置某些其它界限。
LSU 22也設(shè)置成與存儲(chǔ)器管理單元(MMU)1005通信,后者一般包括變換后援緩沖器(TLB)1015。如本專業(yè)的技術(shù)人員將會(huì)意識(shí)到的,MMU用來執(zhí)行某些訪問控制功能,例如,虛擬地址至物理地址的變換、訪問許可的確定(亦即,是否可以進(jìn)行訪問)等。為了做到這些,MMU在TLB 1015內(nèi)存儲(chǔ)從存儲(chǔ)器中的頁面表獲得的描述符。每一個(gè)描述符為相應(yīng)的存儲(chǔ)器頁面定義與該存儲(chǔ)器頁面有關(guān)的需要的訪問控制信息。
LSU 22設(shè)置成通過控制路徑1025通信告知層次1高速緩存1010和MMU 1005兩者的訪問的某些細(xì)節(jié)。具體地說,LSU 22設(shè)置成向?qū)哟?高速緩存和MMU輸出起始地址和要訪問的數(shù)據(jù)塊的尺寸的指示。另外,按照一個(gè)實(shí)施例,LSU 22輸出由對(duì)齊方式指定字段推演出來的對(duì)齊方式信息。現(xiàn)將參照?qǐng)D53A至54B進(jìn)一步描述LSU 22和/或?qū)哟?高速緩存1010和MMU使用對(duì)齊方式指定字段信息的方式。
圖53A圖解說明存儲(chǔ)器地址空間,每一個(gè)水平實(shí)線指示存儲(chǔ)器中64位對(duì)齊方式。若訪問操作指定128位長(zhǎng)數(shù)據(jù)塊1040,為了便于論證,我們假定具有起始地址0×4,于是LSU 22需要確定通過64位數(shù)據(jù)總線1020單獨(dú)進(jìn)行的訪問次數(shù),分配給該訪問操作。另外,如早先討論的,一般需要在知道什么是起始地址以前需要作出所述決定。在所述實(shí)施例中,參照?qǐng)D52可以設(shè)想,當(dāng)確定要分配的訪問次數(shù)時(shí),LSU 22設(shè)置成使用對(duì)齊方式指定字段的信息。
在圖53A的實(shí)例中,起始地址是32位對(duì)齊的,而對(duì)齊方式指定字段可以識(shí)別出該對(duì)齊方式。在這種情況下,如從圖53A可以看到的,LSU 22假定最壞的情況事態(tài),因此假定將要求3次單獨(dú)的訪問,以便對(duì)數(shù)據(jù)塊1040執(zhí)行必要的訪問操作。這與分配給不對(duì)齊訪問具有相同的訪問次數(shù)。
但是,若我們現(xiàn)在考察在圖53B中圖解說明的類似的實(shí)例,便可以看出,再一次將訪問128位數(shù)據(jù)塊1045,但是在該實(shí)例中,起始地址是64位對(duì)齊的。若對(duì)齊方式指定字段信息識(shí)別出64-位對(duì)齊方式,或者甚至識(shí)別所述數(shù)據(jù)是128位對(duì)齊,則在這種情況下,LSU 22只需要分配兩次單獨(dú)的訪問給所述訪問操作,由此在效率上提供重大的改善。但若數(shù)據(jù)總線是128位寬,則若對(duì)齊方式指定字段表明128位對(duì)齊方式,而不是64-位對(duì)齊方式,則LSU 22只需要分配單一次訪問。
現(xiàn)在考慮在圖53C中的實(shí)例,這里可以看出,需要訪問96位尺寸的數(shù)據(jù)塊1050,并在所述實(shí)例中,假設(shè)對(duì)齊方式指定字段識(shí)別出起始地址是32位對(duì)齊。再一次,在所述實(shí)例中,盡管LSU 22實(shí)際上沒有在需要提交訪問次數(shù)時(shí)算出起始地址,但是LSU 22仍舊可以假定只需要向訪問操作分配兩次訪問。圖53D圖解說明第四實(shí)例,其中將訪問80位數(shù)據(jù)塊1055,而且其中對(duì)齊方式指定字段識(shí)別起始地址是16位對(duì)齊的。再一次,LSU 22只需要向訪問操作分配兩次訪問。如果不是這樣,而是所述對(duì)齊方式指定字段已經(jīng)表明,所述訪問要作為不對(duì)齊訪問處理,那么,很清楚,所述LSU可能要向所述訪問操作分配3次訪問,如對(duì)于在圖53C中圖解說明的訪問,實(shí)際上就是這種情況。因此,可以看出,可以通過LSU 22使用對(duì)齊方式指定字段的信息,以便在對(duì)齊方式指定字段指示起始地址某些預(yù)定的對(duì)齊方式的情況下顯著改善訪問的性能。
應(yīng)該指出,對(duì)齊方式指定字段不能認(rèn)為起始地址(這里亦稱為有效地址)一定具有對(duì)齊方式,但是確實(shí)為L(zhǎng)SU 22提供繼續(xù)進(jìn)行的假定。若隨后起始地址證實(shí)不遵循對(duì)齊方式指定字段所指定的對(duì)齊方式,則在一個(gè)實(shí)施例中,相關(guān)的裝入或存儲(chǔ)操作設(shè)置成產(chǎn)生對(duì)齊方式故障。然后,對(duì)齊方式故障可以利用若干已知的技術(shù)中的任何一個(gè)處理。
如早先指出的,對(duì)齊方式信息不僅僅由LSU 22使用,而是還通過路徑1025既傳播到層次1高速緩存1010又傳播到MMU 1005?,F(xiàn)將參照?qǐng)D54A和54B描述層次1高速緩存或MMU可以使用信息的方式。如在圖54A和54B圖解說明的,考慮對(duì)256位數(shù)據(jù)塊1060、1065的訪問,在這些實(shí)例中。所述圖中的水平實(shí)線表示存儲(chǔ)器中128位對(duì)齊方式。在圖54A中,假設(shè)數(shù)據(jù)塊是64位對(duì)齊的,而同時(shí)在圖54B中,假設(shè)數(shù)據(jù)塊是128位對(duì)齊的。在兩個(gè)實(shí)例中,因?yàn)閿?shù)據(jù)總線1020只有64位寬,顯然LSU 22需要向訪問操作分配四次訪問。從LSU的觀點(diǎn)看,對(duì)齊方式指定字段指定起始地址是64位對(duì)齊還是128位對(duì)齊并不重要。
但是,層次1高速緩存1010內(nèi)的各高速緩存線路各自能夠存儲(chǔ)超過256位數(shù)據(jù)和進(jìn)一步可能是128位對(duì)齊的。在圖54A的實(shí)例中,因?yàn)閿?shù)據(jù)塊不是128位對(duì)齊的,高速緩存需要假定需要兩次訪問高速緩存線路。但是,在圖54B的實(shí)例中,層次1高速緩存1010可以根據(jù)對(duì)齊方式指定字段確定,只需要對(duì)層次1高速緩存內(nèi)的單一高速緩存線路訪問一次,而這可以用來提高層次1高速緩存1010內(nèi)訪問操作的效率。
類似地,必須由MMU進(jìn)行訪問以便在TLB 1015中檢索適當(dāng)?shù)拿枋龇捻撁姹硗鎯?chǔ)超過256位的數(shù)據(jù),往往可能是128位對(duì)齊的。相應(yīng)地,MMU 1005可以使用通過路徑1025提供的對(duì)齊方式信息來確定要訪問頁面表的次數(shù)。盡管在圖54A的實(shí)例中,MMU 1005可能需要假定需要訪問頁面表一次以上,在圖54B的實(shí)例中,所述MMU可以從對(duì)齊方式指定字段確定,只需要訪問頁面表一次,而所述信息可以用來改善MMU 1005執(zhí)行訪問控制功能的效率。
因此,可以看出,裝入或存儲(chǔ)指令內(nèi)對(duì)齊方式指定字段的使用,如上面描述的,可以用來允許硬件優(yōu)化訪問操作的某些方面,若必須在可以確定起始地址以前提交訪問周期數(shù)和/或高速緩存訪問,這是特別有用的。該方案對(duì)指定要訪問的不同數(shù)據(jù)長(zhǎng)度裝入或存儲(chǔ)指令并在LSU和存儲(chǔ)系統(tǒng)之間帶有不同數(shù)據(jù)總線大小的處理器上是有用的。
有若干種數(shù)據(jù)處理操作,它們本身無法以標(biāo)準(zhǔn)SIMD格式執(zhí)行,其中多個(gè)數(shù)據(jù)元素并排放置在寄存器內(nèi),然后并行地對(duì)那些數(shù)據(jù)元素執(zhí)行所述操作。在圖55A至55C中,圖解說明某些這樣的操作的實(shí)例。圖55A圖解說明交錯(cuò)操作,其中最好在第一寄存器1100內(nèi)的四個(gè)數(shù)據(jù)元素A,B,C,D與第二寄存器1102內(nèi)的四個(gè)數(shù)據(jù)元素E,F(xiàn),G,H交錯(cuò)。在圖55A中,所得到的交錯(cuò)數(shù)據(jù)元素表示在目的地寄存器1104,1106.內(nèi)。這些目的地寄存器可以是不同于源寄存器1100,1102的寄存器,或者可以是與源寄存器相同的兩組寄存器。如從圖55A可以看到的,按照所述交錯(cuò)操作,來自每一個(gè)源寄存器的第一數(shù)據(jù)元素并排放置在目的地寄存器內(nèi),后跟來自兩個(gè)源寄存器的第二數(shù)據(jù)元素,后跟來自兩個(gè)源寄存器的第三數(shù)據(jù)元素,后跟來自兩個(gè)源寄存器的第四數(shù)據(jù)元素。
圖55B圖解說明反向去交錯(cuò)操作,其中要求對(duì)放入兩個(gè)源寄存器1108和1110的八個(gè)數(shù)據(jù)元素去交錯(cuò)。按照所述操作,第一、第三、第五和第七數(shù)據(jù)元素放入目的地寄存器1112,而同時(shí)第二、第四、第六和第八數(shù)據(jù)元素放入第二目的地寄存器1114。如同圖55A實(shí)例的情況一樣,下面將指出,目的地寄存器可以是不同于源寄存器的寄存器,或者可以是相同的寄存器。若在圖55A和55B的實(shí)例中假設(shè)所述寄存器是64位寄存器,則在所述特定實(shí)例中,正在重疊或去交錯(cuò)的數(shù)據(jù)元素是16位寬的數(shù)據(jù)元素。但下面將指出,沒有必要把數(shù)據(jù)元素重疊或去交錯(cuò)為16位寬,也沒有必要把源和目的地寄存器重疊或去交錯(cuò)為64位寄存器。
圖55C圖解說明通過轉(zhuǎn)置操作執(zhí)行的功能。按照所述實(shí)例,來自第一源寄存器1116的兩個(gè)數(shù)據(jù)元素A,B,和來自第二源寄存器1118的兩個(gè)數(shù)據(jù)元素C,D被轉(zhuǎn)置,轉(zhuǎn)置的結(jié)果是來自第一源寄存器1116的第二數(shù)據(jù)元素與來自第二源寄存器1118的第一數(shù)據(jù)元素交換,使得第一目的地寄存器1120內(nèi)提供數(shù)據(jù)元素A,C,而同時(shí)在第二目的地寄存器1122中提供數(shù)據(jù)元素B,D。再一次,所述目的地寄存器可以不同于所述源寄存器,但是所述目的地寄存器事實(shí)上往往是與所述源寄存器相同的寄存器。在一個(gè)實(shí)例中,寄存器1116,1118,1120,1122中的每一個(gè)都可以看作64位寄存器,在這種情況下,數(shù)據(jù)元素是32位寬數(shù)據(jù)元素。但是,沒有必要令所述數(shù)據(jù)元素為32位寬,也沒有必要令所述寄存器為64位寄存器。
另外,盡管在全部上述實(shí)例中已經(jīng)假定,所述寄存器的整個(gè)內(nèi)容都表示出來,但是可以設(shè)想,所討論的所述3個(gè)操作中的任何一個(gè)都可以對(duì)相關(guān)源寄存器不同部分內(nèi)的數(shù)據(jù)元素執(zhí)行,因此在這種情況下,所述圖只圖解說明源/目的地寄存器的一部分。
如早期所指出的,標(biāo)準(zhǔn)SIMD方法涉及在寄存器內(nèi)并排放置多個(gè)數(shù)據(jù)元素,然后并行地對(duì)那些數(shù)據(jù)元素執(zhí)行操作。換句話說,以所述數(shù)據(jù)元素的粒度執(zhí)行所述操作的并行化。盡管以這樣一種方式安排所需的數(shù)據(jù)元素,例如,通過把所需的源數(shù)據(jù)元素散布在多個(gè)寄存器中,會(huì)導(dǎo)致操作非常有效的執(zhí)行,但是以這樣的方式安排所需的源數(shù)據(jù)元素,對(duì)數(shù)目巨大的操作而言是不實(shí)際的,因此以前一直無法利用SIMD方法的這種潛在的速度優(yōu)點(diǎn)。上述交錯(cuò)、去交錯(cuò)和轉(zhuǎn)置操作就是這樣的操作以前一直無法利用SIMD方法速度優(yōu)點(diǎn)的實(shí)例,但是下面將指出,還有許多其它實(shí)例,例如,某些類型的算術(shù)運(yùn)算。這樣一種算術(shù)運(yùn)算的特定實(shí)例是需要應(yīng)用于由實(shí)部和虛部構(gòu)成的復(fù)數(shù)的算術(shù)運(yùn)算。
按照一個(gè)實(shí)施例,通過為某些數(shù)據(jù)處理指令提供不僅識(shí)別數(shù)據(jù)元素尺寸而且進(jìn)一步以單獨(dú)的實(shí)體的形式識(shí)別通道尺寸(所述通道尺寸是數(shù)據(jù)元素尺寸倍數(shù))的能力,減輕了所述問題。然后,以所述通道尺寸而不是數(shù)據(jù)元素尺寸的粒度進(jìn)行所述數(shù)據(jù)處理操作的并行化,使得參與特定的數(shù)據(jù)處理操作實(shí)例化的一個(gè)以上數(shù)據(jù)元素可以在相同的源寄存器內(nèi)共存。因而,用來執(zhí)行數(shù)據(jù)處理操作的處理邏輯可以根據(jù)通道尺寸規(guī)定若干并行處理的通道,然后并行地對(duì)通道中的每一個(gè)執(zhí)行數(shù)據(jù)處理操作,所述數(shù)據(jù)處理操作適用于并行處理的每一個(gè)這樣的通道內(nèi)選擇的數(shù)據(jù)元素。
采用這樣一個(gè)方法,就有可能以SIMD方式執(zhí)行諸如以前參照?qǐng)D55A描述的交錯(cuò)操作。具體地說,圖56A圖解說明當(dāng)按照一個(gè)實(shí)施例執(zhí)行″ZIP″指令時(shí)執(zhí)行的處理。在所述特定實(shí)例中,ZIP指令是32|ZIP.8指令。因而所述指令把數(shù)據(jù)元素識(shí)別為8位寬,而所述通道是32位寬。對(duì)于圖56A的實(shí)例,假設(shè)ZIP指令已經(jīng)指定源寄存器為64位寄存器D0 1125和D1 1130。因而,這些寄存器中間每一個(gè)都包含八個(gè)8位數(shù)據(jù)元素。每一個(gè)通道內(nèi)交錯(cuò)操作是獨(dú)立并行地施加的,結(jié)果得出如圖56A下半所示數(shù)據(jù)元素的重新排列。在一個(gè)實(shí)施例中,假設(shè)對(duì)于ZIP指令,目的地寄存器與源寄存器相同,相應(yīng)地這些重新排列的數(shù)據(jù)元素再一次存儲(chǔ)在寄存器D0 1125和D1 1130內(nèi)。如從圖56A可以看到的,在通道1內(nèi),每一個(gè)源寄存器的第一4個(gè)數(shù)據(jù)元素已經(jīng)交錯(cuò),而在通道2內(nèi),每一個(gè)源寄存器的第二4個(gè)數(shù)據(jù)元素已經(jīng)交錯(cuò)。
不難意識(shí)到,通過改變通道尺寸或數(shù)據(jù)元素尺寸可以執(zhí)行不同交錯(cuò)形式。例如,若通道尺寸被識(shí)別為64位,亦即,造成那里只有一個(gè)單一的通道,則可以看出,目的地寄存器D0會(huì)包含每一個(gè)寄存器每一個(gè)第一4個(gè)數(shù)據(jù)元素的交錯(cuò)結(jié)果,而同時(shí)目的地寄存器D1會(huì)包含每一個(gè)寄存器的第二4個(gè)數(shù)據(jù)元素的交錯(cuò)結(jié)果。下面將指出,可以設(shè)置相應(yīng)的UNZIP指令,以便執(zhí)行相應(yīng)的去交錯(cuò)操作,所述UNZIP指令也能夠指定通道尺寸和數(shù)據(jù)元素尺寸。
一般,轉(zhuǎn)置操作被看作相當(dāng)不同于交錯(cuò)操作或去交錯(cuò)操作的操作,因此一般可以設(shè)想,只需要設(shè)置單獨(dú)的指令即可執(zhí)行轉(zhuǎn)置操作。但是,已經(jīng)實(shí)現(xiàn)的是,當(dāng)提供具有單獨(dú)定義通道尺寸和數(shù)據(jù)元素尺寸的能力的交錯(cuò)或去交錯(cuò)時(shí),事實(shí)上當(dāng)指定兩個(gè)源寄存器并將通道尺寸設(shè)置為數(shù)據(jù)元素尺寸的兩倍時(shí),相同的指令將可以用來執(zhí)行轉(zhuǎn)置操作。這在圖56B中圖解說明,其中交錯(cuò)指令ZIP已經(jīng)設(shè)置為識(shí)別數(shù)據(jù)元素的8位和通道尺寸16位(亦即數(shù)據(jù)元素尺寸的兩倍)。假定相同的64位源寄存器D0 1125和D1 1130在圖56A中被選擇為實(shí)例,這定義四個(gè)通道的并行處理,如圖56B所示。于是,如從圖56B下半可以看出,交錯(cuò)處理實(shí)際上在每一個(gè)通道內(nèi)導(dǎo)致轉(zhuǎn)置結(jié)果的產(chǎn)生,這是因?yàn)槊恳粋€(gè)通道內(nèi)第二源寄存器的第一數(shù)據(jù)元素與每一個(gè)通道內(nèi)第一源寄存器的第二數(shù)據(jù)元素交換。
因而,按照上述實(shí)施例,同樣的ZIP指令可以用來執(zhí)行交錯(cuò)或轉(zhuǎn)置操作,取決于如何定義通道尺寸和數(shù)據(jù)元素尺寸。還應(yīng)注意,轉(zhuǎn)置也可以利用UNZIP指令以完全相同的方式執(zhí)行,因此,16|UNZIP.8指令將執(zhí)行與16|ZIP.8指令完全相同的的轉(zhuǎn)置操作。
圖57A至57C圖解說明實(shí)現(xiàn)這樣的ZIP指令的特定實(shí)例,其中圖像內(nèi)的4X4像素陣列1135要圍繞直線1136轉(zhuǎn)置(見圖57A)。每一個(gè)像素一般都由用RGB格式表示的紅、綠和藍(lán)分量構(gòu)成。若為了便于論證,我們假定定義每一個(gè)像素所需的數(shù)據(jù)是16位長(zhǎng)度,則可以看出,陣列1135中四個(gè)像素的每一條水平直線都可以放入單獨(dú)的源寄存器A,B,C,D。
圖57B圖解說明若執(zhí)行以下兩個(gè)指令則會(huì)出現(xiàn)的不同轉(zhuǎn)置32|ZIP.16A,B32|ZIP.16C,D因而每一個(gè)ZIP指令把通道寬度定義32位,而數(shù)據(jù)元素寬度定義為16位,因而,在每一個(gè)通道內(nèi)第二寄存器中的第一數(shù)據(jù)元素與第一寄存器中的第二數(shù)據(jù)元素交換,如在圖57B中四個(gè)對(duì)角線箭頭表示的線所示。因而,在4個(gè)2×2的塊1137,1141,1143和1145中的每一個(gè)內(nèi)出現(xiàn)單獨(dú)的轉(zhuǎn)置。
然后,圖57C圖解說明作為執(zhí)行以下兩個(gè)指令的結(jié)果而發(fā)生的轉(zhuǎn)置64|ZIP.32A,C64|ZIP.32B,D按照這些指令,通道寬度設(shè)置為64位(亦即源寄存器的整個(gè)寬度),而數(shù)據(jù)元素寬度選擇為32位。因而,執(zhí)行第一ZIP指令造成寄存器A 1147內(nèi)第二32位寬的數(shù)據(jù)元素與寄存器C 1151內(nèi)第一32位寬數(shù)據(jù)元素交換。類似地,第二ZIP指令造成寄存器B 1149內(nèi)第二32位寬數(shù)據(jù)元素與寄存器D 1153內(nèi)第一32位數(shù)據(jù)元素交換。因而,如在圖57C中對(duì)角線箭頭直線所圖解說明的,其結(jié)果是左上角中的2×1像素塊被右下角的2×1像素塊替換。因而,如本專業(yè)的技術(shù)人員將會(huì)意識(shí)到的,四個(gè)ZIP指令的序列已經(jīng)圍繞對(duì)角線直線1136轉(zhuǎn)置了像素的整個(gè)4×4陣列1135。圖58圖解說明使用交錯(cuò)指令的一個(gè)特定實(shí)例。在所述實(shí)例中,考慮由實(shí)部和虛部構(gòu)成的復(fù)數(shù)。這可以是這樣的情況,需要對(duì)一系列復(fù)數(shù)的實(shí)部執(zhí)行某些計(jì)算,而同時(shí)需要對(duì)那些復(fù)數(shù)的虛部執(zhí)行單獨(dú)的計(jì)算。其結(jié)果是,實(shí)部可能已經(jīng)安排在特定的寄存器D0 1155中,而同時(shí)虛部可能已經(jīng)放入單獨(dú)的寄存器D1 1160內(nèi)。在某些時(shí)刻,這可能要求再聯(lián)合每一個(gè)復(fù)數(shù)的實(shí)部和虛部,使得它們?cè)诩拇嫫鲀?nèi)彼此相鄰。如在圖58中圖解說明的,這可以通過使用64|ZIP.16指令實(shí)現(xiàn),它把通道寬度設(shè)置為源寄存器的整個(gè)寬度,而把數(shù)據(jù)元素寬度設(shè)置為16位,亦即,實(shí)部和虛部中的每一個(gè)的寬度。如圖58下半所示,執(zhí)行ZIP指令的結(jié)果是每一個(gè)復(fù)數(shù)a,b,c,d的實(shí)部和虛部中的每一個(gè)在寄存器空間內(nèi)再聯(lián)合,目的地寄存器D0 1155包含復(fù)數(shù)a和b的實(shí)部和虛部,而目的地寄存器D1 1160包含復(fù)數(shù)c和d的實(shí)部和虛部。
它不僅是象交錯(cuò)和去交錯(cuò)指令的數(shù)據(jù)重新排列指令,它可以利用與數(shù)據(jù)元素尺寸無關(guān)地指定通道尺寸的能力。例如,圖59A和59B圖解說明可以用來執(zhí)行兩個(gè)復(fù)數(shù)乘法的兩個(gè)指令的序列。具體地說,想要用復(fù)數(shù)B乘以復(fù)數(shù)A,以便產(chǎn)生結(jié)果復(fù)數(shù)D,如通過以下方程式圖解說明的Dre=Are*Bre-Aim*BimDim=Are*Bim+Aim*Bre圖59A表示響應(yīng)以下形式的第一乘法指令執(zhí)行操作32|MUL.16 Dd,Dn,Dm
源寄存器是64位寄存器,而乘法指令指定32位的通道寬度和16位的數(shù)據(jù)元素尺寸。乘法指令安排在每一個(gè)通道內(nèi),以便使第一源寄存器Dm 1165內(nèi)所述通道中的第一數(shù)據(jù)元素乘以第二源寄存器Dn1170內(nèi)所述通道中的數(shù)據(jù)元素中的每一個(gè)(如圖59A所示),結(jié)果值存儲(chǔ)在目的地寄存器Dd 1175內(nèi)相應(yīng)的位置。每一個(gè)通道內(nèi),目的地寄存器中的第一數(shù)據(jù)元素考慮代表復(fù)數(shù)部分結(jié)果的實(shí)部,而第二數(shù)據(jù)元素考慮代表復(fù)數(shù)部分結(jié)果的虛部。
在執(zhí)行圖59A中圖解說明的指令之后,然后執(zhí)行以下指令32|MASX.16 Dd,Dn,Dm[1]如圖59B圖解說明的,所述指令是″乘法加法減法帶有交換″指令。按照所述指令,源寄存器Dm的每一個(gè)通道內(nèi)的第二數(shù)據(jù)元素,以圖59B圖解說明的方式乘以第二源寄存器Dn的相應(yīng)的通道內(nèi)的每一個(gè)數(shù)據(jù)元素。于是,乘法的結(jié)果或者加到已經(jīng)存儲(chǔ)在目的地寄存器Dd 1175內(nèi)的相應(yīng)的數(shù)據(jù)元素的值,或者從因其中減去,然后結(jié)果放置回目的地寄存器Dd 1175。把圖59A和59B的操作與早先識(shí)別的通過依次使用這兩個(gè)指令生成結(jié)果復(fù)數(shù)D的實(shí)部和虛部用的方程式加以比較將會(huì)意識(shí)到,所述計(jì)算可以并行地對(duì)兩組復(fù)數(shù)執(zhí)行,由此能夠現(xiàn)實(shí)SIMD方法的速度好處。
根據(jù)上述實(shí)例,下面將指出,通過提供除數(shù)據(jù)元素尺寸以外具有指定通道尺寸能力的指令,潛在地從SIMD實(shí)現(xiàn)方案得益的操作的數(shù)目增加了,因此在實(shí)現(xiàn)以SIMD方式操作方面提供大大改善的靈活性。
本技術(shù)提供對(duì)矢量執(zhí)行SIMD處理的能力,其中源和目的地?cái)?shù)據(jù)元素寬度是不同的。在所述環(huán)境下特別有用操作是加法或減法,然后返回高半部SIMD操作。圖60表示按照本技術(shù)返回高半部的操作的相加的實(shí)例。SIMD譯碼器16內(nèi)的指令譯碼器(見圖1)對(duì)指令VADH.116.I32 Dd,Qn,Qm進(jìn)行譯碼,并執(zhí)行圖60中圖解說明的返回高半部加法,并在下面陳述。
在圖60中,位于SIMD寄存器文件20(見圖1)內(nèi)的兩個(gè)源寄存器Qn和Qm包含32位數(shù)據(jù)元素a和b的矢量。它們加在一起形成16位數(shù)據(jù)元素Dd的矢量,也位于從所述數(shù)據(jù)和高半部形成的寄存器文件20內(nèi)Qn=[a3 a2 a1 a0]Qm=[b3 b2 b1 b]輸出Dd[(a3+b3)>>16,(a2+b2)16,(a1+b1)16,(a0+b0)16].
圖61示意地表示類似于圖60所示的操作,但在這種情況下,譯碼的指令是VRADH.I16.I32 Dd,Qn,Qm,所執(zhí)行的操作是帶四舍五入的返回高加法。這是以非常類似于在圖60中所圖解說明的操作的辦法執(zhí)行的,但是高半部四舍五入。在所述實(shí)例中,這是通過加上具有所述數(shù)據(jù)值下半最高位位置中的1的數(shù)據(jù)值,并在加法之后和取高半部之前其他地方取1而完成的。
在該圖中和在圖61一樣,為清晰起見,中間值用點(diǎn)線表示。
可以支持的其他指令(圖中未示出)是利用飽和的返回高加法或減法。在這種情況下,需要時(shí)在取出高半部之前使加法或減法將飽和。
表11表示本技術(shù)支持的一些指令的實(shí)例。Size<a>返回所述數(shù)據(jù)類型的尺寸(位),而round<td>返回四舍五入常數(shù)1(size<dt>-1)。

表11本技術(shù)可以對(duì)不同類型的數(shù)據(jù)執(zhí)行,假定獲取數(shù)據(jù)的高半部是要做的明智的事情。這對(duì)定點(diǎn)數(shù)執(zhí)行的處理特別適宜。
上述技術(shù)具有許多用途,而且可以例如用來加速SIMD FFT的實(shí)現(xiàn)。SIMD對(duì)執(zhí)行FFT(快速富里葉變換)操作特別有用,其中需要對(duì)多個(gè)數(shù)據(jù)執(zhí)行相同的操作。因而,利用SIMD處理允許并行地處理多個(gè)數(shù)據(jù)。對(duì)FFT執(zhí)行的計(jì)算往往涉及把復(fù)數(shù)乘在一起。這涉及數(shù)據(jù)值的乘法,然后對(duì)乘積進(jìn)行加法或減法。在SIMD處理中這些計(jì)算是并行地執(zhí)行的,以便提高處理速度。
需要執(zhí)行所述類型的求和的簡(jiǎn)單的實(shí)例在下面給出。
(a+ic)*(b+id)=e+if因而,實(shí)部e等于a*b-c*d而虛部f等于a*d+c*b圖62表示用于求出實(shí)部e的計(jì)算。如可以看到的,包含16位數(shù)據(jù)元素的矢量a乘以包含相同尺寸的數(shù)據(jù)元素的矢量b,而矢量c乘以矢量d。這些乘積產(chǎn)生兩個(gè)帶有32位數(shù)據(jù)元素的矢量。為了產(chǎn)生e,需要將這些矢量之一從另一個(gè)中減去,但是最后的結(jié)果只需要達(dá)到和原值相同的準(zhǔn)確性。因而,要求帶有16位數(shù)據(jù)元素的結(jié)果矢量。所述操作可以響應(yīng)該單一的指令VSBH.16.32Dd,Qn,Qm執(zhí)行,如圖中所示。因此,所述指令,返回高半部減法,在這種環(huán)境下特別有用。另外,它具有允許算術(shù)運(yùn)算以加寬的數(shù)據(jù)寬度執(zhí)行,只是在算術(shù)運(yùn)算(減法)之后才變窄。這一般地給出比執(zhí)行減法之前變窄更準(zhǔn)確的結(jié)果。
ARM已經(jīng)為它們的指令集提供指令編碼,所述指令編碼允許利用某些指令來指定即時(shí)存取。顯然,若利用所述指令對(duì)其進(jìn)行編碼,則即時(shí)存取的尺寸應(yīng)該受到限制。
其尺寸適合于利用指令編碼的即時(shí)存取值,在其中數(shù)據(jù)元素并行處理的SIMD處理中用途有限。為了解決該問題,提供帶有產(chǎn)生的常數(shù)的指令集,它具有與此相關(guān)聯(lián)的受限尺寸的即時(shí)存取,但是具有展寬所述即時(shí)存取的能力。因而,例如字節(jié)大小的即時(shí)存取可以擴(kuò)展,以便產(chǎn)生64位常數(shù)或即時(shí)存取。這樣,所述即時(shí)存取可以使用在帶有64位源寄存器的邏輯運(yùn)算中,包括在SIMD處理中的多個(gè)源數(shù)據(jù)元素。
圖63表示即時(shí)存取abcdefgh,就是說,它與控制數(shù)值一起被編碼在指令內(nèi),這如所述表左手列所示??梢詳U(kuò)展二元即時(shí)存取,以便填充64位寄存器,實(shí)際的擴(kuò)展根據(jù)指令和與它相聯(lián)系的控制部分執(zhí)行。在所示的實(shí)例中,8位即時(shí)存取abcdefgh,在64位數(shù)據(jù)值內(nèi)在不同位置上復(fù)制,即時(shí)存取放置的位置取決于控制數(shù)值。另外,0和/或1可以用來填充其中不放置數(shù)值的空的空間。1和/或0的選擇由控制數(shù)值確定。因而,在所述實(shí)例中,可以從具有8位即時(shí)存取和4位控制數(shù)值的指令產(chǎn)生用于SIMD處理的范圍很寬的可能的常數(shù)。
在一個(gè)實(shí)施例中(所述表最后一行),不是在某些位復(fù)制即時(shí)存取,而是擴(kuò)展即時(shí)存取的每一個(gè)位,以便產(chǎn)生新的64位即時(shí)存取或常數(shù)。
如可以看到的,在某些情況下所述常數(shù)在每一個(gè)通道是相同的,而在其他情況下在一些通道中出現(xiàn)其他不同常數(shù)。在某些實(shí)施例中(未示出),還提供反轉(zhuǎn)這些常數(shù)的可能性,這也增加可以產(chǎn)生的常數(shù)的數(shù)目。
下面給出如圖63所示可以用來產(chǎn)生常數(shù)的指令的格式的實(shí)例。所述指令中<value>是數(shù)據(jù)部分或即時(shí)存取,而<mode>是控制部分,它提供在所產(chǎn)生的常數(shù)內(nèi)的<value>部分如何被擴(kuò)展的指示(如圖63的表中不同行所示)。
VMOV Dd,#<value>,<mode>
其中<value>是字節(jié)<mode>是所列舉擴(kuò)展功能之一這些修改后的指令一般地具有相關(guān)的數(shù)據(jù)值,它具有包括即時(shí)存取數(shù)據(jù)部分<value>和控制部分<mode>。如圖63所示,控制部分表示即時(shí)存取如何被擴(kuò)展。這可以以各種各樣的方法執(zhí)行,但在某些實(shí)施例中,控制部分表示將利用常數(shù)產(chǎn)生邏輯來執(zhí)行常數(shù)的哪些擴(kuò)展。
圖64示意地表示常數(shù)產(chǎn)生邏輯的實(shí)例,它可以用來按照本技術(shù)從數(shù)據(jù)部分1210和與指令相聯(lián)系的控制部分1200產(chǎn)生常數(shù)。在所示的實(shí)例中,控制部分1200控制所述控制產(chǎn)生邏輯1220,它包括門1230,以便向要產(chǎn)生的常數(shù)1240內(nèi)每一個(gè)位輸出數(shù)據(jù)值1210的一部分,或者1或0。
圖65表示類似于圖1所示的數(shù)據(jù)處理器(集成電路),類似的標(biāo)號(hào)代表類似的特征。圖65不同于圖1在于,它明確地表示常數(shù)產(chǎn)生邏輯1220。常數(shù)產(chǎn)生邏輯1220可以看作與譯碼控制部分14、16相鄰或形成其一部分。如可以看到的,指令從指令流水線12發(fā)送至譯碼/控制邏輯14、16。它產(chǎn)生控制處理器的SIMD處理邏輯18、裝入存儲(chǔ)單元22和標(biāo)量處理部分4、6、8、10的操作控制信號(hào)。若在譯碼/控制部分14、16收到帶有常數(shù)產(chǎn)生的指令,則常數(shù)產(chǎn)生邏輯用來產(chǎn)生用于SIMD處理的常數(shù)??梢园阉龀?shù)直接發(fā)送至SIMD寄存器數(shù)據(jù)存儲(chǔ)體20(點(diǎn)線1222),或者若所述帶有常數(shù)產(chǎn)生的指令包括SIMD數(shù)據(jù)處理部分,則把所產(chǎn)生的常數(shù)發(fā)送述SIMD處理邏輯(直線1224),其中對(duì)所產(chǎn)生的常數(shù)執(zhí)行其他操作,以便產(chǎn)生新的數(shù)據(jù)值。
圖66A和B示意地圖解說明圖65所示的兩個(gè)不同路徑。圖66A表示其中所述指令產(chǎn)生常數(shù)發(fā)送至寄存器存儲(chǔ),亦即,點(diǎn)線1222的常數(shù)的情況。圖66B表示所述帶有常數(shù)產(chǎn)生的指令包括數(shù)據(jù)處理部分的情況。在這種情況下,數(shù)據(jù)處理操作(OP)是對(duì)所產(chǎn)生的常數(shù)和另一個(gè)源操作數(shù)1250執(zhí)行的,以便響應(yīng)該指令產(chǎn)生最后的數(shù)據(jù)值1260,這對(duì)應(yīng)于圖65的直線1224。
除圖63所示的常數(shù)和它們的反演以外,對(duì)所產(chǎn)生的常數(shù)可以執(zhí)行附加的數(shù)據(jù)處理操作,諸如OR、AND、測(cè)試、加法或減法,以便產(chǎn)生范圍寬得多的數(shù)據(jù)值。這對(duì)應(yīng)于圖13B和在圖65中的路徑1224。表12給出按位AND(“與”)和按位OR(“或”)的實(shí)例,它們可以用來產(chǎn)生某些附加的數(shù)據(jù)值。

對(duì)所產(chǎn)生的常數(shù)執(zhí)行其他數(shù)據(jù)處理操作的能力可以有各種各樣的用途。例如,圖67表示本技術(shù)的實(shí)施例可以如何用來產(chǎn)生位屏蔽,以便從矢量中的若干數(shù)據(jù)元素中提取某一位或一些位。在所示的實(shí)例中,從源矢量提取每一個(gè)數(shù)據(jù)元素的第四位。最初通過復(fù)制即時(shí)存取8來擴(kuò)展它,然后這后跟邏輯AND指令,它使所產(chǎn)生的常數(shù)與源矢量進(jìn)行AND運(yùn)算,從每一個(gè)數(shù)據(jù)元素提取所需的位。這些操作是響應(yīng)以下指令執(zhí)行的VAND Dd,#0b00001000,0b1100其中<mode>數(shù)值1100涉及所產(chǎn)生的常數(shù),包括擴(kuò)展的數(shù)據(jù)部分(見圖63)。
盡管這里已經(jīng)描述了特定的實(shí)施例,但下面將指出,本發(fā)明不限于此,而且在本發(fā)明的范圍內(nèi)可以對(duì)其進(jìn)行許多修改和添加。例如,在不脫離本發(fā)明的范圍的情況下,可以結(jié)合獨(dú)立權(quán)項(xiàng)的特征對(duì)以下從屬權(quán)項(xiàng)的特征進(jìn)行不同組合。
權(quán)利要求
1.一種數(shù)據(jù)處理設(shè)備,它包括具有多個(gè)寄存器的寄存器數(shù)據(jù)存儲(chǔ)體,可以用來保存數(shù)據(jù)元素;處理器,可以用來并行地對(duì)在至少一個(gè)所述寄存器中訪問的多個(gè)數(shù)據(jù)元素執(zhí)行數(shù)據(jù)處理操作;訪問邏輯,可以用來響應(yīng)單一訪問指令,在指定的寄存器和連續(xù)的存儲(chǔ)器塊之間移動(dòng)多個(gè)數(shù)據(jù)元素,在所述連續(xù)的存儲(chǔ)器塊中數(shù)據(jù)元素以具有結(jié)構(gòu)格式的結(jié)構(gòu)陣列的形式保存,所述結(jié)構(gòu)格式具有多個(gè)分量;所述單一訪問指令識(shí)別所述結(jié)構(gòu)格式中的所述分量數(shù)目;以及所述訪問邏輯可以用來在所述多個(gè)數(shù)據(jù)元素移動(dòng)時(shí)將所述多個(gè)數(shù)據(jù)元素重新排列,使得每一個(gè)指定的寄存器保存一個(gè)分量的數(shù)據(jù)元素,而同時(shí)所述數(shù)據(jù)元素以所述結(jié)構(gòu)陣列的形式保存在存儲(chǔ)器中。
2.如權(quán)利要求1所述的數(shù)據(jù)處理設(shè)備,其中所述單一訪問指令識(shí)別所述指定的寄存器,所述指定的寄存器的數(shù)目是所述分量數(shù)目的倍數(shù)。
3.如權(quán)利要求1或權(quán)利要求2所述的數(shù)據(jù)處理設(shè)備,其中所述單一訪問指令包括識(shí)別與所述要移動(dòng)的數(shù)據(jù)元素相聯(lián)系的數(shù)據(jù)類型的數(shù)據(jù)類型信息。
4.如權(quán)利要求3所述的數(shù)據(jù)處理設(shè)備,其中所述要移動(dòng)的數(shù)據(jù)元素中的每一個(gè)具有相同的數(shù)據(jù)類型。
5.如上述權(quán)利要求中任何一個(gè)所述的數(shù)據(jù)處理設(shè)備,其中所述指定的寄存器具有固定的彼此關(guān)系。
6.如權(quán)利要求5所述的數(shù)據(jù)處理設(shè)備,其中按照所述固定的關(guān)系所述各指定的寄存器被n個(gè)中間寄存器隔開,其中n是2m-1并且其中m是大于或等于零的整數(shù)。
7.如權(quán)利要求5或權(quán)利要求6所述的數(shù)據(jù)處理設(shè)備,其中所述指定的寄存器是所述寄存器數(shù)據(jù)存儲(chǔ)體內(nèi)一系列相鄰的寄存器。
8.如上述權(quán)利要求中任何一個(gè)所述的數(shù)據(jù)處理設(shè)備,其中所述單一訪問指令是單一裝入指令,所述訪問邏輯可以用來響應(yīng)該單一裝入指令,以便把所述多個(gè)數(shù)據(jù)元素從所述連續(xù)的存儲(chǔ)器塊裝入所述指定的寄存器,并且在把所述數(shù)據(jù)元素存儲(chǔ)在所述指定的寄存器之前,通過把所述不同分量的數(shù)據(jù)元素去交錯(cuò),重新排列所述數(shù)據(jù)元素,以便把不同分量的數(shù)據(jù)元素存儲(chǔ)在所述指定的寄存器的不同寄存器中。
9.如權(quán)利要求1至7中任何一項(xiàng)所述的數(shù)據(jù)處理設(shè)備,其中所述單一訪問指令是單一存儲(chǔ)指令,所述訪問邏輯可以用來響應(yīng)該單一存儲(chǔ)指令,把所述多個(gè)數(shù)據(jù)元素從所述指定的寄存器存入所述連續(xù)的存儲(chǔ)器塊,并且在把所述數(shù)據(jù)元素存儲(chǔ)在所述連續(xù)的存儲(chǔ)器塊之前,通過交錯(cuò)所述不同分量的數(shù)據(jù)元素,重新排列所述數(shù)據(jù)元素,使得所述數(shù)據(jù)元素以所述結(jié)構(gòu)的陣列的形式存儲(chǔ)在所述連續(xù)的存儲(chǔ)器塊中。
10.如上述權(quán)利要求中任何一個(gè)所述的數(shù)據(jù)處理設(shè)備,其中所述單一訪問指令識(shí)別要訪問的結(jié)構(gòu)數(shù)目。
11.如附屬于權(quán)利要求8的權(quán)利要求10所述的數(shù)據(jù)處理設(shè)備,其中若所述結(jié)構(gòu)的數(shù)目不足以使所述指定的寄存器被數(shù)據(jù)元素填滿,則所述訪問邏輯可以用來用一個(gè)或多個(gè)預(yù)定的值填充所述指定的寄存器任何未填滿部分。
12.如上述權(quán)利要求中任何一個(gè)所述的數(shù)據(jù)處理設(shè)備,其中所述單一訪問指令識(shí)別用來識(shí)別所述要移動(dòng)的數(shù)據(jù)元素的尋址方式。
13.如權(quán)利要求12所述的數(shù)據(jù)處理設(shè)備,其中所述尋址方式識(shí)別所述連續(xù)的存儲(chǔ)器塊的起始地址。
14.如上述權(quán)利要求中任何一個(gè)所述的數(shù)據(jù)處理設(shè)備,其中所述指定的寄存器具有相同的尺寸。
15.如上述權(quán)利要求中任何一個(gè)所述的數(shù)據(jù)處理設(shè)備,其中所述單一訪問指令識(shí)別要對(duì)所述數(shù)據(jù)元素進(jìn)行的變換,并且所述訪問邏輯可以用來在所述數(shù)據(jù)元素被移動(dòng)時(shí)對(duì)所述數(shù)據(jù)元素進(jìn)行所述變換。
16.一種操作數(shù)據(jù)處理設(shè)備的方法,所述設(shè)備包括具有多個(gè)寄存器的寄存器數(shù)據(jù)存儲(chǔ)體,可以用來保存數(shù)據(jù)元素;以及處理器,可以用來并行地對(duì)在至少一個(gè)所述寄存器中訪問的多個(gè)數(shù)據(jù)元素執(zhí)行數(shù)據(jù)處理操作,所述方法包括以下步驟(a)響應(yīng)單一訪問指令而在指定的寄存器和連續(xù)的存儲(chǔ)器塊之間移動(dòng)多個(gè)數(shù)據(jù)元素,數(shù)據(jù)元素以具有結(jié)構(gòu)格式的結(jié)構(gòu)陣列的形式保存在所述連續(xù)的存儲(chǔ)器塊中,所述結(jié)構(gòu)格式具有多個(gè)分量;所述單一訪問指令識(shí)別所述結(jié)構(gòu)格式中分量的數(shù)目,并且所述方法還包括以下步驟(b)在所述多個(gè)數(shù)據(jù)元素移動(dòng)時(shí)重新排列所述多個(gè)數(shù)據(jù)元素,使得每一個(gè)指定的寄存器保存一個(gè)分量的數(shù)據(jù)元素,而同時(shí)所述數(shù)據(jù)元素以所述結(jié)構(gòu)陣列的形式被保存在存儲(chǔ)器中。
17.如權(quán)利要求16所述的方法,其中所述單一訪問指令識(shí)別所述指定的寄存器,所述指定的寄存器的數(shù)目是所述分量的數(shù)目的倍數(shù)。
18.如權(quán)利要求16所述的方法,其中所述單一訪問指令包括識(shí)別與所述要移動(dòng)的數(shù)據(jù)元素相聯(lián)系的數(shù)據(jù)類型的數(shù)據(jù)類型信息。
19.如權(quán)利要求18所述的方法,其中所述要移動(dòng)的數(shù)據(jù)元素中的每一個(gè)具有相同的數(shù)據(jù)類型。
20.如權(quán)利要求16至19中任何一項(xiàng)所述的方法,其中所述指定的寄存器具有固定的彼此關(guān)系。
21.如權(quán)利要求20所述的方法,其中按照所述固定的關(guān)系,所述各指定的寄存器被n個(gè)中間寄存器隔開,其中n是2m-1并且其中m是大于或等于零的整數(shù)。
22.如權(quán)利要求20或權(quán)利要求21所述的方法,其中所述指定的寄存器是所述寄存器數(shù)據(jù)存儲(chǔ)體內(nèi)一系列相鄰的寄存器。
23.如權(quán)利要求16至22中任何一項(xiàng)所述的方法,其中所述單一訪問指令是單一裝入指令,并且其中所述步驟(a)包括把所述多個(gè)數(shù)據(jù)元素從所述連續(xù)的存儲(chǔ)器塊裝入所述指定的寄存器的步驟;以及在把所述數(shù)據(jù)元素存儲(chǔ)在所述指定的寄存器之前,所述步驟(b)包括以下步驟通過把所述不同分量的數(shù)據(jù)元素的去交錯(cuò),重新排列所述數(shù)據(jù)元素,以便把不同分量的數(shù)據(jù)元素存儲(chǔ)在所述指定的寄存器的不同寄存器中。
24.如權(quán)利要求16至22中任何一項(xiàng)所述的方法,其中所述單一訪問指令是單一存儲(chǔ)指令,并且其中所述步驟(a)包括把所述多個(gè)數(shù)據(jù)元素從所述指定的寄存器存儲(chǔ)至所述連續(xù)的存儲(chǔ)器塊;以及在把所述數(shù)據(jù)元素存儲(chǔ)在所述連續(xù)的存儲(chǔ)器塊之前,所述步驟(b)包括以下步驟通過交錯(cuò)所述不同分量的數(shù)據(jù)元素,將所述數(shù)據(jù)元素重新排列,以便將所述數(shù)據(jù)元素以所述結(jié)構(gòu)陣列的形式存儲(chǔ)在所述連續(xù)的存儲(chǔ)器塊中。
25.如權(quán)利要求16至24中任何一項(xiàng)所述的方法,其中所述單一訪問指令識(shí)別要訪問的結(jié)構(gòu)的數(shù)目。
26.如附屬于權(quán)利要求23的權(quán)利要求25所述的方法,其中若所述結(jié)構(gòu)的數(shù)目不足以使所述指定的寄存器被數(shù)據(jù)元素填滿,則所述方法還包括以下步驟用一個(gè)或多個(gè)預(yù)定的值填充所述指定的寄存器的任何未填滿部分。
27.如權(quán)利要求16至26中任何一項(xiàng)所述的方法,其中所述單一訪問指令識(shí)別用來識(shí)別所述要移動(dòng)的數(shù)據(jù)元素的尋址方式。
28.如權(quán)利要求27所述的方法,其中所述尋址方式識(shí)別所述連續(xù)的存儲(chǔ)器塊的起始地址。
29.如權(quán)利要求16至28中任何一項(xiàng)所述的方法,其中所述指定的寄存器具有相同的尺寸。
30.如權(quán)利要求16至29中任何一項(xiàng)所述的方法,其中所述單一訪問指令識(shí)別要施加于所述數(shù)據(jù)元素的變換,并且所述方法還包括在所述數(shù)據(jù)元素被移動(dòng)時(shí)對(duì)所述數(shù)據(jù)元素施加所述變換的步驟。
31.一種包括計(jì)算機(jī)程序的計(jì)算機(jī)程序產(chǎn)品,所述計(jì)算機(jī)程序包括至少一個(gè)單一訪問指令,當(dāng)執(zhí)行所述至少一個(gè)單一訪問指令時(shí),所述至少一個(gè)單一訪問指令使數(shù)據(jù)處理設(shè)備按照權(quán)利要求16至30中任何一項(xiàng)所述的方法運(yùn)行。
全文摘要
一種數(shù)據(jù)處理設(shè)備和方法是為在寄存器和存儲(chǔ)器之間移動(dòng)數(shù)據(jù)而設(shè)置的。數(shù)據(jù)處理設(shè)備包括具有多個(gè)可以用來存入數(shù)據(jù)元素的寄存器的寄存器數(shù)據(jù)存儲(chǔ)體。處理器可以用來并行地對(duì)在至少一個(gè)寄存器中訪問的多個(gè)數(shù)據(jù)元素執(zhí)行數(shù)據(jù)處理操作。訪問邏輯可以用來響應(yīng)單一訪問指令,在指定的寄存器和連續(xù)的存儲(chǔ)器塊之間移動(dòng)多個(gè)數(shù)據(jù)元素,數(shù)據(jù)元素以具有結(jié)構(gòu)格式的結(jié)構(gòu)陣列的形式存儲(chǔ)在連續(xù)的存儲(chǔ)器塊中,所述結(jié)構(gòu)格式具有多個(gè)分量。單一訪問指令識(shí)別結(jié)構(gòu)格式中分量的數(shù)目,而訪問邏輯還可以用來在多個(gè)數(shù)據(jù)元素被移動(dòng)時(shí)重新排列所述多個(gè)數(shù)據(jù)元素,使得每一個(gè)指定的寄存器存儲(chǔ)一個(gè)分量的數(shù)據(jù)元素,而同時(shí)所述數(shù)據(jù)元素以結(jié)構(gòu)陣列的形式存儲(chǔ)在存儲(chǔ)器中。
文檔編號(hào)G06F9/30GK1890630SQ200480036309
公開日2007年1月3日 申請(qǐng)日期2004年7月1日 優(yōu)先權(quán)日2003年12月9日
發(fā)明者S·A·福德, D·H·賽姆斯, A·C·羅斯, D·R·盧茨, C·N·欣茲 申請(qǐng)人:Arm有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1