TW201403469A - 尋找一組具有終止字元之字元資料之長度 - Google Patents
尋找一組具有終止字元之字元資料之長度 Download PDFInfo
- Publication number
- TW201403469A TW201403469A TW102107406A TW102107406A TW201403469A TW 201403469 A TW201403469 A TW 201403469A TW 102107406 A TW102107406 A TW 102107406A TW 102107406 A TW102107406 A TW 102107406A TW 201403469 A TW201403469 A TW 201403469A
- Authority
- TW
- Taiwan
- Prior art keywords
- data
- instruction
- register
- vector
- memory
- Prior art date
Links
- 239000013598 vector Substances 0.000 claims abstract description 240
- 230000015654 memory Effects 0.000 claims description 197
- 238000003860 storage Methods 0.000 claims description 59
- 238000012545 processing Methods 0.000 claims description 56
- 238000000034 method Methods 0.000 claims description 39
- 238000004590 computer program Methods 0.000 claims description 29
- 238000004891 communication Methods 0.000 claims description 11
- 238000007689 inspection Methods 0.000 claims description 2
- 238000013519 translation Methods 0.000 description 27
- 238000006073 displacement reaction Methods 0.000 description 22
- 230000006870 function Effects 0.000 description 19
- 238000010586 diagram Methods 0.000 description 11
- 230000002441 reversible effect Effects 0.000 description 10
- 238000001514 detection method Methods 0.000 description 9
- 239000000872 buffer Substances 0.000 description 8
- 238000007667 floating Methods 0.000 description 8
- 239000000463 material Substances 0.000 description 8
- 230000000295 complement effect Effects 0.000 description 7
- 230000009471 action Effects 0.000 description 6
- 238000004088 simulation Methods 0.000 description 6
- 230000008901 benefit Effects 0.000 description 5
- 239000000284 extract Substances 0.000 description 5
- 230000000717 retained effect Effects 0.000 description 5
- 238000004364 calculation method Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 238000000605 extraction Methods 0.000 description 4
- 230000007774 longterm Effects 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- 238000004422 calculation algorithm Methods 0.000 description 3
- 230000000052 comparative effect Effects 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 238000013461 design Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 239000013307 optical fiber Substances 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 208000015976 Corneal dystrophy-perceptive deafness syndrome Diseases 0.000 description 1
- 238000012884 algebraic function Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000007717 exclusion Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000007781 pre-processing Methods 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 229920000638 styrene acrylonitrile Polymers 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 230000001131 transforming effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30018—Bit or string instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30021—Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Executing Machine-Instructions (AREA)
- Complex Calculations (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
判定具有一終止字元之字元資料的長度。將判定該長度所針對之該字元資料並行地載入於一或多個向量暫存器內。使用一指令,該指令將資料載入於一向量暫存器中至一指定邊界,且該指令提供一種使用例如另一指令來判定所載入之字元之數目的方式。另外,使用一指令以尋找例如第一零或空值字元之第一終止字元之索引。此指令並行地搜尋該資料以尋找該終止字元。藉由使用此等指令,僅使用一個分支指令來判定該字元資料之該長度。
Description
本發明之一態樣大體係關於文字處理,且詳言之,係關於與字元資料相關聯之處理。
文字處理常常需要各種類型之字元資料處理,包括字元資料字串的處理。一些類型之處理包括尋找終止點(例如,字串之結尾)、判定字元資料之長度、尋找特定字元等。執行此等類型之處理的當前指令及/或技術傾向於效率低下。
經由提供一種用於判定一組資料之一長度之電腦程式產品來克服先前技術之缺點並提供優勢。該電腦程式產品包括一電腦可讀儲存媒體,其可由一處理電路讀取且儲存用於由該處理電路執行以用於執行一方法之指令。該方法包括(例如):將在記憶體之一指定區塊內之資料自記憶體載入至一暫存器,該資料為待判定該長度所針對之該組資料的至少一部分;獲得載入於該暫存器中之資料之一量的一計數;藉由一處理器判定載入於該暫存器中之該資料的一終止值,該判定包含檢查該資料以判定該暫存器是否包括一終止字元,且基於該暫存器包括一終止字元,將該終止值設定為該終止字元的一位置,且基於該暫存器不包括該終止字元,將該終止值設定為一預先指定值;基於該
計數及該終止值中之至少一者而檢查是否存在待計數的額外資料;基於該檢查指示將對額外資料計數,基於該額外資料使該計數遞增,該計數提供該組資料之該長度;及基於該檢查指示將不對額外資料計數,使用該計數作為該組資料之一長度。
本文中亦描述及主張關於本發明之一或多項態樣之方法及系統。另外,本文中亦描述且可主張關於本發明之一或多項態樣的服務。
經由本發明之技術實現額外特徵及優勢。本發明之其他實施例及態樣在本文中得以詳細描述且被視為所主張之本發明之一部分。
100‧‧‧計算環境
102‧‧‧處理器
104‧‧‧記憶體
106‧‧‧輸入/輸出(I/O)器件及/或介面
108‧‧‧匯流排
200‧‧‧計算環境
202‧‧‧原生中央處理單元
204‧‧‧記憶體
206‧‧‧輸入/輸出器件及/或介面
208‧‧‧匯流排
210‧‧‧原生暫存器
212‧‧‧模擬器程式碼
250‧‧‧客體指令
252‧‧‧指令提取單元
254‧‧‧指令轉譯常式
256‧‧‧原生指令
260‧‧‧模擬控制常式
400‧‧‧主記憶體
402‧‧‧垂直虛線
420‧‧‧向量暫存器
450‧‧‧主記憶體
452‧‧‧垂直虛線
470‧‧‧向量暫存器
490‧‧‧向量暫存器
500‧‧‧「向量載入至區塊邊界」指令
502a‧‧‧運算碼欄位
502b‧‧‧運算碼欄位
504‧‧‧向量暫存器欄位
506‧‧‧索引欄位(X2)
508‧‧‧基本欄位(B2)
510‧‧‧位移欄位(D2)
512‧‧‧遮罩欄位(M3)
514‧‧‧暫存器擴充位元(RXB)欄位
602‧‧‧邊界大小(BdySize)
604‧‧‧邊界遮罩(BdyMask)
612‧‧‧開始位址(StartAddr)
614‧‧‧向量大小(vec_size)
622‧‧‧結束位址(EndAddr)
652‧‧‧開始位址(StartAddr)
658‧‧‧邊界大小(BdySize)
662‧‧‧邊界遮罩(BdyMask)
664‧‧‧向量大小(vec_size)
672‧‧‧結束位址(EndAddr)
700‧‧‧「向量尋找元素不相等」指令
702a‧‧‧運算碼欄位
702b‧‧‧運算碼欄位
704‧‧‧第一向量暫存器欄位
706‧‧‧第二向量暫存器欄位
708‧‧‧第三向量暫存器欄位
710‧‧‧第一遮罩欄位(M5)
712‧‧‧第二遮罩欄位(M4)
714‧‧‧暫存器擴充位元(RXB)欄位
803‧‧‧nullidx
806‧‧‧變數
900‧‧‧輸入向量B
902‧‧‧輸入向量A
904‧‧‧比較邏輯
906‧‧‧零偵測邏輯
908‧‧‧比較邏輯之輸出idxL或idxR
910‧‧‧零偵測邏輯之輸出nullidx
912‧‧‧結果判定邏輯
914‧‧‧右/左
916‧‧‧零偵測
918‧‧‧元素大小
920‧‧‧所得索引
922‧‧‧輸出向量
923‧‧‧條件碼處理
924‧‧‧條件碼
1000‧‧‧「載入計數至區塊邊界」指令
1002a‧‧‧運算碼欄位
1002b‧‧‧運算碼欄位
1004‧‧‧暫存器欄位
1006‧‧‧索引欄位(X2)
1008‧‧‧基本欄位(B2)
1010‧‧‧位移欄位(D2)
1012‧‧‧遮罩欄位(M3)
1102‧‧‧邊界大小(BdySize)
1104‧‧‧邊界遮罩(BdyMask)
1112‧‧‧開始位址(StartAddr)
1114‧‧‧向量大小(vec_size)
1122‧‧‧結束位址(EndAddr)
1200‧‧‧暫存器檔案
1202‧‧‧向量暫存器
1204‧‧‧浮點暫存器
1300‧‧‧電腦程式產品
1302‧‧‧非暫時性電腦可讀儲存媒體
1304‧‧‧電腦可讀程式碼構件或邏輯
5000‧‧‧主機電腦系統
5000'‧‧‧主機電腦系統
5001‧‧‧中央處理單元(CPU)
5002‧‧‧電腦記憶體
5003‧‧‧動態位址轉譯(DAT)
5004‧‧‧指令提取單元
5005‧‧‧載入/儲存單元
5006‧‧‧指令解碼單元
5007‧‧‧轉譯後備緩衝器(TLB)
5008‧‧‧指令執行單元
5009‧‧‧快取記憶體
5010‧‧‧網路
5011‧‧‧儲存媒體器件
5020‧‧‧系統
5021‧‧‧基礎電腦系統
5022‧‧‧顯示器件
5023‧‧‧滑鼠
5024‧‧‧鍵盤
5025‧‧‧記憶體
5026‧‧‧處理器
5027‧‧‧長期儲存器
5028‧‧‧通信
5029‧‧‧網路
5030‧‧‧印表機/掃描器
5032‧‧‧應用程式
5040‧‧‧資料處理網路
5041‧‧‧工作站
5042‧‧‧工作站
5043‧‧‧工作站
5044‧‧‧工作站
5045‧‧‧工作站
5046‧‧‧閘道器電腦
5047‧‧‧網際網路
5048‧‧‧遠端伺服器
5050‧‧‧使用者
5051‧‧‧使用者
5053‧‧‧快取記憶體
5054‧‧‧I/O單元
5055‧‧‧指令提取單元
5056‧‧‧解碼/分派單元
5057‧‧‧執行單元
5058‧‧‧分支單元
5059‧‧‧暫存器
5060‧‧‧載入/儲存單元
5061‧‧‧程式計數器
5062‧‧‧動態位址轉譯(DAT)
5065‧‧‧其他處理器單元
5066‧‧‧算術邏輯單元(ALU)
5067‧‧‧暫存器電路
5068‧‧‧暫存器電路
5069‧‧‧暫存器電路
5070‧‧‧輸出暫存器電路
5071‧‧‧介接邏輯
5072‧‧‧其他經建構之設施
5073‧‧‧其他電路
5074‧‧‧算術邏輯單元(ALU)
5075‧‧‧輸入暫存器電路
5076‧‧‧輸入暫存器電路
5077‧‧‧輸入暫存器電路
5080‧‧‧輸出暫存器電路
5082‧‧‧分支歷史表
5083‧‧‧其他元件
5085‧‧‧算術邏輯單元(ALU)
5090‧‧‧控制邏輯
5091‧‧‧主機處理器(CPU)
5092‧‧‧經模擬之主機電腦系統
5093‧‧‧模擬處理器
5094‧‧‧記憶體
5096‧‧‧主機電腦記憶體
5097‧‧‧模擬常式
特別指出本發明之一或多項態樣且在本說明書完結時在申請專利範圍中作為實例清楚地主張本發明之一或多項態樣。自以下結合附圖進行之詳細描述,本發明之前述及其他目標、特徵及優勢係顯而易見的,其中:圖1描繪併有且使用本發明之一或多項態樣的一計算環境之一實例;圖2A描繪併有且使用本發明之一或多項態樣的一計算環境之另一實例;圖2B描繪根據本發明之一態樣的圖2A之記憶體之其他細節;圖3描繪根據本發明之一態樣的用以判定一組字元資料之長度之邏輯的一實施例;圖4A描繪根據本發明之一態樣的主記憶體之一實例,將資料自該主記憶體載入至向量暫存器中且將判定資料之長度;圖4B描繪根據本發明之一態樣的載入有來自圖4A之主記憶體之字元資料的向量暫存器之一實例;圖4C描繪根據本發明之一態樣的主記憶體之另一實例,將資料
自該主記憶體載入至向量暫存器中且將判定資料之長度;圖4D及4E描繪根據本發明之一態樣的載入有來自圖4C之主記憶體之字元資料的向量暫存器之實例;圖5描繪根據本發明之一態樣的「向量載入至區塊邊界」指令之格式的一實施例;圖6A描繪根據本發明之一態樣的與「向量載入至區塊邊界」指令相關聯之邏輯的一實施例;圖6B描繪根據本發明之一態樣的與「向量載入至區塊邊界」指令相關聯之邏輯的另一實施例;圖7描繪根據本發明之一態樣的「向量尋找元素不相等」指令之格式的一實施例;圖8描繪根據本發明之一態樣的與「向量尋找元素不相等」指令相關聯之邏輯的一實施例;圖9描繪根據本發明之一態樣的執行圖8之邏輯之各種處理區塊的一實施例;圖10描繪根據本發明之一態樣的「載入計數至區塊邊界」指令之格式的一實施例;圖11描繪根據本發明之一態樣的與「載入計數至區塊邊界」指令相關聯之邏輯的一實施例;圖12描繪根據本發明之一態樣的暫存器檔案之一實例;圖13描繪併有本發明之一或多項態樣之電腦程式產品的一實施例;圖14描繪併有且使用本發明之一或多項態樣之主機電腦系統的一實施例;圖15描繪併有且使用本發明之一或多項態樣之電腦系統的再一實例;
圖16描繪併有且使用本發明之一或多項態樣的包含電腦網路之電腦系統的另一實例;圖17描繪併有且使用本發明之一或多項態樣的電腦系統之各種元件的一實施例;圖18A描繪併有且使用本發明之一或多項態樣的圖17之電腦系統之執行單元的一實施例;圖18B描繪併有且使用本發明之一或多項態樣的圖17之電腦系統之分支單元的一實施例;圖18C描繪併有且使用本發明之一或多項態樣的圖17之電腦系統之載入/儲存單元的一實施例;及圖19描繪併有且使用本發明之一或多項態樣的經模擬之主機電腦系統的一實施例。
根據本發明之一態樣,提供用於促進字元資料之處理之能力,字元資料包括(但不限於):任一語言下的字母字元;數字;標點符號;及/或其他符號。字元資料可為或可不為資料字串。標準與字元資料相關聯,標準之實例包括(但不限於):美國資訊交換標準碼(ASCII);Unicode,包括(但不限於)Unicode變換格式(UTF)8;UTF16;等。
在一態樣中,提供一種用於進行以下操作之技術:使用並行處理尋找具有終止字元之一組字元資料(例如,空值終止之字元字串)的長度且不引起無故例外狀況。在一實例中,在一或多個向量暫存器內載入該組字元資料(本文中亦被稱作字元資料或終止之字元資料),將判定該組字元資料之長度。詳言之,在一實施例中,使用一指令(例如,「向量載入至區塊邊界」指令),該指令並行地將向量暫存器中之資料載入至所選定邊界(諸如,快取記憶體或頁面邊界),且提供一種
判定所載入之字元之數目(計數)的方式。舉例而言,為了判定所載入之字元的數目,使用另一指令(例如,「載入計數至區塊邊界」指令)。另外,使用一指令(例如,「向量尋找元素不相等」指令)以搜尋所載入資料以尋找該組字元資料內之第一分隔符號字元,亦即,第一終止字元(諸如,字元資料內之零或空值字元)。此指令並行地檢查資料之複數個位元組。
若藉由「向量尋找元素不相等」指令未找出分隔符號字元的位置,則載入該組字元資料之額外資料,且重複對分隔符號字元的計數及搜尋。計數係追蹤該組字元資料之所載入位元組(或其他資料單位)之數目的彙總值。發生載入、計數及對分隔符號字元之搜尋,直至找出分隔符號字元的位置為止。藉由使用此等指令,僅使用一分支指令來判定字元資料之長度。另外,提供對字元資料之快速並行檢查,同時防止假性例外狀況。
如本文中所描述,作為實例,向量暫存器之元素(亦稱為向量)的長度為一個、兩個或四個位元組;且向量運算元為(例如)具有複數個元素之單指令多資料(SIMD)運算元。在其他實施例中,元素可具有其他大小,且向量運算元不需要為SIMD,及/或可包括一個元素。
參看圖1描述併有且使用本發明之一或多項態樣的一計算環境之一實施例。計算環境100包括(例如)經由(例如)一或多個匯流排108及/或其他連接耦接至彼此之一處理器102(例如,中央處理單元)、一記憶體104(例如,主記憶體)及一或多個輸入/輸出(I/O)器件及/或介面106。
在一實例中,處理器102係基於由International Business Machines Corporation供應之z/Architecture,且為一伺服器之部分,諸如亦由International Business Machines Corporation供應且實施z/Architecture之System z伺服器。z/Architecture之一實施例描述於題為
「z/Architecture Principles of Operation」的IBM®公開案(IBM®公開案第SA22-7832-08號,第九版,2010年8月)中,該公開案在此以其全文引用的方式併入本文中。在一實例中,該處理器執行一作業系統,諸如,亦由International Business Machines Corporation供應之z/OS。IBM®、Z/ARCHITECTURE®及Z/OS®為International Business Machines Corporation(Armonk,New York,USA)之註冊商標。本文中使用之其他名稱可為International Business Machines Corporation或其他公司之註冊商標、商標或產品名稱。
在再一實施例中,處理器102係基於由International Business Machines Corporation供應之Power Architecture。Power Architecture之一實施例描述於「Power ISATM第2.06版修訂B」(International Business Machines Corporation,2010年7月23日)中,該文件在此以其全文引用的方式併入本文中。POWER ARCHITECTURE®為International Business Machines Corporation之註冊商標。
在又一實施例中,處理器102係基於由Intel Corporation供應之Intel架構。Intel架構之一實施例描述於「Intel® 64 and IA-32 Architectures Developer's Manual:第2B卷,Instructions Set Reference,A-L」(序號253666-041US,2011年12月)及「Intel® 64 and IA-32 Architectures Developer's Manual:第2B卷,Instructions Set Reference,M-Z」(序號253667-041US,2011年12月)中,該等文件中之每一者在此以其全文引用的方式併入本文中。Intel®為Intel Corporation(Santa Clara,California)之註冊商標。
參看圖2A描述併有且使用本發明之一或多項態樣的一計算環境之另一實施例。在此實例中,計算環境200包括(例如)經由(例如)一或多個匯流排208及/或其他連接耦接至彼此之一原生中央處理單元202、一記憶體204及一或多個輸入/輸出器件及/或介面206。作為實
例,計算環境200可包括:由International Business Machines Corporation(Armonk,New York)供應之PowerPC處理器、pSeries伺服器或xSeries伺服器;由Hewlett Packard Co.(Palo Alto,California)供應的具有Intel Itanium II處理器之HP Superdome;及/或基於由International Business Machines Corporation、Hewlett Packard、Intel、Oracle或其他者供應之架構的其他機器。
原生中央處理單元202包括在該環境內之處理期間使用的一或多個原生暫存器210,諸如,一或多個通用暫存器及/或一或多個專用暫存器。此等暫存器包括表示在任一特定時間點的環境狀態之資訊。
此外,原生中央處理單元202執行儲存於記憶體204中之指令及程式碼。在一特定實例中,中央處理單元執行儲存於記憶體204中之模擬器程式碼212。此程式碼使得以一架構組態之處理環境能夠模擬另一架構。舉例而言,模擬器程式碼212允許基於不同於z/Architecture之架構的機器(諸如,PowerPC處理器、pSeries伺服器、xSeries伺服器、HP Superdome伺服器或其他者)模擬z/Architecture及執行基於z/Architecture開發之軟體及指令。
參看圖2B描述關於模擬器程式碼212之其他細節。客體指令250包含經開發以欲於不同於原生CPU 202之架構的架構中執行之軟體指令(例如,機器指令)。舉例而言,客體指令250可能已經設計以在z/Architecture處理器102上執行,但實情為,正在原生CPU 202(其可為(例如)Intel Itanium II處理器)上模擬客體指令250。在一實例中,模擬器程式碼212包括一指令提取單元252以自記憶體204獲得一或多個客體指令250,及視情況提供用於所獲得之指令的本端緩衝。模擬器程式碼212亦包括一指令轉譯常式254以判定已獲得的客體指令之類型且將客體指令轉譯成一或多個對應原生指令256。此轉譯包括(例如)識別待由客體指令執行之函式及選擇原生指令以執行彼函式。
另外,模擬器212包括一模擬控制常式260以使得執行原生指令。模擬控制常式260可使得原生CPU 202執行模擬一或多個先前所獲得之客體指令的原生指令之常式且,在此執行完結時,將控制返回至指令提取常式以模擬下一個客體指令或一群客體指令之獲得。原生指令256之執行可包括將資料自記憶體204載入至暫存器中;將資料自暫存器儲存回至記憶體;或執行某一類型之算術或邏輯運算(如由轉譯常式判定)。
每一常式(例如)以軟體來實施,該軟體儲存於記憶體中且由原生中央處理單元202來執行。在其他實例中,常式或運算中之一或多者以韌體、硬體、軟體或其某一組合來實施。可使用原生CPU之暫存器210或藉由使用記憶體204中之位置模擬經模擬之處理器的暫存器。在實施例中,客體指令250、原生指令256及模擬器程式碼212可常駐於相同記憶體中或可在不同記憶體器件間分配。
如本文中所使用,韌體包括(例如)處理器之微碼、毫碼及/或巨集碼。韌體包括(例如)在較高階機器碼之實施中使用的硬體層級指令及/或資料結構。在一實施例中,韌體包括(例如)通常作為微碼遞送之專屬碼,該微碼包括受信任軟體或基礎硬體所特有的微碼且控制作業系統對系統硬體之存取。
在一實例中,所獲得的、經轉譯及經執行之客體指令250為本文中所描述之指令中之一或多者。自記憶體提取具有一架構(例如,z/Architecture)之指令,將該指令轉譯及表示為具有另一架構(例如,PowerPC、pSeries、xSeries、Intel等)之一序列原生指令256。接著執行此等原生指令。
在一實施例中,本文中所描述之各種指令為根據本發明之一態樣提供的向量指令,其為向量設施之部分。向量設施提供(例如)在自一至十六個元素之範圍內的固定大小之向量。每一向量包括由設施中
所定義之向量指令進行運算之資料。在一實施例中,若向量由多個元素組成,則將每一元素與其他元素並行地處理。直至所有元素之處理完成後方出現指令完成。
如本文中所描述,可將向量指令實施為包括(但不限於)z/Architecture、Power、Intel等的各種架構之部分。儘管本文中所描述之實施例係針對z/Architecture,但向量指令及本發明之一或多項態樣可基於許多其他架構。z/Architecture僅為一實例。
在將向量設施實施為z/Architecture之部分的一實施例中,為了使用向量暫存器及指令,將指定控制暫存器(例如,控制暫存器0)中之向量啟用控制及暫存器控制設定至(例如)一。若安裝了向量設施且在未設定啟用控制之情況下執行向量指令,則辨識到資料例外狀況。若未安裝向量設施且執行向量指令,則辨識到操作例外狀況。
向量資料顯現於儲存器中,例如,以與其他資料格式相同的自左至右序列。編號為0至7的資料格式之位元構成儲存器中的最左側(最低編號)位元組位置中的位元組,位元8至15形成下一個依序位置中之位元組,等等。在再一實例中,向量資料可以另一序列(諸如,自右至左)顯現於儲存器中。
藉由向量設施提供的向量指令中之許多向量指令具有指定位元之欄位。被稱作暫存器擴充位元或RXB之此欄位包括用於向量暫存器指明之運算元中之每一者的最高有效位元。用於未由指令指定的暫存器指明之位元將顛倒,且經設定至零。
在一實例中,RXB欄位包括四個位元(例如,位元0至3),且將位元定義如下:
0-用於指令之第一向量暫存器指明之最高有效位元。
1-用於指令之第二向量暫存器指明(若有的話)之最高有效位元。
2-用於指令之第三向量暫存器指明(若有的話)之最高有效位元。
3-用於指令之第四向量暫存器指明(若有的話)之最高有效位元。
由(例如)組譯器取決於暫存器編號將每一位元設定至零或一。舉例而言,對於暫存器0至15,將位元設定至0;對於暫存器16至31,將位元設定至1,等等。
在一實施例中,每一RXB位元為用於包括一或多個向量暫存器之指令中的特定位置之擴充位元。舉例而言,在一或多個向量指令中,RXB之位元0為位置8至11之擴充位元,其被指派至(例如)V1;RXB之位元1為位置12至15之擴充位元,其被指派至(例如)V2;等等。
在再一實施例中,RXB欄位包括額外位元,且將一個以上位元用作用於每一向量或位置之擴充。
如本文中所描述,根據本發明之一態樣使用各種指令,以便判定具有終止字元之一組字元資料(諸如,空值終止之字元字串)的長度。下文進一步詳細地描述與判定長度相關聯之處理及所使用之各種指令。
最初參看圖3,在一實施例中,為了判定字元資料(諸如,空值終止之字元字串)之長度,使用(例如)「向量載入至區塊邊界」指令對向量暫存器載入字元資料(步驟300)。此指令並行地載入高達(例如)16個位元組之資料而不交叉主記憶體之指定邊界(自該主記憶體載入資料)。下文描述關於此指令之細節。
此後,使用(例如)下文所描述之「載入計數至區塊邊界」指令來判定所載入資料之位元組的數目(步驟302)。
接下來,執行在所載入暫存器中之搜尋以尋找字元資料之結尾(例如,空值、零或另一終止字元)(步驟304)。在一實例中,使用下文所描述之「向量尋找元素不相等」指令以搜尋終止字元(例如,空值、零或指定終止之另一字元)。在一實例中,此指令搜尋所載入向量暫存器以尋找空值元素(亦被稱作零元素)(例如,整個元素為零)。
空值或零元素指示字元資料之終止;例如,特定資料字串之結尾。搜尋之結果為本文中被稱作終止字元之第一空值元素的索引(例如,位元組索引),或諸如正搜尋之向量之大小的預先指定值(在未尋找到終止字元情況下)。
此後,作出關於所載入之字元的數目(例如,自「載入計數至區塊邊界」指令所判定)是否小於或等於終止字元之索引(例如,自「向量尋找元素不相等」指令所判定)的判定(詢問306)。若所載入之字元的數目小於或等於終止字元之索引,則將變數「長度」設定為等於「長度」加上所載入之字元的數目所得值(步驟308),且處理繼續步驟300。否則,將長度設定為等於「長度」加上終止字元索引(步驟310),且完成與判定長度相關聯之處理。
下文提供用以判定終止之字元字串(諸如,空值終止之字元字串)之長度的實例偽碼:
RB-字串之@,RX將含有長度
如上文所展示,最初藉由執行(例如)欲儲存長度之暫存器RX與RX之間的互斥或(XOR)且將結果置放於RX中而將RX初始化為零。接著,迴圈以將高達16個位元組之資料載入於向量VSTR中開始。判定載入於VSTR中的資料之位元組之數目的計數且將計數置放於通用暫
存器GLEN中。此後,使RX之長度遞增所載入之位元組的數目。
接下來,搜尋空值終止符且將結果置放於向量VPOS中。此結果為空值終止符之索引或向量之大小(例如,16,在不存在空值終止符情況下)。接著擷取VPOS中之結果且將其置放於通用暫存器GPOS中。比較GPOS與GLEN,且若GLEN小於或等於GPOS,則邏輯循環回至VLBB,且載入更多資料。否則,如上文在SGR及AGR處所指示,執行某清除。
在圖4A中描繪主記憶體400之一實例,自主記憶體400載入向量暫存器且判定字元資料之長度。如圖所示,主記憶體400包括在記憶體位置0x6FF3處開始之字元資料「Hello World!」。藉由垂直虛線402來展示在載入資料中將不交叉之主記憶體之邊界。將此資料載入至向量暫存器420中,向量暫存器420之實例描繪於圖4B中。
下文提供圖4A中所描繪的自記憶體載入資料之偽碼的一實例(在偽碼中被稱作STR@):
在圖4C中描繪主記憶體450之另一實例,自主記憶體450載入向量暫存器且判定字元資料之長度。如圖所示,主記憶體450包括在記憶體位置0x6FF6處開始之字元資料「Hello World!」。藉由垂直虛線452來展示在載入資料中將不交叉之主記憶體之邊界,該垂直虛線452在字元資料之結尾之前。因此,首先將直至邊界之字元資料載入至向
量暫存器470(其實例描繪於圖4D中)中,且接著將字元資料之剩餘部分載入至向量暫存器490(如圖4E中所展示)中。
下文提供自圖4C之主記憶體載入資料之偽碼的一實例(在偽碼中被稱作STR@):
如上文所指示,在一實施例中,為了判定終止之字元資料(諸如,空值終止之字元字串)之長度,使用各種指令。下文詳細描述此等指令之實例。
用以載入向量暫存器之一指令為「向量載入至區塊邊界(VLBB)」指令,參看圖5來描述該指令之一實例。在一實例中,「向量載入至區塊邊界」指令500包括:運算碼欄位502a(例如,位元0至7)、502b(例如,位元40至47),其指示「向量載入至區塊邊界」操作;一向量暫存器欄位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中之每一者分開且獨立於運算碼欄位。另外,在一實施例中,該等欄位分開且獨立於彼此;然而,在其他實施例中,可組合一個以上欄位。下文描述關於此等欄位之使用的其他資訊。
在一實例中,由運算碼欄位502a指明的運算碼之選定位元(例如,前兩個位元)指定指令之長度及格式。在此特定實例中,長度為三個半字組,且格式為藉由擴充之運算碼欄位進行的向量暫存器及索引儲存運算。向量(V)欄位以及由RXB指定的其對應擴充位元指明一向量暫存器。詳言之,對於向量暫存器,使用(例如)暫存器欄位之四-位元欄位(其中添加暫存器擴充位元(RXB)作為最高有效位元)指定含有運算元之暫存器。舉例而言,若四位元欄位為0110且擴充位元為0,則五位元欄位00110指示暫存器編號6。
與指令之欄位相關聯的下標編號表示該欄位適用之運算元。舉例而言,與V1相關聯之下標編號1表示第一運算元,等等。暫存器運算元之長度為一個暫存器,其為(例如)128個位元。
在一實例中,在「向量暫存器及索引儲存器運算」指令中,將由X2及B2欄位指明的通用暫存器之內容添加至D2欄位之內容以形成第二運算元位址。在一實例中,將針對「向量載入至區塊邊界」指令的位移D2作為12-位元不帶正負號之整數對待。
在一實施例中,M3欄位指定用以用信號向CPU通知關於載入至之區塊邊界的碼。若指定顛倒值,則辨識到規範例外狀況。實例碼及對應值如下:
在「向量載入至區塊邊界」指令之一實施例之執行中,在一實施例中,自左至右進行,以零索引位元組元素開始,以來自第二運算元之位元組載入第一運算元(在藉由V1欄位加上擴充位元指明之暫存器中指定)。第二運算元為藉由第二運算元位址(亦被稱作開始位址)指明之記憶體位置。載入自彼記憶體位置開始,且繼續至由指令(或處理器)計算出之結束位址,如下文所描述。若遇到邊界條件,則其為相依於對待第一運算元之其餘部分的方式之模型。未辨識到關於未載入之位元組之存取例外狀況。在一實例中,未載入之位元組為不可預測的。
在上述實例指令中,開始位址係藉由索引暫存器值(X2)+基底暫存器值(B2)+位移(D2)來判定;然而,在其他實施例中,由以下各者來提供開始位址:暫存器值;指令位址+指令文字指定偏移(offset);暫存器值+位移;或暫存器值+索引暫存器值;(僅作為一些實例)。另外,在一實施例中,指令不包括RXB欄位。實情為,不使用擴充或以另一方式提供擴充(諸如,自指令外部之控制),或提供擴充作為指令之另一欄位之部分。
參看圖6A描述與「向量載入至區塊邊界」指令相關聯之處理之一實施例的其他細節。在此實例中,在指令中指定邊界大小。在一實例中,計算環境之處理器正執行此邏輯。
在一實施例中,最初,建立邊界遮罩(BdyMask),其用以判定與指定邊界之靠近性(步驟600)。為了建立該遮罩,在一實例中,選取邊界大小(BdySize)(602)的2之補數否定數(complement negation),從而建立邊界遮罩604(例如,BdyMask=0-BdySize)。在一實例中,藉由指令(例如,M3欄位)提供邊界大小;或在另一實例中,由機器判定
邊界大小,如本文中所描述。
此後,計算開始位址,其指示載入將開始所自的記憶體中之位置(步驟610)。作為實例,可藉由以下各者來提供開始位址612:暫存器值;指令位址加上指令文字指定偏移;暫存器值加上位移;暫存器值加上索引暫存器值;或暫存器值加上索引暫存器值加上位移。在本文中提供之指令中,由X2欄位、B2欄位及D2欄位來提供開始位址。亦即,將藉由X2及B2指明的暫存器之內容添加至藉由D2指示之位移以提供開始位址。計算開始位址的上文所指示之方式僅為實例;其他實例亦係可能的。
接下來,計算結束位址,其指示自何處停止載入(步驟620)。此計算之輸入為(例如)邊界大小602、開始位址612、向量大小614(例如,以位元組計;例如,16)及邊界遮罩604。在一實例中,如下計算結束位址622:EndAddress=min(StartAddress+(BdySize-(StartAddress & BdyMask)),StartAddress+vec_size)。
此後,以索引位元組0開始,自始於開始位址且終止於結束位址之記憶體載入第一運算元(亦即,指明之向量暫存器)(步驟630)。此情形使得能夠將可變數目個位元組自記憶體載入至向量中,而不交叉指明之記憶體邊界。舉例而言,若記憶體邊界在64個位元組處,且開始位址在58個位元組處,則在向量暫存器中載入位元組58至64。在一實施例中,並行地載入位元組。
參看圖6B來描述與「向量載入至區塊邊界」指令相關聯之處理的另一實施例。在此實施例中,邊界大小並非藉由指令來指定,而是實情為,由執行指令之處理器來動態地判定邊界大小。
在一實施例中,最初,計算開始位址,該開始位址指示載入將開始所自的記憶體中之位置(步驟650)。作為實例,可藉由以下各者
來提供開始位址652:暫存器值;指令位址加上指令文字指定偏移;暫存器值加上位移;暫存器值加上索引暫存器值;或暫存器值加上索引暫存器值加上位移。在本文中提供之指令中,由X2欄位、B2欄位及D2欄位來提供開始位址。亦即,將藉由X2及B2指明之暫存器的內容添加至藉由D2指示之位移以提供開始位址。計算開始位址之上文所指示之方式僅為實例,其他實例亦為可能的。
此後,作出關於是否將動態地判定邊界之判定(詢問654)。若否,則將M3欄位中指定之值用作邊界大小(BdySize)。否則,處理器動態地判定邊界大小(步驟656)。舉例而言,M3欄位指定邊界之類型(例如,快取行、頁面等),且基於該類型及處理器之一或多個特性(例如,處理器之快取行大小;處理器之頁面大小;等等),處理器判定邊界。作為實例,基於類型,處理器將固定大小用於邊界(例如,處理器之預先定義之固定快取行或頁面大小),或基於類型,處理器判定邊界。舉例而言,若類型為頁面邊界,則處理器在轉譯後備緩衝器(TLB)中查找開始位址,且自該開始位址判定頁面邊界。亦存在其他實例。
在動態地或藉由指定之指令判定邊界大小之後,建立邊界遮罩(BdyMask),邊界遮罩用以判定與指定邊界之靠近性(步驟660)。為了建立遮罩,在一實例中,選取邊界大小(BdySize)658的2之補數否定數,從而建立邊界遮罩662(例如,BdyMask=0-BdySize)。
接下來,計算結束位址,該結束位址指示自何處起停止載入(步驟670)。此計算之輸入為(例如)邊界大小658、開始位址652、向量大小664(例如,以位元組計;例如,16)及邊界遮罩662。在一實例中,如下計算結束位址672:EndAddress=min(StartAddress+(BdySize-(StartAddress & BdyMask)),StartAddress+vec_size)。
此後,以索引位元組0開始,自始於開始位址且終止於結束位址之記憶體載入第一運算元(亦即,指明之向量暫存器)(步驟680)。此情形使得能夠將可變數目個位元組自記憶體載入至向量中,而不交叉指明之記憶體邊界。如上文所指示,例如,若記憶體邊界在64個位元組處,且開始位址在58個位元組處,則在向量暫存器中載入位元組58至64。在一實施例中,並行地載入位元組。
在圖4B中描繪根據「向量載入至區塊邊界」指令之任一實施例載入之向量暫存器的一實例。如圖所指示,無資料係經過藉由圖4A中之虛垂直線指明之邊界載入。經過邊界之位置係不可存取的且無例外狀況。在一特定實施例中,自左至右載入向量。然而,在另一實施例中,可自右至左載入向量。在一實施例中,在執行階段提供向量之方向(自左至右或自右至左)。舉例而言,作為實例,指令存取暫存器、狀態控制或指示處理之方向為自左至右或自右至左的其他實體。在一實施例中,不將此方向控制編碼為指令之部分,而是在執行階段將其提供至指令。
在一實例中,「向量載入至區塊邊界」指令僅以第二運算元之在主記憶體(本文中亦稱作主儲存器)之區塊內的對應位元組載入向量暫存器(第一運算元)的位元組。主記憶體之區塊係在指令中指定(例如,在指令中指定大小,以及區塊內載入將開始所自之位址),或藉由一類型之區塊邊界(例如,快取行或頁面)及執行指令之處理器之一或多個特性(諸如,快取行或頁面大小)來動態地判定。如本文中所使用,主記憶體之區塊為具有指定大小的記憶體之任何區塊。指定大小亦被稱作區塊之邊界、為區塊之結尾的邊界。
用以尋找終止字元(諸如,空值終止符)之一指令為「向量尋找元素不相等」指令,該指令之實例在圖7中予以描繪。在一實施例中,
此指令能夠比較多個向量之資料的不等性,以及搜尋所選定向量以尋找終止符,諸如空值或零元素(例如,整個元素為零)。
在一實例中,「向量尋找元素不相等(VFBNEZ)」指令700包括:運算碼欄位702a(例如,位元0至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中之每一者分開且獨立於運算碼欄位。另外,在一實施例中,該等欄位分開且獨立於彼此;然而,在其他實施例中,可組合一個以上欄位。下文描述關於此等欄位之使用的其他資訊。
在一實例中,由運算碼欄位702a指明的運算碼之選定位元(例如,前兩個位元)指定指令之長度及格式。在此特定實例中,選定位元指示長度為三個半字組,且格式為藉由擴充之運算碼欄位進行的向量暫存器及暫存器運算。向量(V)欄位中之每一者以及由RXB指定的其對應擴充位元指明一向量暫存器。詳言之,對於向量暫存器,使用(例如)暫存器欄位之四-位元欄位(其中添加暫存器擴充位元(RXB)作為最高有效位元)指定含有運算元之暫存器。舉例而言,若四位元欄位為0110且擴充位元為0,則五位元欄位00110指示暫存器編號6。
與指令之欄位相關聯的下標編號表示該欄位適用之運算元。舉例而言,與向量暫存器V1相關聯之下標編號1表示第一運算元,等等。暫存器運算元之長度為一個暫存器,其為(例如)128個位元。
具有(例如)四個位元0至3之M4欄位在(例如)位元1至3中指定元素
大小控制。元素大小控制指定向量暫存器運算元中的元素之大小。在一實例中,元素大小控制可指定位元組、半字組(例如,2個位元組)或字組(例如,4個位元組)。舉例而言,0指示位元組;1指示半字組;且2指示字組,亦稱為,全字組。若指定顛倒值,則辨識到規範例外狀況。
M5欄位為(例如)四位元欄位-位元0至3,包括(例如):零搜尋欄位(ZS,位元2),其若為一,則亦將第二運算元之每一元素與零比較。(在再一實例中,將第三運算元或另一運算元中之每一元素與零比較);及條件碼設定欄位(CC,位元3),其若為零,則不設定條件碼且條件碼保持不變。若為一,則如下文所指定來設定條件碼(作為一實例):0-若設定零搜尋位元,則比較在比不相等比較低之索引元素中偵測到兩個運算元中之零元素;1-偵測到元素失配,且V2中之元素小於V3中之元素;2-偵測到元素失配,且V2中之元素大於V3中之元素;及3-所有元素比較起來相等,且若設定零搜尋位元,則在第二運算元(或在另一實施例中,其他運算元)中未尋找到零元素。
在「向量尋找元素不相等」指令之一實施例之執行中,在一實施例中自左至右繼續進行,將第二運算元(包括於由V2及其擴充位元指定之向量暫存器中)之不帶正負號的二進位整數元素與第三運算元(包括於由V3欄位加上其擴充位元指定之向量暫存器中)之對應的不帶正負號的二進位整數元素比較。若兩個元素不相等,則將最左側不相等元素之位元組索引置放於第一運算元(在由V1及其擴充位元指定之暫存器中指明)之指定位元組(例如,位元組7)中,且將零儲存至第一運算元之所有其他位元組。
在一實例中,傳回(例如,儲存於指定位元組中)的元素之位元組索引為不相等的最左側元素之第一位元組之索引。舉例而言,若元素大小為位元組,則傳回最左側不相等元素之索引(例如,若存在16個元素0至15,且元素6不相等,則傳回位元組索引6)。類似地,若元素大小為半字組,且存在8個元素0至7,且元素三之位元組6或7不相等,則傳回位元組索引6。同樣地,若元素大小為全字組且存在四個元素0至3,且元素一之位元組4至7中之一者不相等,則傳回位元組索引4。
若將M5欄位中之條件碼設定位元設定至(例如)一,則設定條件碼以指示哪一運算元較大(若有的話)。亦即,將等效於(例如)第二運算元中之字元的二進位整數與等效於第三運算元中之不相等字元的二進位整數比較,且基於此比較設定條件碼。若元素相等,則將等於向量大小(以位元組之數目計,例如,16)之位元組索引置放於第一運算元之指定位元組(例如,位元組7)中,且將零置放於所有其他位元組位置中。若條件碼設定位元為一,則設定選定條件碼(例如,條件碼3)。
在「向量尋找元素不相等」指令僅用以尋找終止字元的此實施例中,第二運算元與第三運算元兩者包括相同資料,且因此,該比較不會產生不相等字元。
若零搜尋位元設定於M5欄位中,則亦比較第二運算元(或在其他實施例中,第三運算元或另一運算元)中之每一元素與零(亦稱為,空值、終止符、字串結尾等)的相等性。若在發現第二運算元之任一其他元素不相等之前在第二運算元中尋找到零元素,則將發現為零的元素之第一位元組之位元組索引儲存於第一運算元之指定位元組(例如,位元組7)中。將零儲存於所有其他位元組中,且設定選定條件碼(例如,條件碼零)。
在一實施例中,並行地執行元素之比較。舉例而言,若正進行比較之向量暫存器之長度為16個位元組,則並行地比較16個位元組。在其他實施例中,資料單位可不同於位元組,且並行比較之數目對應於單位大小。另外,在另一實施例中,在執行階段提供向量之方向-自左至右或自右至左。舉例而言,作為實例,指令存取暫存器、狀態控制或指示處理之方向為自左至右或自右至左之其他實體。在一實施例中,不將此方向控制編碼為指令之部分,但在執行階段將其提供至指令。
在再一實施例中,指令不包括RXB欄位。實情為,不使用擴充或以另一方式提供擴充(諸如,自指令外部之控制),或作為指令之另一欄位之部分提供擴充。
參看圖8描述關於處理「向量尋找元素不相等」指令之一實施例的其他細節。在一實例中,計算環境之處理器正執行此邏輯。
最初,作出關於是否將執行對空值(亦稱為,零元素、字串結尾、終止符等)之搜尋的判定(詢問800)。若將執行對空值之搜尋,則進行與空值字元(亦即,針對零元素)之比較(步驟802),且將結果輸出至nullidx(803)。舉例而言,將零元素之最左側位元組之索引置放於nullidx中。舉例而言,若元素大小為位元組且在位元組5中尋找到零元素,則將尋找到零元素所在的位元組之索引(例如,5)置放於nullidx中。類似地,若元素大小為半字組,且存在8個元素0至7,且元素三(亦即,位元組6至7)為零,則將6(針對位元組索引6)置放於nullidx中。同樣地,若元素大小為全字組且存在四個元素0至3,且元素一(亦即,位元組4至7)為零,則將4(針對位元組索引4)置放於nullidx中。若未尋找到空值元素,則,在一實例中,將向量之大小(例如,以位元組計;例如,16)置放於nullidx中。
另外,或若將不執行空值搜尋,則並行地執行基於比較操作而
比較A與B之複數個比較(例如,16)(步驟804)。在一實例中,A為第二運算元之內容,且B為第三運算元之內容,且比較操作係不相等。
將比較之結果儲存於變數806(取決於搜尋是自左抑或自右而被稱作左索引(cmpidxl),或右索引(cmpidxr))中。舉例而言,若比較為不相等比較,則搜尋為自左至右,且比較導致一或多個不等,將與最低不相等元素之第一位元組相關聯的索引置放於cmpidxl中。作為一實例,若元素大小為位元組且向量中存在16個元素(0至15),且在元素6中發現不等性,則將6儲存於cmpidxl中。類似地,若元素大小為半字組,且向量中存在8個元素(0至7),且在元素3中(例如,在位元組6或7處)發現不等性,則傳回元素之第一位元組的索引(位元組6)。同樣地,若元素大小為全字組且存在四個元素(0至3),且在元素1中(例如,在位元組4至7處)發現不等性,則傳回元素之第一位元組的索引(位元組4)。若不存在不相等比較,則,在一實施例中,取決於比較之方向,將cmpidxl或cmpidxr設定為等於向量之大小(例如,以位元組計;例如,16)。
此後,作出關於搜尋是自左抑或自右之判定(詢問808)。若搜尋是自左,則將變數cmpidx設定為等於cmpidxl(步驟810);否則,將cmpidx設定為等於cmpidxr(步驟812)。
在設定cmpidx之後,作出關於是否執行對空值字元之搜尋的判定(詢問814)。若不存在對空值字元之搜尋,則將變數idx設定至(例如)比較索引cmpidx(步驟816)。若搜尋到空值,則將idx設定至比較索引或空值索引(nullidx)中之最小者(步驟818)。此情形結束處理。
用於圖8之處理的區塊邏輯之一實例描繪於圖9中。在此實例中,存在兩個輸入:向量B 900及向量A 902,且在此實例中,兩個輸入具有相同資料。將兩個輸入輸入至並行地執行比較(例如,不相等)之比較邏輯904。另外,亦將一輸入(向量A)輸入至執行空值處理之零
偵測邏輯906。
將比較邏輯之輸出idxL或idxR 908以及零偵測邏輯之輸出nullidx 910輸入至結果判定邏輯912。結果判定邏輯亦將以下控制作為輸入:右/左914,其指示搜尋之方向;零偵測916,其指示是否將執行空值處理;及元素大小918,其提供每一元素之大小(例如,位元組、半字組、字組);且產生一所得索引920(resultidx),將其儲存於輸出向量922中(例如,在位元組7中)。
另外,結果判定邏輯包括條件碼處理923,其視情況輸出一條件碼924。
用於比較邏輯904之實例偽碼如下:
如所展示,取決於方向,將變數idxL或idxR初始化至向量之大小(例如,以位元組之數目計;例如,16)。接著,將向量A之每一元素與向量B之對應元素比較。在一實例中,比較為位元組比較,因此針對16個位元組(i)中之每一者進行比較。在此實例中,比較操作係不相等,且若發現不等性,則將不相等位元組之索引儲存於idxL(若自左搜尋)或idxR(若自右搜尋)中。
用於零偵測邏輯906之實例偽碼如下:
如所展示,測試向量之每一元素(j)以查看其是否等於零。若一元素等於零,則將nullidx設定為等於彼元素之索引乘以元素大小所得值。舉例而言,若元素大小為半字組(2個位元組),且在元素3中偵測到空值字元,則將3乘以2,且將nullidx設定至6,其表示位元組6。類似地,若元素大小為全字組(4個位元組),且在元素3中偵測到空值字元,則將3乘以4,且將nullidx設定至12。
同樣地,用於結果判定邏輯912之實例偽碼如下:
如所展示,若左/右控制指示左,則將cmpidx設定為等於idxL;否則,將cmpidx設定為等於idxR。另外,若零偵測指示符在作用中,則將resultidx設定為等於cmpidx或nullidx中之最小者;且若條件碼設定控制在作用中且cmpidx大於nullidx,則將條件碼設定至零。否則,若零偵測不在作用中,則將resultidx設定為等於cmpidx。
另外,若元素大小等於位元組,則將元素大小遮罩設定至11111;若元素大小等於2個位元組,則將遮罩設定至11110,且若元素大小等於4個位元組,則將遮罩設定至11100。
此後,將resultidx設定為等於resultidx與元素大小遮罩進行及(AND)運算所得值。舉例而言,若元素大小為半字組且位元組7為resultidx,則resultidx=00111 AND 11110,從而提供00110;因此,將resultidx設定為等於6(亦即,二進位之00110),其為元素之第一位元組。
另外,視情況設定條件碼。若將指令之設定條件碼控制設定為在作用中,則提供條件碼;否則,不設定條件碼。作為實例,若將控制設定為在作用中,則若resultidx=16,則將條件碼設定至3。否則,若A之resultidx小於B之resultidx,則將條件碼設定至1;否則,將條件碼設定至2。
對於128位元向量,比較邏輯僅執行(例如)16個位元組比較,而非(例如)256個比較。此情形提供對於較大向量之按比例調整。另外,可將左/右控制作為執行階段值來提供且不在指令內予以編碼。又,作為結果傳回之值為位元組位置,而非元素索引。另外,支援4個位元組比較,以及1位元組及2個位元組比較。
在再一實施例中,零搜尋並非一條件,而實情為,當執行「向量尋找元素不相等」指令時,執行零搜尋。基於或回應於執行該指令,執行零搜尋,且傳回零元素之位置(例如,位元組索引)及/或第一失配元素之位置(例如,位元組索引)。在一實施例中,針對「向量尋找元素不相等」指令所執行的比較之數目對應於向量的位元組之數目,而不管實施例。舉例而言,若正搜尋或進行比較之向量為16個位元組,則(例如)並行地執行至多16個比較。在再一實施例中,一旦尋找到失配或零元素,比較便停止。
參看圖10來描述「載入計數至區塊邊界(LCBB)」指令的一實施例。此指令提供(例如)自記憶體中之指定位址至指定記憶體邊界的資料之位元組之數目的計數(例如,其提供在不交叉指定記憶體邊界情況下載入於向量暫存器中之位元組的數目)。
在一實例中,「載入計數至區塊邊界」指令1000包括:運算碼欄位1002a(例如,位元0至7)、1002b(例如,位元40至47),其指示「載入計數至區塊邊界」操作;暫存器欄位1004(例如,位元8至11),其用以指明通用暫存器(R1);索引欄位(X2)1006(例如,位元12至15);基本欄位(B2)1008(例如,位元16至19);位移欄位(D2)1010(例如,位元20至31);及遮罩欄位(M3)1012(例如,位元32至35)。在一實例中,欄位1004至1012中之每一者為分開的且獨立於運算碼欄位。另外,在一實施例中,欄位1004至1012為分開的且獨立於彼此;然而,在其他實施例中,可組合一個以上欄位。下文描述關於此等欄位之使
用的其他資訊。
在一實例中,藉由運算碼欄位1002a指明之運算碼的選定位元(例如,前兩個位元)指定指令之長度及格式。在此特定實例中,長度為三個半字組,且格式為藉由擴充之運算碼欄位進行的暫存器及索引儲存運算。
與指令之欄位相關聯之下標編號表示該欄位適用之運算元。舉例而言,與R1相關聯之下標編號1表示第一運算元,等等。暫存器運算元之長度為一個暫存器,其為(例如)128個位元。
在一實例中,在「暫存器及索引儲存運算」指令中,將藉由X2及B2欄位指明之通用暫存器的內容添加至D2欄位之內容以形成第二運算元位址。在一實例中,將針對「載入計數至區塊邊界」指令之位移D2作為12位元不帶正負號之整數對待。第二運算元位址用以指示主記憶體中之位置;然而,在此實施例中,第二運算元位址並不用以定址資料。
在一實施例中,M3欄位指定用以用信號向CPU通知關於區塊邊界大小之碼,以計算在不交叉記憶體邊界情況下載入之可能位元組的數目。若指定保留值,則辨識規範例外狀況。實例碼及對應值如下:
在再一實例中,邊界大小並不包括於指令中,而是實情為,由執行指令之處理器來動態地判定。舉例而言,M3欄位指定邊界之類型(例如,快取行、頁面等),且基於該類型及處理器之一或多個特性
(例如,處理器之快取行大小;處理器之頁面大小;等),處理器判定邊界。作為實例,基於類型,處理器將固定大小用於邊界(例如,處理器之預先定義之固定快取行或頁面大小),或基於類型,處理器判定邊界。舉例而言,若類型為頁面邊界,則處理器在轉譯後備緩衝器(TLB)中查找開始位址,且自該開始位址判定頁面邊界。亦存在其他實例。舉例而言,可藉由指令之另一欄位來提供類型,或自指令外部之控制來提供類型。
在「載入計數至區塊邊界」指令之一實施例的執行中,將含有有可能在不交叉指定區塊邊界情況下自第二運算元位置載入之位元組之數目的不帶正負號之二進位整數(例如,64-位元)置放於在第一運算元中指定之通用暫存器中,該數目之上限為(例如)待載入之向量暫存器的大小(例如,16)。
起因於指令之執行,諸如按以下方式設定選用之條件碼:
0-運算元一為十六
1-
2-
3-運算元一小於十六
在上述實例指令中,待開始進行計數之開始位址係藉由索引暫存器值(X2)+基底暫存器值(B2)+位移(D2)來判定;然而,在其他實施例中,藉由以下各者來提供開始位址:暫存器值;指令位址+指令文字指定偏移;暫存器值+位移;或暫存器值+索引暫存器值;(僅作為一些實例)。
參看圖11來描述處理「載入計數至區塊邊界」指令之一實施例的其他細節。在一實例中,計算環境之處理器正執行此邏輯。
在一實施例中,最初建立邊界遮罩(BdyMask),該邊界遮罩用以判定與指定邊界之靠近性(步驟1100)。為了建立遮罩,在一實例中,
選取邊界大小(BdySize)1102的2之補數否定數,從而建立邊界遮罩1104(例如,BdyMask=0-BdySize)。在一實例中,藉由指令(例如,M3欄位)來提供邊界大小;或在另一實例中,如本文中所描述,由機器來判定邊界大小。
此後,計算開始位址,該開始位址指示待開始進行計數的記憶體中之位置(步驟1110)。作為實例,可藉由以下各者來提供開始位址1112:暫存器值;指令位址加上指令文字指定偏移;暫存器值加上位移;暫存器值加上索引暫存器值;或暫存器值加上索引暫存器值加上位移。在本文中提供之指令中,藉由X2欄位、B2欄位及D2欄位來提供開始位址。亦即,將藉由X2及B2指明之暫存器的內容添加至由D2指示之位移以提供開始位址。計算開始位址的上文所指示之方式僅為實例;其他實例亦係可能的。
接下來,計算結束位址,該結束位址指示待停止進行計數之位置(步驟1120)。此計算之輸入為(例如)邊界大小1102、開始位址1112、向量大小(vec_size)1114(例如,以位元組計;例如,16)及邊界遮罩1104。向量大小為所選定向量暫存器或其他暫存器之大小(例如,以位元組計,例如,16)。暫存器係(例如)可在其中載入資料之暫存器。在一實例中,如下計算結束位址1122:EndAddress=min(StartAddress+(BdySize-(StartAddress & BdyMask)),StartAddress+vec_size)。
此後,計算計數(步驟1130)。舉例而言,計數=EndAddress 1122-StartAddress 1112。在再一實例中,可自開始位址計算計數而不使用結束位址。在此實例中,計數=min(16,BdySize-(StartAddress AND BdyMask)),其中16係向量暫存器(或其他暫存器)之大小。在其他實例中,可使用其他向量大小。
在一實施例中,使用「載入計數至區塊邊界」指令以判定載入
至諸如向量暫存器之暫存器中之資料的位元組之數目。此計數接著用以判定一組字元資料(諸如,經終止之字元字串)的長度。
如所指示,在一實施例中,經加載且獲得計數所針對之暫存器係向量暫存器。在向量設施之一實例中,存在32個向量暫存器,且其他類型之暫存器可映射至該等向量暫存器之一象限。舉例而言,如圖12中所展示,若存在包括32個向量暫存器1202之暫存器檔案1200且每一暫存器之長度為128個位元,則長度為64個位元的16個浮點暫存器1204可覆疊該等向量暫存器。因此,作為一實例,當修改浮點暫存器2時,接著亦修改向量暫存器2。用於其他類型之暫存器的其他映射亦係可能的。
上文詳細描述之技術為用於藉由並行地查看字元來尋找具有終止字元之字元資料之長度且不引起無故例外狀況的技術。通常,難以並行地進行對經空值終止之字串(諸如,C樣式字串)之結尾的搜尋,此係因為不知道字串之結尾在何處。容易讀過結尾且呈現關於不應首先觸及之頁面的分頁錯誤例外狀況。先前技術一次僅載入一個字元,或具有使對字串之資料存取對準以防止頁面交叉的前置碼。一次對一個字元起作用原本就是緩慢的。添加用於對準之前置碼可損害短字串之效能且添加碼中難以預測之分支,藉此添加延時。
藉由使用將資料並行地載入至指定邊界且提供判定所載入字元之數目之方式的指令及尋找第一分隔符號之索引的指令(其並行地檢查資料),提供一種用於藉由僅一個分支指令尋找經終止之字元資料(例如,經空值終止)之長度的技術。另外,提供對字串字元之快速並行檢查,以及防止假性例外狀況。
使用以上技術之一或多項態樣提供效能改良,包括減少之執行時間。
本文中,除非另有明確註釋或由上下文註釋,否則可互換地使
用記憶體、主記憶體、儲存器與主儲存器。
作為下文進一步描述的此實施方式之部分提供關於向量設施之額外細節(包括其他指令之實例)。
如熟習此項技術者將瞭解,本發明之一或多項態樣可體現為系統、方法或電腦程式產品。因此,本發明之一或多項態樣可呈完全硬體實施例、完全軟體實施例(包括韌體、常駐軟體、微碼等)或組合軟體與硬體態樣之實施例的形式,該等實施例在本文中大體上皆可被稱作「電路」、「模組」或「系統」。此外,本發明之一或多項態樣可呈體現於一或多個電腦可讀媒體(其具有體現於其上之電腦可讀程式碼)中的電腦程式產品之形式。
可利用一或多個電腦可讀媒體之任何組合。電腦可讀媒體可為電腦可讀儲存媒體。舉例而言,電腦可讀儲存媒體可為(但不限於)電子、磁性、光學、電磁、紅外線或半導體系統、裝置或器件或前述各者之任何合適組合。電腦可讀儲存媒體之更特定實例(非詳盡清單)包括以下各者:具有一或多個電線之電連接、攜帶型電腦磁片、硬碟、隨機存取記憶體(RAM)、唯讀記憶體(ROM)、可抹除可程式化唯讀記憶體(EPROM或快閃記憶體)、光纖、攜帶型光碟-唯讀記憶體(CD-ROM)、光學儲存器件、磁性儲存器件或前述各者之任何合適組合。在此文件之情況下,電腦可讀儲存媒體可為可含有或儲存供指令執行系統、裝置或器件使用或結合指令執行系統、裝置或器件而使用之程式的任何有形媒體。
現參看圖13,在一實例中,電腦程式產品1300包括(例如)一或多個非暫時性電腦可讀儲存媒體1302以在其上儲存電腦可讀程式碼構件或邏輯1304,以提供及促進本發明之一或多項態樣。
可使用適當媒體(包括(但不限於)無線、有線、光纖纜線、RF等或前述各者之任何合適組合)傳輸體現於電腦可讀媒體上之程式碼。
可以一或多個程式設計語言之任何組合來撰寫用於進行本發明之一或多項態樣之操作的電腦程式碼,該一或多個程式設計語言包括諸如Java、Smalltalk、C++或其類似者之物件導向式程式設計語言,及諸如「C」程式設計語言、組譯器或類似程式設計語言之習知程序性程式設計語言。程式碼可完全在使用者之電腦上執行、部分地在使用者之電腦上執行、作為一獨立套裝軟體而執行、部分地在使用者之電腦上且部分地在一遠端電腦上執行,或完全在遠端電腦或伺服器上執行。在後者情形下,遠端電腦可經由任一類型之網路連接至使用者之電腦,該任一類型之網路包括區域網路(LAN)或廣域網路(WAN),或可進行至外部電腦之連接(例如,使用網際網路服務提供者經由網際網路)。
本文中參考根據本發明之實施例之方法、裝置(系統)及電腦程式產品的流程圖說明及/或方塊圖描述本發明之一或多項態樣。應理解,可由電腦程式指令來實施流程圖說明及/或方塊圖之每一區塊及該等流程圖說明及/或方塊圖中之區塊的組合。可將此等電腦程式指令提供至通用電腦、專用電腦或其他可程式化資料處理裝置之處理器以產生一機器,以使得經由該電腦或其他可程式化資料處理裝置之處理器執行之指令產生用於實施該或該等流程圖及/或方塊圖區塊中所指定之功能/動作之構件。
此等電腦程式指令亦可儲存於一電腦可讀媒體中,其可指導電腦、其他可程式化資料處理裝置或其他器件以特定方式起作用,使得儲存於該電腦可讀媒體中之指令產生一製造物件,其包括實施該或該等流程圖及/或方塊圖方塊中所指定之功能/動作之指令。
亦可將該等電腦程式指令載入至電腦、其他可程式化資料處理裝置或其他器件上以使得在該電腦、其他可程式化裝置或其他器件上執行一系列操作步驟以產生一電腦實施之處理程序,使得在該電腦或
其他可程式化裝置上執行之指令提供用於實施該或該等流程圖及/或方塊圖區塊中所指定之功能/動作之處理程序。
該等圖中之流程圖及方塊圖說明根據本發明之一或多項態樣之各種實施例的系統、方法及電腦程式產品之可能實施之架構、功能性及操作。就此而言,流程圖或方塊圖中之每一區塊可表示一模組、區段或程式碼之部分,其包含用於實施指定邏輯功能之一或多個可執行指令。亦應注意,在一些替代實施中,區塊中所註釋的功能可能不以諸圖中所註釋之次序發生。舉例而言,取決於所涉及之功能性,實際上可實質上同時執行連續展示之兩個區塊,或有時可以相反次序執行該等區塊。亦應注意,方塊圖及/或流程圖說明之每一區塊及方塊圖及/或流程圖說明中之區塊的組合可由執行指定功能或動作之基於專用硬體之系統或專用硬體與電腦指令之組合來實施。
除上述內容之外,本發明之一或多項態樣亦可由供應客戶環境之管理的服務提供者來提供、供應、部署、管理、服務等。舉例而言,服務提供者可為一或多個客戶產生、維持、支援等執行本發明之一或多項態樣的電腦程式碼及/或電腦基礎結構。作為回報,作為實例,服務提供者可在訂用及/或收費協議下自客戶收取付款。或者或另外,服務提供者可自廣告內容銷售至一或多個第三方而收取付款。
在本發明之一態樣中,可部署用於執行本發明之一或多項態樣的應用程式。作為一實例,應用程式之部署包含提供可操作以執行本發明之一或多項態樣的電腦基礎結構。
作為本發明之再一態樣,可部署一計算基礎結構,其包含將電腦可讀程式碼整合至計算系統內,其中與該計算系統組合之程式碼能夠執行本發明之一或多項態樣。
作為本發明之又一態樣,可提供用於整合計算基礎結構之處理程序,其包含將電腦可讀程式碼整合至電腦系統中。電腦系統包含一
電腦可讀媒體,其中電腦媒體包含本發明之一或多項態樣。與該電腦系統組合之程式碼能夠執行本發明之一或多項態樣。
儘管上文描述了各種實施例,但此等實施例僅為實例。舉例而言,其他架構之計算環境可併有及使用本發明之一或多項態樣。另外,可使用其他大小之向量或其他暫存器,且在不脫離本發明之精神的情況下,可作出對指令之改變。另外,可使用其他指令,諸如(但不限於)「向量尋找元素相等」指令,該指令用以判定經空值終止之字元資料之長度。再另外,亦可使用本發明之一或多項態樣來判定不同於經空值終止之字元資料的資料之長度。
另外,其他類型之計算環境可受益於本發明之一或多項態樣。作為一實例,適合於儲存及/或執行程式碼之資料處理系統為可使用的,其包括直接或經由系統匯流排間接耦接至記憶體元件之至少兩個處理器。該等記憶體元件包括(例如)在程式碼之實際執行期間使用之本端記憶體、大容量儲存器及快取記憶體,快取記憶體提供至少一些程式碼之臨時儲存以便減少在執行期間必須自大容量儲存器擷取程式碼的次數。
輸入/輸出或I/O器件(包括(但不限於)鍵盤、顯示器、指標器件、DASD、磁帶、CD、DVD、隨身碟及其他記憶體媒體等)可直接或經由介入之I/O控制器而耦接至系統。網路配接器亦可耦接至系統以使得資料處理系統能夠經由介入之私有或公用網路而變得耦接至其他資料處理系統或遠端印表機或儲存器件。數據機、電纜數據機及乙太網路卡僅為可用類型之網路配接器中的少數幾種。
參看圖14,描繪實施本發明之一或多項態樣的主機電腦系統5000之代表性組件。代表性主機電腦5000包含與電腦記憶體(亦即,中央儲存器)5002通信之一或多個CPU 5001,以及用於與其他電腦或SAN及其類似者通信的至儲存媒體器件5011及網路5010之I/O介面。
CPU 5001符合具有經建構之指令集及經建構之功能性的架構。CPU 5001可具有動態位址轉譯(DAT)5003,以用於將程式位址(虛擬位址)變換成記憶體之真實位址。DAT通常包括一轉譯後備緩衝器(TLB)5007以用於快取轉譯,使得對電腦記憶體5002之區塊的稍後存取不需要延遲位址轉譯。通常,快取記憶體5009用於電腦記憶體5002與處理器5001之間。快取記憶體5009可為階層式的,其具有可用於一個以上CPU之大快取記憶體及在大快取記憶體與每一CPU之間的較小的較快(較低層級)快取記憶體。在一些實施中,將較低層級快取記憶體分裂以提供用於指令提取及資料存取的單獨的低層級快取記憶體。在一實施例中,由指令提取單元5004經由快取記憶體5009自記憶體5002提取指令。在指令解碼單元5006中解碼指令,且將指令分派(在一些實施例中,藉由其他指令)給一或多個指令執行單元5008。通常使用若干個執行單元5008,例如,算術執行單元、浮點執行單元及分支指令執行單元。由執行單元執行指令,從而按需要自指令指定之暫存器或記憶體存取運算元。若將自記憶體5002存取(載入或儲存)運算元,則載入/儲存單元5005通常在正被執行的指令之控制下處置存取。可在硬體電路中或在內部微碼(韌體)中或由兩者之組合來執行指令。
如所註釋,電腦系統包括在本端(或主)儲存器中之資訊,以及定址、保護及參考及改變記錄。定址之一些態樣包括位址之格式、位址空間之概念、位址之各種類型,及將一類型之位址轉譯至另一類型之位址的方式。主儲存器中之一些儲存器包括永久指派之儲存位置。主儲存器為系統提供資料之可直接定址之快速存取儲存。在可處理資料及程式兩者之前將資料及程式兩者載入至主儲存器中(自輸入器件)。
主儲存器可包括一或多個較小的快速存取緩衝儲存器(有時稱為快取記憶體)。快取記憶體通常與CPU或I/O處理器實體相關聯。藉由
程式大體上不可觀測到相異儲存媒體之實體構造及用途之效應(除了對效能之效應外)。
可維持針對指令及針對資料運算元的單獨的快取記憶體。將快取記憶體內之資訊以相連位元組維持於被稱為快取區塊或快取行(或簡稱為行)之整體邊界上。一模型可提供「擷取快取記憶體屬性(EXTRACT CACHE ATTRIBUTE)」指令,其傳回以位元組計的快取行之大小。一模型亦可提供「預先提取資料(PREFETCH DATA)」及「預先提取資料相對長度(PREFETCH DATA RELATIVE LONG)」指令,其實現儲存器至資料或指令快取記憶體中之預先提取或資料自快取記憶體之釋放。
將儲存器視為長的水平位元字串。對於多數操作,對儲存器之存取以自左至右序列進行。將該位元字串再分成八個位元之單元。八-位元單元被稱為位元組,其為所有資訊格式之基本建置區塊。儲存器中之每一位元組位置藉由一唯一非負整數來識別,該唯一非負整數為彼位元組位置之位址或簡稱為位元組位址。鄰近位元組位置具有連續位址,其以左側的0開始且以自左至右序列進行。位址為不帶正負號之二進位整數,且為24個、31個或64個位元。
在儲存器與CPU或通道子系統之間一次一位元組或一位元組群組地傳輸資訊。除非另有指定,否則,在(例如)z/Architecture中,儲存器中之一位元組群組由該群組之最左側位元組來定址。藉由待執行之操作隱含或明確指定該群組中的位元組之數目。當在CPU操作中使用時,一位元組群組被稱為一欄位。在每一位元組群組內,在(例如)z/Architecture中,以自左至右序列對位元編號。在z/Architecture中,最左側位元有時被稱作「高階」位元,且最右側位元有時被稱作「低階」位元。然而,位元編號並非儲存位址。可僅定址位元組。為了對儲存器中的位元組之個別位元操作,存取整個位元組。將位元組
中之位元自左至右編號為0至7(在(例如)z/Architecture中)。對於24-位元位址,可將位址中之位元編號為8至31或40至63,或對於31-位元位址,可將位址中之位元編號為1至31或33至63;對於64-位元位址,可將位址中之位元編號為0至63。在多個位元組之任一其他固定長度之格式內,自0開始對構成該格式之位元連續地編號。為了錯誤偵測之目的,且較佳地為了校正之目的,可將一或多個檢查位元與每一位元組或與一位元組群組一起傳輸。由機器自動地產生此等檢查位元,且不可直接由程式來控制此等檢查位元。以位元組之數目來表達儲存容量。當藉由指令之操作碼隱含儲存運算元欄位之長度時,認為該欄位具有固定長度,其可為一個、兩個、四個、八個或十六個位元組。對於一些指令,可隱含更大欄位。當並非隱含而是明確敍述儲存運算元欄位之長度時,認為該欄位具有可變長度。可變長度運算元之長度可以一個位元組之增量變化(或藉由一些指令,以兩個位元組之倍數或其他倍數之增量變化)。當將資訊置放於儲存器中時,替換包括於指明之欄位中的僅彼等位元組位置之內容,即使至儲存器之實體路徑之寬度可能大於正儲存的欄位之長度亦如此。
某些資訊單元將在儲存器中之整體邊界上。對於一資訊單元,當其儲存位址為該單元之長度(以位元組計)的倍數時,將一邊界稱為整體的。對整體邊界上的2個、4個、8個及16個位元組之欄位給予特殊名稱。半字組為在兩-位元組邊界上的兩個連續位元組之群組,且為指令之基本建置區塊。字組為四-位元組邊界上的四個連續位元組之群組。雙字組為八-位元組邊界上的八個連續位元組之群組。四倍字組為16-位元組邊界上的16個連續位元組之群組。當儲存器位址指明半字組、字組、雙字組及四倍字組時,位址之二進位表示分別含有一個、兩個、三個或四個最右側零位元。指令將在兩-位元組整體邊界上。多數指令之儲存運算元不具有邊界對準要求。
在實施針對指令及資料運算元的單獨的快取記憶體之器件上,若程式儲存至快取行中(隨後自該快取行提取指令),則可經歷顯著延遲,而不管儲存器是否更改隨後提取之指令。
在一實施例中,可藉由軟體(有時指代經授權內部碼、韌體、微碼、毫碼、微微碼(pico-code)及其類似者,前述各者中之任一者將與本發明之一或多項態樣一致)來實踐本發明。參看圖14,體現本發明之一或多項態樣的軟體程式碼可由主機系統5000之處理器5001自長期儲存媒體器件5011(諸如,CD-ROM磁碟機、磁帶機或硬碟機)存取。軟體程式碼可體現於多種已知媒體中之任一者上,以用於供資料處理系統(諸如,磁片、硬碟機或CD-ROM)使用。程式碼可散佈於此等媒體上,或可散佈至使用者,經由網路5010自一電腦系統之電腦記憶體5002或儲存器散佈至其他電腦系統,以供此等其他系統之使用者使用。
軟體程式碼包括一作業系統,其控制各種電腦組件及一或多個應用程式之功能及互動。通常將程式碼自儲存媒體器件5011分頁至相對較高速電腦儲存器5002,在該相對較高速電腦儲存器5002處,程式碼可用於由處理器5001處理。用於在記憶體中、在實體媒體上體現軟體程式碼及/或經由網路散佈軟體程式碼之技術及方法係熟知的,且在本文中將不進一步加以論述。當在有形媒體(包括(但不限於)電子記憶體模組(RAM)、快閃記憶體、光碟(CD)、DVD、磁帶及其類似者)上建立及儲存程式碼時,程式碼常常被稱作「電腦程式產品」。電腦程式產品媒體通常可由較佳電腦系統中之處理電路來讀取,以用於由處理電路執行。
圖15說明可實踐本發明之一或多項態樣的一代表性工作站或伺服器硬體系統。圖15之系統5020包含一代表性基礎電腦系統5021(諸如,個人電腦、工作站或伺服器),包括選用之周邊器件。基礎電腦
系統5021包括一或多個處理器5026,及一匯流排,該匯流排用以根據已知技術連接處理器5026與系統5021之其他組件及實現處理器5026與系統5021之其他組件之間的通信。匯流排將處理器5026連接至記憶體5025及長期儲存器5027,長期儲存器5027可包括(例如)硬碟機(包括(例如)磁性媒體、CD、DVD及快閃記憶體中之任一者)或磁帶機。系統5021可能亦包括一使用者介面配接器,使用者介面配接器經由匯流排將微處理器5026連接至一或多個介面器件(諸如,鍵盤5024、滑鼠5023、印表機/掃描器5030及/或其他介面器件),該等介面器件可為諸如觸敏式螢幕、數位化鍵入板(entry pad)等之任何使用者介面器件。匯流排亦經由顯示器配接器將諸如LCD螢幕或監視器之顯示器件5022連接至微處理器5026。
系統5021可借助於能夠與網路5029通信(5028)之網路配接器與其他電腦或電腦網路通信。實例網路配接器為通信頻道、符記環、乙太網路或數據機。或者,系統5021可使用諸如蜂巢式數位封包資料(CDPD)卡之無線介面通信。系統5021可與區域網路(LAN)或廣域網路(WAN)中之此等其他電腦相關聯,或系統5021可為具有另一電腦之用戶端/伺服器配置中的用戶端等。所有此等組態以及適當通信硬體及軟體為此項技術中已知的。
圖16說明可實踐本發明之一或多項態樣的一資料處理網路5040。資料處理網路5040可包括複數個個別網路(諸如,無線網路及有線網路),該等網路中之每一者可包括複數個個別工作站5041、5042、5043、5044。另外,如熟習此項技術者將瞭解,可包括一或多個LAN,其中LAN可包含耦接至主機處理器之複數個智慧型工作站。
仍參看圖16,網路亦可包括大型電腦或伺服器,諸如,閘道器電腦(用戶端伺服器5046)或應用程式伺服器(遠端伺服器5048,其可存取資料儲存庫且亦可自工作站5045直接存取)。閘道器電腦5046充當
至每一個別網路之入口點。當將一網路連接協定連接至另一網路連接協定時,需要閘道器。閘道器5046可較佳借助於通信鏈路耦接至另一網路(例如,網際網路5047)。亦可使用通信鏈路將閘道器5046直接耦接至一或多個工作站5041、5042、5043、5044。可利用可購自International Business Machines Corporation之IBM eServerTM System z伺服器來實施閘道器電腦。
同時參看圖15及圖16,可體現本發明之一或多項態樣的軟體程式碼可由系統5020之處理器5026自長期儲存媒體5027(諸如,CD-ROM磁碟機或硬碟機)存取。軟體程式碼可體現於多種已知媒體中之任一者上,以用於供資料處理系統(諸如,磁片、硬碟機或CD-ROM)使用。程式碼可散佈於此等媒體上,或可散佈至使用者5050、5051,經由網路自一電腦系統之記憶體或儲存器散佈至其他電腦系統,以供此等其他系統之使用者使用。
或者,程式碼可體現於記憶體5025中,且由處理器5026使用處理器匯流排來存取。此程式碼包括一作業系統,其控制各種電腦組件及一或多個應用程式5032之功能及互動。通常將程式碼自儲存媒體5027分頁至高速記憶體5025,在高速記憶體5025處,程式碼可用於由處理器5026處理。用於在記憶體中、在實體媒體上體現軟體程式碼及/或經由網路散佈軟體程式碼之技術及方法係熟知的且在本文中將不進一步加以論述。當在有形媒體(包括(但不限於)電子記憶體模組(RAM)、快閃記憶體、光碟(CD)、DVD、磁帶及其類似者)上建立及儲存程式碼時,程式碼常常被稱作「電腦程式產品」。電腦程式產品媒體通常可由較佳電腦系統中之處理電路來讀取,以用於由處理電路執行。
最易於可用於處理器之快取記憶體(通常比處理器之其他快取記憶體快且小)為最低(L1或第一層級)快取記憶體,且主儲存器(主記憶
體)為最高層級快取記憶體(若存在3個層級,則為L3)。常常將最低層級快取記憶體劃分成保持待執行之機器指令之指令快取記憶體(I-快取記憶體)及保持資料運算元之資料快取記憶體(D-快取記憶體)。
參看圖17,針對處理器5026描繪一例示性處理器實施例。通常,使用快取記憶體5053之一或多個層級緩衝記憶體區塊以便改良處理器效能。快取記憶體5053為保持有可能使用的記憶體資料之快取行的高速緩衝器。典型的快取行為64個、128個或256個位元組之記憶體資料。除用於對資料進行快取外,單獨的快取記憶體亦常常用於對指令進行快取。常常藉由此項技術中熟知之各種「窺探」演算法來提供快取一致性(記憶體及快取記憶體中的行之複製之同步)。處理器系統之主記憶體儲存器5025常常被稱作快取記憶體。在具有4個層級之快取記憶體5053的處理器系統中,主儲存器5025有時被稱作第5層級(L5)快取記憶體,此係因為其通常較快且僅保持可用於電腦系統的非揮發性儲存器(DASD、磁帶等)之一部分。主儲存器5025對由作業系統頁入及頁出主儲存器5025之資料頁「進行快取」。
程式計數器(指令計數器)5061追蹤待執行的當前指令之位址。z/Architecture處理器中之程式計數器為64個位元,且可經截斷至31或24個位元以支援先前定址限制。程式計數器通常體現於電腦之程式狀態字組(PSW)中,使得程式計數器在內容脈絡切換期間持續。因此,具有程式計數器值的進行中程式可由(例如)作業系統來中斷(自程式環境至作業系統環境之內容脈絡切換)。在程式並非作用中的時,程式之PSW維持程式計數器值,且在作業系統正執行時,使用作業系統之程式計數器(在PSW中)。通常,以等於當前指令之位元組之數目的量來使程式計數器遞增。精簡指令集計算(RISC)指令之長度通常為固定的,而複雜指令集計算(CISC)指令之長度通常為可變的。IBM z/Architecture之指令為長度為2個、4個或6個位元組的CISC指令。舉
例而言,藉由內容脈絡切換操作或分支指令之分支選取操作來修改程式計數器5061。在內容脈絡切換操作中,將當前程式計數器值連同關於正執行之程式的其他狀態資訊(諸如,條件碼)一起保存於程式狀態字組中,且載入新程式計數器值從而指向待執行的新程式模組之指令。執行分支選取操作以便藉由將分支指令之結果載入至程式計數器5061中而准許程式作出決策或在程式內循環。
通常,指令提取單元5055用以代表處理器5026提取指令。提取單元提取「接下來的依序指令」、分支選取指令之目標指令或程式之第一指令(在內容脈絡切換之後)。現代指令提取單元常常使用預先提取技術以基於可能使用經預先提取之指令之可能性而推測性地預先提取指令。舉例而言,提取單元可提取包括下一個依序指令的指令之16個位元組及其他依序指令之額外位元組。
接著由處理器5026執行所提取之指令。在一實施例中,將所提取之指令傳遞至提取單元之分派單元5056。分派單元解碼指令且將關於經解碼之指令的資訊轉遞至適當單元5057、5058、5060。執行單元5057通常將自指令提取單元5055接收關於經解碼之算術指令的資訊,且將根據指令之運算碼對運算元執行算術運算。較佳自記憶體5025、經建構之暫存器5059或自正執行的指令之立即欄位,將運算元提供至執行單元5057。當儲存執行之結果時,將執行之結果儲存於記憶體5025、暫存器5059中或其他機器硬體(諸如,控制暫存器、PSW暫存器及其類似者)中。
處理器5026通常具有用於執行指令之功能的一或多個單元5057、5058、5060。參看圖18A,執行單元5057可借助於介接邏輯5071與經建構之通用暫存器5059、解碼/分派單元5056、載入儲存單元5060及其他處理器單元5065通信。執行單元5057可使用若干個暫存器電路5067、5068、5069以保持算術邏輯單元(ALU)5066將進行運算
的資訊。ALU執行算術運算(諸如,加法、減法、乘法及除法)以及邏輯函數(諸如,「及」(and)、「或」(or)及「互斥或」(XOR)、旋轉及移位)。較佳地,ALU支援相依於設計之專業化運算。其他電路可提供其他經建構之設施5072,包括(例如)條件碼及恢復支援邏輯。通常,將ALU運算之結果保持於輸出暫存器電路5070中,輸出暫存器電路5070可將結果轉遞至多種其他處理功能。存在處理器單元之許多配置,本發明描述僅意欲提供對一實施例之代表性理解。
「加法」指令(例如)將在具有算術及邏輯功能性之執行單元5057中執行,而浮點指令(例如)將在具有專業化之浮點能力之浮點執行中執行。較佳地,執行單元藉由對藉由指令識別之運算元執行運算碼定義之功能而對運算元進行運算。舉例而言,「加法」指令可由執行單元5057對在藉由指令之暫存器欄位識別之兩個暫存器5059中發現的運算元執行。
執行單元5057對兩個運算元執行算術加法,且將結果儲存於第三運算元中,其中第三運算元可為第三暫存器或兩個源暫存器中之一者。執行單元較佳利用算術邏輯單元(ALU)5066,算術邏輯單元(ALU)5066能夠執行多種邏輯函數(諸如,移位、旋轉、「及」(And)、「或」(Or)及「互斥或」(XOR))以及多種代數函數(包括加法、減法、乘法、除法中之任一者)。一些ALU 5066經設計以用於純量運算且一些ALU 5066經設計以用於浮點運算。取決於架構,資料可為大端序(Big Endian)(其中最低有效位元組處於最高位元組位址)或小端序(Little Endian)(其中最低有效位元組處於最低位元組位址)。IBM z/Architecture為大端序。取決於架構,帶正負號之欄位可為正負號及量值(1的補數或2的補數)。2的補數係有利的,此在於:ALU並不需要設計減法能力,此係由於在ALU中,2的補數中之負值或正值僅需要加法。通常以速記法來描述數字,其中12位元欄位定義4,096位元
組區塊之位址,且通常描述為(例如)4 Kbyte(千位元組)區塊。
參看圖18B,用於執行分支指令之分支指令資訊通常發送至分支單元5058,分支單元5058常常使用分支預測演算法(諸如,分支歷史表5082)以在其他條件運算完成之前預測分支之結果。將提取當前分支指令之目標,且在條件運算完成之前推測性地執行當前分支指令之目標。當完成條件運算時,基於條件運算之條件及所推測之結果,完成或放棄推測性執行之分支指令。典型分支指令可測試條件碼,且在條件碼滿足分支指令之分支要求的情況下分支至目標位址,可基於(例如)在暫存器欄位或指令之立即欄位中發現之若干個數字(包括一)而計算目標位址。分支單元5058可使用具有複數個輸入暫存器電路5075、5076、5077及一輸出暫存器電路5080之一ALU 5074。舉例而言,分支單元5058可與通用暫存器5059、解碼分派單元5056或其他電路5073通信。
一指令群組之執行可因包括(例如)以下各者之多種原因而被中斷:由作業系統起始之內容脈絡切換、引起內容脈絡切換之程式例外狀況或錯誤、引起內容脈絡切換之I/O中斷信號,或複數個程式之多執行緒活動(在多執行緒化環境中)。較佳地,內容脈絡切換動作保存關於當前正執行之程式的狀態資訊,且接著載入關於正被調用之另一程式的狀態資訊。舉例而言,可將狀態資訊保存於硬體暫存器中或記憶體中。狀態資訊較佳包含指向待執行之下一個指令之程式計數器值、條件碼、記憶體轉譯資訊及經建構之暫存器內容。內容脈絡切換活動可單獨或組合地藉由硬體電路、應用程式、作業系統程式或韌體程式碼(微碼、微微碼或經授權內部碼(LIC))來訓練。
處理器根據指令定義之方法來存取運算元。指令可使用指令之一部分的值來提供立即運算元,可提供明確指向通用暫存器或專用暫存器(例如,浮點暫存器)之一或多個暫存器欄位。指令可利用藉由運
算碼欄位識別為運算元的隱含之暫存器。指令可將記憶體位置用於運算元。運算元之記憶體位置可由暫存器、立即欄位或暫存器與立即欄位之組合來提供,如藉由z/Architecture長位移設施(long displacement facility)舉例說明,其中指令定義(例如)相加在一起以提供運算元在記憶體中之位置的一基底暫存器、一索引暫存器及一立即欄位(位移欄位)。除非另有指示,否則本文中之位置通常隱含主記憶體(主儲存器)中之位置。
參看圖18C,處理器使用載入/儲存單元5060來存取儲存器。載入/儲存單元5060可藉由獲得目標運算元在記憶體5053中之位址且在暫存器5059或另一記憶體5053之位置中載入運算元來執行載入操作,或可藉由獲得目標運算元在記憶體5053中之位址且將自暫存器5059或另一記憶體5053之位置獲得的資料儲存於記憶體5053中之目標運算元位置中來執行儲存操作。載入/儲存單元5060可為推測性的,且可以相對於指令序列而言無序之序列存取記憶體,然而,載入/儲存單元5060對於程式維持按次序執行指令的顯現。載入/儲存單元5060可與通用暫存器5059、解碼/分派單元5056、快取記憶體/記憶體介面5053或其他元件5083通信,且包含各種暫存器電路、ALU 5085及控制邏輯5090以計算儲存位址且提供管線定序以保持操作按次序。一些操作可能為無序的,但載入/儲存單元提供使得無序操作對於程式顯現為已按次序執行之功能性,如此項技術中所熟知的。
較佳地,應用程式「看見」之位址常常被稱作虛擬位址。虛擬位址有時被稱作「邏輯位址」及「有效位址」。此等虛擬位址為虛擬的在於:其藉由多種動態位址轉譯(DAT)技術中之一者而重新導向至實體記憶體位置,該等DAT技術包括(但不限於)僅對虛擬位址加偏移值作為首碼、經由一或多個轉譯表轉譯虛擬位址,轉譯表較佳單獨或組合地包含至少一段表及一頁表,較佳地,段表具有指向頁表之項
目。在z/Architecture中,提供轉譯階層,包括一區第一表、一區第二表、一區第三表、一段表及一選用之頁表。常常藉由利用轉譯後備緩衝器(TLB)(其包含將虛擬位址映射至相關聯之實體記憶體位置的項目)來改良位址轉譯之效能。當DAT使用轉譯表轉譯虛擬位址時,建立該等項目。虛擬位址之隨後使用可接著利用快速TLB之項目,而非緩慢依序轉譯表存取。可藉由包括最近最少使用(LRU)的多種替換演算法來管理TLB內容。
在處理器為多處理器系統之處理器的狀況下,每一處理器具有保持諸如I/O、快取記憶體、TLB及記憶體之共用資源互鎖以達成一致性的責任。通常,在維持快取一致性中將利用「窺探」技術。在窺探環境中,可將每一快取行標記為處於以下狀態中之任一者以便促進共用:共用狀態、互斥狀態、改變之狀態、無效狀態及其類似者。
I/O單元5054(圖17)為處理器提供用於附接至周邊器件(例如,包括磁帶、光碟、印表機、顯示器及網路)之構件。I/O單元常常由軟體驅動程式呈現至電腦程式。在大型電腦(諸如,來自IBM®之System z)中,通道配接器及開放系統配接器為大型電腦之I/O單元,該等I/O單元提供作業系統與周邊器件之間的通信。
另外,其他類型之計算環境可受益於本發明之一或多項態樣。作為一實例,環境可包括一模擬器(例如,軟體或其他模擬機制),在該模擬器中模擬一特定架構(包括(例如)指令執行、經建構之功能(諸如,位址轉譯),及經建構之暫存器)或其一子集(例如,在具有一處理器及記憶體之原生電腦系統上)。在此環境中,模擬器之一或多個模擬函式可實施本發明之一或多項態樣,即使執行該模擬器之電腦可具有不同於正模擬之能力的架構亦如此。作為一實例,在模擬模式下,解碼特定指令或正模擬之操作,且建置一適當模擬函式以實施個別指令或操作。
在一模擬環境中,主機電腦包括(例如):一記憶體,其儲存指令及資料;一指令提取單元,其自記憶體提取指令且視情況提供所提取之指令的本端緩衝;一指令解碼單元,其接收所提取之指令且判定已提取的指令之類型;及一指令執行單元,其執行該等指令。執行可包括:將資料自記憶體載入至暫存器中;將資料自暫存器儲存回至記憶體;或執行某一類型之算術或邏輯運算(如由解碼單元判定)。在一實例中,以軟體來實施每一單元。舉例而言,將正由該等單元執行之操作實施為模擬器軟體內之一或多個副常式。
更明確而言,在大型電腦中,經建構之機器指令常常借助於編譯應用程式而由程式設計師(現今通常為「C」程式設計師)使用。儲存於儲存媒體中之此等指令可原生地在z/Architecture IBM®伺服器中或者在執行其他架構之機器中執行。可在現有及未來IBM®大型電腦伺服器中及在IBM®之其他機器(例如,Power Systems伺服器及System x®伺服器)上模擬該等指令。可於在使用由IBM®、Intel®、AMDTM及其他者製造之硬體的廣泛多種機器上執行Linux的機器中執行該等指令。除了在z/Architecture下在彼硬體上執行外,亦可使用Linux,以及使用由Hercules、UMX或FSI(Fundamental Software,Inc)進行之模擬的機器,其中執行大體上處於模擬模式下。在模擬模式下,由原生處理器執行模擬軟體以模擬經模擬之處理器的架構。
原生處理器通常執行包含韌體或原生作業系統之模擬軟體以執行經模擬之處理器的模擬。模擬軟體負責提取及執行經模擬之處理器架構的指令。模擬軟體維持經模擬之程式計數器以追蹤指令邊界。模擬軟體可一次提取一或多個經模擬之機器指令,且將該一或多個經模擬之機器指令轉換至一對應的原生機器指令群組,以用於由原生處理器執行。可對此等經轉換之指令進行快取,使得可實現較快速轉換。儘管如此,模擬軟體仍將維持經模擬之處理器架構的架構規則以便確
保作業系統及針對經模擬之處理器撰寫的應用程式正確地操作。此外,模擬軟體將提供藉由經模擬之處理器架構識別的資源(包括(但不限於)控制暫存器、通用暫存器、浮點暫存器、包括(例如)段表及頁表之動態位址轉譯功能、中斷機制、內容脈絡切換機制、當日時間(TOD)時鐘及至I/O子系統的經建構之介面),使得作業系統或經設計以在經模擬之處理器上執行的應用程式可在具有模擬軟體之原生處理器上執行。
解碼正進行模擬之特定指令,且呼叫副常式以執行個別指令之功能。模擬經模擬之處理器之功能的模擬軟體功能係(例如)按以下各者來實施:「C」副常式或驅動程式,或在理解較佳實施例之描述之後將在熟習此項技術者之技術內的提供用於特定硬體之驅動程式的某一其他方法。包括(但不限於)以下各者之各種軟體及硬體模擬專利說明達成針對不同機器建構的指令格式用於可用於熟習此項技術者之目標機器的模擬的多種已知方式:Beausoleil等人之題為「Multiprocessor for Hardware Emulation」的美國專利證書第5,551,013號;及Scalzi等人之題為「Preprocessing of Stored Target Routines for Emulating Incompatible Instructions on a Target Processor」的美國專利證書第6,009,261號;及Davidian等人之題為「Decoding Guest Instruction to Directly Access Emulation Routines that Emulate the Guest Instructions」的美國專利證書第5,574,873號;及Gorishek等人之題為「Symmetrical Multiprocessing Bus and Chipset Used for Coprocessor Support Allowing Non-Native Code to Run in a System」的美國專利證書第6,308,255號;及Lethin等人之題為「Dynamic Optimizing Object Code Translator for Architecture Emulation and Dynamic Optimizing Object Code Translation Method」的美國專利證書第6,463,582號;及Eric Traut之題為「Method for
Emulating Guest Instructions on a Host Computer Through Dynamic Recompilation of Host Instructions」的美國專利證書第5,790,825號(前述專利證書中之每一者在此以其全文引用的方式併入本文中);及許多其他專利證書。
在圖19中,提供經模擬之主機電腦系統5092之一實例,其模擬主機架構之主機電腦系統5000'。在經模擬之主機電腦系統5092中,主機處理器(CPU)5091為經模擬之主機處理器(或虛擬主機處理器),且包含一模擬處理器5093,其具有不同於主機電腦5000'之處理器5091之原生指令集架構的原生指令集架構。經模擬之主機電腦系統5092具有模擬處理器5093可存取之記憶體5094。在實例實施例中,將記憶體5094分割成一主機電腦記憶體5096部分及一模擬常式5097部分。主機電腦記憶體5096可用於根據主機電腦架構的經模擬之主機電腦5092之程式。模擬處理器5093執行不同於經模擬之處理器5091之原生指令的架構之經建構之指令集的原生指令,該等原生指令係自模擬常式記憶體5097獲得,且可藉由使用在序列及存取/解碼常式中獲得之一或多個指令自主機電腦記憶體5096中之程式存取主機指令以用於執行,序列及存取/解碼常式可解碼所存取之主機指令以判定用於模擬所存取之主機指令之功能的原生指令執行常式。舉例而言,針對主機電腦系統5000'之架構定義之其他設施可藉由經建構之設施常式來模擬,包括諸如通用暫存器、控制暫存器、動態位址轉譯及I/O子系統支援及處理器快取記憶體之設施。模擬常式亦可利用可用於模擬處理器5093中之功能(諸如,通用暫存器及虛擬位址之動態轉譯)以改良模擬常式之效能。亦可提供特殊硬體及卸載引擎以輔助處理器5093模擬主機電腦5000'之功能。
本文中所使用之術語僅用於描述特定實施例之目的,且並不意欲為本發明之限制。如本文中所使用,除非上下文另有清晰指示,否
則單數形式「一」及「該」意欲亦包括複數形式。應進一步理解,當術語「包含」用於此說明書中時,其指定所敍述特徵、整數、步驟、操作、元件及/或組件之存在,但並不排除一或多個其他特徵、整數、步驟、操作、元件、組件及/或其群組之存在或添加。
以下申請專利範圍中之所有構件或步驟加功能元件之對應結構、材料、動作及等效物(若有的話)意欲包括用於結合如特別主張之其他所主張元件執行功能的任何結構、材料或動作。已出於說明及描述之目的呈現本發明之一或多項態樣之描述,但該描述並不意欲為詳盡的或限於所揭示之形式下的本發明。在不脫離本發明之範疇及精神之情況下,許多修改及變化對於一般熟習此項技術者將為顯而易見的。選擇並描述了實施例以便最佳地解釋本發明之原理及實務應用,且使其他一般熟習此項技術者能夠針對具有如適合於所預期之特定用途的各種修改之各種實施例來理解本發明。
向量字串設施
⋮
指令
除非另有指定,否則所有運算元為向量暫存器運算元。組譯器語法中之「V」指明向量運算元。
自左至右進行,比較第二運算元之每個不帶正負號之二進位整數元素與第三運算元之每個不帶正負號之二進位整數元素的相等性,且若在M5欄位中設定了零搜尋旗標,則視情況與零比較。
若M5欄位中之結果類型(RT)旗標為零,則對於匹配第三運算元中之任一元素或視情況匹配零的第二運算元中之每一元素,將第一運算元中對應的元素之位元位置設定至一,否則,將其設定至零。
若M5欄位中之結果類型(RT)旗標為一,則將匹配第三運算元中之一元素或零的第二運算元中之最左側元素的位元組索引儲存於第一運算元之位元組七中。
每一指令具有擴充之助憶符號區段,其描述推薦的擴充之助憶符號及其對應的機器組譯器語法。
程式設計註釋:對於視情況設定條件碼之所有指令,若設定條件碼,則效能可能降級。
若M5欄位中之結果類型(RT)旗標為一且未發現位元組相等,或為零(若設定了零搜尋旗標),則將與向量中的位元組之數目相等的索引儲存於第一運算元之位元組七中。
M4欄位指定元素大小控制(ES)。ES控制指定向量暫存器運算元中的元素之大小。若指定顛倒值,則辨識到規範例外狀況。
0-位元組
1-半字組
2-字組
3至15-保留
M5欄位具有以下格式:
如下定義M5欄位之位元:
. 結果類型(RT): 若為零,則每一所得元素為關於彼元素的所有範圍比較之遮罩。若為一,則將位元組索引儲存至第一運算元之位元組七中,且將零儲存於所有其他元素中。
. 零搜尋(ZS): 若為一,則亦將第二運算元之每一元素與零比較。
. 條件碼設定(CC): 若為零,則不設定條件碼且條件碼保持不變。若為一,則如以下段中所指定來設定條件碼。
若出現以下各者中之任一者,則辨識規範例外狀況且不採取其他行動:
1. M4欄位含有自3至15之值。
2. M5欄位之位元0並非零。
若CC旗標為零,則碼保持不變。
若CC旗標為一,則如下來設定碼:
0 若設定了ZS-位元,則在第二運算元中比零低之索引元素中不存在匹配。
1 第二運算元之一些元素匹配第三運算元中之至少一元素。
2 第二運算元之所有元素匹配第三運算元中之至少一元素。
3 第二運算元中無元素匹配第三運算元中之任何元素。
1 具有DXC FE之資料,向量暫存器
. 在未安裝向量擴充設施之情況下的操作
. 規範(保留之ES值)
. 異動約束
自左至右進行,將第二運算元之不帶正負號之二進位整數元素與第三運算元之對應的不帶正負號之二進位整數元素比較。若兩個元素相等,則將最左側相等元素之第一位元組之位元組索引置放於第一運算元之位元組七中。將零儲存於第一運算元之剩餘位元組中。若未發現位元組相等,或若未發現位元組為零(若設定了零比較),則將與向量中的位元組之數目相等的索引儲存於第一運算元之位元組七中。將零儲存於剩餘位元組中。
若在M5欄位中設定了零搜尋(ZS)位元,則亦比較第二運算元中之每一元素與零的相等性。若在發現第二運算元及第三運算元之任何其他元素相等之前在第二運算元中尋找到零元素,則將發現為零的元素之第一位元組之位元組索引儲存於第一運算元之位元組七中,且將零儲存於所有其他位元組位置中。若條件碼設定(CC)旗標為一,則將條件碼設定至零。
M4欄位指定元素大小控制(ES)。ES控制指定向量暫存器運算元中的元素之大小。若指定顛倒值,則辨識到規範例外狀況。
0-位元組
1-半字組
2-字組
3至15-保留
M5欄位具有以下格式:
如下定義M5欄位之位元:
. 保留: 保留位元0至1且位元0至1必須為零。否則,辨識到規範例外狀況。
. 零搜尋(ZS): 若為一,則亦將第二運算元之每一元素與零比較。
. 條件碼設定(CC): 若為零,則條件碼保持不變。若為一,則如在以下段中所指定來設定條件碼。
若出現以下各者中之任一者,則辨識規範例外狀況且不採取其
他行動:
1. M4欄位含有自3至15之值。
2. M5欄位之位元0至1並非零。
若將M5欄位之位元3設定至一,則如下設定碼:
0 若設定了零比較位元,則比較在具有比任何相等比較小之索引的元素中偵測到第二運算元中之零元素。
1 比較在一些元素中偵測到第二運算元與第三運算元之間的匹配。若設定了零比較位元,則此匹配出現於具有小於或等於零比較元素之索引的元素中。
2 --
3 無元素比較起來相等。
若M5欄位之位元3為零,則碼保持不變。
. 具有DXC FE之資料,向量暫存器
. 在未安裝向量擴充設施之情況下的操作
. 規範(保留之ES值)
. 異動約束
1. 對於任一元素大小,始終將位元組索引儲存至第一運算元中。舉例而言,若將元素大小設定至半字組且比較出第2個索引之半字組相等,則將儲存位元組索引4。
2. 第三運算元不應含有具有零值之元素。若第三運算元確實含有零且在任何其他相等比較之前與第二運算元中之零元素匹配,則設定條件碼一,而不管零比較位元設定。
自左至右進行,將第二運算元之不帶正負號之二進位整數元素與第三運算元之對應的不帶正負號之二進位整數元素比較。若兩個元素不相等,則將最左側不相等元素之位元組索引置放於第一運算元之位元組七中,且將零儲存至所有其他位元組。若將M5欄位中之條件碼設定(CC)位元設定至一,則設定條件碼以指示哪一運算元較大。若所有元素相等,則將等於向量大小之位元組索引置放於第一運算元之位元組七中,且將零置放於所有其他位元組位置中。若CC位元為一,則設定條件碼三。
若在M5欄位中設定了零搜尋(ZS)位元,則亦比較第二運算元中之每一元素與零的相等性。若在發現第二運算元之任一其他元素不相等之前在第二運算元中尋找到零元素,則將發現為零的元素之第一位元組之位元組索引儲存於第一運算元之位元組七中。將零儲存於所有
其他位元組中,且設定條件碼0。
M4欄位指定元素大小控制(ES)。ES控制指定向量暫存器運算元中的元素之大小。若指定顛倒值,則辨識到規範例外狀況。
0-位元組
1-半字組
2-字組
3至15-保留
M5欄位具有以下格式:
如下定義M5欄位之位元:
. 零搜尋(ZS): 若為一,則亦將第二運算元之每一元素與零比較。
. 條件碼設定(CC): 若為零,則不設定條件碼且條件碼保持不變。若為一,則如以下段中所指定來設定條件碼。
若出現以下各者中之任一者,則辨識規範例外狀況且不採取其他行動:
1. M4欄位含有自3至15之值。
2. M5欄位之位元0至1並非零。
若將M5欄位之位元3設定至一,則如下設定碼:
0 若設定了零比較位元,則比較在比任何不相等比較低之索引元素中偵測到兩個運算元中之零元素
1 偵測到元素失配,且VR2中之元素小於VR3中之元素
2 偵測到元素失配,且VR2中之元素大於VR3中之元素
3 所有元素比較起來相等,且若設定了零比較位元,則在第二運算元中未尋找到零元素。
若M5欄位之位元3為零,則碼保持不變。
. 具有DXC FE之資料,向量暫存器
. 在未安裝向量擴充設施之情況下的操作
. 規範(保留之ES值)
. 異動約束
自左至右進行,將第二運算元中的不帶正負號之二進位整數元素與由第三運算元及第四運算元中之偶數-奇數對元素定義的值範圍比較。結合來自第四運算元的控制值定義待執行的比較之範圍。若一元素匹配由第三運算元及第四運算元指定的範圍中之任一者,則將其視為匹配。
若M6欄位中之結果類型(RT)旗標為零,則若第一運算元中對應於第二運算元中正進行比較之元素的元素匹配該等範圍中之任一者,則將該元素之位元位置設定至一,否則,將其設定至零。
若將M6欄位中之結果類型(RT)旗標設定至一,則第二運算元中匹配由第三運算元及第四運算元指定的範圍中之任一者或零比較(若將ZS旗標設定至一)的第一元素之位元組索引置放於第一運算元之位元組七中,且將零儲存於剩餘位元組中。若無元素匹配,則將等於一向量中的位元組之數目的索引置放於第一運算元之位元組七中,且將零儲存於剩餘位元組中。
M6欄位中之零搜尋(ZS)旗標,若設定至一,則將第二運算元元素與零的比較添加至由第三運算元及第四運算元提供之範圍。若為在比任何其他真比較低之索引元素中的零比較,則將條件碼設定至零。
該等運算元含有具有由M5欄位中之元素大小控制指定的大小之元素。
第四運算元元素具有以下格式:
若ES等於0:
若ES等於1:
若ES等於2:
如下定義第四運算元元素中之位元:
. 相等(EQ): 當為一時,進行相等性比較。
. 大於(GT): 當為一時,執行大於比較。
. 小於(LT): 當為一時,執行小於比較。
. 保留所有其他位元且所有其他位元應為零以確保未來相容性。
可以任何組合使用該等控制位元。若該等位元中無一者經設定,則比較將始終產生假結果。若所有該等位元經設定,則比較將始終產生真結果。
M5欄位指定元素大小控制(ES)。ES控制指定向量暫存器運算元中的元素之大小。若指定顛倒值,則辨識到規範例外狀況。
0-位元組
1-半字組
2-字組
3至15-保留
M6欄位具有以下格式:
如下定義M6欄位之位元:
. 反轉結果(IN): 若為零,則繼續進行與控制向量中之成對值的比較。若為一,則反轉在該等範圍中的該等成對之比較之結果。
. 結果類型(RT): 若為零,則每一所得元素為關於彼元素的所有範圍比較之遮罩。若為一,則將索引儲存至第一運算元之位元組七中。將零儲存於剩餘位元組中。
. 零搜尋(ZS): 若為一,則亦將第二運算元之每一元素與零比較。
. 條件碼設定(CC): 若為零,則不設定條件碼且條件碼保持不變。若為一,則如以下段中所指定來設定條件碼。
若出現以下各者中之任一者,則辨識規範例外狀況且不採取其他行動:
1. M4欄位含有自3至15之值。
0 若ZS=1且在比任何比較低之索引元素中發現零
1 發現比較
2 --
3 未發現比較
. 具有DXC FE之資料,向量暫存器
. 在未安裝向量擴充設施之情況下的操作
. 規範(保留之ES值)
. 異動約束
圖23-1.
ES=1,ZS=0
VR1(a) RT=0之結果
VR1(b) RT=1之結果
將含有可能自第二運算元位置載入而不與指定區塊邊界交叉之
位元組之數目的32-位元不帶正負號之二進位整數(覆蓋於十六處)置放於第一運算元中。
將位移作為12-位元不帶正負號之整數對待。
第二運算元位址不用以定址資料。
M3欄位指定用以用信號向CPU通知關於區塊邊界大小以計算載入的可能位元組之數目的碼。若指定顛倒值,則辨識到規範例外狀況。
0 運算元一為十六
1 --
2 --
3 運算元一小於十六
. 在未安裝向量擴充設施之情況下的操作
. 規範
程式設計註釋:期望結合向量載入至區塊邊界(VECTOR LOAD
TO BLOCK BOUNDARY)使用將計數載入至區塊邊界(LOAD COUNT TO BLOCK BOUNDARY)以判定載入的位元組之數目。
將第三運算元之具有由M4欄位中之ES值指定的大小且藉由第二運算元位址編索引之元素置放於第一運算元位置中。第三運算元為向量暫存器。第一運算元為通用暫存器。若藉由第二運算元位址指定之索引大於第三運算元中具有指定元素大小的最高編號之元素,則第一運算元中之資料為不可預測的。
若向量暫存器元素小於雙字組,則該元素在64-位元通用暫存器中恰好對準,且零填充剩餘位元。
第二運算元位址不用以定址資料;實情為,該位址之最右側12個位元用以指定一元素在第二運算元內之索引。
M4欄位指定元素大小控制(ES)。ES控制指定向量暫存器運算元中的元素之大小。若指定顛倒值,則辨識到規範例外狀況。
0-位元組
1-半字組
2-字組
3-雙字組
4至15-保留不變。
所得條件碼: 碼不變。
. 具有DXC FE之資料,向量暫存器
. 在未安裝向量擴充設施之情況下的操作
. 規範(保留之ES值)
. 異動約束
以零索引位元組元素開始,以來自第二運算元之位元組載入第一運算元。若遇到邊界條件,則第一運算元之其餘部分為不可預測的。未辨識到關於未載入之位元組之存取例外狀況。
將針對VLBB之位移作為12-位元不帶正負號之整數對待。
M3欄位指定用以用信號向CPU通知關於區塊邊界大小以載入至區塊邊界的碼。若指定顛倒值,則辨識到規範例外狀況。
所得條件碼: 碼保持不變。
. 存取(提取,運算元2)
. 具有DXC FE之資料,向量暫存器
. 在未安裝向量擴充設施之情況下的操作
. 規範(保留之區塊邊界碼)
. 異動約束
1.在某些情況下,可經過區塊邊界載入資料。然而,若不存在關於彼資料之存取例外狀況,則將僅發生此情形。
將第一運算元中之128-位元值儲存至藉由第二運算元指定之儲存位置。將針對VST之位移作為12-位元不帶正負號之整數對待。
所得條件碼: 碼保持不變。
. 存取(儲存,運算元2)
. 具有DXC FE之資料,向量暫存器
. 在未安裝向量擴充設施之情況下的操作
. 異動約束
自左至右進行,將來自第一運算元之位元組儲存於第二運算元位置處。指定第三運算元之通用暫存器含有32-位元不帶正負號之整數,該整數含有表示儲存的最高索引位元組之值。若第三運算元含有大於或等於向量之最高位元組索引的值,則儲存第一運算元之所有位元組。
僅辨識到關於儲存之位元組的存取例外狀況。
將針對具有長度之向量儲存(VECTOR STORE WITH LENGTH)之位移作為12-位元不帶正負號之整數對待。
所得條件碼: 條件碼保持不變。
. 存取(儲存,運算元2)
. 具有DXC FE之資料,向量暫存器
. 在未安裝向量擴充設施之情況下的操作
. 異動約束
所有向量指令具有在指令之位元36至40中的一欄位,其標註為RXB。此欄位含有用於所有向量暫存器指明之運算元的最高有效位元。保留用於未藉由指令指定之暫存器指明的位元且應將其設定至零;否則,程式在未來無法相容地操作。將最高有效位元串接至四-位元暫存器指明之左側以建立五-位元向量暫存器指明。
如下定義該等位元:
0. 在指令之位元8至11中用於向量暫存器指明之最高有效位元。
1. 在指令之位元12至15中用於向量暫存器指明之最高有效位元。
2. 在指令之位元16至19中用於向量暫存器指明之最高有效位元。
3. 在指令之位元32至35中用於向量暫存器指明之最高有效位元。
若將控制暫存器零中的向量啟用控制(位元46)及AFP暫存器控制(位元45)皆設定至一,則可僅使用向量暫存器及指令。若安裝了向量設施且在未設定啟用位元之情況下執行向量指令,則辨識到具有DXC FE十六進位之資料例外狀況。若未安裝向量設施,則辨識到操作例外狀況。
Claims (20)
- 一種用於判定一組資料之一長度的電腦程式產品,該電腦程式產品包含:一電腦可讀儲存媒體,其可由一處理電路讀取且儲存用於由該處理電路執行以用於執行一方法之指令,該方法包含:將在記憶體之一指定區塊內之資料自記憶體載入至一暫存器,該資料為將判定該長度所針對之該組資料的至少一部分;獲得載入於該暫存器中之資料之一量的一計數;由一處理器判定載入於該暫存器中之該資料的一終止值,該判定包含檢查該資料以判定該暫存器是否包括一終止字元,且基於該暫存器包括一終止字元,將該終止值設定為該終止字元的一位置,且基於該暫存器不包括該終止字元,將該終止值設定為一預先指定值;基於該計數及該終止值中之至少一者而檢查是否存在待計數的額外資料;基於該檢查指示將對額外資料計數,基於該額外資料使該計數遞增,該計數提供該組資料之該長度;及基於該檢查指示將不對額外資料計數,使用該計數作為該組資料之一長度。
- 如請求項1之電腦程式產品,其中該檢查包含:比較該計數與該終止值以判定是否將對額外資料計數。
- 如請求項1之電腦程式產品,其中該獲得該計數包含:使用在記憶體之該區塊內之一開始位址及記憶體之該區塊的一邊界來計算該計數。
- 如請求項1之電腦程式產品,其中該資料包含複數個資料單位,該複數個資料單位並行地載入於該暫存器中,且其中該檢查係並行地執行。
- 如請求項1之電腦程式產品,其中該載入係藉由一「向量載入至區塊邊界」指令來執行,且記憶體之該區塊為以下各情形中之一者:藉由該「向量載入至區塊邊界」指令來指定,或由執行該「向量載入至區塊邊界」指令之一處理器來動態地判定。
- 如請求項1之電腦程式產品,其中該獲得該計數包含:使用一「載入計數至區塊邊界」指令。
- 如請求項1之電腦程式產品,其中該判定一終止值包含:使用一「向量尋找元素不相等」指令,且該位置包含該暫存器內之一位元組索引。
- 如請求項1之電腦程式產品,其中該終止字元包含一零或空值字元。
- 如請求項1之電腦程式產品,其中該組資料之該長度係使用至多一個分支指令來判定,且其中該載入係在不交叉記憶體之該區塊之一邊界情況下執行。
- 如請求項1之電腦程式產品,其中該方法進一步包含獲得電腦程式碼以判定該長度,該電腦程式碼包括執行該載入之一「向量載入至區塊邊界」指令、獲得該計數之一「載入計數至區塊邊界」指令,及判定該終止值之一「向量尋找元素不相等」指令。
- 一種用於判定一組資料之一長度的電腦系統,該電腦系統包含:一記憶體;及一處理器,其與該記憶體通信,其中該電腦系統經組態以執 行一方法,該方法包含:將在記憶體之一指定區塊內之資料自記憶體載入至一暫存器,該資料為將判定該長度所針對之該組資料的至少一部分;獲得載入於該暫存器中之資料之一量的一計數;由一處理器判定載入於該暫存器中之該資料的一終止值,該判定包含檢查該資料以判定該暫存器是否包括一終止字元,且基於該暫存器包括一終止字元,將該終止值設定為該終止字元的一位置,且基於該暫存器不包括該終止字元,將該終止值設定為一預先指定值;基於該計數及該終止值中之至少一者而檢查是否存在待計數的額外資料;基於該檢查指示將對額外資料計數,基於該額外資料使該計數遞增,該計數提供該組資料之該長度;及基於該檢查指示將不對額外資料計數,使用該計數作為該組資料之一長度。
- 如請求項11之電腦系統,其中該獲得該計數包含:使用在記憶體之該區塊內之一開始位址及記憶體之該區塊的一邊界來計算該計數。
- 如請求項11之電腦系統,其中該資料包含複數個資料單位,該複數個資料單位並行地載入於該暫存器中,且其中該檢查係並行地執行。
- 如請求項11之電腦系統,其中該載入係藉由一「向量載入至區塊邊界」指令來執行,且記憶體之該區塊為以下情形中之一者:藉由該「向量載入至區塊邊界」指令來指定,或由執行該「向量載入至區塊邊界」指令之一處理器來動態地判定。
- 如請求項11之電腦系統,其中該獲得該計數包含使用一「載入計數至區塊邊界」指令。
- 如請求項11之電腦系統,其中該判定一終止值包含使用一「向量尋找元素不相等」指令,且該位置包含該暫存器內之一位元組索引。
- 如請求項11之電腦系統,其中該方法進一步包含獲得電腦程式碼以判定該長度,該電腦程式碼包括執行該載入之一「向量載入至區塊邊界」指令、獲得該計數之一「載入計數至區塊邊界」指令,及判定該終止值之一「向量尋找元素不相等」指令。
- 一種判定一組資料之一長度的方法,該方法包含:將在記憶體之一指定區塊內之資料自記憶體載入至一暫存器,該資料為將判定該長度所針對之該組資料的至少一部分;獲得載入於該暫存器中之資料之一量的一計數;由一處理器判定載入於該暫存器中之該資料的一終止值,該判定包含檢查該資料以判定該暫存器是否包括一終止字元,且基於該暫存器包括一終止字元,將該終止值設定為該終止字元的一位置,且基於該暫存器不包括該終止字元,將該終止值設定為一預先指定值;基於該計數及該終止值中之至少一者而檢查是否存在待計數的額外資料;基於該檢查指示將對額外資料計數,基於該額外資料使該計數遞增,該計數提供該組資料之該長度;及基於該檢查指示將不對額外資料計數,使用該計數作為該組資料之一長度。
- 如請求項18之方法,其中該資料包含複數個資料單位,該複數個資料單位並行地載入於該暫存器中,且其中該檢查係並行地 執行。
- 如請求項18之方法,其進一步包含獲得電腦程式碼以判定該長度,該電腦程式碼包括執行該載入之一「向量載入至區塊邊界」指令、獲得該計數之一「載入計數至區塊邊界」指令,及判定該終止值之一「向量尋找元素不相等」指令。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/421,640 US9454367B2 (en) | 2012-03-15 | 2012-03-15 | Finding the length of a set of character data having a termination character |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201403469A true TW201403469A (zh) | 2014-01-16 |
TWI554946B TWI554946B (zh) | 2016-10-21 |
Family
ID=49158777
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW102107406A TWI554946B (zh) | 2012-03-15 | 2013-03-01 | 尋找一組具有終止字元之字元資料之長度之電腦程式產品、電腦系統及方法 |
Country Status (13)
Country | Link |
---|---|
US (1) | US9454367B2 (zh) |
EP (1) | EP2826148A4 (zh) |
JP (1) | JP6305351B2 (zh) |
KR (1) | KR101634476B1 (zh) |
CN (1) | CN104170259B (zh) |
AU (1) | AU2013233974B2 (zh) |
CA (1) | CA2867117C (zh) |
IL (1) | IL232811A0 (zh) |
RU (1) | RU2621000C2 (zh) |
SG (1) | SG11201404858XA (zh) |
TW (1) | TWI554946B (zh) |
WO (1) | WO2013136214A1 (zh) |
ZA (1) | ZA201406613B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11068541B2 (en) | 2019-02-15 | 2021-07-20 | International Business Machines Corporation | Vector string search instruction |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9459867B2 (en) | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Instruction to load data up to a specified memory boundary indicated by the instruction |
US9710266B2 (en) | 2012-03-15 | 2017-07-18 | International Business Machines Corporation | Instruction to compute the distance to a specified memory boundary |
US9715383B2 (en) | 2012-03-15 | 2017-07-25 | International Business Machines Corporation | Vector find element equal instruction |
US9268566B2 (en) | 2012-03-15 | 2016-02-23 | International Business Machines Corporation | Character data match determination by loading registers at most up to memory block boundary and comparing |
US9454366B2 (en) | 2012-03-15 | 2016-09-27 | International Business Machines Corporation | Copying character data having a termination character from one memory location to another |
US9588762B2 (en) | 2012-03-15 | 2017-03-07 | International Business Machines Corporation | Vector find element not equal instruction |
US9459868B2 (en) | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Instruction to load data up to a dynamically determined memory boundary |
US9459864B2 (en) | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Vector string range compare |
US9280347B2 (en) | 2012-03-15 | 2016-03-08 | International Business Machines Corporation | Transforming non-contiguous instruction specifiers to contiguous instruction specifiers |
US10540512B2 (en) * | 2015-09-29 | 2020-01-21 | International Business Machines Corporation | Exception preserving parallel data processing of string and unstructured text |
US10564967B2 (en) | 2017-03-03 | 2020-02-18 | International Business Machines Corporation | Move string processing via inline decode-based micro-operations expansion |
US10324716B2 (en) | 2017-03-03 | 2019-06-18 | International Business Machines Corporation | Selecting processing based on expected value of selected character |
US10789069B2 (en) | 2017-03-03 | 2020-09-29 | International Business Machines Corporation | Dynamically selecting version of instruction to be executed |
US10613862B2 (en) | 2017-03-03 | 2020-04-07 | International Business Machines Corporation | String sequence operations with arbitrary terminators |
US10620956B2 (en) | 2017-03-03 | 2020-04-14 | International Business Machines Corporation | Search string processing via inline decode-based micro-operations expansion |
US10564965B2 (en) | 2017-03-03 | 2020-02-18 | International Business Machines Corporation | Compare string processing via inline decode-based micro-operations expansion |
CN112698801B (zh) * | 2021-01-06 | 2023-08-15 | 上海新时达电气股份有限公司 | 电梯显示面板显示的方法、电子设备及存储介质 |
KR102370851B1 (ko) * | 2021-08-18 | 2022-03-07 | 주식회사 로그프레소 | 벡터 연산 명령어를 통해 문자열을 고속으로 추출하는 방법 |
CN117093510B (zh) * | 2023-05-30 | 2024-04-09 | 中国人民解放军军事科学院国防科技创新研究院 | 大小端通用的缓存行高效索引方法 |
Family Cites Families (96)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS62276668A (ja) | 1985-07-31 | 1987-12-01 | Nec Corp | ベクトルマスク演算制御ユニツト |
US5073864A (en) | 1987-02-10 | 1991-12-17 | Davin Computer Corporation | Parallel string processor and method for a minicomputer |
EP0363176B1 (en) * | 1988-10-07 | 1996-02-14 | International Business Machines Corporation | Word organised data processors |
US5222225A (en) * | 1988-10-07 | 1993-06-22 | International Business Machines Corporation | Apparatus for processing character string moves in a data processing system |
JPH0831032B2 (ja) | 1990-08-29 | 1996-03-27 | 三菱電機株式会社 | データ処理装置 |
US5465374A (en) | 1993-01-12 | 1995-11-07 | International Business Machines Corporation | Processor for processing data string by byte-by-byte |
AU6629894A (en) | 1993-05-07 | 1994-12-12 | Apple Computer, Inc. | Method for decoding guest instructions for a host computer |
CA2162115A1 (en) * | 1993-06-14 | 1994-12-22 | David V. James | Method and apparatus for finding a termination character within a variable-length character string on a processor |
JPH0721034A (ja) | 1993-06-28 | 1995-01-24 | Fujitsu Ltd | 文字列複写処理方法 |
US5509129A (en) | 1993-11-30 | 1996-04-16 | Guttag; Karl M. | Long instruction word controlling plural independent processor operations |
US6185629B1 (en) * | 1994-03-08 | 2001-02-06 | Texas Instruments Incorporated | Data transfer controller employing differing memory interface protocols dependent upon external input at predetermined time |
US5551013A (en) | 1994-06-03 | 1996-08-27 | International Business Machines Corporation | Multiprocessor for hardware emulation |
CN1131339C (zh) | 1994-09-27 | 2003-12-17 | 日本钢管株式会社 | 镀锌钢板及其制造方法 |
US6643765B1 (en) * | 1995-08-16 | 2003-11-04 | Microunity Systems Engineering, Inc. | Programmable processor with group floating point operations |
US5790825A (en) | 1995-11-08 | 1998-08-04 | Apple Computer, Inc. | Method for emulating guest instructions on a host computer through dynamic recompilation of host instructions |
RU2190295C2 (ru) * | 1996-07-24 | 2002-09-27 | Юнисиз Корпорейшн | Система уплотнения и разуплотнения данных с непосредственным обновлением каталога, которое чередуют с поиском строк |
US5812147A (en) | 1996-09-20 | 1998-09-22 | Silicon Graphics, Inc. | Instruction methods for performing data formatting while moving data between memory and a vector register file |
US5931940A (en) | 1997-01-23 | 1999-08-03 | Unisys Corporation | Testing and string instructions for data stored on memory byte boundaries in a word oriented machine |
EP1032896B1 (en) | 1997-11-24 | 2002-03-27 | BRITISH TELECOMMUNICATIONS public limited company | Information management and key term retrieval |
US6009261A (en) | 1997-12-16 | 1999-12-28 | International Business Machines Corporation | Preprocessing of stored target routines for emulating incompatible instructions on a target processor |
US6094695A (en) | 1998-03-11 | 2000-07-25 | Texas Instruments Incorporated | Storage buffer that dynamically adjusts boundary between two storage areas when one area is full and the other has an empty data register |
US6334176B1 (en) | 1998-04-17 | 2001-12-25 | Motorola, Inc. | Method and apparatus for generating an alignment control vector |
US6308255B1 (en) | 1998-05-26 | 2001-10-23 | Advanced Micro Devices, Inc. | Symmetrical multiprocessing bus and chipset used for coprocessor support allowing non-native code to run in a system |
US7100026B2 (en) | 2001-05-30 | 2006-08-29 | The Massachusetts Institute Of Technology | System and method for performing efficient conditional vector operations for data parallel architectures involving both input and conditional vector values |
US6463582B1 (en) | 1998-10-21 | 2002-10-08 | Fujitsu Limited | Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method |
CN1134734C (zh) | 1998-11-27 | 2004-01-14 | 松下电器产业株式会社 | 地址生成装置以及运动矢量检测装置 |
US6192466B1 (en) | 1999-01-21 | 2001-02-20 | International Business Machines Corporation | Pipeline control for high-frequency pipelined designs |
US8127121B2 (en) | 1999-01-28 | 2012-02-28 | Ati Technologies Ulc | Apparatus for executing programs for a first computer architechture on a computer of a second architechture |
US6189088B1 (en) | 1999-02-03 | 2001-02-13 | International Business Machines Corporation | Forwarding stored dara fetched for out-of-order load/read operation to over-taken operation read-accessing same memory location |
US6499116B1 (en) | 1999-03-31 | 2002-12-24 | International Business Machines Corp. | Performance of data stream touch events |
US6802056B1 (en) | 1999-06-30 | 2004-10-05 | Microsoft Corporation | Translation and transformation of heterogeneous programs |
US6381691B1 (en) | 1999-08-13 | 2002-04-30 | International Business Machines Corporation | Method and apparatus for reordering memory operations along multiple execution paths in a processor |
US6513109B1 (en) | 1999-08-31 | 2003-01-28 | International Business Machines Corporation | Method and apparatus for implementing execution predicates in a computer processing system |
US6449706B1 (en) | 1999-12-22 | 2002-09-10 | Intel Corporation | Method and apparatus for accessing unaligned data |
JP2001236249A (ja) | 2000-02-24 | 2001-08-31 | Nec Corp | メモリ管理装置およびメモリ管理方法 |
US6625724B1 (en) | 2000-03-28 | 2003-09-23 | Intel Corporation | Method and apparatus to support an expanded register set |
US6349361B1 (en) | 2000-03-31 | 2002-02-19 | International Business Machines Corporation | Methods and apparatus for reordering and renaming memory references in a multiprocessor computer system |
US6701424B1 (en) | 2000-04-07 | 2004-03-02 | Nintendo Co., Ltd. | Method and apparatus for efficient loading and storing of vectors |
US6408383B1 (en) | 2000-05-04 | 2002-06-18 | Sun Microsystems, Inc. | Array access boundary check by executing BNDCHK instruction with comparison specifiers |
EP1368732B1 (en) | 2000-10-18 | 2008-01-23 | Koninklijke Philips Electronics N.V. | Digital signal processing apparatus |
US7487330B2 (en) | 2001-05-02 | 2009-02-03 | International Business Machines Corporations | Method and apparatus for transferring control in a computer system with dynamic compilation capability |
JP3900863B2 (ja) * | 2001-06-28 | 2007-04-04 | シャープ株式会社 | データ転送制御装置、半導体記憶装置および情報機器 |
US6839828B2 (en) | 2001-08-14 | 2005-01-04 | International Business Machines Corporation | SIMD datapath coupled to scalar/vector/address/conditional data register file with selective subpath scalar processing mode |
US6907443B2 (en) | 2001-09-19 | 2005-06-14 | Broadcom Corporation | Magnitude comparator |
US6570511B1 (en) * | 2001-10-15 | 2003-05-27 | Unisys Corporation | Data compression method and apparatus implemented with limited length character tables and compact string code utilization |
US20100274988A1 (en) | 2002-02-04 | 2010-10-28 | Mimar Tibet | Flexible vector modes of operation for SIMD processor |
US7089371B2 (en) | 2002-02-12 | 2006-08-08 | Ip-First, Llc | Microprocessor apparatus and method for prefetch, allocation, and initialization of a block of cache lines from memory |
US7441104B2 (en) | 2002-03-30 | 2008-10-21 | Hewlett-Packard Development Company, L.P. | Parallel subword instructions with distributed results |
US7373483B2 (en) | 2002-04-02 | 2008-05-13 | Ip-First, Llc | Mechanism for extending the number of registers in a microprocessor |
US7376812B1 (en) | 2002-05-13 | 2008-05-20 | Tensilica, Inc. | Vector co-processor for configurable and extensible processor architecture |
US6918010B1 (en) | 2002-10-16 | 2005-07-12 | Silicon Graphics, Inc. | Method and system for prefetching data |
US7103754B2 (en) | 2003-03-28 | 2006-09-05 | International Business Machines Corporation | Computer instructions for having extended signed displacement fields for finding instruction operands |
US20040215924A1 (en) | 2003-04-28 | 2004-10-28 | Collard Jean-Francois C. | Analyzing stored data |
US7035986B2 (en) | 2003-05-12 | 2006-04-25 | International Business Machines Corporation | System and method for simultaneous access of the same line in cache storage |
US20040250027A1 (en) | 2003-06-04 | 2004-12-09 | Heflinger Kenneth A. | Method and system for comparing multiple bytes of data to stored string segments |
US7610466B2 (en) | 2003-09-05 | 2009-10-27 | Freescale Semiconductor, Inc. | Data processing system using independent memory and register operand size specifiers and method thereof |
US7904905B2 (en) | 2003-11-14 | 2011-03-08 | Stmicroelectronics, Inc. | System and method for efficiently executing single program multiple data (SPMD) programs |
GB2411973B (en) | 2003-12-09 | 2006-09-27 | Advanced Risc Mach Ltd | Constant generation in SMD processing |
US20060095713A1 (en) | 2004-11-03 | 2006-05-04 | Stexar Corporation | Clip-and-pack instruction for processor |
US7263621B2 (en) * | 2004-11-15 | 2007-08-28 | Via Technologies, Inc. | System for reducing power consumption in a microprocessor having multiple instruction decoders that are coupled to selectors receiving their own output as feedback |
JP4837305B2 (ja) * | 2005-05-10 | 2011-12-14 | ルネサスエレクトロニクス株式会社 | マイクロプロセッサ及びマイクロプロセッサの制御方法 |
US7421566B2 (en) | 2005-08-12 | 2008-09-02 | International Business Machines Corporation | Implementing instruction set architectures with non-contiguous register file specifiers |
US9436468B2 (en) | 2005-11-22 | 2016-09-06 | Intel Corporation | Technique for setting a vector mask |
US8010953B2 (en) | 2006-04-04 | 2011-08-30 | International Business Machines Corporation | Method for compiling scalar code for a single instruction multiple data (SIMD) execution engine |
US7565514B2 (en) | 2006-04-28 | 2009-07-21 | Freescale Semiconductor, Inc. | Parallel condition code generation for SIMD operations |
CN101097488B (zh) | 2006-06-30 | 2011-05-04 | 2012244安大略公司 | 从接收的文本中学习字符片段的方法及相关手持电子设备 |
US9069547B2 (en) | 2006-09-22 | 2015-06-30 | Intel Corporation | Instruction and logic for processing text strings |
JP2008077590A (ja) * | 2006-09-25 | 2008-04-03 | Toshiba Corp | データ転送装置 |
US7536532B2 (en) | 2006-09-27 | 2009-05-19 | International Business Machines Corporation | Merge operations of data arrays based on SIMD instructions |
US7934025B2 (en) * | 2007-01-24 | 2011-04-26 | Qualcomm Incorporated | Content terminated DMA |
US7991987B2 (en) | 2007-05-10 | 2011-08-02 | Intel Corporation | Comparing text strings |
EP2160692A1 (en) | 2007-05-21 | 2010-03-10 | Incredimail Ltd | Interactive message editing system and method |
US20090063410A1 (en) | 2007-08-29 | 2009-03-05 | Nils Haustein | Method for Performing Parallel Data Indexing Within a Data Storage System |
US7870339B2 (en) | 2008-01-11 | 2011-01-11 | International Business Machines Corporation | Extract cache attribute facility and instruction therefore |
US7739434B2 (en) | 2008-01-11 | 2010-06-15 | International Business Machines Corporation | Performing a configuration virtual topology change and instruction therefore |
US7895419B2 (en) | 2008-01-11 | 2011-02-22 | International Business Machines Corporation | Rotate then operate on selected bits facility and instructions therefore |
US7877582B2 (en) | 2008-01-31 | 2011-01-25 | International Business Machines Corporation | Multi-addressable register file |
CN102007469A (zh) | 2008-02-18 | 2011-04-06 | 阿斯奔收购公司 | 用以加速空终止字符串操作的方法 |
DK176835B1 (da) | 2008-03-07 | 2009-11-23 | Jala Aps | Fremgangsmåde til skanning, medium indeholdende et program til udövelse af fremgangsmåden samt system til udövelse af fremgangsmåden |
US8386547B2 (en) | 2008-10-31 | 2013-02-26 | Intel Corporation | Instruction and logic for performing range detection |
US20120023308A1 (en) | 2009-02-02 | 2012-01-26 | Renesas Electronics Corporation | Parallel comparison/selection operation apparatus, processor, and parallel comparison/selection operation method |
JP5471082B2 (ja) | 2009-06-30 | 2014-04-16 | 富士通株式会社 | 演算処理装置および演算処理装置の制御方法 |
US8595471B2 (en) | 2010-01-22 | 2013-11-26 | Via Technologies, Inc. | Executing repeat load string instruction with guaranteed prefetch microcode to prefetch into cache for loading up to the last value in architectural register |
JP2011212043A (ja) | 2010-03-31 | 2011-10-27 | Fujifilm Corp | 医用画像再生装置および方法並びにプログラム |
US20110314263A1 (en) | 2010-06-22 | 2011-12-22 | International Business Machines Corporation | Instructions for performing an operation on two operands and subsequently storing an original value of operand |
US8972698B2 (en) | 2010-12-22 | 2015-03-03 | Intel Corporation | Vector conflict instructions |
US9009447B2 (en) | 2011-07-18 | 2015-04-14 | Oracle International Corporation | Acceleration of string comparisons using vector instructions |
US9280347B2 (en) | 2012-03-15 | 2016-03-08 | International Business Machines Corporation | Transforming non-contiguous instruction specifiers to contiguous instruction specifiers |
US9454366B2 (en) | 2012-03-15 | 2016-09-27 | International Business Machines Corporation | Copying character data having a termination character from one memory location to another |
US9459867B2 (en) | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Instruction to load data up to a specified memory boundary indicated by the instruction |
US9715383B2 (en) | 2012-03-15 | 2017-07-25 | International Business Machines Corporation | Vector find element equal instruction |
US9459864B2 (en) | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Vector string range compare |
US9710266B2 (en) * | 2012-03-15 | 2017-07-18 | International Business Machines Corporation | Instruction to compute the distance to a specified memory boundary |
US9459868B2 (en) | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Instruction to load data up to a dynamically determined memory boundary |
US9588762B2 (en) | 2012-03-15 | 2017-03-07 | International Business Machines Corporation | Vector find element not equal instruction |
US9268566B2 (en) | 2012-03-15 | 2016-02-23 | International Business Machines Corporation | Character data match determination by loading registers at most up to memory block boundary and comparing |
-
2012
- 2012-03-15 US US13/421,640 patent/US9454367B2/en active Active
-
2013
- 2013-03-01 AU AU2013233974A patent/AU2013233974B2/en active Active
- 2013-03-01 CN CN201380014258.0A patent/CN104170259B/zh active Active
- 2013-03-01 TW TW102107406A patent/TWI554946B/zh active
- 2013-03-01 JP JP2014561549A patent/JP6305351B2/ja active Active
- 2013-03-01 WO PCT/IB2013/051647 patent/WO2013136214A1/en active Application Filing
- 2013-03-01 SG SG11201404858XA patent/SG11201404858XA/en unknown
- 2013-03-01 EP EP13760285.0A patent/EP2826148A4/en not_active Ceased
- 2013-03-01 KR KR1020147025006A patent/KR101634476B1/ko active IP Right Grant
- 2013-03-01 RU RU2014118856A patent/RU2621000C2/ru active
- 2013-03-01 CA CA2867117A patent/CA2867117C/en active Active
-
2014
- 2014-05-27 IL IL232811A patent/IL232811A0/en active IP Right Grant
- 2014-09-09 ZA ZA2014/06613A patent/ZA201406613B/en unknown
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11068541B2 (en) | 2019-02-15 | 2021-07-20 | International Business Machines Corporation | Vector string search instruction |
TWI739280B (zh) * | 2019-02-15 | 2021-09-11 | 美商萬國商業機器公司 | 用於向量字串搜尋指令之電腦程式產品、電腦實作方法及電腦系統 |
US11663270B2 (en) | 2019-02-15 | 2023-05-30 | International Business Machines Corporation | Vector string search instruction |
Also Published As
Publication number | Publication date |
---|---|
RU2621000C2 (ru) | 2017-05-30 |
ZA201406613B (en) | 2016-05-25 |
AU2013233974A1 (en) | 2014-09-11 |
AU2013233974B2 (en) | 2016-05-05 |
JP2015519626A (ja) | 2015-07-09 |
EP2826148A4 (en) | 2017-05-31 |
CA2867117A1 (en) | 2013-09-19 |
RU2014118856A (ru) | 2015-11-20 |
CN104170259B (zh) | 2017-06-09 |
WO2013136214A4 (en) | 2013-11-14 |
JP6305351B2 (ja) | 2018-04-04 |
US20130246699A1 (en) | 2013-09-19 |
US9454367B2 (en) | 2016-09-27 |
IL232811A0 (en) | 2014-07-31 |
KR20140135723A (ko) | 2014-11-26 |
WO2013136214A1 (en) | 2013-09-19 |
TWI554946B (zh) | 2016-10-21 |
CN104170259A (zh) | 2014-11-26 |
SG11201404858XA (en) | 2014-09-26 |
CA2867117C (en) | 2020-02-18 |
KR101634476B1 (ko) | 2016-06-28 |
EP2826148A1 (en) | 2015-01-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI554946B (zh) | 尋找一組具有終止字元之字元資料之長度之電腦程式產品、電腦系統及方法 | |
TWI550510B (zh) | 提供向量尋找元素不相等指令之電腦程式產品、電腦系統及方法 | |
TWI567641B (zh) | 用於向量尋找元素相等指令的電腦程式產品、電腦系統及其方法 | |
TWI533206B (zh) | 執行將資料載入至由一指令所指示之一指定記憶體邊界之該指令之方法、電腦程式產品及電腦系統 | |
TWI533207B (zh) | 用於將非連續指令說明符變換為連續指令說明符之電腦程式產品、電腦系統及方法 | |
US9952862B2 (en) | Instruction to load data up to a dynamically determined memory boundary | |
TWI617975B (zh) | 用於計算至一指定記憶體邊界之距離之指令之電腦程式產品、電腦系統及方法 | |
US9477468B2 (en) | Character data string match determination by loading registers at most up to memory block boundary and comparing to avoid unwarranted exception | |
JP6184426B2 (ja) | 終端文字を有する文字データのメモリ位置間でのコピーのための方法、システム、およびコンピュータ・プログラム(終端文字を有する文字データのメモリ位置間でのコピー) | |
TWI614679B (zh) | 向量浮點測試資料類別立即指令 |