尋找一組具有終止字符的字符數(shù)據(jù)的長度的制作方法
【專利摘要】判定具有一終止字符的字符數(shù)據(jù)的長度。將要判定該長度的該字符數(shù)據(jù)并行地載入于一個或多個向量寄存器內(nèi)。使用一指令,該指令將數(shù)據(jù)載入于一向量寄存器中至一指定邊界,且該指令提供一種使用例如另一指令來判定所載入的字符的數(shù)目的方式。另外,使用一指令以尋找例如第一零或空值字符的第一終止字符的索引。此指令并行地搜尋該數(shù)據(jù)以尋找該終止字符。藉由使用這些指令,僅使用一個分支指令來判定該字符數(shù)據(jù)的該長度。
【專利說明】尋找一組具有終止字符的字符數(shù)據(jù)的長度
【技術(shù)領(lǐng)域】
[0001 ] 本發(fā)明的一個方面大體涉及文本處理,且具體地說,涉及與字符數(shù)據(jù)相關(guān)聯(lián)的處理。
【背景技術(shù)】
[0002]文本處理常常需要各種類型的字符數(shù)據(jù)處理,包括字符數(shù)據(jù)字串的處理。一些類型的處理包括尋找終止點(例如,字串的結(jié)尾)、判定字符數(shù)據(jù)的長度、尋找特定字符等。執(zhí)行這些類型的處理的當(dāng)前指令和/或技術(shù)傾向于效率低下。
【發(fā)明內(nèi)容】
[0003]經(jīng)由提供一種用于判定一組數(shù)據(jù)的一長度的計算機程序產(chǎn)品來克服先前技術(shù)的缺點并提供優(yōu)勢。該計算機程序產(chǎn)品包括一計算機可讀儲存介質(zhì),其可由一處理電路讀取且儲存用于由該處理電路執(zhí)行以用于執(zhí)行一方法的指令。該方法包括(例如):將在存儲器的一指定區(qū)塊內(nèi)的數(shù)據(jù)自存儲器載入至一寄存器,該數(shù)據(jù)為待判定該長度所針對的該組數(shù)據(jù)的至少一部分;獲得載入于該寄存器中的數(shù)據(jù)量的計數(shù);藉由一處理器判定載入于該寄存器中的該數(shù)據(jù)的終止值,該判定包含檢查該數(shù)據(jù)以判定該寄存器是否包括終止字符,且基于該寄存器包括終止字符,將該終止值設(shè)定為該終止字符的位置,且基于該寄存器不包括該終止字符,將該終止值設(shè)定為預(yù)先指定值;基于該計數(shù)及該終止值中的至少之一而檢查是否存在待計數(shù)的額外數(shù)據(jù);基于該檢查指示將對額外數(shù)據(jù)計數(shù),基于該額外數(shù)據(jù)使該計數(shù)遞增,該計數(shù)提供該組數(shù)據(jù)的長度;及基于該檢查指示將不對額外數(shù)據(jù)計數(shù),使用該計數(shù)作為該組數(shù)據(jù)的長度。
[0004]本文中亦描述及主張關(guān)于本發(fā)明的一個或多個方面的方法及系統(tǒng)。另外,本文中亦描述且可主張關(guān)于本發(fā)明的一個或多個方面的服務(wù)。
[0005]經(jīng)由本發(fā)明的技術(shù)實現(xiàn)額外特征及優(yōu)勢。本發(fā)明的其他實施例及方面在本文中得以詳細(xì)描述且被視為所主張的本發(fā)明的一部分。
【專利附圖】
【附圖說明】
[0006]僅通過舉例的方式,現(xiàn)在將參照附圖描述本發(fā)明的一個或多個實施例,其中:
[0007]圖1描繪合并且使用本發(fā)明的一個或多個方面的計算環(huán)境的一實例;
[0008]圖2A描繪合并且使用本發(fā)明的一個或多個方面的計算環(huán)境的另一實例;圖2B描繪根據(jù)本發(fā)明的一個方面的圖2A的存儲器的其他細(xì)節(jié);
[0009]圖3描繪根據(jù)本發(fā)明的一個方面的用以判定一組字符數(shù)據(jù)的長度的邏輯的一實施例;
[0010]圖4A描繪根據(jù)本發(fā)明的一個方面的主存儲器的一實例,將數(shù)據(jù)自該主存儲器載入至向量寄存器中且將判定數(shù)據(jù)的長度;
[0011]圖4B描繪根據(jù)本發(fā)明的一個方面的載入有來自圖4A的主存儲器的字符數(shù)據(jù)的向量寄存器的一實例;
[0012]圖4C描繪根據(jù)本發(fā)明的一個方面的主存儲器的另一實例,將數(shù)據(jù)自該主存儲器載入至向量寄存器中且將判定數(shù)據(jù)的長度;
[0013]圖4D及4E描繪根據(jù)本發(fā)明的一個方面的載入有來自圖4C的主存儲器的字符數(shù)據(jù)的向量寄存器的實例;
[0014]圖5描繪根據(jù)本發(fā)明的一個方面的“向量載入至區(qū)塊邊界(Vector Load to BlockBoundary) ”指令的格式的一實施例;
[0015]圖6A描繪根據(jù)本發(fā)明的一個方面的與“向量載入至區(qū)塊邊界”指令相關(guān)聯(lián)的邏輯的一實施例;
[0016]圖6B描繪根據(jù)本發(fā)明的一個方面的與“向量載入至區(qū)塊邊界”指令相關(guān)聯(lián)的邏輯的另一實施例;
[0017]圖7描繪根據(jù)本發(fā)明的一個方面的“向量尋找元素不相等(Vector Find ElementNot Equal)”指令的格式的一實施例;
[0018]圖8描繪根據(jù)本發(fā)明的一個方面的與“向量尋找元素不相等”指令相關(guān)聯(lián)的邏輯的一實施例;
[0019]圖9描繪根據(jù)本發(fā)明的一個方面的執(zhí)行圖8的邏輯的各種處理區(qū)塊的一實施例;
[0020]圖10描繪根據(jù)本發(fā)明的一個方面的“載入計數(shù)至區(qū)塊邊界(Load Count to BlockBoundary) ”指令的格式的一實施例;
[0021]圖11描繪根據(jù)本發(fā)明的一個方面的與“載入計數(shù)至區(qū)塊邊界”指令相關(guān)聯(lián)的邏輯的一實施例;
[0022]圖12描繪根據(jù)本發(fā)明的一個方面的寄存器文件的一實例;
[0023]圖13描繪合并本發(fā)明的一個或多個方面的計算機程序產(chǎn)品的一實施例;
[0024]圖14描繪合并且使用本發(fā)明的一個或多個方面的主機計算機系統(tǒng)的一實施例;
[0025]圖15描繪合并且使用本發(fā)明的一個或多個方面的計算機系統(tǒng)的再一實例;
[0026]圖16描繪合并且使用本發(fā)明的一個或多個方面的包含計算機網(wǎng)絡(luò)的計算機系統(tǒng)的另一實例;
[0027]圖17描繪合并且使用本發(fā)明的一個或多個方面的計算機系統(tǒng)的各種元件的一實施例;
[0028]圖18A描繪合并且使用本發(fā)明的一個或多個方面的圖17的計算機系統(tǒng)的執(zhí)行單元的一實施例;
[0029]圖18B描繪合并且使用本發(fā)明的一個或多個方面的圖17的計算機系統(tǒng)的分支單元的一實施例;
[0030]圖18C描繪合并且使用本發(fā)明的一個或多個方面的圖17的計算機系統(tǒng)的載入/儲存單元的一實施例;及
[0031]圖19描繪合并且使用本發(fā)明的一個或多個方面的經(jīng)模擬的主機計算機系統(tǒng)的一實施例。
【具體實施方式】
[0032]根據(jù)本發(fā)明的一個方面,提供用于促進字符數(shù)據(jù)的處理的能力,字符數(shù)據(jù)包括(但不限于):任一語言下的字母字符;數(shù)字;標(biāo)點符號;和/或其他符號。字符數(shù)據(jù)可為或可不為數(shù)據(jù)字串。標(biāo)準(zhǔn)與字符數(shù)據(jù)相關(guān)聯(lián),標(biāo)準(zhǔn)的實例包括(但不限于):美國信息交換標(biāo)準(zhǔn)碼(ASCII) ;Unicode,包括(但不限于)Unicode變換格式(UTF)8 ;UTF16 ;等。
[0033]在一個方面中,提供一種用于進行以下操作的技術(shù):使用并行處理尋找具有終止字符的一組字符數(shù)據(jù)(例如,空值終止的字符串)的長度且不引起無故例外狀況。在一實例中,在一或多個向量寄存器內(nèi)載入該組字符數(shù)據(jù)(本文中亦被稱作字符數(shù)據(jù)或終止的字符數(shù)據(jù)),將判定該組字符數(shù)據(jù)的長度。具體地,在一實施例中,使用一指令(例如,“向量載入至區(qū)塊邊界”指令),該指令并行地將向量寄存器中的數(shù)據(jù)載入至所選定邊界(諸如,高速緩存或頁面邊界),且提供一種判定所載入的字符的數(shù)目(計數(shù))的方式。舉例而言,為了判定所載入的字符的數(shù)目,使用另一指令(例如,“載入計數(shù)至區(qū)塊邊界”指令)。另外,使用一指令(例如,“向量尋找元素不相等”指令)以搜尋所載入數(shù)據(jù)以尋找該組字符數(shù)據(jù)內(nèi)的第一分隔符號字符,亦即,第一終止字符(諸如,字符數(shù)據(jù)內(nèi)的零或空值字符)。此指令并行地檢查數(shù)據(jù)的多個字節(jié)。
[0034]若藉由“向量尋找元素不相等”指令未找出分隔符號字符的位置,則載入該組字符數(shù)據(jù)的額外數(shù)據(jù),且重復(fù)對分隔符號字符的計數(shù)及搜尋。計數(shù)是追蹤該組字符數(shù)據(jù)的所載入字節(jié)(或其他數(shù)據(jù)單位)的數(shù)目的匯總值。發(fā)生載入、計數(shù)及對分隔符號字符的搜尋,直至找出分隔符號字符的位置為止。藉由使用這些指令,僅使用一分支指令來判定字符數(shù)據(jù)的長度。另外,提供對字符數(shù)據(jù)的快速并行檢查,同時防止假性例外狀況。
[0035]如本文中所描述,作為實例,向量寄存器的元素(亦稱為向量)的長度為一個、兩個或四個字節(jié);且向量運算元為(例如)具有多個元素的單指令多數(shù)據(jù)(SIMD)運算元。在其他實施例中,元素可具有其他大小,且向量運算元不需要為SIMDjP /或可包括一個元素。
[0036]參看圖1描述合并且使用本發(fā)明的一個或多個方面的一計算環(huán)境的一實施例。計算環(huán)境100包括(例如)經(jīng)由(例如)一條或多條總線108和/或其他連接耦接至彼此的一處理器102 (例如,中央處理單元)、一存儲器104 (例如,主存儲器)及一個或多個輸入/輸出(I/O)器件和/或接口 106。
[0037]在一實例中,處理器102基于由國際商業(yè)機器公司(Internat1nal BusinessMachines Corporat1n)供應(yīng)的z/Architecture,且為一服務(wù)器的部分,諸如亦由國際商業(yè)機器公司供應(yīng)且實施z/Architecture的System z服務(wù)器。z/Architecture的一實施例描述于題為“z/Architecture Principles of Operat1n” 的IBM—*公開案(IBM?公開案第
SA22-7832-08號,第九版,2010年8月)中,該公開案在此以其全文引用的方式并入本文中。
在一實例中,該處理器執(zhí)行一操作系統(tǒng),諸如,亦由國際商業(yè)機器公司供應(yīng)的z/0S。IBM?、
Z/ARCHITECTURE?.及Z/OS.?為國際商業(yè)機器公司(阿芒克,紐約,美國)的注冊商標(biāo)。
本文中使用的其他名稱可為國際商業(yè)機器公司或其他公司的注冊商標(biāo)、商標(biāo)或產(chǎn)品名稱。
[0038]在再一實施例中,處理器102基于由國際商業(yè)機器公司供應(yīng)的PowerArchitecture。Power Architecture 的一實施例描述于“Power ISA?第 2.06 版修訂 B”(國際商業(yè)機器公司,2010年7月23日)中,該文件在此以其全文引用的方式并入本文中。
power ARCHITECTURE?為國際商業(yè)機器公司的注冊商標(biāo)。
[0039]在又一實施例中,處理器102基于由因特爾公司供應(yīng)的Intel架構(gòu)。Intel架構(gòu)的一實施例描述于 “ ?η?εΓ 64and IA-32 Architectures Developer’s Manual:第2B 卷,Instruct1ns Set Reference, A-L,,(序號 253666-041US,2011 年 12 月)及uIntel''5 64and IA-32 Architectures Developer's Manual:第 2B 卷,Instruct1ns SetReference, M-Z”(序號253667-041US,2011年12月)中,該等文件中的每一者在此以其全文引用的方式并入本文中。hud?為因特爾公司(圣克拉拉,加利福尼亞)的注冊商標(biāo)。
[0040]參看圖2A描述合并且使用本發(fā)明的一個或多個方面的一計算環(huán)境的另一實施例。在此實例中,計算環(huán)境200包括(例如)經(jīng)由(例如)一條或多條總線208和/或其他連接耦接至彼此的一本地中央處理單元202、一存儲器204及一個或多個輸入/輸出器件和/或接口 206。作為實例,計算環(huán)境200可包括:由國際商業(yè)機器公司(阿芒克,紐約)供應(yīng)的PowerPC處理器、pSeries服務(wù)器或xSeries服務(wù)器;由惠普公司(帕洛阿爾托,加利福尼亞州)供應(yīng)的具有Intel Itanium II處理器的HP Superdome ;和/或基于由國際商業(yè)機器公司、惠普、因特爾、甲骨文公司(Oracle)或其他者供應(yīng)的架構(gòu)的其他機器。
[0041]本地中央處理單元202包括在該環(huán)境內(nèi)的處理期間使用的一個或多個本地寄存器210,諸如,一個或多個通用寄存器和/或一個或多個專用寄存器。這些寄存器包括表示在任一特定時間點的環(huán)境狀態(tài)的信息。
[0042]此外,本地中央處理單元202執(zhí)行儲存于存儲器204中的指令及代碼。在一個特定實例中,中央處理單元執(zhí)行儲存于存儲器204中的模擬器代碼212。此代碼使得以一架構(gòu)配置的處理環(huán)境能夠模擬另一架構(gòu)。舉例而言,模擬器代碼212允許基于不同于z/Architecture的架構(gòu)的機器(諸如,PowerPC處理器、pSeries服務(wù)器、xSeries服務(wù)器、HP Superdome服務(wù)器或其他)模擬z/Architecture及執(zhí)行基于z/Architecture開發(fā)的軟件及指令。
[0043]參看圖2B描述關(guān)于模擬器代碼212的其他細(xì)節(jié)。訪客指令250包含經(jīng)開發(fā)以欲于不同于本地CPU 202的架構(gòu)的架構(gòu)中執(zhí)行的軟件指令(例如,機器指令)。舉例而言,訪客指令250可能已經(jīng)設(shè)計以在z/Architecture處理器102上執(zhí)行,但實情為,正在本地CPU202(其可為(例如)Intel Itanium II處理器)上模擬訪客指令250。在一實例中,模擬器代碼212包括一指令提取單元252以自存儲器204獲得一個或多個訪客指令250,及視情況提供用于所獲得的指令的本端緩沖。模擬器代碼212亦包括一指令轉(zhuǎn)譯例程254以判定已獲得的訪客指令的類型且將訪客指令轉(zhuǎn)譯成一或多個對應(yīng)的本地指令256。此轉(zhuǎn)譯包括(例如)識別待由訪客指令執(zhí)行的功能及選擇本地指令以執(zhí)行該功能。
[0044]另外,模擬器212包括一模擬控制例程260以使得執(zhí)行本地指令。模擬控制例程260可使得本地CPU 202執(zhí)行模擬一個或多個先前所獲得的訪客指令的本地指令的例程且,在此執(zhí)行完結(jié)時,將控制返回至指令提取例程以模擬下一個訪客指令或一群訪客指令的獲得。本地指令256的執(zhí)行可包括將數(shù)據(jù)自存儲器204載入至寄存器中;將數(shù)據(jù)自寄存器儲存回至存儲器;或執(zhí)行某一類型的算術(shù)或邏輯運算(如由轉(zhuǎn)譯例程判定的那樣)。
[0045]每一例程(例如)以軟件來實施,該軟件儲存于存儲器中且由本地中央處理單元202來執(zhí)行。在其他實例中,一個或多個例程或運算以固件、硬件、軟件或其某一組合來實施??墒褂帽镜谻PU的寄存器210或藉由使用存儲器204中的位置模擬經(jīng)模擬的處理器的寄存器。在實施例中,訪客指令250、本地指令256及模擬器代碼212可常駐于相同存儲器中或可在不同存儲器器件間分配。
[0046]如本文中所使用,固件包括(例如)處理器的微碼、毫碼和/或宏代碼。固件包括(例如)在較高階機器碼的實施中使用的硬件層級指令和/或數(shù)據(jù)結(jié)構(gòu)。在一實施例中,固件包括(例如)通常作為微碼遞送的專屬碼,該微碼包括受信任軟件或基礎(chǔ)硬件所特有的微碼且控制操作系統(tǒng)對系統(tǒng)硬件的存取。
[0047]在一實例中,所獲得的、經(jīng)轉(zhuǎn)譯及經(jīng)執(zhí)行的訪客指令250為本文中所描述的一個或多個指令。自存儲器提取具有一架構(gòu)(例如,z/Architecture)的指令,將該指令轉(zhuǎn)譯及表示為具有另一架構(gòu)(例如,PowerPC、pSeries、xSeries、Intel等)的本地指令256的序列。接著執(zhí)行這些本地指令。
[0048]在一實施例中,本文中所描述的各種指令為根據(jù)本發(fā)明的一個方面提供的向量指令,其為向量設(shè)施的部分。向量設(shè)施提供(例如)在自一至十六個元素的范圍內(nèi)的固定大小的向量。每一向量包括由設(shè)施中所定義的向量指令進行運算的數(shù)據(jù)。在一實施例中,若向量由多個元素組成,則將每一元素與其他元素并行地處理。直至所有元素的處理完成后方出現(xiàn)指令完成。
[0049]如本文中所描述,可將向量指令實施為包括(但不限于)z/Architecture、Power、Intel等的各種架構(gòu)的部分。盡管本文中所描述的實施例針對z/Architecture,但向量指令及本發(fā)明的一個或多個方面可基于許多其他架構(gòu)。z/Architecture僅為一實例。
[0050]在將向量設(shè)施實施為z/Architecture的部分的一個實施例中,為了使用向量寄存器及指令,將指定控制寄存器(例如,控制寄存器O)中的向量啟用控制及寄存器控制設(shè)定至(例如)一。若安裝了向量設(shè)施且在未設(shè)定啟用控制的情況下執(zhí)行向量指令,則辨識到數(shù)據(jù)例外狀況。若未安裝向量設(shè)施且執(zhí)行向量指令,則辨識到操作例外狀況。
[0051]向量數(shù)據(jù)顯現(xiàn)于儲存器中,例如,以與其他數(shù)據(jù)格式相同的自左至右序列。編號為O至7的數(shù)據(jù)格式的位構(gòu)成儲存器中的最左側(cè)(最低編號)字節(jié)位置中的字節(jié),位8至15形成下一個依序位置中的字節(jié),等等。在再一實例中,向量數(shù)據(jù)可以另一序列(諸如,自右至左)顯現(xiàn)于儲存器中。
[0052]藉由向量設(shè)施提供的向量指令中的許多向量指令具有指定位的字段。被稱作寄存器擴展位或RXB的此字段包括用于向量寄存器指明的運算元中的每一個的最高有效位。用于未由指令指定的寄存器指明的位將保留,且設(shè)定至零。
[0053]在一實例中,RXB字段包括四個位(例如,位O至3),且將位定義如下:0_用于指令的第一向量寄存器指明的最高有效位。
[0054]1-用于指令的第二向量寄存器指明(若有的話)的最高有效位。
[0055]2-用于指令的第三向量寄存器指明(若有的話)的最高有效位。
[0056]3-用于指令的第四向量寄存器指明(若有的話)的最高有效位。
[0057]由(例如)匯編器取決于寄存器編號將每一位設(shè)定至零或一。舉例而言,對于寄存器O至15,將位設(shè)定至O ;對于寄存器16至31,將位設(shè)定至1,等等。
[0058]在一實施例中,每一 RXB位為用于包括一個或多個向量寄存器的指令中的特定位置的擴展位。舉例而言,在一個或多個向量指令中,RXB的位O為位置8至11的擴展位,其被指派至(例如)V1 ;RXB的位I為位置12至15的擴展位,其被指派至(例如)V2 ;等等。
[0059]在再一實施例中,RXB字段包括額外位,且將一個以上的位用作用于每一向量或位置的擴展。
[0060]如本文中所描述,根據(jù)本發(fā)明的一個方面,使用各種指令,以便判定具有終止字符的一組字符數(shù)據(jù)(諸如,空值終止的字符串)的長度。下文進一步詳細(xì)地描述與判定長度相關(guān)聯(lián)的處理及所使用的各種指令。
[0061]最初參看圖3,在一實施例中,為了判定字符數(shù)據(jù)(諸如,空值終止的字符串)的長度,使用(例如)“向量載入至區(qū)塊邊界”指令對向量寄存器載入字符數(shù)據(jù)(步驟300)。此指令并行地載入高達(例如)16個字節(jié)的數(shù)據(jù)而不交叉主存儲器的指定邊界(自該主存儲器載入數(shù)據(jù))。下文描述關(guān)于此指令的細(xì)節(jié)。
[0062]此后,使用(例如)下文所描述的“載入計數(shù)至區(qū)塊邊界”指令來判定所載入數(shù)據(jù)的字節(jié)的數(shù)目(步驟302)。
[0063]接下來,執(zhí)行在所載入寄存器中的搜尋以尋找字符數(shù)據(jù)的結(jié)尾(例如,空值、零或另一終止字符)(步驟304)。在一實例中,使用下文所描述的“向量尋找元素不相等”指令以搜尋終止字符(例如,空值、零或指定終止的另一字符)。在一實例中,此指令搜尋所載入向量寄存器以尋找空值元素(亦被稱作零元素)(例如,整個元素為零)??罩祷蛄阍刂甘咀址麛?shù)據(jù)的終止;例如,特定數(shù)據(jù)串的結(jié)尾。搜尋的結(jié)果為本文中被稱作終止字符的第一空值元素的索引(例如,字節(jié)索引),或諸如正搜尋的向量的大小的預(yù)先指定值(在未尋找到終止字符情況下)。
[0064]此后,作出關(guān)于所載入的字符的數(shù)目(例如,自“載入計數(shù)至區(qū)塊邊界”指令所判定)是否小于或等于終止字符的索引(例如,自“向量尋找元素不相等”指令所判定)的判定(詢問306)。若所載入的字符的數(shù)目小于或等于終止字符的索引,則將變量“長度”設(shè)定為等于“長度”加上所載入的字符的數(shù)目所得值(步驟308),且處理繼續(xù)步驟300。否則,將長度設(shè)定為等于“長度”加上終止字符索引(步驟310),且完成與判定長度相關(guān)聯(lián)的處理。
[0065]下文提供用以判定終止的字符串(諸如,空值終止的字符串)的長度的實例偽碼:
[0066]RB -字串的@,RX將含有長度
[0067]
XGRRX, RX, RX將RX置為零
[.0OP:V 1.B HVSTK、O (RX? RB)我入,? 達丨 6 個卒節(jié)
LCBBGLEN, O(RX5RB)尋找載入的字節(jié)的數(shù)Θ
AGRRX、RX、GLEN使長度遞增所栽入的字
ψ
VFBNEZ VPOS、VSTR, VSTR 查找O字節(jié)
VLGVB GPOS、VPOS, 7(0) 將索引擷取至GPR(16-
無匹配)
CGRGLEN, GPOS若GLEN<=GPOS,則必
須進行更多It尋
BRLEUXJP
SGRRX, RX, OLEN減掉所栽入的量
AGRRX, RX, GPOS將量添加至尋找到的零
[0068]L0069」 卯上又所辰不,最初葙田諷仃(例卯)欲儲仔長度的奇仔器KX與KX Zl日」的并現(xiàn)
(XOR)且將結(jié)果置放于RX中而將RX初始化為零。接著,循環(huán)以將高達16個字節(jié)的數(shù)據(jù)載入于向量VSTR中開始。判定載入于VSTR中的數(shù)據(jù)的字節(jié)的數(shù)目的計數(shù)且將計數(shù)置放于通用寄存器GLEN中。此后,使RX的長度遞增所載入的字節(jié)的數(shù)目。
[0070]接下來,搜尋空值終止符且將結(jié)果置放于向量VPOS中。此結(jié)果為空值終止符的索引或向量的大小(例如,16,在不存在空值終止符情況下)。接著擷取VPOS中的結(jié)果且將其置放于通用寄存器GPOS中。比較GPOS與GLEN,且若GLEN小于或等于GP0S,則邏輯循環(huán)回至VLBB,且載入更多數(shù)據(jù)。否則,如上文在SGR及AGR處所指示,執(zhí)行某清除。
[0071]在圖4A中描繪主存儲器400的一實例,自主存儲器400載入向量寄存器且判定字符數(shù)據(jù)的長度。如圖所示,主存儲器400包括在存儲器位置0x6FF3處開始的字符數(shù)據(jù)“Hello World ! ”。藉由垂直虛線402來展示在載入數(shù)據(jù)中將不交叉的主存儲器的邊界。將此數(shù)據(jù)載入至向量寄存器420中,向量寄存器420的實例描繪于圖4B中。
[0072]下文提供圖4A中所描繪的自存儲器載入數(shù)據(jù)的偽碼的一實例(在偽碼中被稱作STRi):
[0073]
VLBBVK 0(G1?STR@)、4K Vl展示于圖4B中
LCBBG2、0(G1?STR@)、4K G2=13
比…AGRGK Gl、G2Gl = 13
[0074]
\FBNRZV2、Yl' VlV2=i)X0C000u0()...,
VLGVBG3、V2、7(0)G3 = 12
C(iR(Si, (il
BRLELOOP
SGRGl, Gl、G2
AGRGl, GK G3
[0075]在圖4C中描繪主存儲器450的另一實例,自主存儲器450載入向量寄存器且判定字符數(shù)據(jù)的長度。如圖所示,主存儲器450包括在存儲器位置0x6FF6處開始的字符數(shù)據(jù)“Hello World ! ”。藉由垂直虛線452來展示在載入數(shù)據(jù)中將不交叉的主存儲器的邊界,該垂直虛線452在字符數(shù)據(jù)的結(jié)尾之前。因此,首先將直至邊界的字符數(shù)據(jù)載入至向量寄存器470 (其實例描繪于圖4D中)中,接著將字符數(shù)據(jù)的剩余部分載入至向量寄存器490 (如圖4E中所展示)中。
[0076]下文提供自圖4C的主存儲器載入數(shù)據(jù)的偽碼的一實例(在偽碼中被稱作STR@):
[0077]VLBBVI,0(Gl,STR@),4K Vl展示于圖4D+
LCBBG2,0(G1,STR@),4K 02 = 10
AGRG1.Gl, G2Gl = 1
VFBNEZV2,Vh VlV2 = 0X0AO(M)OO0....VLGVBG3,V2, 7(0)G3 = 10
CGRG3.Gl
BRLELOOP采用
VLBBVI,0(G15STR@),4K Vi展示于圖4E中
LCBBG2,OiG1.STRi/..),4K 02=16
AGRGl,Gl, G2G2=26
VFBN7EZV2,V1.Vi
VLOVBG3’V2,7(0)03=2
CGRG3’Gl
BRLELOOP不采用
[0078]SGRGl ’Gl,mGl = 1
A(iRGl,Gl, G3Gl = 12
[0079]如上文所指示,在一個實施例中,為了判定終止的字符數(shù)據(jù)(諸如,空值終止的字符串)的長度,使用各種指令。下文詳細(xì)描述這些指令的實例。
[0080]用以載入向量寄存器的一指令為“向量載入至區(qū)塊邊界(VLBB) ”指令,參看圖5來描述該指令的一實例。在一實例中,“向量載入至區(qū)塊邊界”指令500包括:運算碼字段502a(例如,位O至7)、502b(例如,位40至47),其指示“向量載入至區(qū)塊邊界”操作;一向量寄存器字段504(例如,位8至11),其用以指明一向量寄存器(V1);—索引字段(X2) 506 (例如,位12至15);—基本字段(B2) 508 (例如,位16至19); 一位移(displacement)字段(D2) 510 (例如,位20至31);一屏蔽字段(M3) 512 (例如,位32至35);及一 RXB字段514 (例如,位36至39)。在一實例中,字段504至514中的每一個分開且獨立于運算碼字段。另外,在一個實施例中,這些字段分開且獨立于彼此;然而,在其他實施例中,可組合一個以上字段。下文描述關(guān)于這些字段的使用的其他信息。
[0081]在一實例中,由運算碼字段502a指明的運算碼的選定位(例如,前兩個位)指定指令的長度及格式。在此特定實例中,長度為三個半字,且格式為藉由擴展的運算碼字段進行的向量寄存器及索引儲存運算。向量(V)字段以及由RXB指定的其對應(yīng)擴展位指明一向量寄存器。詳言的,對于向量寄存器,使用(例如)寄存器字段的四位字段(其中添加寄存器擴展位(RXB)作為最高有效位)指定含有運算元的寄存器。舉例而言,若四位字段為0110且擴展位為0,則五位字段00110指示寄存器編號6。
[0082]與指令的字段相關(guān)聯(lián)的下標(biāo)編號表示該字段適用的運算元。舉例而言,與V1相關(guān)聯(lián)的下標(biāo)編號I表示第一運算元,等等。寄存器運算元的長度為一個寄存器,其為(例如)128個位。
[0083]在一實例中,在“向量寄存器及索引儲存器運算”指令中,將由X2及B2字段指明的通用寄存器的內(nèi)容添加至D2字段的內(nèi)容以形成第二運算元地址。在一實例中,將針對“向量載入至區(qū)塊邊界”指令的位移D2作為12-位不帶正負(fù)號的整數(shù)對待。
[0084]在一實施例中,M3字段指定用以用信號向CPU通知關(guān)于載入至的區(qū)塊邊界的代碼。
若指定保留值,則辨識到規(guī)范例外狀況。實例碼及對應(yīng)值如下:
[0085]
躺解
064-字節(jié)
1128-字節(jié)
2256-字節(jié)
3512-字節(jié)
4IK-孿節(jié)
IJL JL K.J
52K-字節(jié)
64K-字節(jié)
[0086]在“向量載入至區(qū)塊邊界”指令的一個實施例的執(zhí)行中,在一個實施例中,自左至右進行,以零索引字節(jié)元素開始,以來自第二運算元的字節(jié)載入第一運算元(在藉由Vi字段加上擴展位指明的寄存器中指定)。第二運算元為藉由第二運算元地址(亦被稱作開始地址)指明的存儲器位置。載入自該存儲器位置開始,且繼續(xù)至由指令(或處理器)計算出的結(jié)束地址,如下文所描述。若遇到邊界條件,則其為相依于對待第一運算元的其余部分的方式的模型。未辨識到關(guān)于未載入的字節(jié)的存取例外狀況。在一實例中,未載入的字節(jié)為不可預(yù)測的。
[0087]在上述實例指令中,開始地址藉由索引寄存器值(X2) +基礎(chǔ)寄存器值(B2) +位移(D2)來判定;然而,在其他實施例中,由以下各者來提供開始地址:寄存器值;指令地址+指令文本指定偏移(offset);寄存器值+位移;或寄存器值+索引寄存器值;(僅作為一些實例)。另外,在一個實施例中,指令不包括RXB字段。實情為,不使用擴展或以另一方式提供擴展(諸如,自指令外部的控制),或提供擴展作為指令的另一字段的部分。
[0088]參看圖6A描述與“向量載入至區(qū)塊邊界”指令相關(guān)聯(lián)的處理的一實施例的其他細(xì)節(jié)。在此實例中,在指令中指定邊界大小。在一實例中,計算環(huán)境的處理器正執(zhí)行此邏輯。
[0089]在一個實施例中,最初,建立邊界屏蔽(BdyMask),其用以判定與指定邊界的靠近性(步驟600)。為了建立該屏蔽,在一實例中,選取邊界大小(BdySize) (602)的2的補碼(complement negat1n),從而建立邊界屏蔽 604 (例如,BdyMask = O-BdySize)。在一實例中,藉由指令(例如,M3字段)提供邊界大??;或在另一實例中,由機器判定邊界大小,如本文中所描述。
[0090]此后,計算開始地址,其指示載入將開始的存儲器中的位置(步驟610)。作為實例,可藉由以下各者來提供開始地址612:寄存器值;指令地址加上指令文本指定偏移;寄存器值加上位移;寄存器值加上索引寄存器值;或寄存器值加上索引寄存器值加上位移。在本文中提供的指令中,由X2字段、B2字段及D2字段來提供開始地址。亦即,將藉由X2及B2指明的寄存器的內(nèi)容添加至藉由D2指示的位移以提供開始地址。計算開始地址的上文所指示的方式僅為實例;其他實例亦系可能的。
[0091]接下來,計算結(jié)束地址,其指示自何處停止載入(步驟620)。此計算的輸入為(例如)邊界大小602、開始地址612、向量大小614 (例如,以字節(jié)計;例如,16)及邊界屏蔽604。在一實例中,如下計算結(jié)束地址622:
[0092]EndAddress = min(StartAddress+(BdySize-(StartAddress&BdyMask)), StartAddress+vec_size)。
[0093]此后,以索引字節(jié)O開始,自始于開始地址且終止于結(jié)束地址的存儲器載入第一運算元(亦即,指明的向量寄存器)(步驟630)。此情形使得能夠?qū)⒖勺償?shù)量的字節(jié)自存儲器載入至向量中,而不交叉指明的存儲器邊界。舉例而言,若存儲器邊界在64個字節(jié)處,且開始地址在58個字節(jié)處,則在向量寄存器中載入字節(jié)58至64。在一實施例中,并行地載入字節(jié)。
[0094]參看圖6B來描述與“向量載入至區(qū)塊邊界”指令相關(guān)聯(lián)的處理的另一實施例。在此實施例中,邊界大小并非藉由指令來指定,而是實情為,由執(zhí)行指令的處理器來動態(tài)地判定邊界大小。
[0095]在一實施例中,最初,計算開始地址,該開始地址指示載入將開始所自的存儲器中的位置(步驟650)。作為實例,可藉由以下各者來提供開始地址652:寄存器值;指令地址加上指令文本指定偏移;寄存器值加上位移;寄存器值加上索引寄存器值;或寄存器值加上索引寄存器值加上位移。在本文中提供的指令中,由X2字段、B2字段及D2字段來提供開始地址。亦即,將藉由X2及B2指明的寄存器的內(nèi)容添加至藉由D2指示的位移以提供開始地址。計算開始地址的上文所指示的方式僅為實例,其他實例亦為可能的。
[0096]此后,作出關(guān)于是否將動態(tài)地判定邊界的判定(詢問654)。若否,則將M3字段中指定的值用作邊界大小(BdySize)。否則,處理器動態(tài)地判定邊界大小(步驟656)。舉例而言,M3字段指定邊界的類型(例如,高速緩存行、頁面等),且基于該類型及處理器的一個或多個特性(例如,處理器的高速緩存行大??;處理器的頁面大小;等等),處理器判定邊界。作為實例,基于類型,處理器將固定大小用于邊界(例如,處理器的預(yù)先定義的固定高速緩存行或頁面大小),或基于類型,處理器判定邊界。舉例而言,若類型為頁面邊界,則處理器在轉(zhuǎn)譯后備緩沖器(TLB)中查找開始地址,且自該開始地址判定頁面邊界。亦存在其他實例。
[0097]在動態(tài)地或藉由指定的指令判定邊界大小之后,建立邊界屏蔽(BdyMask),邊界屏蔽用以判定與指定邊界的靠近性(步驟660)。為了建立屏蔽,在一實例中,選取邊界大小(BdySize) 658的2的補碼,從而建立邊界屏蔽662 (例如,BdyMask = O-BdySize)。
[0098]接下來,計算結(jié)束地址,該結(jié)束地址指示自何處起停止載入(步驟670)。此計算的輸入為(例如)邊界大小658、開始地址652、向量大小664 (例如,以字節(jié)計;例如,16)及邊界屏蔽662。在一實例中,如下計算結(jié)束地址672:
[0099]EndAddress = min(StartAddress+(BdySi zθ—(StartAddress&BdyMask)),St&rtAddress+vec—size)。
[0100]此后,以索引字節(jié)O開始,自始于開始地址且終止于結(jié)束地址的存儲器載入第一運算元(亦即,指明的向量寄存器)(步驟680)。此情形使得能夠?qū)⒖勺償?shù)量的字節(jié)自存儲器載入至向量中,而不交叉指明的存儲器邊界。如上文所指示,例如,若存儲器邊界在64個字節(jié)處,且開始地址在58個字節(jié)處,則在向量寄存器中載入字節(jié)58至64。在一實施例中,并行地載入字節(jié)。
[0101]在圖4B中描繪根據(jù)“向量載入至區(qū)塊邊界”指令的任一實施例載入的向量寄存器的一實例。如圖所指示,沒有數(shù)據(jù)經(jīng)過藉由圖4A中的虛垂直線指明的邊界載入。經(jīng)過邊界的位置是不可存取的且無例外狀況。在一特定實施例中,自左至右載入向量。然而,在另一實施例中,可自右至左載入向量。在一實施例中,在執(zhí)行階段提供向量的方向(自左至右或自右至左)。舉例而言,作為實例,指令存取寄存器、狀態(tài)控制或指示處理的方向為自左至右或自右至左的其他實體。在一實施例中,不將此方向控制編碼為指令的部分,而是在執(zhí)行階段將其提供至指令。
[0102]在一實例中,“向量載入至區(qū)塊邊界”指令僅以第二運算元的、在主存儲器(本文中亦稱作主儲存器)的區(qū)塊內(nèi)的對應(yīng)字節(jié)載入向量寄存器(第一運算元)的字節(jié)。主存儲器的區(qū)塊在指令中指定(例如,在指令中指定大小,以及載入將開始的區(qū)塊內(nèi)的地址),或藉由一類型的區(qū)塊邊界(例如,高速緩存行或頁面)及執(zhí)行指令的處理器的一個或多個特性(諸如,高速緩存行或頁面大小)來動態(tài)地判定。如本文中所使用,主存儲器的區(qū)塊為具有指定大小的存儲器的任何區(qū)塊。指定大小亦被稱作區(qū)塊的邊界,所述邊界為區(qū)塊的結(jié)尾。
[0103]用以尋找終止字符(諸如,空值終止符)的一指令為“向量尋找元素不相等”指令,該指令的實例在圖7中予以描繪。在一實施例中,此指令能夠比較多個向量的數(shù)據(jù)的不等性,以及搜尋所選定向量以尋找終止符,諸如空值或零元素(例如,整個元素為零)。
[0104]在一實例中,“向量尋找元素不相等(VFBNEZ) ”指令700包括:運算碼字段702a(例如,位O至7)、702b(例如,位40至47),其指示“向量尋找元素不相等”操作;第一向量寄存器字段704(例如,位8至11),其用以指明第一向量寄存器(V1);第二向量寄存器字段706 (例如,位12至15),其用以指明第二向量寄存器(V2);第三向量寄存器字段708 (例如,位16至19),其用以指明第三向量寄存器(V3);第一屏蔽字段(M5) 710 (例如,位24至27);第二屏蔽字段(M4) 712 (例如,位32至35);及一 RXB字段714 (例如,位36至39)。在一實例中,字段704至714中的每一個分開且獨立于運算碼字段。另外,在一實施例中,這些字段分開且獨立于彼此;然而,在其他實施例中,可組合一個以上字段。下文描述關(guān)于這些字段的使用的其他信息。
[0105]在一實例中,由運算碼字段702a指明的運算碼的選定位(例如,前兩個位)指定指令的長度及格式。在此特定實例中,選定位指示長度為三個半字,且格式為藉由擴展的運算碼字段進行的向量寄存器及寄存器運算。向量(V)字段中的每一個以及由RXB指定的其對應(yīng)擴展位指明一向量寄存器。詳言的,對于向量寄存器,使用(例如)寄存器字段的四-位字段(其中添加寄存器擴展位(RXB)作為最高有效位)指定含有運算元的寄存器。舉例而言,若四位字段為0110且擴展位為0,則五位字段00110指示寄存器編號6。
[0106]與指令的字段相關(guān)聯(lián)的下標(biāo)編號表示該字段適用的運算元。舉例而言,與向量寄存器V1相關(guān)聯(lián)的下標(biāo)編號I表示第一運算元,等等。寄存器運算元的長度為一個寄存器,其為(例如)128個位。
[0107]具有(例如)四個位O至3的M4字段在(例如)位I至3中指定元素大小控制。元素大小控制指定向量寄存器運算元中的元素的大小。在一實例中,元素大小控制可指定字節(jié)、半字(例如,2個字節(jié))或字(例如,4個字節(jié))。舉例而言,O指示字節(jié);I指示半字;且2指示字,亦稱為,全字。若指定保留值,則辨識到規(guī)范例外狀況。
[0108]M5字段為(例如)四位字段-位O至3,包括(例如):
[0109]零搜尋字段(ZS,位2),其若為一,則亦將第二運算元的每一元素與零比較。(在再一實例中,將第三運算元或另一運算元中的每一元素與零比較);及
[0110]條件碼設(shè)定字段(CC,位3),其若為零,則不設(shè)定條件碼且條件碼保持不變。若為一,則如下文所指定來設(shè)定條件碼(作為一實例):
[0111]O-若設(shè)定零搜尋位,則比較在比不相等比較更低的索引元素中偵測到兩
[0112]個運算元中的零元素;
[0113]1-偵測到元素失配,且V2中的元素小于V3中的元素;
[0114]2-偵測到元素失配,且V2中的元素大于V3中的元素;及
[0115]3-所有元素比較起來相等,且若設(shè)定零搜尋位,則在第二運算元(或在另
[0116]一實施例中,其他運算元)中未尋找到零元素。
[0117]在“向量尋找元素不相等”指令的一實施例的執(zhí)行中,在一實施例中自左至右繼續(xù)進行,將第二運算元(包括于由V2及其擴展位指定的向量寄存器中)的不帶正負(fù)號的二進位整數(shù)元素與第三運算元(包括于由V3字段加上其擴展位指定的向量寄存器中)的對應(yīng)的不帶正負(fù)號的二進位整數(shù)元素比較。若兩個元素不相等,則將最左側(cè)不相等元素的字節(jié)索引置放于第一運算元(在由V1及其擴展位指定的寄存器中指明)的指定字節(jié)(例如,字節(jié)7)中,且將零儲存至第一運算元的所有其他字節(jié)。
[0118]在一實例中,傳回(例如,儲存于指定字節(jié)中)的兀素的字節(jié)索引為不相等的最左側(cè)元素的第一字節(jié)的索引。舉例而言,若元素大小為字節(jié),則傳回最左側(cè)不相等元素的索引(例如,若存在16個元素O至15,且元素6不相等,則傳回字節(jié)索引6)。類似地,若元素大小為半字,且存在8個元素O至7,且元素三的字節(jié)6或7不相等,則傳回字節(jié)索引6。同樣地,若元素大小為全字且存在四個元素O至3,且元素一的字節(jié)4至7中的一者不相等,則傳回字節(jié)索引4。
[0119]若將M5字段中的條件碼設(shè)定位設(shè)定至(例如)一,則設(shè)定條件碼以指示哪一運算元較大(若有的話)。亦即,將等效于(例如)第二運算元中的字符的二進位整數(shù)與等效于第三運算元中的不相等字符的二進位整數(shù)比較,且基于此比較設(shè)定條件碼。若元素相等,則將等于向量大小(以字節(jié)的數(shù)目計,例如,16)的字節(jié)索引置放于第一運算元的指定字節(jié)(例如,字節(jié)7)中,且將零置放于所有其他字節(jié)位置中。若條件碼設(shè)定位為一,則設(shè)定選定條件碼(例如,條件碼3)。
[0120]在“向量尋找元素不相等”指令僅用以尋找終止字符的此實施例中,第二運算元與第三運算元兩者包括相同數(shù)據(jù),因此,該比較不會產(chǎn)生不相等字符。
[0121]若零搜尋位設(shè)定于M5字段中,則亦比較第二運算元(或在其他實施例中,第三運算元或另一運算元)中的每一元素與零(亦稱為,空值、終止符、字串結(jié)尾等)的相等性。若在發(fā)現(xiàn)第二運算元的任一其他元素不相等之前在第二運算元中尋找到零元素,則將發(fā)現(xiàn)為零的元素的第一字節(jié)的字節(jié)索引儲存于第一運算元的指定字節(jié)(例如,字節(jié)7)中。將零儲存于所有其他字節(jié)中,且設(shè)定選定條件碼(例如,條件碼零)。
[0122]在一實施例中,并行地執(zhí)行元素的比較。舉例而言,若正進行比較的向量寄存器的長度為16個字節(jié),則并行地比較16個字節(jié)。在其他實施例中,數(shù)據(jù)單位可不同于字節(jié),且并行比較的數(shù)目對應(yīng)于單位大小。另外,在另一實施例中,在執(zhí)行階段提供向量的方向-自左至右或自右至左。舉例而言,作為實例,指令存取寄存器、狀態(tài)控制或指示處理的方向為自左至右或自右至左的其他實體。在一實施例中,不將此方向控制編碼為指令的部分,但在執(zhí)行階段將其提供至指令。
[0123]在再一實施例中,指令不包括RXB字段。實情為,不使用擴展或以另一方式提供擴展(諸如,自指令外部的控制),或作為指令的另一字段的部分提供擴展。
[0124]參看圖8描述關(guān)于處理“向量尋找元素不相等”指令的一實施例的其他細(xì)節(jié)。在一實例中,計算環(huán)境的處理器正執(zhí)行此邏輯。
[0125]最初,作出關(guān)于是否將執(zhí)行對空值(亦稱為,零元素、字串結(jié)尾、終止符等)的搜尋的判定(詢問800)。若將執(zhí)行對空值的搜尋,則進行與空值字符(亦即,針對零元素)的比較(步驟802),且將結(jié)果輸出至nullidx (空值索引)(803)。舉例而言,將零元素的最左側(cè)字節(jié)的索引置放于nullidx中。舉例而言,若元素大小為字節(jié)且在字節(jié)5中尋找到零元素,則將尋找到零元素所在的字節(jié)的索引(例如,5)置放于nullidx中。類似地,若元素大小為半字,且存在8個元素O至7,且元素三(亦即,字節(jié)6至7)為零,則將6 (針對字節(jié)索引6)置放于nullidx中。同樣地,若元素大小為全字且存在四個元素O至3,且元素一(亦即,字節(jié)4至7)為零,則將4(針對字節(jié)索引4)置放于nullidx中。若未尋找到空值元素,貝U,在一實例中,將向量的大小(例如,以字節(jié)計;例如,16)置放于nullidx中。
[0126]另外,或若將不執(zhí)行空值搜尋,則并行地執(zhí)行基于比較操作而比較A與B的多個比較(例如,16)(步驟804)。在一實例中,A為第二運算元的內(nèi)容,且B為第三運算元的內(nèi)容,且比較操作不相等。
[0127]將比較的結(jié)果儲存于變量806(取決于搜尋是自左還是自右而被稱作左索引(cmpidxl),或右索引(cmpidxr))中。舉例而言,若比較為不相等比較,則搜尋為自左至右,且比較導(dǎo)致一個或多個不等,將與最低不相等元素的第一字節(jié)相關(guān)聯(lián)的索引置放于cmpidxl中。作為一實例,若元素大小為字節(jié)且向量中存在16個元素(O至15),且在元素6中發(fā)現(xiàn)不等性,則將6儲存于cmpidxl中。類似地,若元素大小為半字,且向量中存在8個元素(O至7),且在元素3中(例如,在字節(jié)6或7處)發(fā)現(xiàn)不等性,則傳回元素的第一字節(jié)的索引(字節(jié)6)。同樣地,若元素大小為全字且存在四個元素(O至3),且在元素I中(例如,在字節(jié)4至7處)發(fā)現(xiàn)不等性,則傳回元素的第一字節(jié)的索引(字節(jié)4)。若不存在不相等比較,貝1J,在一實施例中,取決于比較的方向,將cmpidxl或cmpidxr設(shè)定為等于向量的大小(例如,以字節(jié)計;例如,16)。
[0128]此后,作出關(guān)于搜尋是自左還是自右的判定(詢問808)。若搜尋是自左,則將變量cmpidx設(shè)定為等于cmpidxl (步驟810);否則,將cmpidx設(shè)定為等于cmpidxr (步驟812)。
[0129]在設(shè)定cmpidx之后,作出關(guān)于是否執(zhí)行對空值字符的搜尋的判定(詢問814)。若不存在對空值字符的搜尋,則將變量idx設(shè)定至(例如)比較索引cmpidx (步驟816)。若搜尋到空值,則將idx設(shè)定至比較索引或空值索引(nullidx)中的最小者(步驟818)。此情形結(jié)束處理。
[0130]用于圖8的處理的區(qū)塊邏輯的一實例描繪于圖9中。在此實例中,存在兩個輸入:向量B 900及向量A 902,且在此實例中,兩個輸入具有相同數(shù)據(jù)。將兩個輸入輸入至并行地執(zhí)行比較(例如,不相等)的比較邏輯904。另外,亦將一輸入(向量A)輸入至執(zhí)行空值處理的零偵測邏輯906。
[0131]將比較邏輯的輸出idxL或idxR 908以及零偵測邏輯的輸出nullidx 910輸入至結(jié)果判定邏輯912。結(jié)果判定邏輯亦將以下控制作為輸入:右/左914,其指示搜尋的方向;零偵測916,其指示是否將執(zhí)行空值處理;及元素大小918,其提供每一元素的大小(例如,字節(jié)、半字、字);且產(chǎn)生一所得索引920(resultidX),將其儲存于輸出向量922中(例如,在字節(jié)7中)。
[0132]另外,結(jié)果判定邏輯包括條件碼處理923,其視情況輸出一條件碼924。用于比較邏輯904的實例偽碼如下:
[0133]
iclx I j = 16; itlx R = 16
For I = Oto vectorJength
IfA[i|! = to B[i] Tl 1ΠΝ
idlxL = i
Done
For i = veetor」ength downto 0
IfA[i]! = toB[i]THEN
idxR = i
done
[0134]如所展示,取決于方向,將變量idxL或idxR初始化至向量的大小(例如,以字節(jié)的數(shù)目計;例如,16)。接著,將向量A的每一元素與向量B的對應(yīng)元素比較。在一實例中,比較為字節(jié)比較,因此針對16個字節(jié)(i)中的每一個進行比較。在此實例中,比較操作不相等,且若發(fā)現(xiàn)不等性,則將不相等字節(jié)的索引儲存于idxL(若自左搜尋)或idxR(若自右搜尋)中。
[0135]用于零偵測邏輯906的實例偽碼如下:
[0136]
nullidx =16
FORj =Oto vectorjength
IF AO] ==0 THEN
nullidx =j x element.......size
Done
[0137]如所展示,測試向量的每一元素(j)以查看其是否等于零。若一元素等于零,則將nullidx設(shè)定為等于該元素的索引乘以元素大小所得值。舉例而言,若元素大小為半字(2個字節(jié)),且在元素3中偵測到空值字符,則將3乘以2,且將nullidx設(shè)定至6,其表示字節(jié)6。類似地,若元素大小為全字(4個字節(jié)),且在元素3中偵測到空值字符,則將3乘以4,且將nullidx設(shè)定至12。
[0138]同樣地,用于結(jié)果判定邏輯912的實例偽碼如下:
[0139]
IF LeftZRight = LeftTHEN
cnipidx idx 1.ELSE
cmpidx = idxR
IF zero__detect = ON THEN
resultidx = min (cmpidx' nullidx)
II.set—ON &&nuliidx < = cmpidx < 16 Il IHN
— A
n ^ y
ELSE
resultidx = cmpidx
IF element—size = byte THEN dement—size—mask =tIliirb
IF element_size = 2byteTHENelement size mask = lIlllCb
IF deinent—size = 4byte THEN element_size_inask......? 1100' b
resuiiidx = resultidx Sc eIement_size_mask
IF SetCC = ONTHEN
IF resultidx = 16 THEN
C= 3
ELSE IF A[resultidx] <B[resultidx] THEN
CC= I
ELSE
H — £
ELSE無控制碼寄存器的更新
[0140]如所展示,若左/右控制指示左,則將cmpidx設(shè)定為等于idxL ;否則,將cmpidx設(shè)定為等于idxR。另外,若零偵測指示符在作用中,則將resultidx設(shè)定為等于cmpidx或nullidx中的最小者;且若條件碼設(shè)定控制在作用中且cmpidx大于null idx,則將條件碼設(shè)定至零。否則,若零偵測不在作用中,則將resultidx設(shè)定為等于cmpidx。
[0141]另外,若元素大小等于字節(jié),則將元素大小屏蔽設(shè)定至11111 ;若元素大小等于2個字節(jié),則將屏蔽設(shè)定至11110,且若元素大小等于4個字節(jié),則將屏蔽設(shè)定至11100。
[0142]此后,將resultidx設(shè)定為等于resultidx與元素大小屏蔽進行與(AND)運算所得值。舉例而言,若元素大小為半字且字節(jié)7為resultidx,則resultidx = 0011IAND11110,從而提供00110 ;因此,將resultidx設(shè)定為等于6(亦即,二進制的00110),其為元素的第一字節(jié)。
[0143]另外,視情況設(shè)定條件碼。若將指令的設(shè)定條件碼控制設(shè)定為在作用中,則提供條件碼;否則,不設(shè)定條件碼。作為實例,若將控制設(shè)定為在作用中,則若resultidx = 16,則將條件碼設(shè)定至3。否則,若A的resultidx小于B的resultidx,則將條件碼設(shè)定至I ;否貝U,將條件碼設(shè)定至2。
[0144]對于128位向量,比較邏輯僅執(zhí)行(例如)16個字節(jié)比較,而非(例如)256個比較。此情形提供對于較大向量的按比例調(diào)整。另外,可將左/右控制作為執(zhí)行階段值來提供且不在指令內(nèi)予以編碼。又,作為結(jié)果傳回的值為字節(jié)位置,而非元素索引。另外,支持4個字節(jié)比較,以及I字節(jié)及2個字節(jié)比較。
[0145]在再一實施例中,零搜尋并非一條件,而實情為,當(dāng)執(zhí)行“向量尋找元素不相等”指令時,執(zhí)行零搜尋?;诨蚧貞?yīng)于執(zhí)行該指令,執(zhí)行零搜尋,且傳回零元素的位置(例如,字節(jié)索引)和/或第一失配元素的位置(例如,字節(jié)索引)。在一實施例中,針對“向量尋找元素不相等”指令所執(zhí)行的比較的數(shù)目對應(yīng)于向量的字節(jié)的數(shù)目,而不管實施例。舉例而言,若正搜尋或進行比較的向量為16個字節(jié),則(例如)并行地執(zhí)行至多16個比較。在再一實施例中,一旦尋找到失配或零元素,比較便停止。
[0146]參看圖10來描述“載入計數(shù)至區(qū)塊邊界(LCBB) ”指令的一實施例。此指令提供(例如)自存儲器中的指定地址至指定存儲器邊界的數(shù)據(jù)的字節(jié)的數(shù)目的計數(shù)(例如,其提供在不交叉指定存儲器邊界情況下載入于向量寄存器中的字節(jié)的數(shù)目)。
[0147]在一實例中,“載入計數(shù)至區(qū)塊邊界”指令1000包括:運算碼字段1002a(例如,位O至7)、1002b (例如,位40至47),其指示“載入計數(shù)至區(qū)塊邊界”操作;寄存器字段1004 (例如,位8至11),其用以指明通用寄存器(R1);索引字段(X2) 1006(例如,位12至15);基本字段(B2) 1008(例如,位16至19);位移字段(D2) 1010(例如,位20至31);及屏蔽字段(M3) 1012(例如,位32至35)。在一實例中,字段1004至1012中的每一個為分開的且獨立于運算碼字段。另外,在一實施例中,字段1004至1012為分開的且獨立于彼此;然而,在其他實施例中,可組合一個以上字段。下文描述關(guān)于這些字段的使用的其他信息。
[0148]在一實例中,藉由運算碼字段1002a指明的運算碼的選定位(例如,前兩個位)指定指令的長度及格式。在此特定實例中,長度為三個半字,且格式為藉由擴展的運算碼字段進行的寄存器及索引儲存運算。
[0149]與指令的字段相關(guān)聯(lián)的下標(biāo)編號表示該字段適用的運算元。舉例而言,與R1相關(guān)聯(lián)的下標(biāo)編號I表示第一運算元,等等。寄存器運算元的長度為一個寄存器,其為(例如)128個位。
[0150]在一實例中,在“寄存器及索引儲存運算”指令中,將藉由X2及B2字段指明的通用寄存器的內(nèi)容添加至D2字段的內(nèi)容以形成第二運算元地址。在一實例中,將針對“載入計數(shù)至區(qū)塊邊界”指令的位移D2作為12位不帶正負(fù)號的整數(shù)對待。第二運算元地址用以指示主存儲器中的位置;然而,在此實施例中,第二運算元地址并不用以尋址數(shù)據(jù)。
[0151 ] 在一實施例中,M3字段指定用以用信號向CPU通知關(guān)于區(qū)塊邊界大小的碼,以計算在不交叉存儲器邊界情況下載入的可能字節(jié)的數(shù)目。若指定保留值,則辨識規(guī)范例外狀況。實例碼及對應(yīng)值如下:
[0152]
碼邊界
064-字節(jié)
1128-字節(jié)
2256-字節(jié)
3512-字節(jié)
4I K-字節(jié)
52K-字節(jié)
64K-字節(jié)
[0153]在再一實例中,邊界大小并不包括于指令中,而是實情為,由執(zhí)行指令的處理器來動態(tài)地判定。舉例而言,M3字段指定邊界的類型(例如,高速緩存行、頁面等),且基于該類型及處理器的一個或多個特性(例如,處理器的高速緩存行大小;處理器的頁面大??;等),處理器判定邊界。作為實例,基于類型,處理器將固定大小用于邊界(例如,處理器的預(yù)先定義的固定高速緩存行或頁面大小),或基于類型,處理器判定邊界。舉例而言,若類型為頁面邊界,則處理器在轉(zhuǎn)譯后備緩沖器(TLB)中查找開始地址,且自該開始地址判定頁面邊界。亦存在其他實例。舉例而言,可藉由指令的另一字段來提供類型,或自指令外部的控制來提供類型。
[0154]在“載入計數(shù)至區(qū)塊邊界”指令的一實施例的執(zhí)行中,將含有有可能在不交叉指定區(qū)塊邊界情況下自第二運算元位置載入的字節(jié)的數(shù)目的不帶正負(fù)號的二進位整數(shù)(例如,64-位)置放于在第一運算元中指定的通用寄存器中,該數(shù)目的上限為(例如)待載入的向量寄存器的大小(例如,16)。
[0155]起因于指令的執(zhí)行,諸如按以下方式設(shè)定選用的條件碼:
[0156]O-運算元一為十六
[0157]1-
[0158]2-
[0159]4-運算元一小于十六
[0160]在上述實例指令中,待開始進行計數(shù)的開始地址藉由索引寄存器值(X2) +基礎(chǔ)寄存器值(B2) +位移(D2)來判定;然而,在其他實施例中,藉由以下各者來提供開始地址:寄存器值;指令地址+指令文本指定偏移;寄存器值+位移;或寄存器值+索引寄存器值;(僅作為一些實例)。
[0161]參看圖11來描述處理“載入計數(shù)至區(qū)塊邊界”指令的一實施例的其他細(xì)節(jié)。在一實例中,計算環(huán)境的處理器正執(zhí)行此邏輯。
[0162]在一實施例中,最初建立邊界屏蔽(BdyMask),該邊界屏蔽用以判定與指定邊界的靠近性(步驟1100)。為了建立屏蔽,在一實例中,選取邊界大小(BdySize) 1102的2的補碼,從而建立邊界屏蔽1104(例如,BdyMask = O-BdySize)。在一實例中,藉由指令(例如,M3字段)來提供邊界大?。换蛟诹硪粚嵗?,如本文中所描述,由機器來判定邊界大小。
[0163]此后,計算開始地址,該開始地址指示待開始進行計數(shù)的存儲器中的位置(步驟1110)。作為實例,可藉由以下各者來提供開始地址1112:寄存器值;指令地址加上指令文本指定偏移;寄存器值加上位移;寄存器值加上索引寄存器值;或寄存器值加上索引寄存器值加上位移。在本文中提供的指令中,藉由X2字段、B2字段及D2字段來提供開始地址。亦即,將藉由X2及B2指明的寄存器的內(nèi)容添加至由D2指示的位移以提供開始地址。計算開始地址的上文所指示的方式僅為實例;其他實例亦系可能的。
[0164]接下來,計算結(jié)束地址,該結(jié)束地址指示待停止進行計數(shù)的位置(步驟1120)。此計算的輸入為(例如)邊界大小1102、開始地址1112、向量大小(vec_size)1114(例如,以字節(jié)計;例如,16)及邊界屏蔽1104。向量大小為所選定向量寄存器或其他寄存器的大小(例如,以字節(jié)計,例如,16)。寄存器是(例如)可在其中載入數(shù)據(jù)的寄存器。在一實例中,如下計算結(jié)束地址1122:
[0165]EndAddress = min(StartAddress+(BdySize-(StartAddress&BdyMask)), StartAddress+vec_size)。
[0166]此后,計算計數(shù)(步驟1130)。舉例而言,計數(shù)=EndAddress 1122-StartAddress1112。在再一實例中,可自開始地址計算計數(shù)而不使用結(jié)束地址。在此實例中,計數(shù)=min (16, BdySize- (StartAddress AND BdyMask)),其中 16 是向量寄存器(或其他寄存器)的大小。在其他實例中,可使用其他向量大小。
[0167]在一實施例中,使用“載入計數(shù)至區(qū)塊邊界”指令以判定載入至諸如向量寄存器的寄存器中的數(shù)據(jù)的字節(jié)的數(shù)目。此計數(shù)接著用以判定一組字符數(shù)據(jù)(諸如,經(jīng)終止的字符串)的長度。
[0168]如所指示,在一個實施例中,經(jīng)加載且獲得計數(shù)所針對的寄存器是向量寄存器。在向量設(shè)施的一實例中,存在32個向量寄存器,且其他類型的寄存器可映射至這些向量寄存器的一象限。舉例而言,如圖12中所展示,若存在包括32個向量寄存器1202的寄存器文件1200且每一寄存器的長度為128個位,則長度為64個位的16個浮點寄存器1204可覆蓋這些向量寄存器。因此,作為一實例,當(dāng)修改浮點寄存器2時,接著亦修改向量寄存器2。用于其他類型的寄存器的其他映射亦系可能的。
[0169]上文詳細(xì)描述的技術(shù)為用于藉由并行地查看字符來尋找具有終止字符的字符數(shù)據(jù)的長度且不引起無故例外狀況的技術(shù)。通常,難以并行地進行對經(jīng)空值終止的字串(諸如,C樣式字串)的結(jié)尾的搜尋,這是因為不知道字串的結(jié)尾在何處。容易讀過結(jié)尾且呈現(xiàn)關(guān)于不應(yīng)首先觸及的頁面的分頁錯誤例外狀況。先前技術(shù)一次僅載入一個字符,或具有使對字串的數(shù)據(jù)存取對準(zhǔn)以防止頁面交叉的前置碼。一次對一個字符起作用原本就是緩慢的。添加用于對準(zhǔn)的前置碼可損害短字串的效能且添加碼中難以預(yù)測的分支,藉此增加延時。
[0170]藉由使用將數(shù)據(jù)并行地載入至指定邊界且提供判定所載入字符的數(shù)目的方式的指令及尋找第一分隔符號的索引的指令(其并行地檢查數(shù)據(jù)),提供一種用于藉由僅一個分支指令尋找經(jīng)終止的字符數(shù)據(jù)(例如,經(jīng)空值終止)的長度的技術(shù)。另外,提供對字串字符的快速并行檢查,以及防止假性例外狀況。
[0171]使用以上技術(shù)的一個或多個方面提供效能改良,包括減少的執(zhí)行時間。
[0172]本文中,除非另有明確注釋或由上下文注釋,否則可互換地使用存儲器、主存儲器、儲存器與主儲存器。
[0173]作為下文進一步描述的此實施方式的部分提供關(guān)于向量設(shè)施的額外細(xì)節(jié)(包括其他指令的實例)。
[0174]如熟習(xí)此項技術(shù)者將了解,本發(fā)明的一個或多個方面可體現(xiàn)為系統(tǒng)、方法或計算機程序產(chǎn)品。因此,本發(fā)明的一個或多個方面可呈完全硬件實施例、完全軟件實施例(包括固件、常駐軟件、微碼等)或組合軟件與硬件態(tài)樣的實施例的形式,該等實施例在本文中大體上皆可被稱作“電路”、“模組”或“系統(tǒng)”。此外,本發(fā)明的一個或多個方面可呈體現(xiàn)于一個或多個計算機可讀介質(zhì)(其具有體現(xiàn)于其上的計算機可讀代碼)中的計算機程序產(chǎn)品的形式。
[0175]可利用一個或多個計算機可讀介質(zhì)的任何組合。計算機可讀介質(zhì)可為計算機可讀儲存介質(zhì)。舉例而言,計算機可讀儲存介質(zhì)可為(但不限于)電子、磁性、光學(xué)、電磁、紅外線或半導(dǎo)體系統(tǒng)、裝置或器件或前述各者的任何合適組合。計算機可讀儲存介質(zhì)的更特定實例(非詳盡清單)包括以下各者:具有一或多個電線的電連接、便攜式計算機磁盤、硬盤、隨機存取存儲器(RAM)、只讀存儲器(ROM)、可擦除可編程只讀存儲器(EPR0M或快閃存儲器)、光纖、便攜式光盤-只讀存儲器(CD-ROM)、光學(xué)儲存器件、磁性儲存器件或前述各者的任何合適組合。在此文件的情況下,計算機可讀儲存介質(zhì)可為可含有或儲存供指令執(zhí)行系統(tǒng)、裝置或器件使用或結(jié)合指令執(zhí)行系統(tǒng)、裝置或器件而使用的程序的任何有形介質(zhì)。
[0176]現(xiàn)參看圖13,在一實例中,計算機程序產(chǎn)品1300包括(例如)一個或多個非瞬態(tài)計算機可讀儲存介質(zhì)1302以在其上儲存計算機可讀代碼構(gòu)件或邏輯1304,以提供及促進本發(fā)明的一個或多個方面。
[0177]可使用適當(dāng)介質(zhì)(包括(但不限于)無線、有線、光纖纜線、RF等或前述各者的任何合適組合)傳輸體現(xiàn)于計算機可讀介質(zhì)上的代碼。
[0178]可以一個或多個編程語言的任何組合來撰寫用于進行本發(fā)明的一個或多個方面的操作的計算機代碼,該一個或多個編程語言包括諸如Java、Smalltalk、C++或其類似者的物件導(dǎo)向式程序設(shè)計語言,及諸如“C”編程語言、匯編器或類似編程語言的公知的過程序編程語言。代碼可完全在使用者的計算機上執(zhí)行、部分地在使用者的計算機上執(zhí)行、作為一獨立軟件包而執(zhí)行、部分地在使用者的計算機上且部分地在一遠(yuǎn)端計算機上執(zhí)行,或完全在遠(yuǎn)端計算機或服務(wù)器上執(zhí)行。在后者情形下,遠(yuǎn)端計算機可經(jīng)由任一類型的網(wǎng)絡(luò)連接至使用者的計算機,該任一類型的網(wǎng)絡(luò)包括局域網(wǎng)(LAN)或廣域網(wǎng)(WAN),或可(例如,使用因特網(wǎng)服務(wù)提供者經(jīng)由因特網(wǎng))進行至外部計算機的連接。
[0179]本文中參考根據(jù)本發(fā)明的實施例的方法、裝置(系統(tǒng))及計算機程序產(chǎn)品的流程圖說明和/或方塊圖描述本發(fā)明的一個或多個方面。應(yīng)理解,可由計算機程序指令來實施流程圖說明和/或方塊圖的每一區(qū)塊及這些流程圖說明和/或方塊圖中的區(qū)塊的組合。可將這些計算機程序指令提供至通用計算機、專用計算機或其他可編程數(shù)據(jù)處理裝置的處理器以產(chǎn)生一機器,以使得經(jīng)由該計算機或其他可編程數(shù)據(jù)處理裝置的處理器執(zhí)行的指令產(chǎn)生用于實施該流程圖和/或方塊圖區(qū)塊中所指定的功能/動作的構(gòu)件。
[0180]這些計算機程序指令亦可儲存于一計算機可讀介質(zhì)中,其可指導(dǎo)計算機、其他可編程數(shù)據(jù)處理裝置或其他器件以特定方式起作用,使得儲存于該計算機可讀介質(zhì)中的指令產(chǎn)生一制造物件,其包括實施流程圖和/或方塊圖方塊中所指定的功能/動作的指令。
[0181]亦可將這些計算機程序指令載入至計算機、其他可編程數(shù)據(jù)處理裝置或其他器件上以使得在該計算機、其他可編程裝置或其他器件上執(zhí)行一系列操作步驟以產(chǎn)生一計算機實施的處理程序,使得在該計算機或其他可編程裝置上執(zhí)行的指令提供用于實施流程圖和/或方塊圖區(qū)塊中所指定的功能/動作的處理程序。
[0182]附圖中的流程圖及方塊圖說明根據(jù)本發(fā)明的一個或多個方面的各種實施例的系統(tǒng)、方法及計算機程序產(chǎn)品的可能實施的架構(gòu)、功能性及操作。就此而言,流程圖或方塊圖中的每一區(qū)塊可表示一模塊、區(qū)段或代碼的部分,其包含用于實施指定邏輯功能的一個或多個可執(zhí)行指令。亦應(yīng)注意,在一些替代實施中,區(qū)塊中所注釋的功能可能不以圖中所注釋的次序發(fā)生。舉例而言,取決于所涉及的功能性,實際上可實質(zhì)上同時執(zhí)行連續(xù)展示的兩個區(qū)塊,或有時可以相反次序執(zhí)行這些區(qū)塊。亦應(yīng)注意,方塊圖和/或流程圖說明的每一區(qū)塊及方塊圖和/或流程圖說明中的區(qū)塊的組合可由執(zhí)行指定功能或動作的基于專用硬件的系統(tǒng)或?qū)S糜布c計算機指令的組合來實施。
[0183]除上述內(nèi)容之外,本發(fā)明的一個或多個方面亦可由供應(yīng)客戶環(huán)境的管理的服務(wù)提供者來提供、供應(yīng)、部署、管理、服務(wù)等。舉例而言,服務(wù)提供者可為一個或多個客戶產(chǎn)生、維護、支持等執(zhí)行本發(fā)明的一個或多個方面的計算機代碼和/或計算機基礎(chǔ)結(jié)構(gòu)。作為回報,作為實例,服務(wù)提供者可在訂用和/或收費協(xié)議下自客戶收取付款?;蛘呋蛄硗?,服務(wù)提供者可自廣告內(nèi)容銷售至一個或多個第三方而收取付款。
[0184]在本發(fā)明的一個方面中,可部署用于執(zhí)行本發(fā)明的一個或多個方面的應(yīng)用。作為一實例,應(yīng)用的部署包含提供可操作以執(zhí)行本發(fā)明的一個或多個方面的計算機基礎(chǔ)結(jié)構(gòu)。
[0185]作為本發(fā)明的再一個方面,可部署一計算基礎(chǔ)結(jié)構(gòu),其包含將計算機可讀代碼整合至計算系統(tǒng)內(nèi),其中與該計算系統(tǒng)組合的代碼能夠執(zhí)行本發(fā)明的一個或多個方面。
[0186]作為本發(fā)明的又一個方面,可提供用于整合計算基礎(chǔ)結(jié)構(gòu)的處理程序,其包含將計算機可讀代碼整合至計算機系統(tǒng)中。計算機系統(tǒng)包含一計算機可讀介質(zhì),其中計算機介質(zhì)包含本發(fā)明的一個或多個方面。與該計算機系統(tǒng)組合的代碼能夠執(zhí)行本發(fā)明的一個或多個方面。
[0187]盡管上文描述了各種實施例,但這些實施例僅為實例。舉例而言,其他架構(gòu)的計算環(huán)境可合并及使用本發(fā)明的一個或多個方面。另外,可使用其他大小的向量或其他寄存器,且在不脫離本發(fā)明的精神的情況下,可作出對指令的改變。另外,可使用其他指令,諸如(但不限于)“向量尋找元素相等”指令,該指令用以判定經(jīng)空值終止的字符數(shù)據(jù)的長度。再另外,亦可使用本發(fā)明的一個或多個方面來判定不同于經(jīng)空值終止的字符數(shù)據(jù)的數(shù)據(jù)的長度。
[0188]另外,其他類型的計算環(huán)境可受益于本發(fā)明的一個或多個方面。作為一實例,適合于儲存和/或執(zhí)行代碼的數(shù)據(jù)處理系統(tǒng)為可使用的,其包括直接或經(jīng)由系統(tǒng)總線間接耦接至存儲器元件的至少兩個處理器。這些存儲器元件包括(例如)在代碼的實際執(zhí)行期間使用的本端存儲器、大容量儲存器及高速緩存,高速緩存提供至少一些代碼的臨時儲存以便減少在執(zhí)行期間必須自大容量儲存器擷取代碼的次數(shù)。
[0189]輸入/輸出或I/O器件(包括(但不限于)鍵盤、顯示器、指向器件、DASD、磁帶、CD、DVD、拇指驅(qū)動器及其他存儲器介質(zhì)等)可直接或經(jīng)由介入的I/O控制器而耦接至系統(tǒng)。網(wǎng)絡(luò)適配器亦可耦接至系統(tǒng)以使得數(shù)據(jù)處理系統(tǒng)能夠經(jīng)由介入的私有或公用網(wǎng)絡(luò)而變得耦接至其他數(shù)據(jù)處理系統(tǒng)或遠(yuǎn)端打印機或儲存器件。調(diào)制解調(diào)器、電纜調(diào)制解調(diào)器及以太網(wǎng)卡僅為可用類型的網(wǎng)絡(luò)適配器中的少數(shù)幾種。
[0190]參看圖14,描繪實施本發(fā)明的一個或多個方面的主機計算機系統(tǒng)5000的代表性組件。代表性主機計算機5000包含與計算機存儲器(亦即,中央儲存器)5002通信的一個或多個CPU 5001,以及用于與其他計算機或SAN及其類似者通信的至儲存介質(zhì)器件5011及網(wǎng)絡(luò)5010的I/O接口。CPU 5001符合具有經(jīng)建構(gòu)的指令集及經(jīng)建構(gòu)的功能性的架構(gòu)。CPU5001可具有動態(tài)地址轉(zhuǎn)譯(DAT) 5003,以用于將程序地址(虛擬地址)變換成存儲器的真實地址。DAT通常包括一轉(zhuǎn)譯后備緩沖器(TLB)5007以用于高速緩存轉(zhuǎn)譯,使得對計算機存儲器5002的區(qū)塊的稍后存取不需要延遲地址轉(zhuǎn)譯。通常,高速緩存5009用于計算機存儲器5002與處理器5001之間。高速緩存5009可為階層式的,其具有可用于一個以上CPU的大高速緩存及在大高速緩存與每一 CPU之間的較小的較快(較低層級)高速緩存。在一些實施中,將較低層級高速緩存分裂以提供用于指令提取及數(shù)據(jù)存取的單獨的低層級高速緩存。在一實施例中,由指令提取單元5004經(jīng)由高速緩存5009自存儲器5002提取指令。在指令解碼單元5006中解碼指令,且將指令分派(在一些實施例中,藉由其他指令)給一個或多個指令執(zhí)行單元5008。通常使用若干個執(zhí)行單元5008,例如,算術(shù)執(zhí)行單元、浮點執(zhí)行單元及分支指令執(zhí)行單元。由執(zhí)行單元執(zhí)行指令,從而按需要自指令指定的寄存器或存儲器存取運算元。若將自存儲器5002存取(載入或儲存)運算元,則載入/儲存單元5005通常在正被執(zhí)行的指令的控制下處置存取??稍谟布娐分谢蛟趦?nèi)部微碼(固件)中或由兩者的組合來執(zhí)行指令。
[0191]如所注釋,計算機系統(tǒng)包括在本端(或主)儲存器中的信息,以及尋址、保護及參考及改變記錄。尋址的一些方面包括地址的格式、地址空間的概念、地址的各種類型,及將一類型的地址轉(zhuǎn)譯至另一類型的地址的方式。主儲存器中的一些儲存器包括永久指派的儲存位置。主儲存器為系統(tǒng)提供數(shù)據(jù)的可直接尋址的快速存取儲存。在可處理數(shù)據(jù)及程序兩者之前將數(shù)據(jù)及程序兩者(自輸入器件)載入至主儲存器中。
[0192]主儲存器可包括一個或多個較小的快速存取緩沖儲存器(有時稱為高速緩存)。高速緩存通常與CPU或I/O處理器實體相關(guān)聯(lián)。藉由程序大體上不可觀測到相異儲存介質(zhì)的實體構(gòu)造及用途的效果(除了對性能的效果外)。
[0193]可維持針對指令及針對數(shù)據(jù)運算元的單獨的高速緩存。將高速緩存內(nèi)的信息以相連字節(jié)維持于被稱為高速緩存區(qū)塊或高速緩存行(或簡稱為行)的整體邊界上。一模型可提供“擷取高速緩存屬性(EXTRACT CACHE ATTRIBUTE) ”指令,其傳回以字節(jié)計的高速緩存行的大小。一模型亦可提供“預(yù)先提取數(shù)據(jù)(PREFETCH DATA)”及“預(yù)先提取數(shù)據(jù)相對長度(PREFETCH DATA RELATIVE LONG) ”指令,其實現(xiàn)儲存器至數(shù)據(jù)或指令高速緩存中的預(yù)先提取或數(shù)據(jù)自高速緩存的釋放。
[0194]將儲存器視為長的水平位串。對于多數(shù)操作,對儲存器的存取以自左至右序列進行。將該位串再分成八個位的單元。八-位單元被稱為字節(jié),其為所有信息格式的基本建置區(qū)塊。儲存器中的每一字節(jié)位置藉由一唯一非負(fù)整數(shù)來識別,該唯一非負(fù)整數(shù)為該字節(jié)位置的地址或簡稱為字節(jié)地址。鄰近字節(jié)位置具有連續(xù)地址,其以左側(cè)的O開始且以自左至右序列進行。地址為不帶正負(fù)號的二進位整數(shù),且為24個、31個或64個位。
[0195]在儲存器與CPU或通道子系統(tǒng)之間一次一字節(jié)或一群字節(jié)地傳輸信息。除非另有指定,否則,在(例如)z/Architecture中,儲存器中的一群字節(jié)由該群的最左側(cè)字節(jié)來尋址。藉由待執(zhí)行的操作隱含或明確指定該群中的字節(jié)的數(shù)目。當(dāng)在CPU操作中使用時,一群字節(jié)被稱為一字段。在每一群字節(jié)內(nèi),在(例如)z/Architecture中,以自左至右序列對位編號。在z/Architecture中,最左側(cè)位有時被稱作“高階”位,且最右側(cè)位有時被稱作“低階”位。然而,位編號并非儲存地址??蓛H尋址字節(jié)。為了對儲存器中的字節(jié)的個別位操作,存取整個字節(jié)。將字節(jié)中的位自左至右編號為O至7(在(例如)z/Architecture中)。對于24-位地址,可將地址中的位編號為8至31或40至63,或?qū)τ?1-位地址,可將地址中的位編號為I至31或33至63 ;對于64-位地址,可將地址中的位編號為O至63。在多個字節(jié)的任一其他固定長度的格式內(nèi),自O(shè)開始對構(gòu)成該格式的位連續(xù)地編號。為了錯誤偵測的目的,且優(yōu)選地為了校正的目的,可將一個或多個檢查位與每一字節(jié)或與一群字節(jié)一起傳輸。由機器自動地產(chǎn)生這些檢查位,且不可直接由程序來控制這些檢查位。以字節(jié)的數(shù)目來表達儲存容量。當(dāng)藉由指令的操作碼隱含儲存運算元字段的長度時,認(rèn)為該字段具有固定長度,其可為一個、兩個、四個、八個或十六個字節(jié)。對于一些指令,可隱含更大字段。當(dāng)并非隱含而是明確敘述儲存運算元字段的長度時,認(rèn)為該字段具有可變長度。可變長度運算元的長度可以一個字節(jié)的增量變化(或藉由一些指令,以兩個字節(jié)的倍數(shù)或其他倍數(shù)的增量變化)。當(dāng)將信息置放于儲存器中時,替換包括于指明的字段中的僅那些字節(jié)位置的內(nèi)容,即使至儲存器的實體路徑的寬度可能大于正儲存的字段的長度亦如此。
[0196]某些信息單元將在儲存器中的整數(shù)邊界上。對于一信息單元,當(dāng)其儲存地址為該單元的長度(以字節(jié)計)的倍數(shù)時,將一邊界稱為整數(shù)的。對整數(shù)邊界上的2個、4個、8個及16個字節(jié)的字段給予特殊名稱。半字為在兩-字節(jié)邊界上的兩個連續(xù)字節(jié)的群,且為指令的基本建置區(qū)塊。字為四-字節(jié)邊界上的四個連續(xù)字節(jié)的群。雙字為八-字節(jié)邊界上的八個連續(xù)字節(jié)的群。四倍字為16-字節(jié)邊界上的16個連續(xù)字節(jié)的群。當(dāng)儲存器地址指明半字、字、雙字及四倍字時,地址的二進位表示分別含有一個、兩個、三個或四個最右側(cè)零位。指令將在兩-字節(jié)整數(shù)邊界上。多數(shù)指令的儲存運算元不具有邊界對準(zhǔn)要求。
[0197]在實施針對指令及數(shù)據(jù)運算元的單獨的高速緩存的器件上,若程序儲存至高速緩存行中(隨后自該高速緩存行提取指令),則可經(jīng)歷顯著延遲,而不管儲存器是否更改隨后提取的指令。
[0198]在一實施例中,可藉由軟件(有時指代經(jīng)授權(quán)內(nèi)部碼、固件、微碼、毫碼、微微碼(pico-code)及其類似者,前述各者中的任一者將與本發(fā)明的一個或多個方面一致)來實踐本發(fā)明。參看圖14,體現(xiàn)本發(fā)明的一個或多個方面的軟件代碼可由主機系統(tǒng)5000的處理器5001自長期儲存介質(zhì)器件5011(諸如,CD-ROM驅(qū)動器、磁帶驅(qū)動器或硬盤驅(qū)動器)存取。軟件代碼可體現(xiàn)于多種已知介質(zhì)中的任一者上,以用于供數(shù)據(jù)處理系統(tǒng)(諸如,磁盤、硬盤或⑶-ROM)使用。代碼可散布于這些介質(zhì)上,或可散布至使用者,經(jīng)由網(wǎng)絡(luò)5010自一計算機系統(tǒng)的計算機存儲器5002或儲存器散布至其他計算機系統(tǒng),以供這些其他系統(tǒng)的使用者使用。
[0199]軟件代碼包括一操作系統(tǒng),其控制各種計算機組件及一個或多個應(yīng)用程序的功能及互動。通常將代碼自儲存介質(zhì)器件5011分頁至相對較高速計算機儲存器5002,在該相對較高速計算機儲存器5002處,代碼可用于由處理器5001處理。用于在存儲器中、在實體介質(zhì)上體現(xiàn)軟件代碼和/或經(jīng)由網(wǎng)絡(luò)散布軟件代碼的技術(shù)及方法是熟知的,且在本文中將不進一步加以論述。當(dāng)在有形介質(zhì)(包括(但不限于)電子存儲器模組(RAM)、快閃存儲器、光盤(CD)、DVD、磁帶及其類似者)上建立及儲存代碼時,代碼常常被稱作“計算機程序產(chǎn)品”。計算機程序產(chǎn)品介質(zhì)通??捎奢^佳計算機系統(tǒng)中的處理電路來讀取,以用于由處理電路執(zhí)行。
[0200]圖15說明可實踐本發(fā)明的一個或多個方面的一代表性工作站或服務(wù)器硬件系統(tǒng)。圖15的系統(tǒng)5020包含一代表性基礎(chǔ)計算機系統(tǒng)5021 (諸如,個人計算機、工作站或服務(wù)器),包括選用的周邊器件?;A(chǔ)計算機系統(tǒng)5021包括一個或多個處理器5026,及一總線,該總線用以根據(jù)已知技術(shù)連接處理器5026與系統(tǒng)5021的其他組件及實現(xiàn)處理器5026與系統(tǒng)5021的其他組件之間的通信。總線將處理器5026連接至存儲器5025及長期儲存器5027,長期儲存器5027可包括(例如)硬盤驅(qū)動器(包括(例如)磁性介質(zhì)、CD、DVD及快閃存儲器中的任一者)或磁帶驅(qū)動器。系統(tǒng)5021可能亦包括一使用者接口適配器,使用者接口適配器經(jīng)由總線將微處理器5026連接至一或多個接口器件(諸如,鍵盤5024、鼠標(biāo)5023、打印機/掃描儀5030和/或其他接口器件),這些接口器件可為諸如觸摸感應(yīng)屏、數(shù)字鍵入板(entry pad)等的任何使用者接口器件??偩€亦經(jīng)由顯示器適配器將諸如IXD屏幕或監(jiān)視器的顯示器件5022連接至微處理器5026。
[0201]系統(tǒng)5021可借助于能夠與網(wǎng)絡(luò)5029通信(5028)的網(wǎng)絡(luò)適配器與其他計算機或計算機網(wǎng)絡(luò)通信。實例網(wǎng)絡(luò)適配器為通信頻道、令牌環(huán)、以太網(wǎng)絡(luò)或調(diào)制解調(diào)器?;蛘?,系統(tǒng)5021可使用諸如蜂窩式數(shù)字封包數(shù)據(jù)(⑶PD)卡的無線接口通信。系統(tǒng)5021可與局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)中的這些其他計算機相關(guān)聯(lián),或系統(tǒng)5021可為具有另一計算機的用戶端/服務(wù)器配置中的用戶端等。所有這些組態(tài)以及適當(dāng)通信硬件及軟件為此項技術(shù)中已知的。
[0202]圖16說明可實踐本發(fā)明的一個或多個方面的一數(shù)據(jù)處理網(wǎng)絡(luò)5040。數(shù)據(jù)處理網(wǎng)絡(luò)5040可包括多個個別網(wǎng)絡(luò)(諸如,無線網(wǎng)絡(luò)及有線網(wǎng)絡(luò)),這些網(wǎng)絡(luò)中的每一個可包括多個個別工作站5041、5042、5043、5044。另外,如本領(lǐng)域的技術(shù)人員將了解,可包括一個或多個LAN,其中LAN可包含耦接至主機處理器的多個智能工作站。
[0203]仍參看圖16,網(wǎng)絡(luò)亦可包括大型計算機或服務(wù)器,諸如,網(wǎng)關(guān)計算機(客戶端服務(wù)器5046)或應(yīng)用程序服務(wù)器(遠(yuǎn)端服務(wù)器5048,其可存取數(shù)據(jù)儲存庫且亦可自工作站5045直接存取)。網(wǎng)關(guān)計算機5046充當(dāng)至每一個別網(wǎng)絡(luò)的入口點。當(dāng)將一網(wǎng)絡(luò)連接協(xié)定連接至另一網(wǎng)絡(luò)連接協(xié)定時,需要網(wǎng)關(guān)。網(wǎng)關(guān)5046可較佳借助于通信鏈路耦接至另一網(wǎng)絡(luò)(例如,網(wǎng)際網(wǎng)絡(luò)5047)。亦可使用通信鏈路將網(wǎng)關(guān)5046直接耦接至一個或多個工作站5041、5042、5043、5044。可利用可購自國際商業(yè)機器公司的IBM eServer? System z服務(wù)器來實施網(wǎng)關(guān)計算機。
[0204]同時參看圖15及圖16,可體現(xiàn)本發(fā)明的一個或多個方面的軟件代碼可由系統(tǒng)5020的處理器5026自長期儲存介質(zhì)5027(諸如,⑶-ROM驅(qū)動器或硬盤驅(qū)動器)存取。軟件代碼可體現(xiàn)于多種已知介質(zhì)中的任一者上,以用于供數(shù)據(jù)處理系統(tǒng)(諸如,磁盤、硬盤或⑶-ROM)使用。代碼可散布于這些介質(zhì)上,或可散布至使用者5050、5051,經(jīng)由網(wǎng)絡(luò)自一計算機系統(tǒng)的存儲器或儲存器散布至其他計算機系統(tǒng),以供這些其他系統(tǒng)的使用者使用。
[0205]或者,代碼可體現(xiàn)于存儲器5025中,且由處理器5026使用處理器總線來存取。此代碼包括一操作系統(tǒng),其控制各種計算機組件及一個或多個應(yīng)用程序5032的功能及互動。通常將代碼自儲存介質(zhì)5027分頁至高速存儲器5025,在高速存儲器5025處,代碼可用于由處理器5026處理。用于在存儲器中、在實體介質(zhì)上體現(xiàn)軟件代碼和/或經(jīng)由網(wǎng)絡(luò)散布軟件代碼的技術(shù)及方法是熟知的且在本文中將不進一步加以論述。當(dāng)在有形介質(zhì)(包括(但不限于)電子存儲器模塊(RAM)、快閃存儲器、光盤(CD)、DVD、磁帶及其類似者)上建立及儲存代碼時,代碼常常被稱作“計算機程序產(chǎn)品”。計算機程序產(chǎn)品介質(zhì)通??捎奢^佳計算機系統(tǒng)中的處理電路來讀取,以用于由處理電路執(zhí)行。
[0206]最易于可用于處理器的高速緩存(通常比處理器的其他高速緩存快且小)為最低(LI或第一層級)高速緩存,且主儲存器(主存儲器)為最高層級高速緩存(若存在3個層級,則為L3)。常常將最低層級高速緩存劃分成保持待執(zhí)行的機器指令的指令高速緩存(1-高速緩存)及保持?jǐn)?shù)據(jù)運算元的數(shù)據(jù)高速緩存(D-高速緩存)。
[0207]參看圖17,針對處理器5026描繪一例示性處理器實施例。通常,使用高速緩存5053的一個或多個層級緩沖存儲器區(qū)塊以便改良處理器效能。高速緩存5053為保持有可能使用的存儲器數(shù)據(jù)的高速緩存行的高速緩沖器。典型的高速緩存行為64個、128個或256個字節(jié)的存儲器數(shù)據(jù)。除用于對數(shù)據(jù)進行高速緩存外,單獨的高速緩存亦常常用于對指令進行高速緩存。常常藉由此項技術(shù)中熟知的各種“窺探”演算法來提供高速緩存一致性(存儲器及高速緩存中的行的復(fù)制的同步)。處理器系統(tǒng)的主存儲器儲存器5025常常被稱作高速緩存。在具有4個層級的高速緩存5053的處理器系統(tǒng)中,主儲存器5025有時被稱作第5層級(L5)高速緩存,這是因為其通常較快且僅保持可用于計算機系統(tǒng)的非易失性儲存器(DASD、磁帶等)的一部分。主儲存器5025對由操作系統(tǒng)頁入及頁出主儲存器5025的數(shù)據(jù)頁“進行高速緩存”。
[0208]程序計數(shù)器(指令計數(shù)器)5061追蹤待執(zhí)行的當(dāng)前指令的地址。z/Architecture處理器中的程序計數(shù)器為64個位,且可經(jīng)截斷至31或24個位以支持先前尋址限制。程序計數(shù)器通常體現(xiàn)于計算機的程序狀態(tài)字(PSW)中,使得程序計數(shù)器在內(nèi)容脈絡(luò)切換期間持續(xù)。因此,具有程序計數(shù)器值的進行中程序可由(例如)操作系統(tǒng)來中斷(自程序環(huán)境至操作系統(tǒng)環(huán)境的內(nèi)容脈絡(luò)切換)。在程序并非作用中之時,程序的PSW維持程序計數(shù)器值,且在操作系統(tǒng)正執(zhí)行時,使用操作系統(tǒng)的程序計數(shù)器(在PSW中)。通常,以等于當(dāng)前指令的字節(jié)的數(shù)目的量來使程序計數(shù)器遞增。精簡指令集計算(RISC)指令的長度通常為固定的,而復(fù)雜指令集計算(CISC)指令的長度通常為可變的。IBMz/Architecture的指令為長度為2個、4個或6個字節(jié)的CISC指令。舉例而言,藉由內(nèi)容脈絡(luò)切換操作或分支指令的分支選取操作來修改程序計數(shù)器5061。在內(nèi)容脈絡(luò)切換操作中,將當(dāng)前程序計數(shù)器值連同關(guān)于正執(zhí)行的程序的其他狀態(tài)信息(諸如,條件碼)一起保存于程序狀態(tài)字中,且載入新程序計數(shù)器值從而指向待執(zhí)行的新程序模塊的指令。執(zhí)行分支選取操作以便藉由將分支指令的結(jié)果載入至程序計數(shù)器5061中而準(zhǔn)許程序作出決策或在程序內(nèi)循環(huán)。
[0209]通常,指令提取單元5055用以代表處理器5026提取指令。提取單元提取“接下來的依序指令”、分支選取指令的目標(biāo)指令或程序的第一指令(在內(nèi)容脈絡(luò)切換之后)?,F(xiàn)代指令提取單元常常使用預(yù)先提取技術(shù)以基于可能使用經(jīng)預(yù)先提取的指令的可能性而推測性地預(yù)先提取指令。舉例而言,提取單元可提取包括下一個依序指令的指令的16個字節(jié)及其他依序指令的額外字節(jié)。
[0210]接著由處理器5026執(zhí)行所提取的指令。在一實施例中,將所提取的指令傳遞至提取單元的分派單元5056。分派單元解碼指令且將關(guān)于經(jīng)解碼的指令的信息轉(zhuǎn)遞至適當(dāng)單元5057、5058、5060。執(zhí)行單元5057通常將自指令提取單元5055接收關(guān)于經(jīng)解碼的算術(shù)指令的信息,且將根據(jù)指令的運算碼對運算元執(zhí)行算術(shù)運算。優(yōu)選地,自存儲器5025、經(jīng)建構(gòu)的寄存器5059或自正執(zhí)行的指令的立即字段,將運算元提供至執(zhí)行單元5057。當(dāng)儲存執(zhí)行的結(jié)果時,將執(zhí)行的結(jié)果儲存于存儲器5025、寄存器5059中或其他機器硬件(諸如,控制寄存器、PSW寄存器及其類似者)中。
[0211]處理器5026通常具有用于執(zhí)行指令的功能的一個或多個單元5057、5058、5060。參看圖18A,執(zhí)行單元5057可借助于接口邏輯5071與經(jīng)建構(gòu)的通用寄存器5059、解碼/分派單元5056、載入儲存單元5060及其他處理器單元5065通信。執(zhí)行單元5057可使用若干個寄存器電路5067、5068、5069以保持算術(shù)邏輯單元(ALU) 5066將進行運算的信息。ALU執(zhí)行算術(shù)運算(諸如,加法、減法、乘法及除法)以及邏輯函數(shù)(諸如,“與”(and)、“或”(or)及“異或”(XOR)、旋轉(zhuǎn)及移位)。優(yōu)選地,ALU支持相依于設(shè)計的專業(yè)化運算。其他電路可提供其他經(jīng)建構(gòu)的設(shè)施5072,包括(例如)條件碼及恢復(fù)支持邏輯。通常,將ALU運算的結(jié)果保持于輸出寄存器電路5070中,輸出寄存器電路5070可將結(jié)果轉(zhuǎn)遞至多種其他處理功能。存在處理器單元的許多配置,本發(fā)明描述僅意欲提供對一實施例的代表性理解。
[0212]“加法”指令(例如)將在具有算術(shù)及邏輯功能性的執(zhí)行單元5057中執(zhí)行,而浮點指令(例如)將在具有專業(yè)化的浮點能力的浮點執(zhí)行中執(zhí)行。優(yōu)選地,執(zhí)行單元藉由對藉由指令識別的運算元執(zhí)行運算碼定義的功能而對運算元進行運算。舉例而言,“加法”指令可由執(zhí)行單元5057對在藉由指令的寄存器字段識別的兩個寄存器5059中發(fā)現(xiàn)的運算元執(zhí)行。
[0213]執(zhí)行單元5057對兩個運算元執(zhí)行算術(shù)加法,且將結(jié)果儲存于第三運算元中,其中第三運算元可為第三寄存器或兩個源寄存器中之一。執(zhí)行單元優(yōu)選地利用算術(shù)邏輯單元(ALU) 5066,算術(shù)邏輯單元(ALU) 5066能夠執(zhí)行多種邏輯函數(shù)(諸如,移位、旋轉(zhuǎn)、“與”(And)、“或”(Or)及“異或”(XOR))以及多種代數(shù)函數(shù)(包括加法、減法、乘法、除法中的任一者)。一些ALU 5066經(jīng)設(shè)計以用于標(biāo)量運算且一些ALU 5066經(jīng)設(shè)計以用于浮點運算。取決于架構(gòu),數(shù)據(jù)可為大端序(Big Endian)(其中最低有效字節(jié)處于最高字節(jié)地址)或小端序(Little Endian)(其中最低有效字節(jié)處于最低字節(jié)地址)。IBM z/Architecture為大端序。取決于架構(gòu),帶正負(fù)號的字段可為正負(fù)號及量值(I的補數(shù)或2的補數(shù))。2的補數(shù)是有利的,此在于=ALU并不需要設(shè)計減法能力,這是由于在ALU中,2的補數(shù)中的負(fù)值或正值僅需要加法。通常以速記法來描述數(shù)字,其中12位字段定義4,096字節(jié)區(qū)塊的地址,且通常描述為(例如)4Kbyte (千字節(jié))區(qū)塊。
[0214]參看圖18B,用于執(zhí)行分支指令的分支指令信息通常發(fā)送至分支單元5058,分支單元5058常常使用分支預(yù)測演算法(諸如,分支歷史表5082)以在其他條件運算完成的前預(yù)測分支的結(jié)果。將提取當(dāng)前分支指令的目標(biāo),且在條件運算完成的前推測性地執(zhí)行當(dāng)前分支指令的目標(biāo)。當(dāng)完成條件運算時,基于條件運算的條件及所推測的結(jié)果,完成或放棄推測性執(zhí)行的分支指令。典型分支指令可測試條件碼,且在條件碼滿足分支指令的分支要求的情況下分支至目標(biāo)地址,可基于(例如)在寄存器字段或指令的立即字段中發(fā)現(xiàn)的若干個數(shù)字(包括一)而計算目標(biāo)地址。分支單元5058可使用具有多個輸入寄存器電路5075、5076、5077及一輸出寄存器電路5080的一 ALU 5074。舉例而言,分支單元5058可與通用寄存器5059、解碼分派單元5056或其他電路5073通信。
[0215]一指令群組的執(zhí)行可因包括(例如)以下各者的多種原因而被中斷:由操作系統(tǒng)起始的內(nèi)容脈絡(luò)切換、引起內(nèi)容脈絡(luò)切換的程序例外狀況或錯誤、弓I起內(nèi)容脈絡(luò)切換的I/O中斷信號,或多個程序的多線程活動(在多線程環(huán)境中)。優(yōu)選地,內(nèi)容脈絡(luò)切換動作保存關(guān)于當(dāng)前正執(zhí)行的程序的狀態(tài)信息,且接著載入關(guān)于正被調(diào)用的另一程序的狀態(tài)信息。舉例而言,可將狀態(tài)信息保存于硬件寄存器中或存儲器中。狀態(tài)信息較佳包含指向待執(zhí)行的下一個指令的程序計數(shù)器值、條件碼、存儲器轉(zhuǎn)譯信息及經(jīng)建構(gòu)的寄存器內(nèi)容。內(nèi)容脈絡(luò)切換活動可單獨或組合地藉由硬件電路、應(yīng)用程序、操作系統(tǒng)程序或固件代碼(微碼、微微碼或經(jīng)授權(quán)內(nèi)部碼(LIC))來訓(xùn)練。
[0216]處理器根據(jù)指令定義的方法來存取運算元。指令可使用指令的一部分的值來提供立即運算元,可提供明確指向通用寄存器或?qū)S眉拇嫫?例如,浮點寄存器)的一個或多個寄存器字段。指令可利用藉由運算碼字段識別為運算元的隱含的寄存器。指令可將存儲器位置用于運算元。運算元的存儲器位置可由寄存器、立即字段或寄存器與立即字段的組合來提供,如藉由z/Architecture長位移設(shè)施(long displacement facility)舉例說明,其中指令定義(例如)相加在一起以提供運算元在存儲器中的位置的一基礎(chǔ)寄存器、一索引寄存器及一立即字段(位移字段)。除非另有指示,否則本文中的位置通常隱含主存儲器(主儲存器)中的位置。
[0217]參看圖18C,處理器使用載入/儲存單元5060來存取儲存器。載入/儲存單元5060可藉由獲得目標(biāo)運算元在存儲器5053中的地址且在寄存器5059或另一存儲器5053的位置中載入運算元來執(zhí)行載入操作,或可藉由獲得目標(biāo)運算元在存儲器5053中的地址且將自寄存器5059或另一存儲器5053的位置獲得的數(shù)據(jù)儲存于存儲器5053中的目標(biāo)運算元位置中來執(zhí)行儲存操作。載入/儲存單元5060可為推測性的,且可以相對于指令序列而言無序的序列存取存儲器,然而,載入/儲存單元5060對于程序維持按次序執(zhí)行指令的顯現(xiàn)。載入/儲存單元5060可與通用寄存器5059、解碼/分派單元5056、高速緩存/存儲器接口 5053或其他元件5083通信,且包含各種寄存器電路、ALU 5085及控制邏輯5090以計算儲存地址且提供管線定序以保持操作按次序。一些操作可能為無序的,但載入/儲存單元提供使得無序操作對于程序顯現(xiàn)為已按次序執(zhí)行的功能性,如此項技術(shù)中所熟知的那樣。
[0218]優(yōu)選地,應(yīng)用程序“看見”的地址常常被稱作虛擬地址。虛擬地址有時被稱作“邏輯地址”及“有效地址”。這些虛擬地址為虛擬的在于:其藉由多種動態(tài)地址轉(zhuǎn)譯(DAT)技術(shù)中的一者而重新導(dǎo)向至實體存儲器位置,該等DAT技術(shù)包括(但不限于)僅對虛擬地址加偏移值作為前綴、經(jīng)由一個或多個轉(zhuǎn)譯表轉(zhuǎn)譯虛擬地址,轉(zhuǎn)譯表較佳地單獨或組合地包含至少一段表及一頁表,優(yōu)選地,段表具有指向頁表的項目。在z/Architecture中,提供轉(zhuǎn)譯階層,包括區(qū)第一表、區(qū)第二表、區(qū)第三表、段表及選用的頁表。常常藉由利用轉(zhuǎn)譯后備緩沖器(TLB)(其包含將虛擬地址映射至相關(guān)聯(lián)的實體存儲器位置的項目)來改良地址轉(zhuǎn)譯的效能。當(dāng)DAT使用轉(zhuǎn)譯表轉(zhuǎn)譯虛擬地址時,建立該等項目。虛擬地址的隨后使用可接著利用快速TLB的項目,而非緩慢依序轉(zhuǎn)譯表存取??山逵砂ㄗ罱钌偈褂?LRU)的多種替換演算法來管理TLB內(nèi)容。
[0219]在處理器為多處理器系統(tǒng)的處理器的狀況下,每一處理器具有保持諸如I/O、高速緩存、TLB及存儲器的共用資源互鎖以達成一致性的責(zé)任。通常,在維持快取一致性中將利用“窺探”技術(shù)。在窺探環(huán)境中,可將每一高速緩存行標(biāo)記為處于以下狀態(tài)中的任一者以便促進共享:共用狀態(tài)、互斥狀態(tài)、改變的狀態(tài)、無效狀態(tài)及其類似者。
[0220]I/O單元5054(圖17)為處理器提供用于附接至周邊器件(例如,包括磁帶、光盤、打印機、顯示器及網(wǎng)絡(luò))的構(gòu)件。I/o單元常常由軟件驅(qū)動程序呈現(xiàn)至計算機程序。在大型計算機(諸如,來自IBM?的SyStem z)中,通道適配器及開放系統(tǒng)適配器為大型計算機的I/O單元,這些I/O單元提供操作系統(tǒng)與周邊器件之間的通信。
[0221]另外,其他類型的計算環(huán)境可受益于本發(fā)明的一個或多個方面。作為一實例,環(huán)境可包括一模擬器(例如,軟件或其他模擬機制),在該模擬器中模擬一特定架構(gòu)(包括(例如)指令執(zhí)行、經(jīng)建構(gòu)的功能(諸如,地址轉(zhuǎn)譯),及經(jīng)建構(gòu)的寄存器)或其一子集(例如,在具有一處理器及存儲器的本地計算機系統(tǒng)上)。在此環(huán)境中,模擬器的一或多個模擬功能可實施本發(fā)明的一個或多個方面,即使執(zhí)行該模擬器的計算機可具有不同于正模擬的能力的架構(gòu)亦如此。作為一實例,在模擬模式下,解碼特定指令或正模擬的操作,且建置一適當(dāng)模擬功能以實施個別指令或操作。
[0222]在一模擬環(huán)境中,主機計算機包括(例如):一存儲器,其儲存指令及數(shù)據(jù);一指令提取單元,其自存儲器提取指令且視情況提供所提取的指令的本端緩沖;一指令解碼單元,其接收所提取的指令且判定已提取的指令的類型;及一指令執(zhí)行單元,其執(zhí)行這些指令。執(zhí)行可包括:將數(shù)據(jù)自存儲器載入至寄存器中;將數(shù)據(jù)自寄存器儲存回至存儲器;或執(zhí)行某一類型的算術(shù)或邏輯運算(如由解碼單元判定)。在一實例中,以軟件來實施每一單元。舉例而言,將正由這些單元執(zhí)行的操作實施為模擬器軟件內(nèi)的一或多個副例程。
[0223]更明確而言,在大型計算機中,經(jīng)建構(gòu)的機器指令常常借助于編譯應(yīng)用程序而由程序設(shè)計師(現(xiàn)今通常為“C”程序設(shè)計師)使用。儲存于儲存介質(zhì)中的這些指令可本地地在z/Architecture IBM?服務(wù)器中或者在執(zhí)行其他架構(gòu)的機器中執(zhí)行??稍诂F(xiàn)有及未來IBM?大型計算機服務(wù)器中及在IBM?的其他機器(例如,Power Systems服務(wù)器及
System X?服務(wù)器)上模擬這些指令??捎谠谑褂糜?βΜ氣Intel?> AMD?及其他者制造的硬件的廣泛多種機器上執(zhí)行Linux的機器中執(zhí)行這些指令。除了在z/Architecture下在該硬件上執(zhí)行外,亦可使用Linux,以及使用由Hercules、UMX或FSI (FundamentalSoftware, Inc)進行的模擬的機器,其中執(zhí)行大體上處于模擬模式下。在模擬模式下,由本地處理器執(zhí)行模擬軟件以模擬經(jīng)模擬的處理器的架構(gòu)。
[0224]本地處理器通常執(zhí)行包含固件或本地操作系統(tǒng)的模擬軟件以執(zhí)行經(jīng)模擬的處理器的模擬。模擬軟件負(fù)責(zé)提取及執(zhí)行經(jīng)模擬的處理器架構(gòu)的指令。模擬軟件維持經(jīng)模擬的程序計數(shù)器以追蹤指令邊界。模擬軟件可一次提取一或多個經(jīng)模擬的機器指令,且將該一個或多個經(jīng)模擬的機器指令轉(zhuǎn)換至一對應(yīng)的本地機器指令群組,以用于由本地處理器執(zhí)行。可對這些經(jīng)轉(zhuǎn)換的指令進行高速緩存,使得可實現(xiàn)較快速轉(zhuǎn)換。盡管如此,模擬軟件仍將維持經(jīng)模擬的處理器架構(gòu)的架構(gòu)規(guī)則以便確保操作系統(tǒng)及針對經(jīng)模擬的處理器撰寫的應(yīng)用程序正確地操作。此外,模擬軟件將提供藉由經(jīng)模擬的處理器架構(gòu)識別的資源(包括(但不限于)控制寄存器、通用寄存器、浮點寄存器、包括(例如)段表及頁表的動態(tài)地址轉(zhuǎn)譯功能、中斷機制、內(nèi)容脈絡(luò)切換機制、當(dāng)日時間(TOD)時鐘及至I/O子系統(tǒng)的經(jīng)建構(gòu)的接口),使得操作系統(tǒng)或經(jīng)設(shè)計以在經(jīng)模擬的處理器上執(zhí)行的應(yīng)用程序可在具有模擬軟件的本地處理器上執(zhí)行。
[0225]解碼正進行模擬的特定指令,且調(diào)用副例程以執(zhí)行個別指令的功能。模擬經(jīng)模擬的處理器的功能的模擬軟件功能系(例如)按以下各者來實施:“C”副例程或驅(qū)動程序,或在理解較佳實施例的描述之后將在本領(lǐng)域的技術(shù)人員的技術(shù)內(nèi)的提供用于特定硬件的驅(qū)動程序的某一其他方法。包括(但不限于)以下各者的各種軟件及硬件模擬專利說明達成針對不同機器建構(gòu)的指令格式用于可用于本領(lǐng)域的技術(shù)人員的目標(biāo)機器的模擬的多種已知方式:Beausoleil 等人的題為“Multiprocessor for Hardware Emulat1n” 的美國專利證書第 5,551,013 號;及 Scalzi 等人的題為“Preprocessing of Stored Target Routinesfor Emulating Incompatible Instruct1ns on a Target Processor,,的美國專利證書第 6,009,261 號;及 Davidian 等人的題為 “Decoding Guest Instruct1n to DirectlyAccess Emulat1n Routines that Emulate the Guest Instruct1ns,,的美國專利證書第5,574,873 號;及 Gorishek等人的題為“Symmetrical Multiprocessing Bus and ChipsetUsed for Coprocessor Support Allowing Non-Native Code to Run in a System,,的美國專利證書第6,308,255號;及Lethin等人的題為“Dynamic Optimizing ObjectCode Translator for Architecture Emulat1n and Dynamic Optimizing Object CodeTranslat1n Method”的美國專利證書第 6,463,582 號;及Eric Traut 的題為“Method forEmulating Guest Instruct1ns on a Host Computer Through Dynamic Recompilat1nof Host Instruct1ns”的美國專利證書第5,790,825號(前述專利證書中的每一者在此以其全文引用的方式并入本文中);及許多其他專利證書。
[0226]在圖19中,提供經(jīng)模擬的主機計算機系統(tǒng)5092的一實例,其模擬主機架構(gòu)的主機計算機系統(tǒng)5000’。在經(jīng)模擬的主機計算機系統(tǒng)5092中,主機處理器(CPU) 5091為經(jīng)模擬的主機處理器(或虛擬主機處理器),且包含一模擬處理器5093,其具有不同于主機計算機5000’的處理器5091的本地指令集架構(gòu)的本地指令集架構(gòu)。經(jīng)模擬的主機計算機系統(tǒng)5092具有模擬處理器5093可存取的存儲器5094。在實例實施例中,將存儲器5094分割成一主機計算機存儲器5096部分及一模擬例程5097部分。主機計算機存儲器5096可用于根據(jù)主機計算機架構(gòu)的經(jīng)模擬的主機計算機5092的程序。模擬處理器5093執(zhí)行不同于經(jīng)模擬的處理器5091的本地指令的架構(gòu)的經(jīng)建構(gòu)的指令集的本地指令,這些本地指令自模擬例程存儲器5097獲得,且可藉由使用在序列及存取/解碼例程中獲得的一個或多個指令自主機計算機存儲器5096中的程序存取主機指令以用于執(zhí)行,序列及存取/解碼例程可解碼所存取的主機指令以判定用于模擬所存取的主機指令的功能的本地指令執(zhí)行例程。舉例而言,針對主機計算機系統(tǒng)5000’的架構(gòu)定義的其他設(shè)施可藉由經(jīng)建構(gòu)的設(shè)施例程來模擬,包括諸如通用寄存器、控制寄存器、動態(tài)地址轉(zhuǎn)譯及I/o子系統(tǒng)支援及處理器高速緩存的設(shè)施。模擬例程亦可利用可用于模擬處理器5093中的功能(諸如,通用寄存器及虛擬地址的動態(tài)轉(zhuǎn)譯)以改良模擬例程的效能。亦可提供特殊硬件及卸載引擎以輔助處理器5093模擬主機計算機5000’的功能。
[0227]本文中所使用的術(shù)語僅用于描述特定實施例的目的,且并不意欲為本發(fā)明的限制。如本文中所使用,除非上下文另有清晰指示,否則單數(shù)形式“一”及“該”意欲亦包括復(fù)數(shù)形式。應(yīng)進一步理解,當(dāng)術(shù)語“包含”用于此說明書中時,其指定所敘述特征、整數(shù)、步驟、操作、元件和/或組件的存在,但并不排除一或多個其他特征、整數(shù)、步驟、操作、元件、組件和/或其群組的存在或添加。
[0228]以下申請專利范圍中的所有構(gòu)件或步驟加功能元件的對應(yīng)結(jié)構(gòu)、材料、動作及等效物(若有的話)意欲包括用于結(jié)合如特別主張的其他所主張元件執(zhí)行功能的任何結(jié)構(gòu)、材料或動作。已出于說明及描述的目的呈現(xiàn)本發(fā)明的一個或多個方面的描述,但該描述并不意欲為詳盡的或限于所揭示的形式下的本發(fā)明。在不脫離本發(fā)明的范疇及精神的情況下,許多修改及變化對于一般熟習(xí)此項技術(shù)者將為顯而易見的。選擇并描述了實施例以便最佳地解釋本發(fā)明的原理及實務(wù)應(yīng)用,且使其他一般熟習(xí)此項技術(shù)者能夠針對具有如適合于所預(yù)期的特定用途的各種修改的各種實施例來理解本發(fā)明。
[0229]第23章向量字串指令
[0230]向量字串設(shè)施
[0231]—
[0232]指令
[0233]除非另有指定,否則所有運算元為向量寄存器運算元。匯編器語法中的“V”指明向量運算元。
[0234]
Mne-Op-
NamemonicCNiracIef^Iicscode Rige
V函涵—涵AL......................................................................VFAE...............' c.......Vi "p..................SPpv....................................................................1....................j..........................HF 23T?
VECTO fim ELEMENT EOUAiVFEE V嶋 CT W ^ SP DvE7_ 23-2
VECTOR PMB ELEMENT EQUAL.VFENE VRR-D C* Vf Si SP OvE781 23-3
VECTOR STBJMG 議G£ COMPMEVSTBC VflR*d Cf VF S3 SP DvjE78A 23-4
[0235]向量尋找任何相等
[0236]
VFAE VllVaiVg1M4lM5p/RR-b|
?7' I V1 I V2 I V3 \1U\ M51////| M4 IRXBI I?
§β 12 1β?24332? 4047
[0237]自左至右進行,比較第二運算元的每個不帶正負(fù)號的二進位整數(shù)元素與第三運算元的每個不帶正負(fù)號的二進位整數(shù)元素的相等性,且若在Μ5字段中設(shè)定了零搜尋標(biāo)志,則視情況與零比較。
[0238]若M5字段中的結(jié)果類型(RT)標(biāo)志為零,則對于匹配第三運算元中的任一元素或視情況匹配零的第二運算元中的每一元素,將第一運算元中對應(yīng)的元素的位位置設(shè)定至一,否則,將其設(shè)定至零。
[0239]若M5字段中的結(jié)果類型(RT)標(biāo)志為一,則將匹配第三運算元中的一元素或零的第二運算元中的最左側(cè)元素的字節(jié)索引儲存于第一運算元的字節(jié)七中。
[0240]每一指令具有擴展的助憶符號區(qū)段,其描述推薦的擴展的助憶符號及其對應(yīng)的機器匯編器語法。
[0241]編程注釋:對于視情況設(shè)定條件碼的所有指令,若設(shè)定條件碼,則性能可能降級。
[0242]若M5字段中的結(jié)果類型(RT)標(biāo)志為一且未發(fā)現(xiàn)字節(jié)相等,或為零(若設(shè)定了零搜尋標(biāo)志),則將與向量中的字節(jié)的數(shù)目相等的索引儲存于第一運算元的字節(jié)七中。
[0243]M4字段指定元素大小控制(ES)。ES控制指定向量寄存器運算元中的元素的大小。若指定保留值,則辨識到規(guī)范例外狀況。
[0244]O-字節(jié)
[0245]1-半字
[0246]2-字
[0247]3 至 15-保留
[0248]M5字段具有以下格式:
[0249]
JLnm Vi/
012 3
[0250]如下定義M5字段的位:
[0251].結(jié)果類型(RT):若為零,則每一所得元素為關(guān)于該元素的所有范圍比較的屏蔽。若為一,則將字節(jié)索引儲存至第一運算元的字節(jié)七中,且將零儲存于所有其他元素中。
[0252].零搜尋(ZS):若為一,則亦將第二運算元的每一元素與零比較。
[0253].條件碼設(shè)定(CC):若為零,則不設(shè)定條件碼且條件碼保持不變。若為一,則如以下段中所指定來設(shè)定條件碼。
[0254]特殊條件
[0255]若出現(xiàn)以下各者中的任一者,則辨識規(guī)范例外狀況且不采取其他行動:
[0256]1.M4字段含有自3至15的值。
[0257]2.M5字段的位O并非零。
[0258]所得條件碼:
[0259]若CC標(biāo)志為零,則碼保持不變。
[0260]若CC標(biāo)志為一,則如下來設(shè)定碼:
[0261]O若設(shè)定了 ZS-位,則在第二運算元中比零低的索引元素中不存在匹配。
[0262]I第二運算元的一些元素匹配第三運算元中的至少一元素。
[0263]2第二運算元的所有元素匹配第三運算元中的至少一元素。
[0264]3第二運算元中無元素匹配第三運算元中的任何元素。
[0265]程序例外狀況:
[0266]I具有DXC FE的數(shù)據(jù),向量寄存器
[0267].在未安裝向量擴展設(shè)施的情況下的操作
[0268].規(guī)范(保留的ES值)
[0269].事務(wù)約束
[0270]擴充的助憶符號:
[0271]
VFAEB VhV25V3jM5VFAl¥,?¥2,¥j,0?Mi
YFAEH V1HM5WAE VbV2, V3,1,M5
VFAEF YbY25V3iM5VFAEVbV2jV3^5M5
VFAEBS VuV2jV3jM5WAEVbV2sV3A(M5IXT)
VFAEHS VbV2jV3iMsVFAE VuV^V3,1,(M51 XT)
VFAEFS VbV2jV3sMjVFAE Yi5V2jV3,2,(M51 TV)
VFAEZB VbV25V35M5VFAEVljV2jV3jOj(M5IXtJ)
VFAEZH VlsV2,V3sM5VFAEVbV2jV^ls(M5IXT)
VFAEZF Vl5V2iV3lMsVFAEV15Y2jV3A(M5IXT)
YFAEZBS Vi,V2,V3, M5VFAE VbV2jV3A(MsIXgt)
VFAEZHS Vi,V2jV3jM5WAE V“V2,V3,1 ,(M5 j X'3*)
VFAEZFS VuV2jV3jM5VFAE Vi5V2jV3,2,(M51 Χ*3')
[0272]向量尋找元素相等
[0273]
VFEE V11V2lV3lM4fM5
I "?τ I V11 v2 I V3 \?ι\ μ5 |////| M4 |rxb| w
§I 12 16 20 24 28 32 ? ?4?
[0274]自左至右進行,將第二運算元的不帶正負(fù)號的二進位整數(shù)元素與第三運算元的對應(yīng)的不帶正負(fù)號的二進位整數(shù)元素比較。若兩個元素相等,則將最左側(cè)相等元素的第一字節(jié)的字節(jié)索引置放于第一運算元的字節(jié)七中。將零儲存于第一運算元的剩余字節(jié)中。若未發(fā)現(xiàn)字節(jié)相等,或若未發(fā)現(xiàn)字節(jié)為零(若設(shè)定了零比較),則將與向量中的字節(jié)的數(shù)目相等的索引儲存于第一運算元的字節(jié)七中。將零儲存于剩余字節(jié)中。
[0275]若在M5字段中設(shè)定了零搜尋(ZS)位,則亦比較第二運算元中的每一元素與零的相等性。若在發(fā)現(xiàn)第二運算元及第三運算元的任何其他元素相等之前在第二運算元中尋找到零元素,則將發(fā)現(xiàn)為零的元素的第一字節(jié)的字節(jié)索引儲存于第一運算元的字節(jié)七中,且將零儲存于所有其他字節(jié)位置中。若條件碼設(shè)定(CC)標(biāo)志為一,則將條件碼設(shè)定至零。
[0276]M4字段指定元素大小控制(ES)。ES控制指定向量寄存器運算元中的元素的大小。若指定保留值,則辨識到規(guī)范例外狀況。
[0277]O-字節(jié)
[0278]1-半字
[0279]2-字
[0280]3 至 15-保留
[0281]M5字段具有以下格式:
[0282]
JJzIc
I |s|c
0 12 3
[0283]如下定義M5字段的位:
[0284].保留:保留位O至I且位O至I必須為零。否則,辨識到規(guī)范例外狀況。
[0285].零搜尋(ZS):若為一,則亦將第二運算元的每一元素與零比較。
[0286].條件碼設(shè)定(CC):若為零,則條件碼保持不變。若為一,則如在以下段中所指定來設(shè)定條件碼。
[0287]特殊條件
[0288]若出現(xiàn)以下各者中的任一者,則辨識規(guī)范例外狀況且不采取其他行動:
[0289]1.M4字段含有自3至15的值。
[0290]2.]?5字段的位O至I并非零。
[0291]所得條件碼:
[0292]若將M5字段的位3設(shè)定至一,則如下設(shè)定碼:
[0293]O 若設(shè)定了零比較位,則比較在具有比任何相等比較更小的索引的元素中偵測到第二運算元中的零元素。
[0294]I比較在一些元素中偵測到第二運算元與第三運算元之間的匹配。若設(shè)定了零比較位,則此匹配出現(xiàn)于具有小于或等于零比較元素的索引的元素中。
[0295]2 —
[0296]3無元素比較起來相等。
[0297]若M5字段的位3為零,則碼保持不變。
[0298]程序例外狀況:
[0299].具有DXC FE的數(shù)據(jù),向量寄存器
[0300].在未安裝向量擴展設(shè)施的情況下的操作
[0301].規(guī)范(保留的ES值)
[0302].事務(wù)約束
[0303]擴展的助憶符號:
[0304]
【權(quán)利要求】
1.一種用于判定一組數(shù)據(jù)的長度的方法,包含: 將在存儲器的一指定區(qū)塊內(nèi)的數(shù)據(jù)自存儲器載入至一寄存器,該數(shù)據(jù)為將要判定長度的該組數(shù)據(jù)的至少一部分; 獲得載入于該寄存器中的數(shù)據(jù)量的一計數(shù); 由一處理器判定載入于該寄存器中的該數(shù)據(jù)的一終止值,該判定包含檢查該數(shù)據(jù)以判定該寄存器是否包括一終止字符,且基于該寄存器包括一終止字符,將該終止值設(shè)定為該終止字符的位置,且基于該寄存器不包括該終止字符,將該終止值設(shè)定為一預(yù)先指定值; 基于該計數(shù)及該終止值中的至少一個而檢查是否存在待計數(shù)的額外數(shù)據(jù); 基于該檢查指示將對額外數(shù)據(jù)計數(shù),基于該額外數(shù)據(jù)使該計數(shù)遞增,該計數(shù)提供該組數(shù)據(jù)的該長度 '及 基于該檢查指示將不對額外數(shù)據(jù)計數(shù),使用該計數(shù)作為該組數(shù)據(jù)的長度。
2.如權(quán)利要求1所述的方法,其中所述檢查包含:比較該計數(shù)與該終止值以判定是否將對額外數(shù)據(jù)計數(shù)。
3.如權(quán)利要求1或2所述的方法,其中所述獲得該計數(shù)包含:使用在存儲器的該區(qū)塊內(nèi)的一開始地址及存儲器的該區(qū)塊的一邊界來計算該計數(shù)。
4.如前述任一權(quán)利要求所述的方法,其中該數(shù)據(jù)包含多個數(shù)據(jù)單位,該多個數(shù)據(jù)單位并行地載入于該寄存器中,且其中該檢查并行地執(zhí)行。
5.如前述任一權(quán)利要求所述的方法,其中該載入藉由一“向量載入至區(qū)塊邊界”指令來執(zhí)行,且存儲器的該區(qū)塊為以下各情形中之一:藉由該“向量載入至區(qū)塊邊界”指令來指定,或由執(zhí)行該“向量載入至區(qū)塊邊界”指令的一處理器來動態(tài)地判定。
6.如前述任一權(quán)利要求所述的方法,其中所述獲得該計數(shù)包含:使用一“載入計數(shù)至區(qū)塊邊界”指令。
7.如前述任一權(quán)利要求所述的方法,其中所述判定一終止值包含:使用一“向量尋找元素不相等”指令,且該位置包含該寄存器內(nèi)的一字節(jié)索引。
8.如前述任一權(quán)利要求所述的方法,其中該終止字符包含零或空值字符。
9.如前述任一權(quán)利要求所述的方法,其中該組數(shù)據(jù)的該長度使用至多一個分支指令來判定,且其中該載入在不交叉存儲器的該區(qū)塊的邊界的情況下執(zhí)行。
10.如權(quán)利要求1所述的方法,其中該方法進一步包含獲得計算機代碼以判定該長度,該計算機代碼包括執(zhí)行該載入的一“向量載入至區(qū)塊邊界”指令、獲得該計數(shù)的一“載入計數(shù)至區(qū)塊邊界”指令,及判定該終止值的一 “向量尋找元素不相等”指令。
11.一種用于判定一組數(shù)據(jù)的長度的計算機系統(tǒng),該計算機系統(tǒng)包含:一存儲器 '及 一處理器,其與該存儲器通信,其中該計算機系統(tǒng)被配置為執(zhí)行前述任一權(quán)利要求所述的方法。
12.一種用于確定一組數(shù)據(jù)的長度的計算機程序產(chǎn)品,所述計算機程序產(chǎn)品包括: 計算機可讀存儲介質(zhì),能夠由處理電路讀取,并且存儲用于由所述處理電路執(zhí)行的指令,以執(zhí)行權(quán)利要求1到10中的任一個所述的方法。
【文檔編號】H03M7/40GK104170259SQ201380014258
【公開日】2014年11月26日 申請日期:2013年3月1日 優(yōu)先權(quán)日:2012年3月15日
【發(fā)明者】J.D.布拉德伯里, M.K.格施溫德, T.斯雷格 申請人:國際商業(yè)機器公司