TWI764078B - 用於執行壓縮/解壓縮作業之通用處理器指令之電腦程式產品、電腦系統及電腦實作方法 - Google Patents
用於執行壓縮/解壓縮作業之通用處理器指令之電腦程式產品、電腦系統及電腦實作方法Info
- Publication number
- TWI764078B TWI764078B TW109100211A TW109100211A TWI764078B TW I764078 B TWI764078 B TW I764078B TW 109100211 A TW109100211 A TW 109100211A TW 109100211 A TW109100211 A TW 109100211A TW I764078 B TWI764078 B TW I764078B
- Authority
- TW
- Taiwan
- Prior art keywords
- function
- instruction
- data
- operand
- compressed
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/30025—Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/3084—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/4031—Fixed length to variable length coding
- H03M7/4037—Prefix coding
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/4031—Fixed length to variable length coding
- H03M7/4037—Prefix coding
- H03M7/4043—Adaptive prefix coding
- H03M7/4062—Coding table adaptation
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/42—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code using table look-up for the coding or decoding process, e.g. using read-only memory
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本發明提供一種DEFLATE轉換呼叫通用處理器指令。由運算環境之一通用處理器獲得一指令。該指令為符合一業界標準以供壓縮之一指令集架構之一單一架構化指令。執行該指令,且該執行包括基於將由該指令執行之一函式為一壓縮函式或一解壓縮函式而使輸入資料之狀態在該輸入資料之一未壓縮形式與該輸入資料之一壓縮形式之間變換以提供資料之一變換狀態。將該資料之該變換狀態提供為輸出以在執行一任務時使用。
Description
一或多個態樣大體上係關於促進運算環境內之處理,且尤其係關於促進壓縮及解壓縮作業之處理。
在一或多種運算環境中,在儲存裝置上維持資訊之壓縮形式,而非原始未壓縮形式。壓縮形式相較於原始形式佔據較少位元組。因此,相較於在資訊之原始形式的情況下執行傳輸及維持功能,傳輸及維持資訊之壓縮形式會分別需要較少時間及空間。
在此類環境中,作業系統(OS)提供用以執行壓縮及解壓縮作業之機制。在一個實例中,為提供此等作業,作業系統併有zlib開放原始碼軟體程式庫,其依循網際網路工程任務小組(IETF)請求建議(RFC)1951規格中所指定之DEFLATE標準壓縮技術。該機制可包括軟體實作,其中使用者在通用處理器上執行許多指令以執行壓縮或解壓縮;或該機制可使用連接至系統之輸入/輸出(I/O)埠的專用硬體實作,其中I/O裝置執行作業。
經由佈建一種用於促進一運算環境內之處理之電腦程式產
品而克服了先前技術之缺點且提供了額外優勢。該電腦程式產品包括一電腦可讀儲存媒體,其可由一處理電路讀取並儲存用於執行一方法之指令。該方法包括由該運算環境之一通用處理器獲得一指令以執行由該指令支援之複數個函式中之一函式。該指令為符合一業界標準以供壓縮之一指令集架構之一單一架構化機器指令。執行該指令,且該執行包括基於該函式為一壓縮函式或一解壓縮函式而使輸入資料之狀態在該輸入資料之一未壓縮形式與該輸入資料之一壓縮形式之間變換以提供資料之一變換狀態。將資料之該變換狀態提供為輸出以在執行一任務時使用。
藉由使用一通用處理器上分派之一單一架構化指令以執行一壓縮及/或解壓縮函式(亦被稱作一作業),由該單一架構化指令替換用以執行彼等函式之基本軟體指令之一顯著子集。運用一單一架構化指令替換彼等基本指令會降低程式複雜度並消除對包括用以最佳化該等基本指令之程式碼之需要。改良了總效能。另外,藉由不將該等作業分派至一輸入/輸出裝置,作業系統在等待該輸入/輸出裝置執行該作業的同時避免了任務切換。
作為一實例,該變換該輸入資料之該狀態使用符合該業界標準之一壓縮格式。該壓縮格式包括例如一DEFLATE壓縮格式。
在一項實施例中,該任務係選自由以下各者組成之任務之一群組:執行使用該輸出之一或多個作業,該輸出包含壓縮資料;傳輸該輸出;執行使用該輸出之一或多個作業,該輸出包含未壓縮資料。
在一項實施例中,該指令包括:一作業碼欄位,其包括用以指定一作業之一作業碼;及複數個暫存器欄位,其用以指定將由該指令使用之複數個暫存器。該複數個暫存器包括用以識別將由該指令用作一輸
出之一輸出運算元位置之一個暫存器,及用以識別將由該指令用作一輸入之一輸入運算元位置之另一暫存器,該輸入取決於待執行之該函式。
舉例而言,基於該函式為該壓縮函式,該輸入包括來自該輸入運算元位置之資料以被編碼以提供儲存至該輸出運算元位置之壓縮資料符號,且基於該函式為該解壓縮函式,該輸入包括來自該輸入運算元位置之該等壓縮資料符號以被解碼以提供儲存至該輸出運算元位置之未壓縮資料。
在執行一壓縮函式時,在儲存裝置上維持資訊之一壓縮形式,而非資訊之原始形式。該資訊之該壓縮形式相較於該原始形式佔據較少位元組。因此,相較於在資訊之原始形式的情況下執行傳輸及維持功能,傳輸及維持該資訊之一壓縮形式會分別需要較少時間及空間。
在一項實施例中,該指令進一步使用一已選取暫存器以指示將由該指令執行之該複數個函式中之該函式。該複數個函式包括一查詢函式、該壓縮函式、一產生動態霍夫曼(Huffman)資料表函式及該解壓縮函式。
在一項實施例中,該指令進一步使用另一已選取暫存器以針對該複數個函式中之一或多個函式提供由該指令使用之一參數區塊之一位址。
在一另外態樣中,待執行之該函式為該產生動態霍夫曼資料表函式,且該執行包括基於該函式為該產生動態霍夫曼資料表函式而產生一動態霍夫曼資料表之一壓縮表示以在待執行之該函式在該指令之另一次執行時為該壓縮函式或該解壓縮函式時使用。
本文中亦描述及主張與一或多個態樣相關之電腦實作方法
及系統。另外,本文中亦描述並可主張與一或多個態樣相關之服務。
經由本文中所描述之技術實現了額外特徵及優勢。本文中詳細地描述了其他實施例及態樣且將其視為所主張態樣之一部分。
10:運算環境
12:原生中央處理單元(CPU)
14:記憶體
16:輸入/輸出裝置及/或介面
18:匯流排
20:原生暫存器
22:模擬器程式碼
30:客體指令
32:指令提取常式
34:指令轉譯常式
36:原生指令
40:模擬控制常式
50:雲端運算環境
52:雲端運算節點
54A:蜂巢式電話
54B:桌上型電腦
54C:膝上型電腦
54N:汽車電腦系統
60:硬體及軟體層
61:大型主機
62:基於精簡指令集電腦(RISC)架構之伺服器
63:伺服器
64:刀鋒伺服器
65:儲存裝置
66:網路及網路連接組件
67:網路應用程式伺服器軟體
68:資料庫軟體
70:虛擬化層
71:虛擬伺服器
72:虛擬儲存體
73:虛擬網路
74:虛擬應用程式
75:虛擬用戶端
80:管理層
81:資源佈建
82:計量及定價
83:使用者入口網站
84:服務等級管理
85:SLA規劃及履行
90:工作負載層
91:地圖繪製及導航
92:軟體開發及生命週期管理
93:虛擬教室教育遞送
94:資料分析處理
95:異動處理
96:壓縮/解壓縮處理
100:運算環境
102:處理器
104:記憶體
106:輸入/輸出(I/O)裝置及/或介面
108:匯流排
120:指令提取組件
122:指令解碼單元
124:指令執行組件
126:記憶體存取組件
130:寫回組件
136:壓縮/解壓縮組件
200:中央電子裝置複合體(CEC)
202:記憶體
204:處理器
206:輸入/輸出子系統
208:邏輯分割區
210:超管理器
212:處理器韌體
220:客體作業系統
222:程式
230:輸入/輸出控制單元
240:輸入/輸出(I/O)裝置
250:資料儲存裝置
252:程式
254:電腦可讀程式指令
260:快取記憶體
262:壓縮/解壓縮組件
300:DEFLATE轉換呼叫(DFLTCC)指令
302:作業碼欄位
304:第一暫存器欄位
306:第二暫存器欄位
308:第三暫存器欄位
309:一般暫存器0
310:歷程記錄緩衝區類型欄位
312:函式碼欄位
313:函式碼0
314:一般暫存器1
315:函式碼1
316:邏輯位址
317:函式碼2
318:一般暫存器R1
319:函式碼4
320:第一運算元位址
322:一般暫存器R1+1
324:長度
326:一般暫存器R2
328:第二運算元位址
330:一般暫存器R2+1
332:長度
335:一般暫存器R3
337:循環歷程記錄緩衝區位址
340:參數區塊
342:已安裝函式向量
346:已安裝參數區塊格式向量
360:參數區塊
362:參數區塊版本號碼(PBVN)
363:模型版本號碼(MVN)
364:動態霍夫曼資料表(DHT)產生控制(DHTGC)
365:作業結束補充碼(OESC)
366:壓縮動態霍夫曼資料表長度(CDHTL)
367:壓縮動態霍夫曼資料表(CDHT)
370:參數區塊
373:接續旗標(CF)
374:新任務(NT)
375:檢查值類型(CVT)
376:霍夫曼資料表類型(HTT)
377:區塊接續旗標(BCF)
378:區塊關閉控制(BCC)
379:最終區塊標頭(BHF)
381:子位元組邊界(SBB)
383:未完成函式狀態(IFS)
384:未完成函式長度(IFL)
385:歷程記錄長度(HL)
386:歷程記錄位移(HO)
387:檢查值
388:區塊結束符號(EOBS)
389:區塊結束長度(EOBL)
392:接續狀態緩衝區(CSB)
400:在作業結束之後已被處理之資料
402:在作業開始之前將被處理之資料
600:壓縮資料區塊
602:位元串流
700:壓縮資料區塊
702:位元串流
800:壓縮資料區塊
802:位元串流
900:壓縮資料集
902:壓縮資料區塊
904:壓縮資料集開始位址(CDSBA)
1000:樣本程式
1002:指令位址
1004:指令位址
1100:參數區塊欄位
1102:彼等欄位在壓縮作業開始時之值
1104:當條件碼1、2或3被設定時彼等欄位在作業結束時之值
1106:當條件碼0被設定時彼等欄位在作業結束時之值
1300:樣本程式
1700:步驟
1702:步驟
1704:步驟
1706:步驟
1708:步驟
1710:步驟
1712:步驟
1714:步驟
1716:步驟
1800:步驟
1802:步驟
1804:步驟
1806:步驟
1808:步驟
1820:步驟
1822:步驟
1824:步驟
1826:步驟
1900:步驟
1902:步驟
1904:步驟
1906:步驟
1908:步驟
1910:步驟
1912:步驟
1914:步驟
1920:步驟
1922:步驟
1924:步驟
1926:步驟
1928:步驟
1930:步驟
1932:步驟
1934:步驟
在本說明書結束時在申請專利範圍中作為實例而特定地指出並清楚地主張一或多個態樣。一或多個態樣之前述內容以及目標、特徵及優勢自結合隨附圖式描述之以下實施方式顯而易見,在圖式中:圖1A描繪用以併有及使用本發明之一或多個態樣之運算環境之一個實例;圖1B描繪根據本發明之一或多個態樣的圖1A之處理器之另外細節;圖2描繪用以併有及使用本發明之一或多個態樣之運算環境之另一實例;圖3A描繪根據本發明之一態樣的DEFLATE轉換呼叫(DFLTCC)指令之一種格式;圖3B描繪根據本發明之一態樣的由DEFLATE轉換呼叫指令使用之隱含暫存器(一般暫存器0)之欄位之一個實例;圖3C描繪根據本發明之一態樣的用於DEFLATE轉換呼叫指令之函式碼之一個實例;圖3D描繪根據本發明之一態樣的由DEFLATE轉換呼叫指令使用之隱含暫存器(一般暫存器1)之欄位之一個實例;圖3E描繪根據本發明之一態樣的由DEFLATE轉換呼叫指令指定之暫存器R1之內容之一個實例;圖3F描繪根據本發明之一態樣的由DEFLATE轉換呼叫指令使用之暫
存器R1+1之內容之一個實例;圖3G描繪根據本發明之一態樣的由DEFLATE轉換呼叫指令指定之暫存器R2之內容之一個實例;圖3H描繪根據本發明之一態樣的由DEFLATE轉換呼叫指令使用之暫存器R2+1之內容之一個實例;圖3I描繪根據本發明之一態樣的由DEFLATE轉換呼叫指令指定之暫存器R3之內容之一個實例;圖3J描繪根據本發明之一態樣的由DEFLATE轉換呼叫指令之DFLTCC-QAF(查詢可用函式)函式使用之參數區塊之內容之一個實例;圖3K描繪根據本發明之一態樣的由DEFLATE轉換呼叫指令之DFLTCC-GDHT(產生動態霍夫曼資料表)函式使用之參數區塊之內容之一個實例;圖3L描繪根據本發明之一態樣的由DEFLATE轉換呼叫指令之DFLTCC-CMPR(壓縮)及DFLTCC-XPND(展開)函式使用之參數區塊之內容之一個實例;圖4描繪根據本發明之一或多個態樣之子位元組邊界之一個實例;圖5A至圖5C描繪根據本發明之一態樣的繪示子位元組邊界如何應用於DFTLCC-CMPR函式之實例;圖6描繪根據本發明之一態樣的不具有壓縮之資料區塊之一個實例;圖7描繪根據本發明之一態樣的使用固定霍夫曼資料表(FHT)之具有壓縮資料之區塊之一個實例;圖8描繪根據本發明之一態樣的使用動態霍夫曼資料表(DHT)之具有壓縮資料之區塊之一個實例;
圖9描繪根據本發明之一態樣的儲存體中之壓縮資料集之一個實例;圖10描繪根據本發明之一態樣的將資料壓縮成壓縮資料集之三個區塊之程式之樣本之一個實例;圖11描繪根據本發明之一態樣的對集合之第一壓縮資料區塊進行作業之DFLTCC-CMPR函式之參數區塊內容之一個實例;圖12描繪根據本發明之一態樣的對集合之第二壓縮資料區塊進行作業之DFLTCC-CMPR函式之參數區塊內容之一個實例;圖13描繪根據本發明之一態樣的將來自壓縮資料集之資料解壓縮之程式之樣本之一個實例;圖14A至圖14C描繪根據本發明之一態樣的在多次執行DFLTCC-CMPR之前及之後的線上歷程記錄緩衝區之實例;圖15A至圖15E描繪根據本發明之一態樣的在多次執行DFLTCC之前及之後的循環歷程記錄緩衝區之實例;圖16A至圖16C描繪根據本發明之一態樣的在多次執行DFLTCC-XPND之前及之後的線上歷程記錄緩衝區之實例;圖17描繪根據本發明之一態樣的使用DEFLATE轉換呼叫指令之一個實例;圖18描繪根據本發明之一態樣的使用循環歷程記錄緩衝區之一個實例;圖19A至圖19B描繪根據本發明之一態樣的促進運算環境內之處理之一個實例;圖20A描繪用以併有及使用本發明之一或多個態樣之運算環境之另一實例;
圖20B描繪圖20A之記憶體之另外細節;圖21描繪雲端運算環境之一項實施例;且圖22描繪抽象模型層之一個實例。
根據本發明之一態樣,提供促進運算環境內之處理之能力。作為一個實例,提供單一指令(例如在硬體/軟體介面處之單一架構化硬體機器指令)以執行函式(亦被稱作作業),諸如壓縮或解壓縮函式,以將資料壓縮及/或解壓縮(亦被稱作解壓縮(uncompress))。該指令為通用處理器指令集架構(ISA)之部分,該通用處理器指令集架構(ISA)係由通用處理器上之程式(例如作業系統或使用者程式)分派。藉由使用ISA指令以執行壓縮/解壓縮,不需要由作業系統進行任務切換來執行壓縮/解壓縮作業,藉此節省了執行循環。另外,藉由使用單一指令以將資料壓縮及/或解壓縮,縮減了諸如通用處理器之處理器內之執行時間。
在一個實例中,該指令執行符合業界標準(被稱作DEFLATE標準)之壓縮及解壓縮作業,且該指令被稱作DEFLATE轉換呼叫指令。DEFLATE標準包括針對表示資料之原始形式中(資料之未壓縮形式中)之重複字串之壓縮資料符號的描述。此類符號包括重複字串之指標及長度,其描述與正被處理之資料之當前位置有關的先前處理之重複字串之位置及長度。資料之先前處理之未壓縮形式被稱作歷程記錄。在一個實例中,歷程記錄為記憶體中之位元組之連續數目,其可達例如32K位元組。
參考圖1A描述用以併有及使用本發明之一或多個態樣之運算環境之一項實施例。運算環境100包括例如處理器102(例如中央處理單
元)、記憶體104(例如主記憶體;亦稱為系統記憶體、主儲存體、中央儲存體、儲存體)及一或多個輸入/輸出(I/O)裝置及/或介面106,前述各者經由例如一或多個匯流排108及/或其他連接件而彼此耦接。
在一個實例中,處理器102係基於由紐約阿蒙克市之國際商業機器公司(International Business Machines Corporation,Armonk,New York)供應的z/Architecture®硬體架構,且為諸如IBM Z®伺服器之伺服器之部分,IBM Z®伺服器亦係由國際商業機器公司供應並實作z/Architecture硬體架構。z/Architecture硬體架構之一項實施例被描述於名為「z/Architecture Principles of Operation」之公開案(IBM公開案第SA22-7832-11號,第12版,2017年9月)中,該公開案之全文特此以引用之方式併入本文中。然而,z/Architecture硬體架構僅為一個實例架構;其他架構及/或其他類型之運算環境可包括及/或使用本發明之一或多個態樣。在一個實例中,處理器執行諸如z/OS®作業系統之作業系統,z/OS®作業系統亦係由國際商業機器公司供應。
處理器102包括用以執行指令之複數個功能組件。如圖1B中所描繪,此等功能組件包括例如:指令提取組件120,其用以提取待執行之指令;指令解碼單元122,其用以解碼已提取指令並用以獲得已解碼指令之運算元;指令執行組件124,其用以執行已解碼指令;記憶體存取組件126,其用以在必要時存取記憶體以進行指令執行;及寫回組件130,其用以提供已執行指令之結果。根據本發明之一或多個態樣,此等組件中之一或多者可包括在壓縮/解壓縮處理(或可使用本發明之一或多個態樣之其他處理)中使用之一或多個其他組件之至少一部分或能夠存取該一或多個其他組件,如本文中所描述。該一或多個其他組件包括例如壓縮
/解壓縮組件(或其他組件)136。
參考圖2描述用以併有及使用本發明之一或多個態樣之運算環境之另一實例。在一個實例中,運算環境係基於z/Architecture硬體架構;然而,運算環境可基於由國際商業機器公司或其他公司供應之其他架構。
參看圖2,在一個實例中,運算環境包括中央電子裝置複合體(CEC)200。CEC 200包括複數個組件,諸如記憶體202(亦稱為系統記憶體、主記憶體、主儲存體、中央儲存體、儲存體),其耦接至一或多個處理器(亦稱為中央處理單元(CPU))204及輸入/輸出子系統206。
記憶體202包括例如一或多個邏輯分割區208、管理邏輯分割區之超管理器210,及處理器韌體212。超管理器210之一個實例為由紐約阿蒙克市之國際商業機器公司供應的處理器資源/系統管理器(PR/SMTM)超管理器。如本文中所使用,韌體包括例如處理器之微碼。韌體包括例如用於實作較高層級機器碼之硬體層級指令及/或資料結構。在一項實施例中,韌體包括例如專屬碼,其通常係作為包括受信任軟體之微碼或特定於底層硬體之微碼被遞送,並控制對系統硬體之作業系統存取。
每一邏輯分割區208能夠充當一單獨系統。亦即,每一邏輯分割區可被獨立地重設,執行諸如z/OS作業系統之客體作業系統220或另一作業系統,並與不同程式222一起進行作業。在邏輯分割區中執行之作業系統或應用程式似乎能夠存取完整的系統,但實際上,該系統之僅一部分係可用的。
記憶體202耦接至處理器(例如CPU)204,其為可分配至邏輯分割區之實體處理器資源。舉例而言,邏輯分割區208包括一或多個邏
輯處理器,其中之每一者表示可動態地分配至邏輯分割區之實體處理器資源204之全部或部分。
另外,記憶體202耦接至I/O子系統206。I/O子系統206可為中央電子裝置複合體之部分或與中央電子裝置複合體分離。其導引主儲存體202與耦接至中央電子裝置複合體之輸入/輸出控制單元230及輸入/輸出(I/O)裝置240之間的資訊流動。
可使用許多類型之I/O裝置。一種特定類型為資料儲存裝置250。資料儲存裝置250可儲存一或多個程式252、一或多個電腦可讀程式指令254,及/或資料等等。電腦可讀程式指令可經組態以實行本發明之態樣之實施例之功能。
作為一個實例,每一處理器204包括一快取記憶體階層之至少一個快取記憶體260(例如本機快取記憶體),該快取記憶體階層包括複數個快取記憶體層級,包括一或多個本機快取記憶體及/或一或多個共用快取記憶體。另外,在一項實施例中,本機快取記憶體及記憶體202耦接至在執行資料之壓縮及/或解壓縮(及/或本發明之一或多個態樣之其他作業)中之一或多者時使用之壓縮/解壓縮組件(或其他組件)262。在各個實例中,可存在執行此等任務之一或多個組件。許多變化係可能的。
在一項實施例中,處理器(例如處理器204)進行以下操作:獲得指令(例如DEFLATE轉換呼叫指令);解碼指令;執行針對指令之設定,包括轉譯將由指令使用之位址;及將用於指令之命令發送至耦接至處理器之組件,諸如組件262,以執行由指令指定之函式。組件262能夠存取快取記憶體階層及記憶體,使得在執行指定函式時,其讀取資料,處理資料並將已處理資料儲存回。作為一實例,組件262為硬體組件。
在一另外實施例中,組件262之至少一部分被包括為處理器之部分。許多變化係可能的。
中央電子裝置複合體200可包括及/或耦接至抽取式/非抽取式、揮發性/非揮發性電腦系統儲存媒體。舉例而言,其可包括及/或耦接至非抽取式非揮發性磁性媒體(通常被稱作「硬碟機」)、用於自抽取式非揮發性磁碟(例如「軟碟」)進行讀取及向其進行寫入之磁碟機,及/或用於自諸如CD-ROM、DVD-ROM或其他光學媒體之抽取式非揮發性光碟進行讀取或向其進行寫入之光碟機。應理解,可結合中央電子裝置複合體200使用其他硬體及/或軟體組件。實例包括但不限於:微碼、裝置驅動器、冗餘處理單元、外部磁碟機陣列、RAID系統、磁帶機及資料封存儲存系統等等。
另外,中央電子裝置複合體200可與眾多其他通用或專用運算系統環境或組態一起進行作業。可適合於與中央電子裝置複合體200一起使用之熟知運算系統、環境及/或組態之實例包括但不限於個人電腦(PC)系統、伺服器電腦系統、精簡型用戶端、複雜型用戶端、手持型或膝上型裝置、多處理器系統、基於微處理器之系統、機上盒、可程式化消費型電子裝置、網路PC、小型電腦系統、大型主機電腦系統,及包括以上系統或裝置中之任一者之分散式雲端運算環境,以及其類似者。
儘管本文中描述了運算環境之各個實例,但本發明之一或多個態樣可與許多類型之環境一起使用。本文中所提供之運算環境僅為實例。
根據本發明之一態樣,運算環境,諸如運算環境100或中央電子裝置複合體200,使用提供用以將資料壓縮及解壓縮之機制之轉換設
施。在一個實例中,轉換設施為提供用以使用DEFLATE壓縮資料格式將資料壓縮及解壓縮之機制之DEFLATE轉換設施。在一個實例中,當設施指示符被設定為例如一時,轉換設施安裝於系統中。作為z/Architecture硬體架構之一個特定實例,當轉換設施安裝於z/Architecture架構性模式下時,設施位元151被設定為例如一。設施包括例如DEFLATE轉換呼叫指令,其實施例在下文被描述。
在一個實例中,DEFLATE轉換呼叫指令執行與使資料之狀態在資料之原始(未壓縮)形式與資料之壓縮表示之間變換相關的功能,如由已選取標準所指定,諸如網際網路工程任務小組(IETF)請求建議(RFC)1951規格,其被描述於1996年5月的網際網路工程任務小組請求建議1951之DEFLATE壓縮資料格式規格版本1.3中。
在一個實例中,未壓縮資料為位元組序列,且資料之壓縮表示包括符號。符號表示未壓縮資料之個別位元組,被稱作文字位元組;或符號表示未壓縮資料之週期性位元組序列,被稱作重複字串。作為一實例,霍夫曼資料表指定壓縮資料符號與未壓縮資料之間的編碼及解碼。存在兩種類型之霍夫曼資料表:固定霍夫曼資料表(FHT),其為包括例如所有可能的寫碼之預定規格;及動態霍夫曼資料表(DHT),其為針對待壓縮之資料特定地建立之寫碼集合,該寫碼集合可為所有可能的寫碼之子集。運用DHT產生之資料之壓縮表示通常小於運用FHT產生之相同資料之壓縮表示。維持最近最多處理的未壓縮資料(被稱作歷程記錄)之一部分以用於編碼及解碼表示重複字串之壓縮資料符號。歷程記錄為重複字串之參考來源。隨著在作業期間處理資料而更新歷程記錄。
如所指示,在一個實例中,DEFLATE轉換呼叫指令使用
DEFLATE壓縮資料格式,其被描述於RCF 1951之DEFLATE壓縮資料格式規格版本1.3中。適用於DEFLATE轉換呼叫指令之DEFLATE標準之屬性包括例如:
˙壓縮資料集包括一系列區塊。存在三種類型之區塊。一種類型包括3位元標頭後接長度資訊及未壓縮資料,且兩種類型之區塊包括3位元標頭後接壓縮資料元素。
˙壓縮資料元素可包括動態霍夫曼資料表之壓縮表示、壓縮資料符號,及區塊結束(EOB)符號。
˙壓縮資料元素具有各種位元長度。
˙壓縮資料元素可開始或結束於儲存體中之位元組邊界之間。
˙壓縮資料元素係自例如最右位元位置至最左位元位置按順序載入至位元組中。
當壓縮資料元素佔據儲存體中之位元組之部分而非全部時,存取儲存體中之整個位元組。儲存體運算元長度指定可定址位元組之數目,其可指定多於壓縮資料佔據之位元的位元。
下文進一步描述關於壓縮資料區塊之額外細節。
參考圖3A至圖3L描述DEFLATE轉換呼叫(DFLTCC)指令之一項實施例。在一個實例中,使用通用處理器(例如處理器102或204)執行該指令。在本文中之描述中,指示特定位置、特定欄位及/或欄位之特定大小(例如特定位元組及/或位元)。然而,可提供其他位置、欄位及/或大小。另外,儘管指定了將位元設定為例如一或零之特定值,但此僅為實例。在其他實例中,可將位元設定為不同值,諸如相反值或另一值。許多
變化係可能的。
在一項實施例中,程式(例如作業系統或使用者程式)可多次執行DEFLATE轉換呼叫指令以將單一資料串流壓縮或解壓縮。舉例而言,當應用程式將大資料串流(例如大於1M位元組)壓縮或解壓縮時,作業可包括用以將資料串流之已緩衝部分壓縮或解壓縮之多次呼叫。根據本發明之一個態樣,程式宣告緩衝區(例如32K位元組緩衝區),其用以累積在跨越DEFLATE轉換呼叫指令之多次執行之作業期間處理之未壓縮資料之歷程記錄。緩衝區被稱作循環歷程記錄緩衝區,其係使用DEFLATE轉換呼叫指令被定義,如本文中所描述。
參看圖3A,在一個實例中,DEFLATE轉換呼叫(DFLTCC)指令300之格式為RRF格式,其表示具有延伸作業碼(opcode)欄位及額外暫存器欄位之暫存器及暫存器作業。作為一實例,指令包括:作業碼欄位302(例如位元0至15),其具有指示DEFLATE轉換呼叫作業之作業碼;第一暫存器欄位(R1)304(例如位元24至27),其指定第一對一般暫存器;第二暫存器欄位(R2)306(例如位元28至31),其指定第二對一般暫存器;及第三暫存器欄位(R3)308(例如位元16至19),其指定第三一般暫存器。由R1欄位304指定之暫存器之內容指定(儲存體中)第一運算元之位置;由R2欄位306指定之暫存器之內容指定(儲存體中)第二運算元之位置;且由R3欄位308指定之暫存器之內容指定(儲存體中)第三運算元之位置。R1+1之內容指定第一運算元之長度,且R2+1之內容指定第二運算元之長度。在一個實例中,指令之位元20至23被保留且應含有零;否則,程式可能不會在未來相容地進行作業。如本文中所使用,程式為發出DEFLATE轉換呼叫指令之程式。其可為使用者程式、作業系統或另一類型之程式。
在一項實施例中,指令之執行包括使用一或多個隱含一般暫存器(亦即,未由指令明確地指定之暫存器)。舉例而言,一般暫存器0及1用於DEFLATE轉換呼叫指令之執行中,如本文中所描述。在一個實例中,一般暫存器0用以指定待執行之函式(以及歷程記錄緩衝區類型,下文所描述),且一般暫存器1用以提供由指令使用之參數區塊之位置。
作為一實例,參考圖3B,一般暫存器0(309)包括歷程記錄緩衝區類型欄位310及函式碼欄位312。在一個特定實例中,一般暫存器0之位元位置56包括歷程記錄緩衝區類型,且一般暫存器0之位元位置57至63含有函式碼;但在其他實施例中,可使用其他位元以含有歷程記錄緩衝區類型及/或函式碼。在一個實例中,當一般暫存器0之位元57至63指定未指派或未安裝之函式碼時,辨識到規格例外狀況。
DEFLATE轉換呼叫指令之實例指派函式碼被展示於圖3C中,且包括例如:函式碼0(313),其指示DFLTCC-QAF(查詢可用函式)函式;函式碼1(315),其指示DFLTCC-GDHT(產生動態霍夫曼資料表)函式;函式碼2(317),其指示DFLTCC-CMPR(壓縮)函式;及函式碼4(319),其指示DFLTCC-XPND(展開)函式。每一碼使用一參數區塊,且參數區塊之大小在一個實例中取決於函式。舉例而言,對於DFLTCC-QAF函式,參數區塊為32位元組;對於DFLTCC-GDHT函式,參數區塊為384位元組;且對於DFLTCC-CMPR及DFLTCC-XPND函式,參數區塊為1536位元組。在此實例中未指派其他函式碼。儘管描述了實例函式及函式碼,但可使用其他函式及/或函式碼。
當指定函式為DFLTCC-CMPR或DFLTCC-XPND時,一般暫存器0之位元56指定在作業期間使用之歷程記錄緩衝區類型(HBT)。當
HBT為零時,歷程記錄緩衝區被稱作線上歷程記錄緩衝區。當使用線上歷程記錄緩衝區時,歷程記錄在DFLTCC-CMPR被指定時例如緊接於第二運算元左邊,且在DFLTCC-XPND被指定時例如緊接於第一運算元左邊。當HBT為一時,歷程記錄緩衝區被稱作循環歷程記錄緩衝區。當使用循環歷程記錄緩衝區時,歷程記錄在DFLTCC-CMPR或DFLTCC-XPND被指定時為第三運算元之部分或全部。當指定DFLTCC-QAF或DFLTCC-GDHT函式時,忽略一般暫存器0之位元56。在一個實例中,忽略一般暫存器0之位元位置0至31。另外,在一個實例中,一般暫存器0之位元位置32至55被保留且應含有零;否則,程式可能不會在未來相容地進行作業。
參考圖3D描述關於由DEFLATE轉換呼叫指令使用之另一隱含暫存器(一般暫存器1)之另外細節。一般暫存器1(314)之內容指定例如儲存體中之參數區塊之最左位元組之邏輯位址316。在一個實例中,參數區塊將在4K位元組邊界上被指定;否則,辨識到規格例外狀況。下文進一步描述關於參數區塊之另外細節。
對於指定函式(例如DFLTCC-QAF、DFLTCC-GDHT、DFLTCC-CMPR、DFLTCC-XPND),一般暫存器0、1及R3之內容未被修改。另外,在一個實例中,R1欄位304指定一般暫存器之奇偶對。其將指定偶數編號暫存器且不指定一般暫存器0;否則,辨識到規格例外狀況。
如圖3E至圖3F中所描繪及本文中進一步詳細地所描述,一般暫存器R1 318之內容指示第一運算元位址320,且一般暫存器R1+1 322之內容用以判定第一運算元之長度324。舉例而言,當指定函式為DFLTCC-CMPR或DFLTCC-XPND時,一般暫存器R1 318之內容指定第一
運算元之最左位元組之邏輯位址。當指定函式為DFLTCC-CMPR時,一般暫存器R1+1之內容結合參數區塊(下文所描述)之新任務(NT)及子位元組邊界(SBB)欄位之值而指定第一運算元之長度。以下資料表提供展現隨一般暫存器R1+1之內容、NT欄位及SBB欄位而變的DFLTCC-CMPR函式之第一運算元之長度的實例:
當指定函式為DFLTCC-XPND時,一般暫存器R1+1之內容指定第一運算元之長度。當指定函式為DFLTCC-CMPR或DFLTCC-XPND時,將資料壓縮或解壓縮之結果儲存於第一運算元位置處。當指定DFLTCC-QAF或DFLTCC-GDHT函式時,忽略一般暫存器R1及R1+1之內容。
此外,對於指定函式(例如DFLTCC-QAF、DFLTCC-GDHT、DFLTCC-CMPR及DFLTCC-XPND),在一個實例中,R2欄位306指定一般暫存器之奇偶對。其將指定偶數編號暫存器且不指定一般暫存器0;否則,辨識到規格例外狀況。
如圖3G至3H中所描繪及本文中進一步詳細地所描述,一般暫存器R2 326之內容指示第二運算元位址328,且一般暫存器R2+1 330之內容用以判定第二運算元之長度332。舉例而言,當指定函式為DFLTCC-GDHT、DFLTCC-CMPR或DFLTCC-XPND時,一般暫存器R2之內容指定第二運算元之最左位元組之邏輯位址。當指定函式為DFLTCC-CMPR或
DFLTCC-GDHT時,一般暫存器R2+1之內容指定第二運算元之長度。當指定函式為DFLTCC-XPND時,一般暫存器R2+1之內容結合參數區塊之NT及SBB欄位之值而指定第二運算元之長度。當第二運算元長度被參考並在指令之執行開始時具有非零值時,自第二運算元位置提取資料。當第二運算元長度被參考、在指令之執行開始時具有值零且參數區塊之接續旗標(CF)欄位在指令之執行開始時為一時,不存取第二運算元。
當指定DFLTCC-QAF函式時,忽略一般暫存器R2及R2+1之內容。當指定DFLTCC-GDHT函式且一般暫存器R2+1之內容指定等於零之長度時,辨識到規格例外狀況,且不存取第二運算元。當指定DFLTCC-CMPR或DFLTCC-XPND函式、參數區塊之接續旗標(CF)欄位在指令之執行開始時為零且一般暫存器R2+1之內容指定等於零之長度時,辨識到規格例外狀況,且不存取第二運算元。
如圖3I中所展示,當指定函式為DFLTCC-CMPR或DFLTCC-XPND且歷程記錄緩衝區類型(HBT)為循環(例如HBT 310=1)時,一般暫存器R3 335之內容指定循環歷程記錄緩衝區位址337。舉例而言,指定第三運算元之最左位元組之邏輯位址。其將指定例如4K位元組邊界;否則,辨識到規格例外狀況。在一個實例中,循環歷程記錄緩衝區位於第三運算元位置處。當指定函式為DFLTCC-CMPR或DFLTCC-XPND且HBT為零時,忽略一般暫存器R3之內容。當指定DFLTCC-QAF或DFLTCC-GDHT函式時,忽略一般暫存器R3之內容。在一個實例中,對於指定函式(例如DFLTCC-QAF、DFLTCC-GDHT、DFLTCC-CMPR及DFLTCC-XPND),R3欄位不指定一般暫存器0或一般暫存器1;否則,辨識到規格例外狀況。
作為作業之部分,當指定函式為DFLTCC-CMPR時,將一般暫存器R1中之位址遞增包括處理位元位置0之第一運算元之已處理位元組之數目,且將一般暫存器R1+1中之長度遞減相同數目;將一般暫存器R2中之位址遞增第二運算元之已處理位元組之數目,且將一般暫存器R2+1中之長度遞減相同數目。包括處理位元位置0之第一運算元之已處理位元組之數目為例如由被除數為已處理輸出位元之數目與SBB之原始值之總和且除數為值八的整數除法產生的整數商。位址及長度之形成及更新取決於定址模式,如下文所描述。
作為作業之部分,當指定函式為DFLTCC-XPND時,將一般暫存器R1中之位址遞增第一運算元之已處理位元組之數目,且將一般暫存器R1+1中之長度遞減相同數目;將一般暫存器R2中之位址遞增包括處理位元位置0之第二運算元之已處理位元組之數目,且將一般暫存器R2+1中之長度遞減相同數目。包括處理位元位置0之第二運算元之已處理位元組之數目為由被除數為已處理輸入位元之數目與SBB之原始值之總和且除數為值八的整數除法產生的整數商。位址及長度之形成及更新取決於定址模式,如下文所描述。
在一項實施例中,在24位元定址模式下,以下情況適用:
˙一般暫存器1、R1、R2及R3之位元位置40至63之內容分別構成參數區塊、第一運算元、第二運算元及循環歷程記錄緩衝區之位址,且忽略位元位置0至39之內容。
˙已更新之第一運算元位址及第二運算元位址之位元40至63分別替換一般暫存器R1及R2中之對應位元。忽略已更新位址之位元位置40之進位輸出,且將一般暫存器R1及R2之位元位置32至39之內容設定
為零。一般暫存器R1及R2之位元位置0至31之內容保持不變。當指令以部分或正常完成而結束且已更新運算元位址等於在指令之執行開始時之運算元位址時,將對應一般暫存器之位元位置32至39設定為零。
˙一般暫存器R1+1及R2+1之位元位置32至63之內容形成例如32位元無正負號二進位整數,其分別指定第一運算元及第二運算元中之位元組之數目。忽略一般暫存器R1+1及R2+1之位元位置0至31之內容。
˙已更新之第一運算元長度及第二運算元長度之位元32至63分別替換一般暫存器R1+1及R2+1中之對應位元。一般暫存器R1+1及R2+1之位元位置0至31之內容保持不變。
在一項實施例中,在31位元定址模式下,以下情況適用:
˙一般暫存器1、R1、R2及R3之位元位置33至63之內容分別構成參數區塊、第一運算元、第二運算元及循環歷程記錄緩衝區之位址,且忽略位元位置0至32之內容。
˙已更新之第一運算元位址及第二運算元位址之位元33至63分別替換一般暫存器R1及R2中之對應位元。忽略已更新位址之位元位置33之進位輸出,且將一般暫存器R1及R2之位元位置32之內容設定為零。一般暫存器R1及R2之位元位置0至31之內容保持不變。當指令以部分或正常完成而結束且已更新運算元位址等於在指令之執行開始時之運算元位址時,將對應一般暫存器之位元位置32設定為零。
˙一般暫存器R1+1及R2+1之位元位置32至63之內容形成32位元無正負號二進位整數,其分別指定第一運算元及第二運算元中之位元組之數目。忽略一般暫存器R1+1及R2+1之位元位置0至31之內容。
˙已更新之第一運算元長度及第二運算元長度之位元32至63分別替換一般暫存器R1+1及R2+1中之對應位元。一般暫存器R1+1及R2+1之位元位置0至31之內容保持不變。
在一項實施例中,在64位元定址模式下,以下情況適用:
˙一般暫存器1、R1、R2及R3之位元位置0至63之內容分別構成參數區塊、第一運算元、第二運算元及循環歷程記錄緩衝區之位址。
˙已更新之第一運算元位址及第二運算元位址之位元0至63分別替換一般暫存器R1及R2中之對應位元。忽略已更新位址之位元位置0之進位輸出。
˙一般暫存器R1+1及R2+1之位元位置0至63之內容形成64位元無正負號二進位整數,其分別指定第一運算元及第二運算元中之位元組之數目。
˙已更新之第一運算元長度及第二運算元長度之位元0至63分別替換一般暫存器R1+1及R2+1中之對應位元。
在存取暫存器模式下,存取暫存器1、R1、R2及R3分別指定含有參數區塊、第一運算元、第二運算元及循環歷程記錄緩衝區之位址空間。當在存取暫存器模式下指定具有線上歷程記錄緩衝區之DFTCC-CMPR時,存取暫存器R2指定含有線上歷程記錄之位址空間。當在存取暫存器模式下指定具有線上歷程記錄緩衝區之DFTCC-XPND時,存取暫存器R1指定含有線上歷程記錄之位址空間。
下文描述關於各種函式之另外細節。
函式碼0:DFLTCC-QAF(查詢可用函式)
DFLTCC-QAF(查詢可用函式)函式提供用以指示已安裝函式及已安裝參數區塊格式之可用性之機制。參考圖3J描述用於DFLTCC-QAF函式之參數區塊之一種實例格式。在一個實例中,用於DFLTCC-QAF函式(例如函式碼0)之參數區塊340包括已安裝函式向量342及已安裝參數區塊格式向量346。在一個特定實例中,此等向量分別儲存至參數區塊之位元組0至15及位元組24至25。下文進一步描述該等向量中之每一者。
作為一實例,已安裝函式向量342之位元0至127分別對應於DEFLATE轉換呼叫指令之函式碼0至127。當位元為例如一時,安裝對應函式;否則,不安裝該函式。
另外,在一個實例中,已安裝參數區塊格式向量346之位元0至15分別對應於DFLTCC-GDHT、DFLTCC-CMPR及DFLTCC-XPND函式之參數區塊格式0至15。當位元為例如一時,安裝對應參數區塊格式;否則,不安裝該參數區塊格式。在一個實例中,將零儲存至參數區塊之保留位元組16至23及26至31。
儘管關於參數區塊340描述了某些欄位,但在其他實施例中可包括額外、較少及/或其他欄位。
在一項實施例中,DFLTCC-QAF函式忽略一般暫存器R1、R2、R3、R1+1及R2+1之內容。
在適用時,對於參數區塊,辨識到程式事件記錄(PER)儲存體更改事件。在適用時,對於參數區塊,辨識到PER零位址偵測事件。
在一個實例中,當DFLTCC-QAF函式之執行完成時設定條件碼0;在一個實例中,條件碼1、2及3不適用於查詢函式。
函式碼1:DFLTCC-GDHT(產生動態霍夫曼資料表)
當指定DFLTCC-GDHT函式時,使用第二運算元,例如作為用以產生動態霍夫曼資料表(DHT)之壓縮表示之來源,如DEFLATE標準所指定。
在一個實例中,DFLTCC-GDHT函式使用參數區塊,其實例參考圖3K被描述。在本文中所描述之實例參數區塊中,指示參數區塊內針對特定欄位之特定位置及該等欄位之特定大小(例如特定位元組及/或位元)。然而,可針對該等欄位中之一或多者提供其他位置及/或大小。另外,儘管指定了將位元設定為例如一或零之特定值,但此僅為實例。在其他實例中,可將位元設定為不同值,諸如相反值或另一值。許多變化係可能的。
另外,在一個實例中,參數區塊包括一或多個保存欄位及一或多個保留欄位。DFLTCC-GDHT函式不修改保存欄位。將保存欄位與保留欄位進行區別以使程式能夠初始化單一儲存位置,將該儲存位置用於DFLTCC-GDHT函式之參數區塊,並隨後將同一儲存位置用於DFLTCC-CMPR函式之參數區塊。保留欄位將含有零;否則,程式可能不會在未來相容地進行作業。當作業結束時,保留欄位可被儲存為零或可保持不變。
又另外,一些欄位由其他函式(例如DFLTCC-CMPR或DFLTCC-XPND)使用,且因此,亦可運用彼等欄位之描述來描述與彼等函式相關之態樣。
在一個實例中,用於DFLTCC-GDHT函式之參數區塊360包括以下欄位:
參數區塊版本號碼(PBVN)362:參數區塊之位元組0至1指定參數區塊之版本及大小。PBVN之位元0至11被保留且應含有零;否則,程式可能不會在未來相容地進行作業。PBVN之位元12至15含有指定參數區塊之格式的無正負號二進位整數。DFLTCC-QAF函式提供用以指示可用參數區塊格式之機制。當模型不支援所指定之參數區塊之格式時,辨識到一般運算元資料例外狀況。PBVN由程式指定且在指令之執行期間未被修改。
模型版本號碼(MVN)363:參數區塊之位元組2為識別執行指令之模型的無正負號二進位整數。不需要程式來初始化MVN。在指令之執行期間更新MVN。儲存於MVN中之值係模型相依的。
動態霍夫曼資料表(DHT)產生控制(DHTGC)364:參數區塊之位元組17之位元2適用於產生動態霍夫曼資料表(DHT)。DHT指定表示文字位元組、重複字串長度、區塊結束(EOB)符號及重複字串指標距離之符號之霍夫曼碼。特定符號之霍夫曼碼之值隨該符號以資料之未壓縮形式表示之實體之出現次數之計數而變。當針對符號之計數為零時,符號之DHT中不存在霍夫曼碼。在一個實例中,DHTGC指定等於零之計數將被如下處理:
針對文字位元組、EOB符號、重複字串長度及重複字串指
標距離之每一可能值指定霍夫曼碼的DHT被稱作通用DHT。針對在資料之未壓縮形式中未出現之文字位元組、重複字串長度或重複字串指標距離之值不指定霍夫曼碼的DHT被稱作非通用DHT。
對於DHTGC之所有值,所得DHT針對所有可能的重複字串長度及指標距離指定霍夫曼碼,如由DEFLATE標準所定義。因此,下文進一步所描述的DHT之所得壓縮形式之霍夫曼文字(HLIT)及霍夫曼距離(HDIST)子元素各自含有例如值29。
當指定DFLTCC-GDHT函式時,DHTGC為至作業之輸入。當指定DFLTCC-CMPR或DFLTCC-XPND函式時,DHTGC不適用於作業。在一項實施例中,在指令之執行期間,DHTGC未被修改。
作業結束補充碼(OESC)365:參數區塊之位元組19為提供關於報告至程式之條件之額外資訊的無正負號二進位整數。由於此欄位由多個函式使用,故一些條件係指由其他函式使用之參數區塊(例如由DFLTCC-CMPR及DFLTCC至XPND函式使用的圖3L之參數區塊)之欄位。在一個實例中,當所報告之條件為一般運算元資料例外狀況時,作業被視為已抑制,但更新參數區塊之OESC欄位,其在此狀況下被定義如下:
當作業在不報告一般運算元資料例外狀況之情況下結束時,將零儲存至OESC欄位。
針對除了零以外之補充碼之支援係模型相依的。當存在多個條件時,碼(若存在)被報告於OESC欄位中係模型相依的。
壓縮動態霍夫曼資料表長度(CDHTL)366:參數區塊之十二個位元,自位元組56之位元4開始直至位元組57之位元7,含有指定參數區塊之CDHT欄位(例如CDHT 367)中DHT之壓縮格式之長度(作為位元計數)的無正負號二進位整數。
當指定DFLTCC-GDHT函式時,CDHTL為來自作業之輸出。
當指定DFLTCC-CMPR函式且霍夫曼資料表類型(例如圖3L之HTT 376)為一時,CDHTL為至作業之輸入。當CDHTL不指定CDHT之適當長度時,辨識到一般運算元資料例外狀況。當指定DFLTCC-CMPR函式時,CDHTL未被修改。
當指定DFLTCC-XPND函式且作業在解碼BTYPE為10二進位之區塊之僅一部分之後結束時,將區塊中DHT之壓縮表示之長度儲存至此欄位。當指定DFLTCC-XPND函式且作業在區塊邊界處或在解碼
BTYPE為00或01二進位之區塊之僅一部分之後結束時,將零儲存至此欄位。當在BTYPE為10二進位之區塊內恢復解壓縮作業時(亦即,當CF(圖3L之接續旗標373)等於一且IFS(未完成函式狀態383)等於C或D十六進位時,下文所描述),此欄位為至作業之輸入。
壓縮動態霍夫曼資料表(CDHT)367:參數區塊之位元組64至351含有動態霍夫曼資料表(DHT)之壓縮格式。
DHT指定霍夫曼碼(位元序列)以表示兩個元素集合。一個集合之元素包括文字位元組、EOB符號及重複字串長度。另一集合之元素包括重複字串指標距離。DHT之壓縮表示定義碼長度集合並指定每一集合之每一元素之碼長度(CL)。被預期為在作業期間被參考之元素之霍夫曼碼係衍生自針對該元素指定之CL及具有相同指定CL之同一集合中之元素之數目。特定言之,作為一實例,DHT之壓縮表示包括以下各者:
˙用以指定表示文字位元組、EOB符號及重複字串長度之霍夫曼碼之數目的HLIT欄位。
˙用以指定表示重複字串指標距離之霍夫曼碼之數目的HDIST欄位。
˙用以指定表示碼長度之霍夫曼碼之數目的HCLEN(霍夫曼碼長度)欄位。
˙指定針對壓縮DHT定義之例如19碼長度中之每一者之位元長度的碼序列。
˙指定由文字位元組、EOB符號及重複字串長度組成之集合之元素中之每一者之碼長度的碼序列。
˙指定由重複字串指標距離組成之集合之元素中之每一者
之碼長度的碼序列。
下文參考區塊類型為10二進位之壓縮資料區塊之描述來描述DHT之壓縮表示之另外細節。
在一個實例中,DHT之壓縮表示在CDHT欄位中靠左對齊。亦即,位元組64之最右位元含有DHT之壓縮表示之HLIT子元素之最低有效位元。
當指定DFLTCC-GDHT函式時,DHT之壓縮表示為來自作業之輸出。
當指定DFLTCC-CMPR函式且下文所描述之HTT為一時,DHT之壓縮表示為至作業之輸入。DFLTCC-CMPR函式不修改CDHT欄位。
當指定DFLTCC-XPND函式且作業在解碼BTYPE為10二進位之區塊之僅一部分之後結束時,將區塊中DHT之壓縮表示儲存至此欄位。當指定DFLTCC-XPND函式且作業在區塊邊界處或在解碼BTYPE為00或01二進位之區塊之僅一部分之後結束時,將零儲存至此欄位。當在BTYPE為10二進位之區塊內恢復解壓縮作業時(亦即,當CF等於一且IFS等於C或D十六進位時),此欄位為至作業之輸入。
當CDHT被修改時,將不用以表示DHT之壓縮表示的欄位之位元儲存為零。
儘管上文關於參數區塊360描述了各個欄位,但在其他實施例中可包括額外、較少及/或其他欄位。
由程式使用參數區塊之動態霍夫曼資料表產生控制(DHTGC)欄位364將DHT產生之各態樣指定至機器。希望來源含有未壓縮
資料,且在完成作業之後,運用DFLTCC-CMPR函式指定所產生之結果以將同一來源壓縮。
在一項實施例中,在處理當前作業時,不存在參考先前作業之歷程記錄。
在一個實例中,當一般暫存器R2+1之內容指定大於例如32K位元組之長度時,以下情況適用:
˙僅使用第二運算元之前32K位元組以產生DHT。
˙對於除了第二運算元之前32K位元組以外之位置,未辨識到存取例外狀況。
當一般暫存器R2+1之內容指定等於零之長度時,辨識到規格例外狀況,且不存取第二運算元。
所得壓縮DHT包括表示區塊結束(EOB)符號之霍夫曼碼。
將所產生之DHT之壓縮格式儲存至參數區塊之壓縮動態霍夫曼資料表(CDHT)欄位367。將所產生之DHT之壓縮格式之長度儲存至參數區塊之CDHTL欄位366。
作業包括將模型識別儲存至參數區塊之模型版本號碼欄位363。
當作業在未辨識到一般運算元資料例外狀況之情況下結束時,將零儲存至參數區塊之作業結束補充碼(OESC)欄位365。
當DFLTCC-GDHT函式之執行完成時設定條件碼0;條件碼1、2及3不適用於DFLTCC-GDHT函式。
作業不修改一般暫存器R2及R2+1。
當指定DFLTCC-GDHT函式時,忽略一般暫存器R1、R1+
1及R3之內容。
在適用時,對於第二運算元位置及參數區塊,辨識到PER零位址偵測事件。
函式碼2:DFLTCC-CMPR(壓縮)
當指定DFLTCC-CMPR函式時,執行壓縮作業。作業包括將來自第二運算元位置之資料編碼成壓縮資料符號,其儲存至第一運算元位置。
在一個實例中,DFLTCC-CMPR函式使用參數區塊,其實例參考圖3L被描述。一些欄位已在上文關於參數區塊360被描述,且因此在下文以相同參考號碼被列出且未被進一步詳細地描述。
在一個實例中,參數區塊370包括:參數區塊版本號碼(PBVN)362。
模型版本號碼(MVN)363。
接續旗標(CF)373:參數區塊之位元63在為一時指示作業部分地完成且接續狀態緩衝區之內容(例如在接續狀態緩衝區欄位392中)可用以恢復作業。程式將接續旗標(CF)初始化為零且在出於恢復作業之目的而重新執行指令的情況下不修改CF;否則,結果係不可預測的。
新任務(NT)374:參數區塊之位元組16之位元0在為一時指示作業適用於壓縮資料集之開始。因此,來自先前作業之歷程記錄及檢查值均不適用於當前作業。當NT在作業開始時為一且作業在部分完成之後結束時,將零儲存至NT欄位。當NT為零時,來自先前作業之歷程記錄及檢查值適用於當前作業。
檢查值類型(CVT)375:參數區塊之位元組16之位元2指定
參數區塊之檢查值欄位(例如欄位387)中所含有之檢查值類型。當CVT為零時,檢查值類型為例如32位元循環冗餘檢查(CRC-32)。當CVT為一時,檢查值類型為例如32位元Adler總和檢查碼(Adler-32)。在指令之執行期間不修改CVT位元。
霍夫曼資料表類型(HTT)376:參數區塊之位元組16之位元4在為零時指定含有固定霍夫曼碼之資料表(FHT)係在壓縮作業期間使用,如由DEFLATE標準所定義。當HTT為一時,如參數區塊之CDHT欄位中所指定之含有動態霍夫曼碼之資料表(DHT)係在壓縮作業期間使用。HTT不適用於解壓縮作業。在指令之執行期間不修改HTT位元。
區塊接續旗標(BCF)377:當指定DFLTCC-CMPR函式時,參數區塊之位元組16之位元5適用。當為零時,將3位元區塊標頭且在適用時將如參數區塊之CDHT欄位(例如欄位367)中所指定之動態霍夫曼資料表之壓縮格式在儲存任何壓縮資料元素之前儲存至第一運算元位置。當為一時,不將區塊標頭及DHT之壓縮格式儲存至第一運算元位置。當NT為一時,將BCF視為等於零。在指令之執行期間不修改BCF位元。
區塊關閉控制(BCC)378:當指定DFLTCC-CMPR函式時,參數區塊之位元組16之位元6適用。當為一時,在儲存所有壓縮資料符號之後,將區塊結束(EOB)符號儲存至第一運算元位置。當HTT指定使用FHT時,作為一實例,將為0000000二進位之霍夫曼碼(其對應於指定文字位元組、EOB符號及重複字串長度之碼之資料表中的為256之中間整數表示)用於EOB符號。當HTT指定使用DHT時,在DHT中指定EOB符號之霍夫曼碼。當BCC位元為零時,不將EOB符號儲存至第一運算元位置。在指令之執行期間不修改BCC位元。
最終區塊標頭(BHF)379:當指定DFLTCC-CMPR函式且BCF 377為零或NT 374為一時,參數區塊之位元組16之位元7適用;否則,BHF不適用。在適用且為一時,在將區塊標頭(BFINAL)儲存至第一運算元位置之前將區塊標頭之第一位元設定為一。在適用且為零時,在將區塊標頭(BFINAL)儲存至第一運算元位置之前將區塊標頭之第一位元設定為零。在指令之執行期間不修改BHF位元。
DHT產生控制(DHTGC)364:當指定DFLTCC-CMPR函式時,DHTGC不適用於作業。在指令之執行期間不修改DHTGC。
子位元組邊界(SBB)381:參數區塊之位元組18之位元5至7含有指定壓縮資料串流之位元組內之已處理位元與未處理位元之間的邊界的無正負號二進位整數。所參考之串流之位元組在作業結束時為所參考之最後位元組,意謂最右位元組;且所參考之串流之位元組在作業開始或恢復時為待參考之第一位元組,意謂最左位元組。當指定DFLTCC-CMPR函式時,SBB適用於由第一運算元位址指定之位元組。當指定DFLTCC-XPND函式時,SBB適用於由第二運算元位址指定之位元組。SBB指定已被處理之最右位元之數目。SBB為至作業之輸入及作業之輸出。
在圖4中描繪當SBB具有為011二進位之值時的壓縮資料串流之一個實例。在400處描繪在作業結束之後已被處理之資料;且在402處描繪在作業開始之前將被處理之資料。
另外,圖5A至圖5C提供展現SBB如何應用於DFLTCC-CMPR函式之實例。舉例而言,在圖5A中描繪在執行DFLTCC-CMPR函式之前及之後如何應用SBB之一個實例。在圖5B至圖5C中描繪其他實例。當NT 374為一時,將SBB 381視為等於000二進位。
返回至圖3L,描述參數區塊370之額外欄位:作業結束補充碼(OESC)365。
在一項實施例中,解壓縮作業可在IFS等於0000二進位之情況下結束且不滿足正常完成。在此類狀況下,作業在條件碼1或3被設定之情況下結束。
當壓縮作業結束時,IFS欄位係未定義的,但可被修改。
IFS不為至作業之輸入。
未完成函式長度(IFL)384:當某些作業結束時,參數區塊之位元組22至23含有長度資訊。對於解壓縮作業,IFL適用於第二運算元。當解壓縮作業在解碼BTYPE等於00二進位之區塊之一些而非全部之後結束時,IFL含有指定第二運算元中之區塊的尚未被處理之位元組之數目的無正負號二進位整數。位元組22至23含有按例如大端序位元組順序之IFL,其不同於按例如小端序位元組順序的BTYPE等於00二進位之區塊之LEN欄位。
當解壓縮作業在解碼BTYPE等於00二進位且BFINAL等於一之完整區塊之後結束時,將零儲存至IFL欄位。當解壓縮作業在解碼BTYPE為非零之區塊之一些而非全部之後結束或在區塊邊界處結束時,IFL欄位係未定義的,但可被修改。
當壓縮作業結束時,IFL欄位係未定義的,但可被修改。
IFL不為至作業之輸入。
歷程記錄長度(HL)385:參數區塊之位元組44至45含有指定可在作業期間參考之歷程記錄緩衝區中歷程記錄之位元組之數目的無正負號二進位整數。HL適用於線上及循環歷程記錄緩衝區。當新任務(NT)等於一時,歷程記錄不適用於作業之開始且歷程記錄長度被視為零以作為至作業之輸入。
當歷程記錄長度大於例如32,768且NT等於零時,辨識到一般運算元資料例外狀況。
在壓縮及解壓縮作業期間修改歷程記錄長度。當原始HL與在作業期間處理之未壓縮資料位元組之數目之總和小於或等於例如32,768時,已更新HL等於原始HL與在作業期間處理之未壓縮資料位元組之數目之總和;否則,已更新HL等於值32,768。
歷程記錄位移(HO)386:當歷程記錄緩衝區類型為循環時,參數區塊之十五個位元,自位元組46之位元1開始直至位元組47之位元7,含有指定第三運算元中之位移的無正負號二進位整數。R3之內容與歷程記錄位移之總和指定循環歷程記錄緩衝區內歷程記錄之第一位元組之位置,其為緩衝區中之未壓縮資料之最近最少處理的位元組。當歷程記錄緩衝區類型為循環時,歷程記錄位移為至作業之輸入且在作業結束時被更新。當原始HL與在作業期間處理之未壓縮資料位元組之數目之總和小於或等於例如32,768時,已更新HO等於原始HO;否則,已更新HO等於原始HO、原始HL及在作業期間處理之未壓縮資料位元組之數目之總和:模32,768。
當歷程記錄緩衝區類型為線上時,參數區塊之HO欄位係未
定義的,但可被修改。
檢查值387:參數區塊之位元組48至51含有檢查值。作為作業之部分,產生檢查值。檢查值適用於未壓縮資料運算元。亦即,檢查值適用於DFLTCC-CMPR函式之第二運算元並適用於DFLTCC-XPND函式之第一運算元。當CVT位元375為零時,產生例如32位元循環冗餘檢查檢查值(CRC-32)。當CVT位元為一時,產生例如32位元Adler總和檢查碼檢查值(Adler-32)。
產生檢查值之輸入為例如4位元組基數及在作業期間處理之未壓縮資料。基數輸入提供針對壓縮資料區塊之集合運算單一且一致之檢查值之方式,而不管DFLTCC指令被執行以處理壓縮資料區塊全集之次數。當NT位元為零時,檢查值欄位中之原始值用於基數輸入以產生檢查值。
在一個實例中,當產生Adler-32檢查值時,以下情況適用:
˙當NT位元為一時,值一用於4位元組基數輸入。
˙Adler-32檢查值產生中定義之總和為模65,521。
˙將結果按大端序位元組順序儲存至檢查值欄位。亦即,檢查值之最高有效位元組位於位元組48中,且檢查值之最低有效位元組位於位元組51中。
在一項實施例中,當產生CRC-32檢查值時,以下情況適用:
˙當NT位元為一時,值零用於4位元組基數輸入。
˙在產生CRC-32檢查值時用作除數之多項式為x32+x26+
x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x1+x0,其被表示為104C11DB7十六進位。在此表示中,最左位元對應於最高有效位元。
˙產生檢查值之第一及最終階段為分別在儲存結果之前運算基數輸入之1補數及運算結果之1補數。
˙將結果按小端序位元組順序儲存至檢查值欄位。亦即,檢查值之最低有效位元組位於位元組48中,且檢查值之最高有效位元組位於位元組51中。
在一個實例中,檢查值僅在作業在條件碼0被設定之情況下結束時對程式有意義;否則,檢查值僅為中間結果且僅對恢復作業有意義。當指定DFLTCC-CMPR函式且作業在條件碼1、2或3被設定之情況下結束時,由第二運算元位址指定之位元組左邊之一些位元組可能不包括於所得檢查值之運算中。當指定DFLTCC-XPND函式且作業在條件碼1、2或3被設定之情況下結束時,由第一運算元位址指定之位元組右邊之尚未儲存之一些結果位元組可能已經包括於所得檢查值之運算中。
區塊結束符號(EOBS)388:參數區塊之十五個位元,自位元組52之位元0開始直至位元組53之位元6,含有區塊結束(EOB)符號。參數區塊之區塊結束長度(EOBL)欄位389指定EOBS欄位中EOB符號之長度。EOB符號在EOBS欄位中靠左對齊。將未由EOB符號佔據之EOBS欄位之位元儲存為零。EOBS欄位在將資料壓縮時為作業之輸出,而不管哪一類型之霍夫曼資料表適用。EOBS欄位不用作至作業之輸入。
位元組52之位元0含有EOB符號之最高有效位元。當EOB符號之長度為7位元時,位元組52之位元6含有EOB符號之最低有效位
元。當EOB符號之長度為15位元時,位元組53之位元6含有EOB符號之最低有效位元。
對於使用FHT之區塊,EOB符號為0000000二進位,如由DEFLATE標準所定義。對於使用DHT之區塊,EOB符號由DHT定義。傳送EOB符號以便提供使程式關閉區塊之能力。
當指定DFLTCC-XPND函式時,EOBS欄位係未定義的,但可被修改。
區塊結束長度(EOBL)389:參數區塊之位元組54之位元0至3含有指定參數區塊之EOBS欄位388中區塊結束(EOB)符號之長度的無正負號二進位整數。該長度指定EOB符號在EOBS欄位中佔據之位元之數目。EOBL欄位在將資料壓縮時為作業之輸出,而不管哪一類型之霍夫曼資料表適用。EOBL欄位不用作至作業之輸入。
當指定DFLTCC-XPND函式時,EOBL欄位係未定義的,但可被修改。
壓縮動態霍夫曼資料表長度(CDHTL)366。
壓縮動態霍夫曼資料表(CDHT)367:當指定DFLTCC-CMPR函式且HTT為一時,DHT之壓縮表示為至作業之輸入。DFLTCC-CMPR函式不修改CDHT欄位。
接續狀態緩衝區(CSB)392:當條件促使值一儲存於CF欄位373中時,將內部狀態資料儲存至參數區塊之位元組384至1535;否則,參數區塊之位元組384至1535係未定義的且可被修改。所儲存之內部狀態資料係模型相依的且可隨後用以恢復作業。預期但不需要使程式初始化接續狀態緩衝區以含有例如全零。在指令在非零條件碼被設定之情況下
結束之後,且在出於恢復作業之目的而重新執行指令之前,程式不應修改接續狀態緩衝區;否則,結果係不可預測的。
儘管上文關於參數區塊370描述了各個欄位,但在其他實施例中可包括額外、較少及/或其他欄位。
下文關於將資料壓縮來描述壓縮作業之一個實例。
當整個第二運算元被壓縮並儲存至第一運算元位置時,DFLTCC-CCMPR函式發生正常完成。在一個實例中,當作業歸因於正常完成而結束時,發生以下情況:
˙將模型相依值儲存至參數區塊之模型版本號碼(MVN)欄位363。
˙將參數區塊之接續旗標(CF)欄位373設定為零。
˙更新參數區塊之子位元組邊界(SBB)欄位381。
˙更新參數區塊之區塊結束長度(EOBL)欄位389及區塊結束符號(EOBS)欄位388。
˙更新參數區塊之歷程記錄長度(HL)欄位385。
˙在適用時,更新參數區塊之歷程記錄位移(HO)欄位386。
˙將參數區塊之作業結束補充碼(OESC)欄位365設定為零。
˙更新參數區塊之檢查值欄位387。
˙將一般暫存器R1中之位址遞增包括處理位元0之第一運算元之已處理位元組之數目,且將一般暫存器R1+1中之長度遞減相同數目。包括處理位元0之第一運算元之已處理位元組之數目為由被除數為已
處理輸出位元之數目與SBB之原始值之總和且除數為值八的整數除法產生的整數商。
˙將一般暫存器R2中之位址遞增已處理來源位元組之數目,且將一般暫存器R2+1中之長度遞減相同數目。
˙設定條件碼0。
位址及長度之形成及更新取決於定址模式。
當發生正常完成時,在作業結束之後,參數區塊之CSB欄位392係未定義的。
在一個實例中,當已處理CPU判定數目個位元組時,作業結束且發生以下情況:
˙將參數區塊中之接續旗標(CF)位元373設定為一。
˙更新參數區塊中之接續狀態緩衝區(CSB)欄位392。
˙更新參數區塊之子位元組邊界(SBB)欄位381。
˙更新參數區塊之歷程記錄長度(HL)欄位385。
˙在適用時,更新參數區塊之歷程記錄位移(HO)欄位386。
˙更新參數區塊之檢查值欄位387。
˙將模型相依值儲存至參數區塊之模型版本號碼(MVN)欄位363。
˙更新參數區塊之區塊結束長度(EOBL)欄位389及區塊結束符號(EOBS)欄位388。
˙將參數區塊之作業結束補充碼(OESC)欄位365設定為零。
˙將一般暫存器R1中之位址遞增包括處理位元0之第一運算元之已處理位元組之數目,且將一般暫存器R1+1中之長度遞減相同數目。包括處理位元0之第一運算元之已處理位元組之數目為由被除數為已處理輸出位元之數目與SBB之原始值之總和且除數為值八的整數除法產生的整數商。
˙將一般暫存器R2中之位址遞增已處理來源位元組之數目,且將一般暫存器R2+1中之長度遞減相同數目。
˙設定條件碼3。
位址及長度之形成及更新取決於定址模式。
位元組之CPU判定數目取決於模型,且每當指令被執行時可為不同數目。
在指令在條件碼3被設定之情況下結束之後,預期到,程式不修改指令之任何輸入或輸出規格並分支回以重新執行指令來恢復作業。
在某些情形中,儘管在條件碼3被設定之情況下結束指令,但不更新參數區塊及一般暫存器。當CPU執行靜止作業或CPU在執行DEFLATE轉換呼叫指令的同時重試時,可發生此等情形。在此等狀況下,已處理位元組之CPU判定數目為零,可能已將資料儲存至第一運算元位置,在適用時可能已將資料儲存至第三運算元位置,且已設定對應變更位元。
在一個實例中,當以下條件中之任一者適用時,第一運算元長度不足以完成作業:
˙如由一般暫存器R1+1之內容所指定之第一運算元長度在指令之執行開始時為零。
˙第一運算元長度在指令之執行期間變得等於零且未發生正常完成。
在一個實例中,當一般暫存器R1+1之內容為零時,第一運算元長度為零,而不管參數區塊之NT及SBB欄位中之值。
在一項實施例中,當第一運算元長度在指令之執行期間變得等於零時,作業結束且發生以下情況:
˙將參數區塊中之接續旗標(CF)位元373設定為一。
˙更新參數區塊中之接續狀態緩衝區(CSB)欄位392。
˙更新參數區塊之子位元組邊界(SBB)欄位381。
˙更新參數區塊之歷程記錄長度(HL)欄位385。
˙在適用時,更新參數區塊之歷程記錄位移(HO)欄位386。
˙更新參數區塊之檢查值欄位387。
˙將模型相依值儲存至參數區塊之模型版本號碼(MVN)欄位363。
˙更新參數區塊之區塊結束長度(EOBL)欄位389及區塊結束符號(EOBS)欄位388。
˙將參數區塊之作業結束補充碼(OESC)欄位365設定為零。
˙將一般暫存器R1中之位址遞增包括處理位元0之第一運算元之已處理位元組之數目,且將一般暫存器R1+1中之長度遞減相同數目。包括處理位元0之第一運算元之已處理位元組之數目為由被除數為已處理輸出位元之數目與SBB之原始值之總和且除數為值八的整數除法產生
的整數商。
˙將一般暫存器R2中之位址遞增已處理來源位元組之數目,且將一般暫存器R2+1中之長度遞減相同數目。
˙設定條件碼1。
位址及長度之形成及更新取決於定址模式。
在一項實施例中,當第一運算元長度在指令之執行開始時為零時,作業結束且發生以下情況:
˙設定條件碼1。
在指令在條件碼1被設定之情況下結束之後,預期到,程式修改第一運算元長度、第一運算元位址或此兩者並重新執行指令以恢復作業。
在適用時,對於以下情況,辨識到PER儲存體更改事件:
˙儲存至參數區塊,如下文所描述。
˙儲存至第一運算元位置。
˙儲存至第三運算元位置,此係例如在歷程記錄緩衝區類型(HBT)為一(循環)時發生。
當整個參數區塊與PER儲存體面積指定重疊時,在適用時,對於參數區塊,辨識到PER儲存體更改事件。當參數區塊之僅一部分與PER儲存體面積指定重疊時,發生以下情況係模型相依的:
˙在適用時,對於參數區塊,辨識到PER儲存體更改事件。
˙在適用時,對於參數區塊之被儲存部分,辨識到PER儲存體更改事件。
在適用時,當HBT為一(循環)時,對於參數區塊、第一運算元位置、第二運算元位置及第三運算元位置,辨識到PER零位址偵測事件。
條件碼2不適用於DFLTC-CCMPR函式。
當指令在條件碼1或3被設定之情況下結束時,可完全或僅部分地處理自第二運算元位置參考之輸入資料。當僅部分地處理輸入資料時,第一運算元位置、第一運算元位址、第一運算元長度及參數區塊之SBB欄位中的結果不表示與已更新之第二運算元位址及長度一致的狀態。在此等狀況下,部分處理之資料及內部狀態資訊可置放於參數區塊之CSB欄位中。部分處理之資料之量取決於作業結束時存在之條件以及模型。儘管可僅部分地處理一些資料,但儲存至由已更新之第一運算元位址指定之位置左邊之結果係完整的且在作業恢復時將不被修改。另外,預期到,程式隨後重新執行指令以恢復作業,此時CSB欄位之內容在恢復作業之前被參考。當指令在條件碼0被設定之情況下結束時,所有資料被完全處理且與輸入及輸出資料相關聯之所有結果表示一致狀態。
在指令在非零條件碼被設定之情況下結束之後,且在出於恢復作業之目的而重新執行指令之前,程式不應修改參數區塊之任何欄位;否則,結果係不可預測的。
函式碼4:DFLTCC-XPND(展開)
當指定DFLTCC-XPND函式時,執行解壓縮作業。該作業包括將來自第二運算元位置之壓縮資料符號解碼成未壓縮資料,其被儲存至第一運算元位置。
在一個實例中,DFLTCC-XPND函式使用參數區塊,其實
例在上文關於圖3K至圖3L被描述。
下文關於將資料解壓縮來描述DFLTCC-XPND作業之一個實例。
當第二運算元中資料集之最終區塊之所有元素均被解碼且所有未壓縮資料被儲存至第一運算元位置時,發生正常完成。當區塊標頭之BFINAL位元為一時,識別到資料集之最後區塊。在一項實施例中,當作業歸因於正常完成而結束時,發生以下情況:
˙將模型相依值儲存至參數區塊之模型版本號碼(MVN)欄位363。
˙將參數區塊之接續旗標(CF)欄位373設定為零。
˙更新參數區塊之子位元組邊界(SBB)欄位381。
˙更新參數區塊之歷程記錄長度(HL)欄位385。
˙在適用時,更新參數區塊之歷程記錄位移(HO)欄位386。
˙將參數區塊之壓縮動態霍夫曼資料表(CDHT)欄位367及壓縮動態霍夫曼資料表長度(CDHTL)欄位366設定為零。
˙將參數區塊之作業結束補充碼(OESC)欄位365設定為零。
˙更新參數區塊之檢查值欄位387。
˙將一般暫存器R1中之位址遞增儲存於第一運算元位置處之位元組之數目,且將一般暫存器R1+1中之長度遞減相同數目。
˙將一般暫存器R2中之位址遞增包括處理位元0之第二運算元之已處理位元組之數目,且將一般暫存器R2+1中之長度遞減相同數
目。包括處理位元0之第二運算元之已處理位元組之數目為由被除數為已處理輸入位元之數目與SBB之原始值之總和且除數為值八的整數除法產生的整數商。
˙設定條件碼0。
位址及長度之形成及更新取決於定址模式。
當發生正常完成時,在作業結束之後,參數區塊之CSB欄位392係未定義的。
在一項實施例中,當已處理CPU判定數目個位元組時,作業結束且發生以下情況:
˙將參數區塊中之接續旗標(CF)位元373設定為一。
˙更新參數區塊中之接續狀態緩衝區(CSB)欄位392。
˙更新參數區塊之子位元組邊界(SBB)欄位381。
˙更新參數區塊之壓縮動態霍夫曼資料表(CDHT)欄位367及壓縮動態霍夫曼資料表長度(CDHTL)欄位366。當在處理BTYPE值為10二進位之區塊的同時發生部分完成時,將不為表示資料表所需要的CDHT欄位之位元組儲存為零。當在處理BTYPE值為00或01二進位之區塊的同時發生部分完成時,將零儲存至CDHT及CDHTL欄位。
˙更新參數區塊之歷程記錄長度(HL)欄位385。
˙在適用時,更新參數區塊之歷程記錄位移(HO)欄位386。
˙更新參數區塊之檢查值欄位387。
˙將模型相依值儲存至參數區塊之模型版本號碼(MVN)欄位363。
˙將參數區塊之作業結束補充碼(OESC)欄位365設定為零。
˙更新參數區塊之未完成函式狀態(IFS)欄位383。
˙在適用時,更新參數區塊之未完成函式長度(IFL)欄位384。
˙將一般暫存器R1中之位址遞增儲存於第一運算元位置處之位元組之數目,且將一般暫存器R1+1中之長度遞減相同數目。
˙將一般暫存器R2中之位址遞增包括處理位元0之第二運算元之已處理位元組之數目,且將一般暫存器R2+1中之長度遞減相同數目。包括處理位元0之第二運算元之已處理位元組之數目為由被除數為已處理輸入位元之數目與SBB之原始值之總和且除數為值八的整數除法產生的整數商。
˙設定條件碼3。
位址及長度之形成及更新取決於定址模式。
位元組之CPU判定數目取決於模型,且每當指令被執行時可為不同數目。
在指令在條件碼3被設定之情況下結束之後,預期到,程式不修改指令之任何輸入或輸出規格並分支回以重新執行指令來恢復作業。
在某些情形中,儘管在條件碼3被設定之情況下結束指令,但不更新參數區塊及一般暫存器。當CPU執行靜止作業或CPU在執行DEFLATE轉換呼叫指令的同時重試時,可發生此等情形。在此等狀況下,已處理位元組之CPU判定數目為零,可能已將資料儲存至第一運算元位置,在適用時可能已將資料儲存至第三運算元位置,且已設定對應變更
位元。
舉例而言,當以下情況適用時,第二運算元長度不足以完成作業:
˙BFINAL等於一之壓縮資料區塊之最後元素在作業期間尚未被解碼,且如由第二運算元長度及SBB所指定之第二運算元中位元之數目小於待解碼之下一元素之位元之數目,且由於解碼來自第二運算元位置之資料而產生之所有結果已置放於第一運算元位置處。
在一項實施例中,當第二運算元長度不足以完成作業時,作業已部分地完成,作業結束且發生以下情況:
˙將參數區塊中之接續旗標(CF)位元373設定為一。
˙更新參數區塊中之接續狀態緩衝區(CSB)欄位392。
˙更新參數區塊之子位元組邊界(SBB)欄位381。
˙更新參數區塊之壓縮動態霍夫曼資料表(CDHT)欄位367及壓縮動態霍夫曼資料表長度(CDHTL)欄位366。當在處理BTYPE值為10二進位之區塊的同時發生部分完成時,將不為表示資料表所需要的CDHT欄位之位元組儲存為零。當在處理BTYPE值為00或01二進位之區塊的同時發生部分完成時,將零儲存至CDHT及CDHTL欄位。
˙更新參數區塊之歷程記錄長度(HL)欄位385。
˙在適用時,更新參數區塊之歷程記錄位移(HO)欄位386。
˙更新參數區塊之檢查值欄位387。
˙將模型相依值儲存至參數區塊之模型版本號碼(MVN)欄位363。
˙將參數區塊之作業結束補充碼(OESC)欄位365設定為零。
˙更新參數區塊之未完成函式狀態(IFS)欄位383。
˙在適用時,更新參數區塊之未完成函式長度(IFL)欄位384。
˙將一般暫存器R1中之位址遞增儲存於第一運算元位置處之位元組之數目,且將一般暫存器R1+1中之長度遞減相同數目。
˙將一般暫存器R2中之位址遞增包括處理位元0之第二運算元之已處理位元組之數目,且將一般暫存器R2+1中之長度遞減相同數目。包括處理位元0之第二運算元之已處理位元組之數目為由被除數為已處理輸入位元之數目與SBB之原始值之總和且除數為值八的整數除法產生的整數商。
˙設定條件碼2。
位址及長度之形成及更新取決於定址模式。
在指令在條件碼2被設定之情況下結束之後,預期到,程式修改第二運算元長度、第二運算元位址或此兩者並重新執行指令以恢復作業。
舉例而言,當以下情況適用時,第一運算元長度不足以完成作業:
˙歸因於第一運算元長度等於零,由於解碼來自第二運算元位置之資料而產生之結果無法置放於第一運算元位置處。
在一項實施例中,當第一運算元長度不足以完成作業時,作業已部分地完成,作業結束且發生以下情況:
˙將參數區塊中之接續旗標(CF)位元373設定為一。
˙更新參數區塊中之接續狀態緩衝區(CSB)欄位392。
˙更新參數區塊之子位元組邊界(SBB)欄位381。
˙更新參數區塊之壓縮動態霍夫曼資料表(CDHT)欄位367及壓縮動態霍夫曼資料表長度(CDHTL)欄位366。當在處理BTYPE值為10二進位之區塊的同時發生部分完成時,將不為表示資料表所需要的CDHT欄位之位元組儲存為零。當在處理BTYPE值為00或01二進位之區塊的同時發生部分完成時,將零儲存至CDHT及CDHTL欄位。
˙更新參數區塊之歷程記錄長度(HL)欄位385。
˙在適用時,更新參數區塊之歷程記錄位移(HO)欄位386。
˙更新參數區塊之檢查值欄位387。
˙將模型相依值儲存至參數區塊之模型版本號碼(MVN)欄位363。
˙將參數區塊之作業結束補充碼(OESC)欄位365設定為零。
˙更新參數區塊之未完成函式狀態(IFS)欄位383。
˙在適用時,更新參數區塊之未完成函式長度(IFL)欄位384。
˙將一般暫存器R1中之位址遞增儲存於第一運算元位置處之位元組之數目,且將一般暫存器R1+1中之長度遞減相同數目。
˙將一般暫存器R2中之位址遞增包括處理位元0之第二運算元之已處理位元組之數目,且將一般暫存器R2+1中之長度遞減相同數
目。包括處理位元0之第二運算元之已處理位元組之數目為由被除數為已處理輸入位元之數目與SBB之原始值之總和且除數為值八的整數除法產生的整數商。
˙設定條件碼1。
位址及長度之形成及更新取決於定址模式。
在指令在條件碼1被設定之情況下結束之後,預期到,程式修改第一運算元長度、第一運算元位址或此兩者並重新執行指令以恢復作業。
在適用時,對於以下情況,辨識到PER儲存體更改事件:
˙儲存至參數區塊,如本文中所描述。
˙儲存至第一運算元位置。
˙儲存至第三運算元位置,此係例如在歷程記錄緩衝區類型(HBT)為一(循環)時發生。
在一個實例中,當整個參數區塊與PER儲存體面積指定重疊時,在適用時,對於參數區塊,辨識到PER儲存體更改事件。在一項實施例中,當參數區塊之僅一部分與PER儲存體面積指定重疊時,發生以下情況係模型相依的:
˙在適用時,對於參數區塊,辨識到PER儲存體更改事件。
˙在適用時,對於參數區塊之被儲存部分,辨識到PER儲存體更改事件。
在適用時,當HBT為一(循環)時,對於參數區塊、第一運算元位置、第二運算元位置及第三運算元位置,辨識到PER零位址偵測事
件。
當指令在條件碼1、2或3被設定之情況下結束時,可完全或僅部分地處理自第二運算元位置參考之輸入資料。當僅部分地處理輸入資料時,第一運算元位置、第一運算元位址、第一運算元長度、參數區塊之SBB欄位、參數區塊之檢查值欄位、參數區塊之HL欄位、參數區塊之IFS欄位以及在適用時為第三運算元位置及參數區塊之HO欄位中的結果不表示與已更新之第二運算元位址及長度一致的狀態。在此等狀況下,部分處理之資料及內部狀態資訊可置放於參數區塊之CSB欄位中。部分處理之資料之量取決於作業結束時存在之條件以及模型。儘管可僅部分地處理一些資料,但儲存至由已更新之第一運算元位址指定之位置左邊之結果係完整的且在作業恢復時將不被修改。另外,預期到,程式隨後重新執行指令以恢復作業,此時CSB欄位之內容在恢復作業之前被參考。當作業在條件碼0被設定之情況下結束時,所有資料被完全處理且與輸入及輸出資料相關聯之所有結果表示一致狀態。
在指令在非零條件碼被設定之情況下結束之後,且在出於恢復作業之目的而重新執行指令之前,程式不應修改參數區塊之任何欄位;否則,結果係不可預測的。
壓縮資料區塊
在一個實例中,例如自左至右處理儲存體中之壓縮資料區塊之位元組。壓縮資料區塊可能或可能不開始或結束於位元組邊界上。壓縮資料區塊為例如位元串流。將區塊之元素每次一個位元地載入至儲存體中。將位元串流例如自右至左載入於儲存體之每一位元組內且按例如自左至右之位元組順序載入。當元素為霍夫曼碼時,將位元例如自元素之最高
有效位元至最低有效位元按順序儲存。當元素不為霍夫曼碼時,將位元例如自元素之最低有效位元至最高有效位元按順序儲存。
圖6繪示區塊類型為00二進位之區塊600之實例,其不含有壓縮資料符號。在一項實施例中,以下情況適用於此實例:
˙壓縮資料區塊600由以被識別為b0之位元組0之位元4開始並以被識別為b60之位元組7之位元0結束的位元串流602組成。
˙在位元串流中遇到之第一元素為位元組0之位元4中之BFINAL(最終區塊標頭位元)。
˙在位元串流中遇到之第二元素為位元組0之位元2至3中之BTYPE(區塊類型)。在此實例中,BTYPE為00二進位。
˙當BTYPE為00二進位時,忽略BTYPE左邊及位元組邊界右邊之位元,其在此實例中為位元組0之位元0至1。
˙在位元串流中遇到之第三元素為LEN欄位之最低有效位元組(LSB),其之後為LEN欄位之最高有效位元組(MSB)。LEN欄位指定具有文字資料之區塊中位元組之數目。文字資料為例如未壓縮資料。具有文字資料之位元組在位元串流中之NLEN欄位之後。NLEN為LEN之1補數。在一個實例中,位元組1至2含有按小端序位元組順序之LEN欄位。
˙在LEN欄位之後的位元串流中遇到之元素分別為NLEN欄位之最低有效位元組,其之後為NLEN欄位之最高有效位元組。位元組3至4含有按小端序位元組順序之NLEN欄位。NLEN欄位為LEN欄位之1補數。
˙在NLEN欄位之後的位元串流中遇到之元素為未壓縮資料,被識別為文字位元組。位元組5至7含有未壓縮資料,其與用以產生此
區塊之來源資料保持不變。
˙此區塊中所含有之元素均不為霍夫曼碼。將此區塊中之每一元素自元素之最低有效位元至最高有效位元按順序儲存至位元串流,如由DEFLATE標準所定義。由於LEN、NLEN及文字元素各自為對準於位元組邊界上之整數個位元組,故此等元素可作為位元組之單位被處理,而未必作為位元之單位被處理。
圖7繪示區塊類型為01二進位之區塊700之實例,其含有使用固定霍夫曼資料表(FHT)產生之壓縮資料符號。在一項實施例中,以下情況適用於此實例:
˙壓縮資料區塊700由以被識別為b0之位元組0之位元4開始並以被識別為b89之位元組11之位元3結束的位元串流702組成。
˙在位元串流中遇到之第一元素為位元組0之位元4中之BFINAL。
˙在位元串流中遇到之第二元素為位元組0之位元2至3中之BTYPE。在此實例中,BTYPE為01二進位。
˙固定霍夫曼資料表(FHT)不為區塊之組分。
˙在位元串流中遇到之第三元素為第一壓縮資料符號,其開始於位元組0之位元1中。在一個實例中,壓縮資料符號由按列出順序在位元串流中遇到之以下子元素組成:
1.可變長度之霍夫曼碼。碼之最高有效位元指定碼之長度。碼係在以碼之最高有效位元開始並以碼之最低有效位元結束的位元串流中遇到。當碼表示文字值或區塊結束符號時,碼為壓縮資料符號之唯一子元素。當碼表示對歷程記錄緩衝區之指標之長度時,碼之後為壓縮資料
符號之後續子元素。
2.在適用時,如由DEFLATE標準所指定,額外長度位元可在表示指標長度之霍夫曼碼之後。額外長度位元係在以最低有效位元開始並以額外長度位元之最高有效位元結束的位元串流中遇到。
3.在位元串流中遇到之下一子元素為對歷程記錄緩衝區之指標之5位元距離碼。距離碼係在以例如碼之最高有效位元開始並以距離碼之最低有效位元結束的位元串流中遇到。
4.在適用時,如由DEFLATE標準所指定,額外距離位元可在距離碼之後。額外距離位元係在以最低有效位元開始並以額外距離位元之最高有效位元結束的位元串流中遇到。
˙作為一實例,位元組0之位元0至1、位元組1至9之所有位元及位元組10之位元2至7含有壓縮資料符號之位元。
˙在位元串流中遇到之最後元素為含有單一子元素之壓縮資料符號,該子元素為表示區塊結束(EOB)符號之霍夫曼碼。BTYPE為01二進位之區塊之EOB符號為0000000二進位。在此實例中,位元組10之位元1含有EOB符號之最高有效位元,且位元組11之位元3含有EOB符號之最低有效位元。
˙位元組11之位元3含有位元串流之最後位元,其為壓縮資料區塊之最後位元。
圖8繪示區塊類型為10二進位之區塊800之實例,其含有使用動態霍夫曼資料表(DHT)產生之壓縮資料符號。在一項實施例中,以下情況適用於此實例:
˙壓縮資料區塊800由以被識別為b0之位元組0之位元4開
始並以被識別為b89之位元組11之位元3結束的位元串流802組成。
˙在位元串流中遇到之第一元素為位元組0之位元4中之BFINAL。
˙在位元串流中遇到之第二元素為位元組0之位元2至3中之BTYPE。在此實例中,BTYPE為10二進位。
˙在位元串流中遇到之第三元素為動態霍夫曼資料表(DHT)之壓縮表示,其開始於位元組0之位元1中。在一個實例中,DHT之壓縮表示由以下子元素組成,該等子元素係按列出順序在位元串流中遇到:
1. HLIT:5位元HLIT子元素與257之總和指定表示文字位元組、EOB符號及重複字串長度之霍夫曼碼之數目。HLIT之有效值在例如0至29之範圍內。HLIT位元係在以最低有效位元開始並以HLIT子元素之最高有效位元結束的位元串流中遇到。在此實例中,被識別為b3之位元組0之位元1為HLIT子元素之最低有效位元。
2. HDIST:5位元HDIST子元素與1之總和指定表示重複字串指標距離之霍夫曼碼之數目。HDIST之有效值在例如0至29之範圍內。HDIST位元係在以最低有效位元開始並以HDIST子元素之最高有效位元結束的位元串流中遇到。
3. HCLEN:4位元HCLEN子元素與4之總和指定表示碼長度之霍夫曼碼之數目。HCLEN之有效值在例如0至15之範圍內。HCLEN位元係在以最低有效位元開始並以HCLEN子元素之最高有效位元結束的位元串流中遇到。
4.指定針對壓縮DHT定義之碼長度中之每一者之位元長度
的碼序列。碼之數目等於HCLEN與4之總和。每一碼為3位元。
5.指定由文字位元組、EOB符號及重複字串長度組成之集合之元素中之每一者之碼長度的碼序列。所指定之碼長度之數目等於HLIT與257之總和。
當文字位元組、EOB符號及重複字串長度之集合之最後碼長度(CL)為16、17或18,且CL之後的額外位元指定針對比針對該集合定義元素之更多的元素重複CL時,碼長度亦適用於重複字串指標距離之集合。指定文字位元組、EOB符號及重複字串長度之集合之碼長度的碼序列,後為指定重複字串指標距離之碼長度的碼序列,為兩個集合之連續序列。
6.指定由重複字串指標距離組成之集合之元素中之每一者之碼長度的碼序列。所指定之碼長度之數目等於HDIST與1之總和。
˙在位元串流中遇到之第四元素為第一壓縮資料符號。在一項實施例中,壓縮資料符號由以下子元素組成,該等子元素係按列出順序在位元串流中遇到:
1.可變長度之霍夫曼碼。碼之最高有效位元指定碼之長度。碼係在以碼之最高有效位元開始並以碼之最低有效位元結束的位元串流中遇到。當碼表示文字值或區塊結束符號時,碼為壓縮資料符號之唯一子元素。當碼表示對歷程記錄緩衝區之指標之長度時,碼之後為壓縮資料符號之後續子元素。
2.在適用時,如由DEFLATE標準所指定,額外長度位元可在表示指標長度之霍夫曼碼之後。額外長度位元係在以例如最低有效位元開始並以額外長度位元之最高有效位元結束的位元串流中遇到。
3.在位元串流中遇到之下一子元素為對歷程記錄緩衝區之指標之5位元距離碼。距離碼係在以例如碼之最高有效位元開始並以距離碼之最低有效位元結束的位元串流中遇到。
4.在適用時,如由DEFLATE標準所指定,額外距離位元可在距離碼之後。額外距離位元係在以例如最低有效位元開始並以額外距離位元之最高有效位元結束的位元串流中遇到。
˙在位元串流中遇到之直至並包括例如位元組10之位元5的後續位元含有壓縮資料符號之位元。
˙在位元串流中遇到之最後元素為含有單一子元素之壓縮資料符號,該子元素為表示區塊結束(EOB)符號之霍夫曼碼。在此實例中,位元組10之位元4含有EOB符號之最高有效位元,且位元組11之位元3含有EOB符號之最低有效位元。
˙位元組11之位元3含有位元串流之最後位元,其為壓縮資料區塊之最後位元。
在各種區塊類型之上述描述中,指定了某些恆定值,以及特定位元、位元組、方向等等。此等僅為實例。在其他實施例中可指定其他恆定值、位元、位元組、方向等等。
處理壓縮資料集
提供處理壓縮資料集以說明DEFLATE轉換呼叫指令之實例使用並擴增參數區塊之各個欄位之描述的實例。該等實例並不描述所有可能的情境、要求及能力,而是說明各種情境、要求及/或能力。該等實例及描述適用於例如儲存體中之壓縮資料集,其實例被繪示於圖9中。如所展示,壓縮資料集900包括複數個壓縮資料區塊902,且資料集900之開始
由壓縮資料集開始位址(CDSBA)904指示。
在一項實施例中,對於本文中所描述之實例,希望處理壓縮資料集之程式考慮以下情況:
˙可藉由多次使用DEFLATE轉換呼叫指令以處理整個壓縮資料集來定義及參考單一參數區塊。參數區塊之檢查值欄位387及檢查值類型欄位375應適用於壓縮資料集中之壓縮資料區塊(例如所有區塊)。參數區塊之子位元組邊界欄位381應適用於個別區塊之間的轉變。歷程記錄長度385及歷程記錄位移386可適用於多個區塊。在一個實例中,參數區塊之剩餘欄位僅適用於藉由DEFLATE轉換呼叫指令之特定執行而處理的個別壓縮資料區塊。
˙個別檢查值適用於例如由壓縮資料集表示之所有未壓縮資料。
˙不存在供區塊1中之第一壓縮資料符號參考之歷程記錄。區塊1中之後續符號可參考對應於區塊1中先前遇到之符號之歷程記錄。區塊2中之符號可參考對應於區塊2及1中先前遇到之符號之歷程記錄。區塊3中之符號可參考對應於區塊3、2及1中先前遇到之符號之歷程記錄。
圖10列出用以將圖9中所描述之壓縮資料集900中之資料壓縮的樣本程式1000之一部分之一個實例。另外,圖11列出圖10中在位於被標記為IABLK1(1002)之指令位址處之DFLTCC指令之執行期間使用的參數區塊之某些欄位之值。舉例而言,圖11描繪各個參數區塊欄位1100;彼等欄位在壓縮作業開始時之值1102;當條件碼1、2或3被設定時彼等欄位在作業結束時之值1104;及當條件碼0被設定時彼等欄位在作業
結束時之值1106。
相似地,圖12列出在位於圖10之被標記為IABLK2(1004)之指令位址之DFLTCC指令之執行期間使用的參數區塊之某些欄位之值。此等圖展現與多次使用DEFLATE轉換呼叫指令以處理整個壓縮資料集相關聯之一些細節。
此外,參看圖13,描繪用以將來自圖9之壓縮資料集之資料解壓縮的樣本程式1300之一部分之一個實例。
將資料壓縮
將資料壓縮之處理程序包括產生一或多個壓縮資料區塊。DEFLATE轉換呼叫指令之壓縮函式用以建構個別區塊之一部分。該部分可為整個區塊。此函式產生區塊類型(BTYPE)為01或10二進位而非00二進位之區塊之部分。當參數區塊之新任務位元(NT)為一時,產生壓縮資料之第一區塊且先前執行之壓縮作業不存在供參考之歷程記錄。
在一個實例中,個別區塊含有按列出順序之以下元素:
1.最終區塊指示(BFINAL)。
2.區塊類型(BTYPE)。
3.在適用時,動態霍夫曼資料表之壓縮格式。
4.壓縮資料符號。
5.區塊結束(EOB)符號。
壓縮作業產生按針對區塊定義之順序指定之元素。該等元素可開始或結束於儲存體中之位元組邊界之間。子位元組邊界(SBB)適用於將第一元素儲存至第一運算元位置。壓縮資料區塊為位元串流。將區塊之組分每次一個位元地載入至儲存體中。作為一實例,將位元串流自右向
左載入於儲存體之每一位元組內且按自左至右之位元組順序載入。
當SBB為非零時,在第一運算元位置處對第一位元組之參考為更新參考。
將來自第二運算元位置之未壓縮資料壓縮且作為壓縮資料符號儲存至第一運算元位置。
當第一運算元長度在指令之執行開始時為零時,不存取第一運算元,且不變更一般暫存器R1及R1+1中之各別的第一運算元位址及第一運算元長度。此在CF欄位373(圖3L)之值在指令之執行開始時為零或一時適用。
當第二運算元長度在指令之執行開始時為零時,不存取第二運算元,且不變更一般暫存器R2及R2+1中之各別的第二運算元位址及第二運算元長度。作為一實例,對於以下狀況,第二運算元長度在指令之執行開始時為零:
˙重新執行指令以恢復作業(參數區塊之CF欄位373在指令之執行開始時為一),且可參考參數區塊之CSB欄位392而不參考第二運算元來執行作業之完成。
在一項實施例中,程式不使用DEFLATE轉換呼叫指令以執行以下作業:
˙產生空壓縮資料區塊。空壓縮資料區塊由例如區塊標頭、在適用時為DHT之壓縮格式以及EOB符號組成。
˙關閉開啟的壓縮資料區塊。亦即,僅將EOB符號儲存至壓縮資料區塊之末端。
壓縮演算法包括搜尋最近壓縮之資料之已更新歷程記錄以
尋找與當前自第二運算元位置壓縮之資料匹配的位元組字串。在一項實施例中,在壓縮作業開始或恢復之前,以下情況適用:
˙當新任務(NT)374為一時,不存在可用於參考之初始歷程記錄。
˙當NT為零且一般暫存器0(HBT)之位元56為零(線上)時,可用於參考之初始歷程記錄位於第二運算元之最左位元組左邊並鄰近於該最左位元組,且初始歷程記錄之長度由參數區塊之歷程記錄長度(HL)欄位385指定。
˙當NT為零且一般暫存器0(HBT)之位元56為一(循環)時,可用於參考之初始歷程記錄位於第三運算元位置中,如由參數區塊之歷程記錄位移(HO)欄位386及歷程記錄長度(HL)欄位385所指定。
在壓縮作業期間,可對整個歷程記錄進行提取型參考,而不管歷程記錄之哪些位元組用以執行作業。另外,當歷程記錄緩衝區類型為循環時,可對整個32K位元組歷程記錄緩衝區進行提取型參考,而不管歷程記錄之哪些位元組用以執行作業。
在壓縮作業期間,更新歷程記錄。在將來源資料之一或多個位元組編碼成壓縮資料符號而不會遇到一般運算元資料例外狀況條件之後,將來源位元組串連至歷程記錄之末端。最大值高達32K位元組的來源資料之最近最多處理的位元組構成可用於參考之已更新歷程記錄,同時處理來源資料之後續位元組。
當壓縮作業結束時,以下情況在一個實例中適用於可用於隨後恢復作業或開始另一作業之所得歷程記錄:
˙當HBT為線上時,在更新歷程記錄時不需要對第二運算
元位置之儲存體更新。已更新之第二運算元位址及已更新HL指定所得歷程記錄之已更新位置及已更新長度。
˙當HBT為循環時,在更新歷程記錄時執行對第三運算元位置之儲存體更新。第三運算元位址、已更新HO及已更新HL指定所得歷程記錄之已更新位置及已更新長度。
作為實例,圖14A至圖14C繪示在DFLTCC-CMPR函式被指定以及線上歷程記錄被指定(例如位元310=0)之情況下多次執行DEFLATE轉換呼叫指令之前及之後在每次執行以部分完成而結束時線上歷程記錄緩衝區相對於第二運算元之位置。舉例而言,圖14A描繪在DFLTCC-CMPR執行次數1之前的線上歷程記錄;圖14B描繪在DFLTCC-CMPR執行次數2之前及在執行次數1之後的線上歷程記錄;且圖14C描繪在DFLTCC-CMPR執行次數2之後的線上歷程記錄。圖14C中所提供之解釋亦適用於圖14A及圖14B。
當由一般暫存器0之位元56指定之HBT(歷程記錄緩衝區類型)為循環(例如位元310=1)時,歷程記錄維持於例如位於第三運算元位置處之32K位元組緩衝區中。緩衝區(HB)內歷程記錄之第一位元組之位置由例如一般暫存器R3之內容與歷程記錄位移(HO)386(圖3L)之總和指定。歷程記錄之第一位元組為緩衝區中之未壓縮資料之最近最少處理的位元組。作為一實例,緩衝區(HE)內歷程記錄之最後位元組之位置由以下方程式指定:HE=R3+模32K(HO+HL-1)
歷程記錄之最後位元組為緩衝區中之未壓縮資料之最近最多處理的位元組。當歷程記錄位移(HO)386(圖3L)與歷程記錄長度(HL)
385之總和超過第三運算元之大小(例如32K位元組)時,歷程記錄自第三運算元之結束換行至第三運算元之開始。
作為實例,圖15A至圖15E繪示在DFLTCC-CMPR函式被指定以及循環歷程記錄緩衝區被指定(位元310=1)之情況下多次執行DEFLATE轉換呼叫指令之前及之後在每次執行以部分完成而結束時循環歷程記錄緩衝區內歷程記錄之位置。舉例而言,圖15A描繪在DFLTCC執行次數1之前的循環歷程記錄緩衝區;圖15B描繪在DFLTCC執行次數2之前及在執行次數1之後的循環緩衝區;圖15C描繪在DFLTCC執行次數3之前及在執行次數2之後的循環緩衝區;圖15D描繪在DFLTCC執行次數4之前及在執行次數3之後的循環緩衝區;且圖15E描繪在DFLTCC執行次數4之後的循環緩衝區。圖15E中所提供之解釋亦適用於圖15A至圖15D。
在一個實例中,當HBT為循環且自第二運算元位置處理之位元組之數目小於例如32,768時,以下情況適用:
˙對第三運算元位置中之位元組範圍進行儲存。該位元組範圍包括並開始於由例如以下者指定之位置:R3+模32K(HOO+HLO),其中
HOO:在指令執行之前的歷程記錄位移。
HLO:在指令執行之前的歷程記錄長度。
該位元組範圍包括並結束於由例如以下者指定之位置:R3+模32K(HOO+HLO+BP-1),其中
BP:在指令之執行期間自第二運算元位置處理之位元組之數目。
作為一實例,對剛才描述之位元組範圍進行之儲存經受儲
存型存取例外狀況、PER儲存體更改事件及設定變更位元。
˙可對第三運算元位置中不包括於剛才描述之範圍中之位元組進行不修改儲存位置之內容且並非必要的儲存。至此類位置之儲存亦經受儲存型存取例外狀況、PER儲存體更改事件及設定變更位元。
當HBT為循環且自第二運算元位置處理之位元組之數目大於或等於例如32,768時,對第三運算元位置之所有位元組進行儲存,且該等儲存經受儲存型存取例外狀況、PER儲存體更改事件及設定變更位元。
當區塊接續旗標(BCF)377為零時,將包括BFINAL後接BTYPE之3位元區塊標頭儲存至第一運算元位置。將區塊標頭之BFINAL位元設定為等於參數區塊之最終區塊標頭位元(BHF)379。當霍夫曼資料表類型(HTT)376為零時,將區塊標頭之BTYPE欄位設定為例如01二進位,且當HTT為一時,將區塊標頭之BTYPE欄位設定為例如10二進位。當儲存區塊標頭時,將BFINAL位元儲存至由第一運算元之第一位元組中之SBB指定之位元。隨後,將BTYPE儲存至第一運算元位置。當BCF為一時,不儲存區塊標頭。
當霍夫曼資料表類型(HTT)為一時,檢查參數區塊中指定之動態霍夫曼資料表(DHT)367之壓縮格式以尋找一般運算元資料例外狀況條件。當針對DHT之指定壓縮格式存在一般運算元資料例外狀況條件時,壓縮DHT被稱作無效且不用以將資料壓縮。下文進一步描述一般運算元資料例外狀況條件之實例定義。當DHT之壓縮格式指定碼長度之位元長度,或文字位元組、EOB符號、重複字串長度或重複字串指標距離之碼長度(其大於霍夫曼演算法指定適當及功能霍夫曼樹所需要之長度)時,壓縮DHT仍然用以衍生功能DHT並將資料壓縮。當區塊接續旗標(BCF)為零且
HTT為一時,將如由參數區塊之CDHT欄位367中所指定之DHT之壓縮格式儲存至第一運算元位置。
在壓縮作業期間,將來自第二運算元位置之來源資料編碼成壓縮資料符號。作為編碼之部分,比較來源資料與歷程記錄。當未發現匹配時,來源資料之中間表示為文字位元組,其與來源資料相同。當發現匹配時,來源資料之中間表示為對含有來源資料之重複複本的歷程記錄內之位置的指標。指標由長度及距離組成。長度為與歷程記錄中之字串匹配之來源資料位元組之數目。距離為自歷程記錄結束至與來源資料匹配之字串開始之位元組之數目。在一個實例中,來自霍夫曼資料表之兩個霍夫曼碼樹用以將來源資料之中間表示編碼成壓縮資料符號。當霍夫曼資料表類型(HTT)為零時,如由DEFLATE標準所描述之固定霍夫曼資料表(FHT)指定用於編碼中間結果之兩個霍夫曼碼樹。當HTT 376為一時,參數區塊之CDHT欄位367中指定的衍生自DHT之壓縮表示的動態霍夫曼資料表(DHT)指定用於編碼中間結果之兩個霍夫曼碼樹。如DEFLATE標準所描述而執行編碼。當使用不指定將用以編碼來源資料之中間表示之霍夫曼碼的非通用DHT時,辨識到一般運算元資料例外狀況。在將結果儲存至第一運算元位置之前,按由DEFLATE標準指定之順序配置所得壓縮資料符號之位元。
在一個實例中,重複字串長度在3至258位元組之範圍內。
在處理另外來源資料之前,更新歷程記錄,如本文中所描述。
在一個實例中,重複處理程序直至已處理所有來源位元組。
在已處理來源位元組(例如所有來源位元組)且區塊關閉控制(BCC)378為一之後,將區塊結束(EOB)符號儲存至第一運算元位置。當使用固定霍夫曼資料表時,霍夫曼碼0000000二進位用於EOB符號。當使用動態霍夫曼資料表(DHT)時,用於EOB符號之霍夫曼碼由DHT指定。在將EOB符號儲存至第一運算元位置之前,按由DEFLATE標準指定之順序配置EOB符號之位元。
在一個實例中,當作業之最後壓縮資料符號(包括EOB符號)僅佔據最後位元組之一部分以進行儲存時,將不含有最後符號之一部分的位元儲存為零。
在一項實施例中,在處理最後壓縮資料符號之後,發生以下情況:
˙將模型相依值儲存至參數區塊之模型版本號碼(MVN)欄位363。
˙更新參數區塊之子位元組邊界(SBB)欄位381。
˙更新參數區塊之區塊結束長度(EOBL)欄位389及區塊結束符號(EOBS)欄位388。
˙將一般暫存器R1中之位址遞增包括處理位元0之第一運算元之已處理位元組之數目,且將一般暫存器R1+1中之長度遞減相同數目。包括處理位元0之第一運算元之已處理位元組之數目為由被除數為已處理輸出位元之數目與SBB之原始值之總和且除數為值八的整數除法產生的整數商。
˙將一般暫存器R2中之位址遞增已處理來源位元組之數目,且將一般暫存器R2+1中之長度遞減相同數目。
位址及長度之形成及更新取決於定址模式。
與將來源資料壓縮一致,來源資料為用以產生上文所描述之32位元檢查值之輸入。將所得檢查值儲存至參數區塊之檢查值欄位387。
將資料解壓縮
在一項實施例中,DEFLATE轉換呼叫指令之展開函式用以將壓縮資料集解碼成未壓縮資料。第二運算元位置中之壓縮資料集包括一或多個連續壓縮資料區塊。在一個實例中,自左至右處理資料集之區塊,且例如自左至右處理區塊之位元組。區塊可能或可能不開始或結束於位元組邊界上。每一區塊獨立於資料集中之其他區塊被解碼。一般暫存器R2指定資料集中之第一區塊之最左位元組之邏輯位址。資料集中之最後區塊為在BFINAL位元等於一之情況下進行處理期間遇到之區塊。在一個實例中,存在待處理的三種類型之區塊。解碼區塊之內容之技術隨區塊類型(BTYPE)而變。
當作業開始時(例如當參數區塊之接續旗標欄位373為零時),由一般暫存器R2、新任務(NT)欄位374及子位元組邊界(SBB)欄位381指定之位元被解譯為壓縮資料區塊之第一位元(區塊標頭之BFINAL位元)。
展開函式包括參考最近解碼之未壓縮資料之已更新歷程記錄。在一項實施例中,在解壓縮作業開始或恢復之前,以下情況適用:
˙當新任務(NT)374為一時,不存在可用於參考之初始歷程記錄。
˙當NT為零且一般暫存器0(HBT)之位元56為零(線上)
時,可用於參考之初始歷程記錄位於第一運算元之最左位元組左邊並鄰近於該最左位元組,且初始歷程記錄之長度由參數區塊之歷程記錄長度(HL)欄位385指定。
˙當NT為零且一般暫存器0(HBT)之位元56為一(循環)時,可用於參考之初始歷程記錄位於第三運算元位置中,如由參數區塊之歷程記錄位移(HO)欄位386及歷程記錄長度(HL)欄位385所指定。
在作業期間,可對整個歷程記錄進行提取型參考,而不管歷程記錄之哪些位元組用以執行作業。另外,當歷程記錄緩衝區類型為循環時,可對整個歷程記錄緩衝區(例如32K位元組)進行提取型參考,而不管歷程記錄之哪些位元組用以執行作業。
在解壓縮作業期間,更新歷程記錄。在解碼來源資料而不會遇到一般運算元資料例外狀況條件之後,將未壓縮資料之所得位元組串連至歷程記錄之末端。最大值高達例如32K位元組的未壓縮資料之最近最多解碼的位元組構成可用於參考之已更新歷程記錄,同時處理後續來源資料。
在一個實例中,當解壓縮作業結束時,以下情況適用於可用於隨後恢復作業或開始另一作業之所得歷程記錄:
˙當HBT為線上時,對第一運算元位置之儲存體更新亦構成對所得歷程記錄之更新。已更新之第一運算元位址及已更新HL指定所得歷程記錄之已更新位置及已更新長度。
˙當HBT為循環時,在更新歷程記錄時執行對第三運算元位置之儲存體更新。第三運算元位址、已更新HO及已更新HL指定所得歷程記錄之已更新位置及已更新長度。
作為實例,圖16A至圖16C繪示在DFLTCC-XPND函式被指定以及線上歷程記錄被指定之情況下多次執行DEFLATE轉換呼叫指令之前及之後在每次執行以部分完成而結束時線上歷程記錄緩衝區相對於第一運算元之位置之實例。在作業期間修改歷程記錄長度(HL)385。舉例而言,圖16A描繪在DFLTCC-XPND執行次數1之前的線上歷程記錄之一個實例;圖16B描繪在DFLTCC-XPND執行次數2之前及在執行次數1之後的線上歷程記錄之實例;且圖16C描繪在DFLTCC-XPND執行次數2之後的線上歷程記錄之實例。圖16C中所提供之解釋亦適用於圖16A至圖16B。
當由一般暫存器0之位元56指定之HBT為循環時,歷程記錄維持於例如位於第三運算元位置處之32K位元組緩衝區中。緩衝區(HB)內歷程記錄之第一位元組之位置由一般暫存器R3之內容與歷程記錄位移(HO)386之總和指定。歷程記錄之第一位元組為緩衝區中之未壓縮資料之最近最少處理的位元組。緩衝區(HE)內歷程記錄之最後位元組之位置由例如以下方程式指定:HE=R3+模32K(HO+HL-1)。
歷程記錄之最後位元組為緩衝區中之未壓縮資料之最近最多處理的位元組。當歷程記錄位移(HO)與歷程記錄長度(HL)之總和超過第三運算元之大小(例如32K位元組)時,歷程記錄自第三運算元之結束換行至第三運算元之開始。本文中所描述之圖15A至圖15E繪示在DFLTCC-XPND函式及循環歷程記錄緩衝區被指定之情況下多次執行DEFLATE轉換呼叫指令之前及之後在每次執行以部分完成而結束時循環歷程記錄緩衝區內歷程記錄之位置之實例。
在一個實例中,當HBT為循環且儲存至第一運算元位置之
位元組之數目小於例如32,768時,以下情況適用:
˙對第三運算元位置中之位元組範圍進行儲存。該位元組範圍包括並開始於由以下者指定之位置:R3+模32K(HOO+HLO),其中
HOO:在指令執行之前的歷程記錄位移。
HLO:在指令執行之前的歷程記錄長度。
該位元組範圍包括並結束於由例如以下者指定之位置:R3+模32K(HOO+HLO+BP-1),其中
BP:在指令之執行期間儲存至第一運算元位置之位元組之數目。
對剛才描述之位元組範圍進行之儲存經受儲存型存取例外狀況、PER儲存體更改事件及設定變更位元。
˙可對第三運算元位置中不包括於剛才描述之範圍中之位元組進行不修改儲存位置之內容且並非必要的儲存。至此類位置之儲存亦經受儲存型存取例外狀況、PER儲存體更改事件及設定變更位元。
當HBT為循環且儲存至第一運算元位置之位元組之數目大於或等於例如32,768時,對例如第三運算元位置之所有位元組進行儲存,且該等儲存經受儲存型存取例外狀況、PER儲存體更改事件及設定變更位元。
當BTYPE為00二進位時,區塊不含有壓縮資料。本文中所描述之圖6繪示BTYPE等於00二進位之區塊之一個實例。LEN欄位指定區塊中之文字位元組之數目。LEN欄位之位元組順序為小端序。LEN欄位可指定零個文字位元組。區塊之文字位元組置放於第一運算元位置處。如先
前所描述,亦運用區塊之每一文字位元組更新歷程記錄。
當BTYPE為01二進位時,區塊含有使用固定霍夫曼資料表(FHT)產生之壓縮資料符號。FHT由DEFLATE標準定義且不為區塊之部分。如本文中所描述之圖7繪示BTYPE等於01二進位之區塊之一個實例。在解譯區塊標頭之後,按在壓縮資料符號在區塊中出現之順序解碼壓縮資料符號。例如自左至右處理區塊之位元組,且例如自右至左處理區塊之每一位元組內之位元。在一個實例中,每一符號係在處理區塊中之下一符號之前被完全處理。不為區塊結束(EOB)符號之每一符號表示文字值或對歷程記錄緩衝區中先前解碼之子字串之指標。先前解碼之子字串亦被稱作重複字串。在一個實例中,重複字串長度在3至258位元組之範圍內。指標由表示子字串長度及自歷程記錄結束至子字串開始之距離之碼組成。當符號表示歷程記錄中之子字串時,自歷程記錄緩衝區參考子字串。由於解碼符號而產生之未壓縮資料置放於第一運算元位置處。
在處理另外來源資料之前,如先前所描述而更新歷程記錄。
已更新歷程記錄適用於解碼區塊之下一符號。當遇到EOB符號時,區塊之處理完成。
當BTYPE為10二進位時,區塊含有使用動態霍夫曼資料表(DHT)產生之壓縮資料符號。所使用之DHT之壓縮格式為壓縮資料區塊之元素。本文中所描述之圖8繪示BTYPE等於10二進位之區塊之一個實例。在解譯區塊標頭之後,檢查壓縮資料區塊內所提供之DHT之壓縮格式以尋找一般運算元資料例外狀況條件。當針對DHT之所提供之壓縮格式存在一般運算元資料例外狀況條件時,DHT之壓縮格式被稱作無效且不用以將資
料解壓縮。當DHT之壓縮格式指定碼長度之位元長度,或文字位元組、EOB符號、重複字串長度或重複字串指標距離之碼長度(其大於霍夫曼演算法指定適當及功能霍夫曼樹所需要之長度)時,壓縮DHT仍然用以衍生功能DHT並將資料壓縮。在檢查DHT之壓縮格式之後,按壓縮資料符號在區塊中出現之順序解碼壓縮資料符號。例如自左至右處理區塊之位元組,且例如自右至左處理區塊之每一位元組內之位元。在一個實例中,每一符號係在處理區塊中之下一符號之前被完全處理。BTYPE為10二進位之區塊中之符號之處理與先前針對處理BTYPE為01之區塊中之符號所描述之處理相同,惟前者使用所提供之DHT來解碼符號且後者使用FHT來解碼符號除外。當提供不指定將用以解碼壓縮資料符號之霍夫曼碼的非通用DHT時,辨識到一般運算元資料例外狀況。
與將第二運算元解壓縮一致,未壓縮資料為用以產生檢查值(例如32位元檢查值)之輸入。將所得檢查值儲存至參數區塊之檢查值欄位387。
在一項實施例中,在處理資料集之最後區塊之後,發生以下情況:
˙將模型相依值儲存至參數區塊之模型版本號碼(MVN)欄位363。
˙更新參數區塊之子位元組邊界(SBB)欄位381。
˙將一般暫存器R1中之位址遞增儲存於第一運算元位置處之位元組之數目,且將一般暫存器R1+1中之長度遞減相同數目。
˙將一般暫存器R2中之位址遞增包括處理位元0之第二運算元之已處理位元組之數目,且將一般暫存器R2+1中之長度遞減相同數
目。包括處理位元0之第二運算元之已處理位元組之數目為由被除數為已處理輸入位元之數目與SBB之原始值之總和且除數為值八的整數除法產生的整數商。
位址及長度之形成及更新取決於定址模式。
當第一運算元長度在指令之執行開始時為零時,不存取第一運算元,且不變更一般暫存器R1及R1+1中之各別的第一運算元位址及第一運算元長度。此在CF欄位373之值在指令之執行開始時為零或一時適用。
當第二運算元長度在指令之執行開始時為零時,不存取第二運算元,且不變更一般暫存器R2及R2+1中之各別的第二運算元位址及第二運算元長度。在一項實施例中,對於以下狀況,第二運算元長度在指令之執行開始時為零:
˙重新執行指令(例如參數區塊之CF欄位373在指令之執行開始時為一),且在指令先前執行時處理整個第二運算元。
解壓縮作業可結束而不將任何結果儲存至第一運算元位置,即使已自第二運算元位置處理資料亦如此。在一實例中,此係在自第二運算元位置處理之資料僅含有以下壓縮資料區塊元素中之任一者時發生:
˙區塊標頭。
˙區塊類型為00二進位之區塊之LEN欄位。
˙區塊類型為00二進位之區塊之NLEN欄位。
˙動態霍夫曼資料表之壓縮格式。
˙區塊結束(EOB)符號。
在一或多項實施例中,以下條件適用於執行DEFLATE轉換呼叫指令:在一個實例中,當指定DFLTCC-GDHT函式且發生以下條件時,辨識到一般運算元資料例外狀況:
˙模型不支援如由參數區塊版本號碼362所指定之參數區塊之格式。
在一個實例中,當指定DFLTCC-CMPR函式且發生以下條件中之任一者時,辨識到一般運算元資料例外狀況:
˙模型不支援如由參數區塊版本號碼362所指定之參數區塊之格式。
˙NT 374為零,且HL 385大於例如32,768。
˙HTT 376為一,且CDHTL 366小於例如42或大於例如2283。
˙HTT 376為一,且CDHTL 366不等於CDHT欄位367中指定之DHT之壓縮格式之長度。
˙HTT 376為一,且DHT之壓縮格式之HLIT子元素大於例如29(無效DHT)。
˙HTT 376為一,且DHT之壓縮格式之HDIST子元素大於例如29(無效DHT)。
˙HTT 376為一,且DHT之壓縮格式(CDHT欄位367之內容)指定在指定針對壓縮DHT定義之例如19可能碼長度之位元長度的碼序列中的碼,並小於霍夫曼演算法指定功能霍夫曼樹所需要之長度(無效DHT)。
˙HTT 376為一,且DHT之壓縮格式(CDHT欄位367之內容)將例如16之碼長度(複製先前碼長度)指定為由文字位元組、EOB符號及重複字串長度組成之元素集合之第一碼長度(無效DHT)。
˙HTT 376為一,且DHT之壓縮格式(CDHT欄位367之內容)指定在指定文字位元組之碼長度之碼序列中的碼,且該碼與經判定為表示被參考碼長度之集合之碼中之任一者不匹配,如早先在壓縮DHT中所指定(無效DHT)。
˙HTT 376為一,且DHT之壓縮格式(CDHT欄位367之內容)指定將碼長度0(CL0)指派至EOB符號之碼。在此狀況下,對應DHT不指定霍夫曼碼以表示EOB符號(無效DHT)。
˙HTT 376為一,且DHT之壓縮格式(CDHT欄位367之內容)指定在指定重複字串長度及指標距離之碼長度之碼序列中的碼,且該碼與經判定為表示被參考碼長度之集合之碼中之任一者不匹配,如早先在壓縮DHT中所指定(無效DHT)。
˙HTT 376為一,且DHT之壓縮格式(CDHT欄位367之內容)指定大於DHT中之霍夫曼碼之數目的碼長度之數目,如由HLIT欄位、HDIST欄位中之值與例如258之總和所指定。作為實例,此在碼長度16、17及18之不當使用的情況下係可能的(無效DHT)。
˙HTT 376為一,且DHT之壓縮格式(CDHT欄位367之內容)指定文字位元組、EOB符號及重複字串長度之集合之碼長度,其小於霍夫曼演算法指定功能霍夫曼樹所需要之長度(無效DHT)。
˙HTT 376為一,且DHT之壓縮格式(CDHT欄位367之內容)指定重複字串指標距離之集合之碼長度,其小於霍夫曼演算法指定功
能霍夫曼樹所需要之長度(無效DHT)。
˙CPU嘗試產生壓縮資料符號以表示第二運算元中之文字位元組,且衍生自CDHT欄位之內容之DHT係非通用的且不指定對應於該文字位元組之霍夫曼碼。
˙CPU嘗試產生壓縮資料符號以表示第二運算元中之重複字串,且衍生自CDHT欄位之內容之DHT係非通用的且不指定對應於該重複字串長度或指標距離之霍夫曼碼。
作為實例,當例如指定DFLTCC-XPND函式且發生以下條件中之任一者時,辨識到一般運算元資料例外狀況:
˙模型不支援如由參數區塊版本號碼362所指定之參數區塊之格式。
˙NT 374為零,且HL 385大於例如32,768。
˙遇到BTYPE等於11二進位之壓縮資料區塊。
˙遇到BTYPE等於00二進位且NLEN不等於LEN之1補數的壓縮資料區塊。
˙遇到DHT之壓縮格式(BTYPE等於10二進位之壓縮資料區塊之內容),且壓縮DHT之HLIT子元素大於例如29(無效DHT)。
˙遇到DHT之壓縮格式(BTYPE等於10二進位之壓縮資料區塊之內容),且壓縮DHT之HDIST子元素大於例如29(無效DHT)。
˙遇到DHT之壓縮格式(BTYPE等於10二進位之壓縮資料區塊之內容),其指定在指定針對壓縮DHT定義之例如19可能碼長度之位元長度的碼序列中的碼,並小於霍夫曼演算法指定功能霍夫曼樹所需要之長度(無效DHT)。
˙遇到DHT之壓縮格式(BTYPE等於10二進位之壓縮資料區塊之內容),其將例如16之碼長度(複製先前碼長度)指定為由文字位元組、EOB符號及重複字串長度組成之元素集合之第一碼長度(無效DHT)。
˙遇到DHT之壓縮格式(BTYPE等於10二進位之壓縮資料區塊之內容),其指定在指定文字位元組之碼長度之碼序列中的碼,且該碼與經判定為表示被參考碼長度之集合之碼中之任一者不匹配,如早先在壓縮DHT中所指定(無效DHT)。
˙遇到DHT之壓縮格式(BTYPE等於10二進位之壓縮資料區塊之內容),其指定將碼長度0(CL0)指派至EOB符號之碼。在此狀況下,對應DHT不指定霍夫曼碼以表示EOB符號(無效DHT)。
˙遇到DHT之壓縮格式(BTYPE等於10二進位之壓縮資料區塊之內容),其指定在指定重複字串長度及指標距離之碼長度之碼序列中的碼,且該碼與經判定為表示被參考碼長度之集合之碼中之任一者不匹配,如早先在壓縮DHT中所指定(無效DHT)。
˙遇到DHT之壓縮格式(BTYPE等於10二進位之壓縮資料區塊之內容),其指定大於DHT中之霍夫曼碼之數目的碼長度之數目,如由HLIT欄位、HDIST欄位中之值與例如258之總和所指定。作為實例,此在碼長度16、17及18之不當使用的情況下係可能的(無效DHT)。
˙遇到DHT之壓縮格式(BTYPE等於10二進位之壓縮資料區塊之內容),其指定文字位元組、EOB符號及重複字串長度之集合之碼長度,該碼長度小於霍夫曼演算法指定功能霍夫曼樹所需要之長度(無效DHT)。
˙遇到DHT之壓縮格式(BTYPE等於10二進位之壓縮資料
區塊之內容),其指定重複字串指標距離之集合之碼長度,該碼長度小於霍夫曼演算法指定功能霍夫曼樹所需要之長度(無效DHT)。
˙在BTYPE等於10二進位之壓縮資料區塊中遇到之壓縮資料符號指定不由衍生自同一區塊中之DHT之壓縮格式的非通用DHT定義的霍夫曼碼。在此狀況下,出於辨識一般運算元資料例外狀況之目的而可用於處理的第二運算元之位元之數目係模型相依的。更特定言之,嘗試解碼未定義碼之模型可在辨識例外狀況之前處理例如15個位元,即使可在處理較少位元之後判定例外狀況亦如此。
˙遇到壓縮資料符號,其為重複字串指標並指定大於在處理符號之點處可用之歷程記錄長度的距離。
˙在BTYPE等於01二進位之壓縮資料區塊中遇到之壓縮資料符號指定無效碼(例如重複字串長度之11000110或11000111二進位之碼,或重複字串指標距離之11110或11111二進位之碼)。在此狀況下,出於辨識一般運算元資料例外狀況之目的而可用於處理的第二運算元之位元之數目係模型相依的。更特定言之,嘗試解碼無效碼之模型可在辨識例外狀況之前在重複字串長度之狀況下處理例如8個位元,或在重複字串指標距離之狀況下處理例如5個位元,即使可在處理較少位元之後判定例外狀況亦如此。
當辨識到一般運算元資料例外狀況時,作業被視為已抑制,即使參數區塊之作業結束補充碼(OESC)欄位365及模型版本號碼(MVN)欄位363被更新以提供與例外狀況相關聯之額外資訊亦如此。
當執行DFLTCC-CMPR或DFLTCC-XPND函式且針對第二運算元辨識到一般運算元資料例外狀況時,結果為,辨識到例外狀況,或
作業以部分完成而結束且設定例如3之條件碼。若設定條件碼3,則當再次執行指令以繼續處理相同運算元且仍然存在例外狀況條件時,將辨識到例外狀況。
其他條件包括例如:指令之執行係可中斷的。當發生中斷時,更新一般暫存器R1及R2中之位址、一般暫存器R1+1及R2+1中之長度以及參數區塊之特定欄位,使得指令在重新執行時在中斷點處恢復。
當執行DFLTCC-CMPR或DFLTCC-XPND函式且針對第一運算元或第二運算元辨識到存取例外狀況時,結果為,辨識到例外狀況,或作業以部分完成而結束且設定例如3之條件碼。若設定條件碼3,則當再次執行指令以繼續處理相同運算元且仍然存在例外狀況條件時,將辨識到例外狀況。
如由此CPU、其他CPU及通道程式所觀察,對參數區塊、第一運算元、第二運算元及第三運算元之參考可為多重存取參考,對此等儲存位置之存取未必係區塊並行的,且此等存取或參考之序列係未定義的。
在一項實施例中,若指定DFLTCC-CMPR或DFLTCC-XPND函式且以下情況中之任一者適用,則結果係不可預測的:
˙參數區塊與第一運算元或第二運算元重疊。
˙第一運算元與第二運算元重疊。
˙所指定之歷程記錄緩衝區類型(HBT)為循環,且第三運算元與第一運算元、第二運算元或參數區塊重疊。
˙所指定之歷程記錄緩衝區類型(HBT)為線上,DFLTCC-
CMPR函式被指定,且歷程記錄與第一運算元或參數區塊重疊。
˙所指定之歷程記錄緩衝區類型(HBT)為線上,DFLTCC-XPND函式被指定,且歷程記錄與第二運算元或參數區塊重疊。
在某些情形中,儘管在已處理位元組之CPU判定數目為零的情況下結束DEFLATE轉換呼叫指令之執行,但可能已將資料儲存至第一運算元位置,在適用時可能已將資料儲存至第三運算元位置,且在適用時已設定對應變更位元。在此等狀況下,尚未自原始值修改參數區塊及一般暫存器之內容。當CPU執行靜止作業或CPU在執行DEFLATE轉換呼叫指令的同時重試時,可發生此等情形。
以下為由於執行DEFLATE轉換呼叫指令而所得之實例條件碼:
0 正常完成
1 第一運算元長度不足以完成作業
2 第二運算元長度不足以完成作業(DFLTCC-XPND)
3 已處理資料之CPU判定量
程式例外狀況:
˙存取(提取、運算元2、線上歷程記錄;提取及儲存、參數區塊、運算元1、運算元3)
˙DXC為0之資料,一般運算元
˙作業(若DEFLATE轉換設施未被安裝)
˙規格
˙異動約束
下文展示針對DEFLATE轉換呼叫指令之執行之實例優先順
序:
1.-6.優先順序與一般狀況之程式中斷條件之優先順序相同的例外狀況。
7.A第二指令半字之存取例外狀況。
7.B作業例外狀況。
7.C異動約束。
8.A歸因於無效函式碼或無效暫存器編號之規格例外狀況。
8.B歸因於4K位元組邊界上未指定參數區塊之規格例外狀況。
8.C歸因於4K位元組邊界上未指定循環歷程記錄緩衝區之規格例外狀況。
9.對參數區塊之存取之存取例外狀況。
10.在模式不支援參數區塊之指定格式時之一般運算元資料例外狀況。
11.歸因於在指令之執行開始時第二運算元長度等於零且CF等於零之規格例外狀況。
12.歸因於第一運算元長度在指令之執行開始時等於零之條件碼1,且指定DFLTCC-CMPR。
13.A歸因於歷程記錄長度欄位大於32,768之一般運算元資料例外狀況,且當指定DFLTCC-CMPR或DFLTCC-XPND時,新任務欄位為零。
13.B對第一運算元之存取之存取例外狀況,且第一運算元
長度為非零。
13.C對第二運算元之存取之存取例外狀況,且第二運算元長度為非零。
13.D對在指令之執行開始時指定的線上歷程記錄之存取之存取例外狀況。
13.E對第三運算元之存取之存取例外狀況。
14.A歸因於除了上述項目10及13.A中所包括之彼等條件以外之條件的一般運算元資料例外狀況。
14.B歸因於除了上述項目12中所包括之彼等條件以外之條件的條件碼1、2或3。
15.條件碼0。
在使用之前,檢查DHT之壓縮格式以尋找一般運算元資料例外狀況條件之存在。當DHT之壓縮格式之長度歸因於一般運算元資料例外狀況條件而被未精確地定義時,已解譯長度可取決於該條件、係模型相依的,且不超過例如286位元組。因此,當指定DFLTCC-XPND函式且在例如第二運算元之最右286位元組中遇到具有一般運算元資料例外狀況條件之DHT之壓縮格式時,辨識到例外狀況條件(優先順序14.A)抑或條件碼2(優先順序14.B)係模型相依的。
下文提供實例程式設計備註:
1.當將資料壓縮或解壓縮時,在以DEFLATE轉換呼叫指令被執行之最小次數執行作業時總體上可更高效。換言之,運用大運算元執行DFLTCC相較於運用小運算元多次執行DFLTCC可更高效。
2.對於壓縮及解壓縮作業,當設定條件碼3時,已更新由
指令及參數區塊使用之一般暫存器,使得程式可分支回至指令以繼續作業。
3.在一項實施例中,DEFLATE轉換呼叫指令可在執行由指令之參數指定之處理之CPU判定子部分之後完成。當指令在僅執行處理之CPU判定量而非所有指定處理之後完成時,指令設定條件碼3。在此類完成時,程式狀態字(PSW)中之指令位址指定下一依序指令,且已調整指令之運算元參數,使得可藉由分支回至指令以再次執行指令而恢復指令之處理。當指令已執行所有指定處理時,其設定除了3以外之條件碼。
4.當指定DFLTCC-CMPR函式且作業以參數區塊之子位元組邊界(SBB)欄位中之非零值結束時,作業包括儲存至由所得第一運算元位址指定之位元組。當指定DFLTCC-XPND函式且作業以SBB中之非零值結束時,作業包括提取由所得第二運算元位址指定之位元組。
5.當作業在非零條件碼被設定之情況下結束時,參數區塊之CSB欄位392可含有部分處理之資料,且預期到,程式重新執行指令以恢復作業。
6.在作業在非零條件碼被設定之情況下結束之後,且在出於恢復作業之目的而重新執行指令之前,程式不修改參數區塊之任何欄位;否則,結果係不可預測的。
7.當指定DFLTCC-GDHT函式時,所產生之DHT之壓縮表示根據霍夫曼演算法描述三個適當且完整的霍夫曼碼樹。亦即,不描述尚不完整的霍夫曼碼樹。尚不完整的霍夫曼碼樹係衍生自DHT之壓縮表示,其指定大於霍夫曼演算法指定適當及功能霍夫曼樹所需要之長度的元素之碼長度。
當指定DFLTCC-CMPR函式時,HTT為一,且DHT之壓縮表示包括尚不完整的霍夫曼碼樹之描述,可藉由使用DFLTCC-XPND函式將壓縮資料結果變換成原始未壓縮資料,但並非所有符合DEFLATE標準之解碼器均可能夠將結果變換成原始未壓縮資料。此可例如在由程式針對DFLTCC-CMPR函式指定之DHT之壓縮表示並非由於執行DFLTCC-GDHT函式而產生時發生。
8.當DFLTCC-CMPR函式在條件碼1被設定之情況下結束時,儲存至參數區塊之子位元組邊界(SBB)欄位381之結果為000二進位。辨識此情境可與分配用於與DEFLATE轉換呼叫指令一起使用之輸出緩衝區之程式相關。
如本文中所描述,在一個態樣中,提供單一指令(例如硬體/軟體介面處之單一架構化機器指令,例如DEFLATE轉換呼叫指令)以使用通用處理器執行壓縮及/或解壓縮作業。此指令為例如指令集架構(ISA)中定義之硬體指令。因此,降低了與壓縮及/或解壓縮作業相關之程式之複雜度。另外,改良了作業之效能且因此改良了處理器之效能。
有利地,由例如程式設計師在通用處理器(例如中央處理單元,在本文中被稱作處理器)而非專用處理器(諸如I/O裝置、經由I/O介面連接之應用程式特定裝置,或其他類型之專用處理器)上分派DEFLATE轉換呼叫指令。相較於軟體實作,執行所揭示之指令需要顯著較少的執行循環來執行相同作業。另外,相較於將作業分派至I/O裝置,執行所揭示之指令不需要由作業系統進行I/O作業且不觸發作業系統以在等待作業完成的同時執行任務切換。
儘管描述了各個欄位及暫存器,但本發明之一或多個態樣
可使用其他、額外或較少欄位或暫存器,或其他大小之欄位或暫存器等等。許多變化係可能的。舉例而言,可使用隱含暫存器而非指令之明確指定之暫存器或欄位,及/或可使用明確指定之暫存器或欄位而非隱含暫存器或欄位。其他變化亦係可能的。
參考圖17描述使用DEFLATE轉換呼叫指令之一項實施例。在一個實例中,諸如通用處理器之處理器上執行之程式指定儲存體中之參數區塊中待執行之作業之細節,並指定參數區塊之位置,步驟1700。舉例而言,取決於待執行之函式,提供或設定參數區塊(例如參數區塊340、360或370)之欄位中之一或多者。另外,程式指定待執行之作業(例如查詢、產生、壓縮、展開等等),步驟1702。另外,程式指定或更新儲存體中之輸入資料之位置及量,步驟1704,以及指定或更新儲存體中之結果緩衝區之位置及大小,步驟1706。
此後,程式執行DEFLATE轉換呼叫(DFLTCC)指令,步驟1708。在一個實例中,在通用處理器上分派該指令。作為實例,在通用處理器上處理該指令,或至少部分地,由耦接至通用處理器且可在不使用I/O介面之情況下存取之硬體處理該指令。
基於指令終止,判定由執行產生之條件碼是否等於第一定義值,例如0,查詢1710。若條件碼等於第一定義值,則指令之處理完成,步驟1712。然而,若條件碼不等於第一定義值,則進一步判定條件碼是否等於第二定義值,例如3,查詢1714。若條件碼等於第二定義值,此指示存在待處理之額外資料,則重新執行指令,步驟1708。然而,若條件碼不等於第二定義值,則另外判定條件碼是否被設定為第三定義值,例如1,查詢1716。若條件碼被設定為第三定義值,此指示第一運算元長
度不足,則處理繼續進行步驟1706;否則,第二運算元長度對於函式不足且處理繼續進行步驟1704。
如所指示,可多次執行DEFLATE轉換呼叫指令以將單一資料串流壓縮或解壓縮。因此,在一個態樣中,DEFLATE轉換呼叫指令包括提供使程式宣告緩衝區(例如32K位元組緩衝區)之機制之屬性,該緩衝區用以累積在跨越DEFLATE轉換呼叫指令之多次執行之作業期間處理之未壓縮資料之歷程記錄。該緩衝區為例如循環歷程記錄緩衝區。
在一個態樣中,DEFLATE轉換呼叫指令使用隱含暫存器(例如GR0.56)中之指示符(例如位元)來指示循環歷程記錄緩衝區之使用。當指示循環歷程記錄緩衝區且將由DEFLATE轉換呼叫指令執行之指定函式為將資料壓縮或解壓縮時,指令之欄位(例如R3)指定例如32K位元組緩衝區之記憶體中之位置,處理器使用該位置以自作業開始時提取歷程記錄並儲存歷程記錄直至作業結束時。循環歷程記錄緩衝區內之歷程記錄之長度由與DEFLATE轉換呼叫指令相關聯之參數區塊之欄位(例如HL欄位385)指定,且緩衝區內之歷程記錄之開始由參數區塊之另一欄位(例如HO欄位386)中所包括之位移指定。
參考圖18描述使用循環歷程記錄緩衝區之另外細節。在一個實例中,在諸如通用處理器之處理器上執行之程式指定儲存體中之參數區塊中待執行之作業之細節,並指定參數區塊之位置,步驟1800。舉例而言,取決於待執行之函式,提供或設定參數區塊(例如參數區塊360或370)之欄位中之一或多者。另外,程式指定待執行之作業(例如壓縮、展開等等)。
另外,在一個實例中,程式分配及指定預定義大小(例如32
K位元組)之循環緩衝區之記憶體中之位置,步驟1802。另外,程式將未壓縮資料串流之一部分置放至緩衝區中並將緩衝區之位置及大小指定為至DEFLATE轉換呼叫指令之輸入,步驟1804,且指定或更新儲存體中之結果緩衝區之位置及大小,步驟1806。
接著執行DEFLATE轉換呼叫指令,步驟1808。基於執行指令,處理器自例如循環歷程記錄緩衝區提取歷程記錄以作為至作業之輸入,步驟1820,且執行指定作業,步驟1822,如本文中所描述。另外,處理器修改循環歷程記錄緩衝區中之歷程記錄以作為作業之輸出,步驟1824。判定整個資料串流是否已被處理,查詢1826。若整個資料串流未被處理,則處理繼續進行步驟1804。否則,處理完成。
作為實例,循環歷程記錄緩衝區之使用提供以下情況:當經指定以用於與DEFLATE轉換呼叫指令之個別執行一起使用的輸入或輸出緩衝區之大小相對小(例如512位元組)時,跨越高達例如32K位元組之已緩衝資料之多個區段的歷程記錄可用作至DEFLATE轉換呼叫指令之輸入,其處理小數目個位元組。
當經指定以用於與DEFLATE轉換呼叫指令之個別執行一起使用的輸入或輸出緩衝區之大小相對大(例如128K位元組)時,高達例如32K位元組之已緩衝資料之先前區段的歷程記錄可用作至DEFLATE轉換呼叫指令之輸入,其處理前32K位元組之資料。
在兩種狀況下,相較於其他方式,更多歷程記錄可用於處理資料。因此,改良了偵測重複字串之有效性,從而改良了總體壓縮比。此促進了運算環境內之處理且改良了效能。
本發明之一或多個態樣與電腦技術密切地相關並促進電腦
內之處理,從而改良了其效能。使用單一架構化機器指令以執行壓縮及/或解壓縮改良了運算環境內之效能。在管理及/或使用資料之許多技術領域中,諸如在電腦處理、醫療處理、安全性、詳細目錄控制等等中,可使用壓縮/解壓縮資料。藉由提供壓縮/解壓縮之最佳化,藉由減少執行時間而改良了此等技術領域。
參考圖19A至圖19B描述促進運算環境內之處理之一項實施例之另外細節,此促進係因為該運算環境與本發明之一或多個態樣相關。
參看圖19A,在一項實施例中,運算環境之通用處理器獲得指令以執行由指令支援之複數個函式中之函式(1900)。指令為例如符合業界標準以供壓縮之指令集架構之單一架構化指令(1902)。執行指令(1904),且執行包括基於函式為壓縮函式或解壓縮函式而使輸入資料之狀態在輸入資料之未壓縮形式與輸入資料之壓縮形式之間變換以提供資料之變換狀態(1906)。將資料之變換狀態提供為輸出以在執行任務時使用(1908)。
在一項實施例中,變換輸入資料之狀態使用符合業界標準之壓縮格式(1910)。壓縮格式包括例如DEFLATE壓縮格式(1912)。
作為實例,任務係選自由以下各者組成之任務之群組:執行使用輸出之一或多個作業,輸出包括壓縮資料;傳輸輸出;執行使用輸出之一或多個作業,輸出包括未壓縮資料(1914)。
在一項實施例中,參看圖19B,指令包括:作業碼欄位,其包括用以指定作業之作業碼;及複數個暫存器欄位,其用以指定將由指令使用之複數個暫存器(1920)。複數個暫存器包括例如用以識別將由指令用作輸出之輸出運算元位置之一個暫存器,及用以識別將由指令用作輸入
之輸入運算元位置之另一暫存器,輸入取決於函式(1922)。
作為一實例,基於函式為壓縮函式,輸入包括來自輸入運算元位置之資料以被編碼以提供儲存至輸出運算元位置之壓縮資料符號(1924),且基於函式為解壓縮函式,輸入包括來自輸入運算元位置之壓縮資料符號以被解碼以提供儲存至輸出運算元位置之未壓縮資料(1926)。
另外,在一項實施例中,指令使用已選取暫存器以指示將由指令執行之複數個函式中之函式(1928)。複數個函式包括例如查詢函式、壓縮函式、產生動態霍夫曼資料表函式及解壓縮函式(1930)。又另外,在一項實施例中,指令使用另一已選取暫存器以針對複數個函式中之一或多個函式提供由指令使用之參數區塊之位址(1932)。
在一另外態樣中,待執行之函式為產生動態霍夫曼資料表函式,且執行包括基於函式為產生動態霍夫曼資料表函式而產生動態霍夫曼資料表之壓縮表示以在待執行之函式在指令之另一次執行時為壓縮函式或解壓縮函式時使用(1934)。
其他變化及實施例係可能的。
本發明之態樣可由許多類型之運算環境使用。參考圖20A描述用以併有及使用本發明之一或多個態樣之運算環境之另一實施例。在此實例中,運算環境10包括例如原生中央處理單元(CPU)12、記憶體14及一或多個輸入/輸出裝置及/或介面16,前述各者經由例如一或多個匯流排18及/或其他連接件而彼此耦接。作為實例,運算環境10可包括:由紐約阿蒙克市之國際商業機器公司供應的PowerPC®處理器;由加州帕洛阿爾托之惠普公司(Hewlett Packard Co.,Palo Alto,California)供應的具有Intel Itanium II處理器之HP Superdome;及/或基於由國際商業機器公
司、惠普公司、因特爾公司、甲骨文公司(Oracle)或其他公司供應之架構的其他機器。IBM、z/Architecture、IBM Z、z/OS、PR/SM及PowerPC為國際商業機器公司在至少一個轄區之商標或註冊商標。Intel及Itanium為因特爾公司或其子公司在美國及其他國家之商標或註冊商標。
原生中央處理單元12包括一或多個原生暫存器20,諸如在環境內之處理期間使用之一或多個通用暫存器及/或一或多個專用暫存器。此等暫存器包括表示在任何特定時間點之環境狀態之資訊。
此外,原生中央處理單元12執行儲存於記憶體14中之指令及程式碼。在一個特定實例中,中央處理單元執行儲存於記憶體14中之模擬器程式碼22。此程式碼使在一種架構中組態之運算環境能夠模擬另一架構。舉例而言,模擬器程式碼22允許基於除了z/Architecture硬體架構以外之架構之機器(諸如PowerPC處理器、HP Superdome伺服器或其他者)模擬z/Architecture硬體架構並執行基於z/Architecture硬體架構開發之軟體及指令。
參考圖20B描述與模擬器程式碼22相關之另外細節。儲存於記憶體14中之客體指令30包含經開發以在除了原生CPU 12之架構以外之架構中執行的軟體指令(例如與機器指令相關)。舉例而言,客體指令30可能已被設計成在基於z/Architecture硬體架構之處理器上執行,但代替地,在可為例如Intel Itanium II處理器之原生CPU 12上被模擬。在一個實例中,模擬器程式碼22包括指令提取常式32,以自記憶體14獲得一或多個客體指令30並視情況提供針對所獲得之指令之本機緩衝。模擬器程式碼22亦包括指令轉譯常式34,以判定已獲得之客體指令之類型並將客體指令轉譯成一或多個對應原生指令36。此轉譯包括例如識別將由客體指令執
行之函式,及選擇原生指令以執行彼函式。
另外,模擬器程式碼22包括模擬控制常式40以促使執行原生指令。模擬控制常式40可促使原生CPU 12執行模擬一或多個先前獲得之客體指令之原生指令之常式,並在此類執行結束時將控制返回至指令提取常式以模擬下一客體指令或客體指令群組之獲得。原生指令36之執行可包括:將資料自記憶體14載入至暫存器中;將資料自暫存器儲存回至記憶體;或執行某一類型之算術或邏輯運算,如由轉譯常式所判定。
每一常式係例如以軟體進行實作,軟體儲存於記憶體中並由原生中央處理單元12執行。在其他實例中,常式或作業中之一或多者係以韌體、硬體、軟體或其某一組合進行實作。已模擬處理器之暫存器可使用原生CPU之暫存器20或藉由使用記憶體14中之位置被模擬。在實施例中,客體指令30、原生指令36及模擬器程式碼22可駐存於同一記憶體中或可分配於不同記憶體裝置當中。
上文所描述之運算環境僅為可使用之運算環境之實例。可使用其他環境,包括但不限於其他非分割環境、其他已分割環境及/或其他已模擬環境;實施例不限於任何一種環境。
每一運算環境能夠經組態以包括本發明之一或多個態樣。舉例而言,根據本發明之一或多個態樣,每一運算環境可經組態以提供排序及/或合併。
一或多個態樣可關於雲端運算。
應理解,儘管本發明包括關於雲端運算之詳細描述,但本文中所敍述之教示之實作不限於雲端運算環境。更確切而言,本發明之實施例能夠結合現在已知或以後開發之任何其他類型之運算環境進行實作。
雲端運算為用於使能夠對可組態運算資源(例如網路、網路頻寬、伺服器、處理、記憶體、儲存體、應用程式、虛擬機及服務)之共用集區進行便利之隨選網路存取的服務遞送模型,該等可組態運算資源可運用最少的管理工作量或與服務提供者之互動進行快速地佈建及釋放。此雲端模型可包括至少五個特性、至少三個服務模型及至少四個部署模型。
特性如下:隨選自助服務:雲端消費者可視需要自動地單向佈建運算能力,諸如伺服器時間及網路儲存體,而無需與服務提供者之人為互動。
廣泛網路存取:可在網路上獲得能力且經由標準機制存取能力,該等標準機制促進由異質精簡型或複雜型用戶端平台(例如行動電話、膝上型電腦及PDA)進行之使用。
資源集用:提供者之運算資源經集用以使用多租用戶模型來伺服多個消費者,其中根據需求動態地指派及重新指派不同實體及虛擬資源。存在位置獨立性之意義,此在於消費者通常並不能夠控制或知道所提供之資源之確切位置,但可能能夠按較高抽象層級(例如國家、州或資料中心)指定位置。
快速彈性:可快速地且彈性地(在一些狀況下,自動地)佈建能力以迅速地向外延展,且快速地釋放能力以迅速地向內延展。在消費者看來,可用於佈建之能力常常似乎係無限的且可在任何時間以任何量來購買。
計次服務:雲端系統藉由按適於服務類型(例如儲存體、處理、頻寬及作用中使用者帳戶)之某一抽象層級充分利用計量能力而自動地控制及最佳化資源使用。可監測、控制及報告資源使用狀況,從而為所
利用之服務之提供者及消費者兩者提供透明度。
服務模型如下:軟體即服務(SaaS):提供給消費者之能力係使用在雲端基礎結構上執行之提供者應用程式。可經由諸如網頁瀏覽器(例如基於網頁之電子郵件)之精簡型用戶端介面自各種用戶端裝置存取應用程式。消費者並不管理或控制包括網路、伺服器、作業系統、儲存體或甚至為個別應用程式能力之底層雲端基礎結構,其中可能的例外狀況為有限的使用者特定應用程式組態設定。
平台即服務(PaaS):提供給消費者之能力係將使用由提供者支援之程式設計語言及工具建立的消費者建立或獲取之應用程式部署至雲端基礎結構上。消費者並不管理或控制包括網路、伺服器、作業系統或儲存體之底層雲端基礎結構,但能夠控制所部署之應用程式且可能能夠控制代管環境組態之應用程式。
基礎結構即服務(IaaS):提供給消費者之能力係佈建處理、儲存體、網路及其他基礎運算資源,其中消費者能夠部署及執行可包括作業系統及應用程式之任意軟體。消費者並不管理或控制底層雲端基礎結構,但能夠控制作業系統、儲存體、所部署之應用程式,且可能能夠有限地控制選取網路連接組件(例如主機防火牆)。
部署模型如下:私用雲端:使雲端基礎結構僅僅針對組織進行作業。私用雲端可由組織或協力廠商管理且可存在內部部署或外部部署。
社群雲端:雲端基礎結構由若干組織共用並支援具有共用關注事項(例如任務、安全性要求、策略及合規性考量)之特定社群。社群
雲端可由組織或協力廠商管理且可存在內部部署或外部部署。
公用雲端:使雲端基礎結構可用於一般大眾或大型工業集團,且雲端基礎結構為出售雲端服務之組織所擁有。
混合式雲端:雲端基礎結構為兩個或多於兩個雲端(私用、社群或公用)之組合,該等雲端保持獨特實體,但藉由實現資料及應用程式攜帶性(例如用於在雲端之間實現負載平衡之雲端爆裂)之標準化或專屬技術而束縛在一起。
在集中於無國界、低耦合、模組化及語義互通性之情況下對雲端運算環境進行服務導向。雲端運算之關鍵為包括互連節點之網路的基礎結構。
現在參看圖21,描繪說明性雲端運算環境50。如所展示,雲端運算環境50包括一或多個雲端運算節點52,由雲端消費者使用的諸如個人數位助理(PDA)或蜂巢式電話54A、桌上型電腦54B、膝上型電腦54C及/或汽車電腦系統54N之本機運算裝置可與一或多個雲端運算節點52通信。節點52可彼此通信。在一或多個網路中,可將該等節點實體地或虛擬地分組(未展示),諸如如上文所描述之私用、社群、公用或混合式雲端,或其組合。此允許雲端運算環境50供應基礎結構即服務、平台即服務及/或軟體即服務,對於該等服務,雲端消費者不需要在本機運算裝置上維持資源。應理解,圖21中所展示之運算裝置54A至54N之類型意欲僅係說明性的,且運算節點52及雲端運算環境50可經由任何類型之網路及/或網路可定址連接(例如使用網頁瀏覽器)與任何類型之電腦化裝置通信。
現在參看圖22,展示由雲端運算環境50(圖21)提供之功能抽象層之集合。事先應理解,圖22中所展示之組件、層及功能意欲僅係說
明性的,且本發明之實施例不限於此。如所描繪,提供以下層及對應功能。
硬體及軟體層60包括硬體及軟體組件。硬體組件之實例包括:大型主機61;基於精簡指令集電腦(RISC)架構之伺服器62;伺服器63;刀鋒伺服器64;儲存裝置65;以及網路及網路連接組件66。在一些實施例中,軟體組件包括網路應用程式伺服器軟體67及資料庫軟體68。
虛擬化層70提供抽象層,可自該抽象層提供虛擬實體之以下實例:虛擬伺服器71;虛擬儲存體72;虛擬網路73,包括虛擬私用網路;虛擬應用程式及作業系統74;及虛擬用戶端75。
在一個實例中,管理層80可提供下文所描述之功能。資源佈建81提供用以在雲端運算環境內執行任務之運算資源及其他資源之動態採購。隨著在雲端運算環境內利用資源,計量及定價82提供成本追蹤,並提供針對此等資源之消費之計費與發票開立。在一個實例中,此等資源可包括應用程式軟體授權。安全性提供針對雲端消費者及任務之身分識別驗證,以及針對資料及其他資源之保護。使用者入口網站83為消費者及系統管理者提供對雲端運算環境之存取。服務等級管理84提供雲端運算資源分配及管理,使得滿足所需服務等級。服務等級協定(SLA)規劃及履行85提供雲端運算資源之預配置及採購,針對該等雲端運算資源之未來要求係根據SLA來預計。
工作負載層90提供可利用雲端運算環境所針對之功能性之實例。可自此層提供之工作負載及功能之實例包括:地圖繪製及導航91;軟體開發及生命週期管理92;虛擬教室教育遞送93;資料分析處理94;異動處理95;及壓縮/解壓縮處理96。
本發明之態樣可為在任何可能的技術細節整合層級處之系統、方法及/或電腦程式產品。電腦程式產品可包括一(或多個)電腦可讀儲存媒體,其上具有電腦可讀程式指令以用於促使處理器實行本發明之態樣。
電腦可讀儲存媒體可為有形裝置,其可保留及儲存指令以供指令執行裝置使用。電腦可讀儲存媒體可為例如但不限於電子儲存裝置、磁性儲存裝置、光學儲存裝置、電磁儲存裝置、半導體儲存裝置,或前述各者之任何合適組合。電腦可讀儲存媒體之更特定實例之非窮盡性清單包括以下各者:攜帶型電腦磁片、硬碟、隨機存取記憶體(RAM)、唯讀記憶體(ROM)、可抹除可程式化唯讀記憶體(EPROM或快閃記憶體)、靜態隨機存取記憶體(SRAM)、攜帶型光碟唯讀記憶體(CD-ROM)、數位多功能光碟(DVD)、記憶卡、軟碟、諸如記錄有指令之溝槽中之穿孔卡片或凸起結構的機械編碼裝置,及前述各者之任何合適組合。如本文中所使用,電腦可讀儲存媒體本身不應被認作暫時性信號,諸如無線電波或其他自由傳播電磁波、通過波導或其他傳輸媒體傳播之電磁波(例如通過光纜傳遞之光脈衝),或通過電線傳輸之電信號。
本文中所描述之電腦可讀程式指令可自電腦可讀儲存媒體下載至各別運算/處理裝置,或經由例如網際網路、區域網路、廣域網路及/或無線網路之網路下載至外部電腦或外部儲存裝置。網路可包含銅傳輸纜線、光學傳輸光纖、無線傳輸、路由器、防火牆、交換器、閘道器電腦及/或邊緣伺服器。每一運算/處理裝置中之網路配接卡或網路介面自網路接收電腦可讀程式指令並轉遞電腦可讀程式指令以供儲存於各別運算/處理裝置內之電腦可讀儲存媒體中。
用於實行本發明之作業之電腦可讀程式指令可為以一或多種程式設計語言之任何組合撰寫之組譯器指令、指令集架構(ISA)指令、機器指令、機器相關指令、微碼、韌體指令、狀態設定資料、用於積體電路系統之組態資料,或原始程式碼或物件程式碼,該一或多種程式設計語言包括諸如Smalltalk、C++或其類似者之物件導向式程式設計語言,及諸如「C」程式設計語言或相似程式設計語言之程序性程式設計語言。電腦可讀程式指令可完全在使用者之電腦上執行,部分地在使用者之電腦上執行,作為單機套裝軟體而執行,部分地在使用者之電腦上並部分地在遠端電腦上執行,或完全在遠端電腦或伺服器上執行。在後一情境中,遠端電腦可經由包括區域網路(LAN)或廣域網路(WAN)之任何類型之網路連接至使用者之電腦,或可對外部電腦進行連接(例如使用網際網路服務提供者經由網際網路)。在一些實施例中,包括例如可程式化邏輯電路系統、場可程式化閘陣列(FPGA)或可程式化邏輯陣列(PLA)之電子電路系統可藉由利用電腦可讀程式指令之狀態資訊以個人化電子電路系統而執行電腦可讀程式指令,以便執行本發明之態樣。
本文中參考根據本發明之實施例之方法、設備(系統)及電腦程式產品的流程圖繪示及/或方塊圖描述本發明之態樣。應理解,流程圖繪示及/或方塊圖中之每一區塊以及流程圖繪示及/或方塊圖中之區塊組合可由電腦可讀程式指令實作。
可將此等電腦可讀程式指令提供至通用電腦、專用電腦或其他可程式化資料處理設備之處理器以產生機器,使得經由該電腦或其他可程式化資料處理設備之處理器執行之指令建立用於實作該一或多個流程圖及/或方塊圖區塊中所指定之功能/動作的方式。亦可將此等電腦可讀程
式指令儲存於電腦可讀儲存媒體中,該等指令可指導電腦、可程式化資料處理設備及/或其他裝置以特定方式起作用,使得儲存有指令之電腦可讀儲存媒體包含製品,該製品包括實作該一或多個流程圖及/或方塊圖區塊中所指定之功能/動作之態樣的指令。
亦可將電腦可讀程式指令載入至電腦、其他可程式資料處理設備或其他裝置上,以促使一系列作業步驟在該電腦、其他可程式化設備或其他裝置上執行以產生電腦實作處理程序,使得在該電腦、其他可程式化設備或其他裝置上執行之指令實作該一或多個流程圖及/或方塊圖區塊中所指定之功能/動作。
諸圖中之流程圖及方塊圖繪示根據本發明之各項實施例之系統、方法及電腦程式產品之可能實作之架構、功能性及作業。就此而言,流程圖或方塊圖中之每一區塊可表示指令之模組、區段或部分,其包含用於實作一或多個指定邏輯功能之一或多個可執行指令。在一些替代實作中,區塊中所提及之功能可能不按諸圖中所提及之順序發生。舉例而言,取決於所涉及之功能性,以連續方式展示之兩個區塊事實上可實質上同時執行,或該等區塊有時可以相反順序執行。亦應注意,方塊圖及/或流程圖繪示之每一區塊以及方塊圖及/或流程圖繪示中之區塊組合可由執行指定功能或動作或實行專用硬體及電腦指令之組合的基於專用硬體之系統實作。
除了上述情況以外,一或多個態樣亦可由供應客戶環境之管理之服務提供者提供、供應、部署、管理、服務等等。舉例而言,服務提供者可對電腦程式碼及/或執行用於一或多個客戶之一或多個態樣的電腦基礎結構進行建立、維護、支援等等。作為實例,作為回報,服務提供
者可依據訂用及/或費用協定自客戶接收付款。另外或替代地,服務提供者可自向一或多個協力廠商廣告內容之銷售接收付款。
在一個態樣中,可部署用於執行一或多項實施例之應用程式。作為一個實例,應用程式之部署包含提供可進行作業以執行一或多項實施例之電腦基礎結構。
作為一另外態樣,可部署運算基礎結構,包含將電腦可讀程式碼整合至運算系統中,其中程式碼結合運算系統能夠執行一或多項實施例。
作為又一態樣,可提供用於整合運算基礎結構之處理程序,包含將電腦可讀程式碼整合至電腦系統中。電腦系統包含電腦可讀媒體,其中電腦媒體包含一或多項實施例。程式碼結合電腦系統能夠執行一或多項實施例。
雖然上文描述了各項實施例,但此等實施例僅為實例。舉例而言,其他架構之運算環境可用以併有及使用一或多項實施例。另外,可使用不同指令或作業。另外,可使用不同暫存器,及/或可指定其他類型之指示(除了暫存器編號以外)。許多變化係可能的。
另外,其他類型之運算環境可受益並被使用。作為一實例,可使用適合於儲存及/或執行程式碼之資料處理系統,其包括直接或經由系統匯流排間接耦接至記憶體元件之至少兩個處理器。記憶體元件包括例如在程式碼之實際執行期間使用之本機記憶體、大容量儲存體,及提供至少某一程式碼之臨時儲存以便減少在執行期間必須自大容量儲存體擷取程式碼之次數的快取記憶體。
輸入/輸出或I/O裝置(包括但不限於鍵盤、顯示器、指標裝
置、DASD、磁帶、CD、DVD、隨身碟(Thumb Drive)及其他記憶體媒體等等)可直接或經由介入的I/O控制器耦接至系統。網路配接器亦可耦接至系統以使資料處理系統能夠變得經由介入的私用網路或公用網路耦接至其他資料處理系統或遠端印表機或儲存裝置。數據機、纜線數據機及Ethernet卡僅僅為幾種可用類型之網路配接器。
本文中所使用之術語係僅出於描述特定實施例之目的,且並不意欲為限制性的。如本文中所使用,除非上下文另有明確指示,否則單數形式「一(a/an)」及「該」意欲亦包括複數形式。應進一步理解,術語「包含(comprises及/或comprising)」在用於本說明書中時指定所陳述之特徵、整數、步驟、作業、元件及/或組件之存在,但不排除一或多個其他特徵、整數、步驟、作業、元件、組件及/或其群組之存在或添加。
以下申請專利範圍中之所有構件或步驟加功能元件之對應結構、材料、動作及等效物(若存在)意欲包括用於結合如特定地所主張之其他所主張元件來執行功能的任何結構、材料或動作。已出於繪示及描述之目的而呈現一或多項實施例之描述,但其不意欲為窮盡性的或限於所揭示之形式。許多修改及變化對於一般技術者而言將顯而易見。實施例經選擇及描述以最佳地解釋各個態樣及實際應用,並使一般技術者能夠理解各項實施例及適於所涵蓋之特定用途的各種修改。
300:DEFLATE轉換呼叫(DFLTCC)指令
302:作業碼欄位
304:第一暫存器欄位
306:第二暫存器欄位
308:第三暫存器欄位
Claims (20)
- 一種用於促進一運算環境內之處理之電腦程式產品,該電腦程式產品包含:一電腦可讀儲存媒體,其可由一處理電路讀取並儲存用於執行一方法之指令,該方法包含:由該運算環境之一通用處理器獲得一指令以執行由該指令支援之複數個函式中之一函式,該指令為符合一業界標準以供壓縮之一指令集架構之一單一架構化指令;及由該通用處理器執行該指令,該執行包括:基於該函式為一壓縮函式或一解壓縮函式而使輸入資料之狀態在該輸入資料之一未壓縮形式與該輸入資料之一壓縮形式之間變換以提供資料之一變換狀態;及將資料之該變換狀態提供為輸出以在執行一任務時使用。
- 如請求項1之電腦程式產品,其中該變換該輸入資料之該狀態使用符合該業界標準之一壓縮格式。
- 如請求項2之電腦程式產品,其中該壓縮格式包含一DEFLATE壓縮格式。
- 如請求項1之電腦程式產品,其中該任務係選自由以下各者組成之任務之一群組:執行使用該輸出之一或多個作業,該輸出包含壓縮資料;傳 輸該輸出;執行使用該輸出之一或多個作業,該輸出包含未壓縮資料。
- 如請求項1之電腦程式產品,其中該指令包含:一作業碼欄位,其包括用以指定一作業之一作業碼;及複數個暫存器欄位,其用以指定將由該指令使用之複數個暫存器。
- 如請求項5之電腦程式產品,其中該複數個暫存器包含:用以識別將由該指令用作一輸出之一輸出運算元位置之一個暫存器;及用以識別將由該指令用作一輸入之一輸入運算元位置之另一暫存器,該輸入取決於待執行之該函式。
- 如請求項6之電腦程式產品,其中基於該函式為該壓縮函式,該輸入包含來自該輸入運算元位置之資料以被編碼以提供儲存至該輸出運算元位置之壓縮資料符號,且其中基於該函式為該解壓縮函式,該輸入包含來自該輸入運算元位置之該等壓縮資料符號以被解碼以提供儲存至該輸出運算元位置之未壓縮資料。
- 如請求項5之電腦程式產品,其中該指令進一步使用一已選取暫存器以指示將由該指令執行之該複數個函式中之該函式。
- 如請求項8之電腦程式產品,其中該指令進一步使用另一已選取暫存器以針對該複數個函式中之一或多個函式提供由該指令使用之一參數區塊之一位址。
- 如請求項1之電腦程式產品,其中該複數個函式包括一查詢函式、該壓縮函式、一產生動態霍夫曼資料表函式及該解壓縮函式。
- 如請求項1之電腦程式產品,其中待執行之該函式為一產生動態霍夫曼資料表函式,且其中該執行包含基於該函式為該產生動態霍夫曼資料表函式而產生一動態霍夫曼資料表之一壓縮表示以在待執行之該函式在該指令之另一次執行時為該壓縮函式或該解壓縮函式時使用。
- 一種用於促進一運算環境內之處理之電腦系統,該電腦系統包含:一記憶體;及一通用處理器,其耦接至該記憶體,其中該電腦系統經組態以執行一方法,該方法包含:由該通用處理器獲得一指令以執行由該指令支援之複數個函式中之一函式,該指令為符合一業界標準以供壓縮之一指令集架構之一單一架構化指令;及由該通用處理器執行該指令,該執行包括:基於該函式為一壓縮函式或一解壓縮函式而使輸入資料之狀態在該輸入資料之一未壓縮形式與該輸入資料之一壓縮形式之間變換以提供資料之一變換狀態;及將資料之該變換狀態提供為輸出以在執行一任務時使用。
- 如請求項12之電腦系統,其中該變換該輸入資料之該狀態使用符合 該業界標準之一壓縮格式。
- 如請求項12之電腦系統,其中該指令包含:一作業碼欄位,其包括用以指定一作業之一作業碼;及複數個暫存器欄位,其用以指定將由該指令使用之複數個暫存器。
- 如請求項14之電腦系統,其中該複數個暫存器包含:用以識別將由該指令用作一輸出之一輸出運算元位置之一個暫存器;及用以識別將由該指令用作一輸入之一輸入運算元位置之另一暫存器,該輸入取決於該函式,其中基於該函式為該壓縮函式,該輸入包含來自該輸入運算元位置之資料以被編碼以提供儲存至該輸出運算元位置之壓縮資料符號,且其中基於該函式為該解壓縮函式,該輸入包含來自該輸入運算元位置之該等壓縮資料符號以被解碼以提供儲存至該輸出運算元位置之未壓縮資料。
- 如請求項12之電腦系統,其中待執行之該函式為一產生動態霍夫曼資料表函式,且其中該執行包含基於該函式為該產生動態霍夫曼資料表函式而產生一動態霍夫曼資料表之一壓縮表示以在待執行之該函式在該指令之另一次執行時為該壓縮函式或該解壓縮函式時使用。
- 一種用於促進一運算環境內之處理之電腦實作方法,該電腦實作方法包含:由該運算環境之一通用處理器獲得一指令以執行由該指令支援之複數個函式中之一函式,該指令為符合一業界標準以供壓縮之一指令集架構 之一單一架構化指令;及由該通用處理器執行該指令,該執行包括:基於該函式為一壓縮函式或一解壓縮函式而使輸入資料之狀態在該輸入資料之一未壓縮形式與該輸入資料之一壓縮形式之間變換以提供資料之一變換狀態;及將資料之該變換狀態提供為輸出以在執行一任務時使用。
- 如請求項17之電腦實作方法,其中該變換該輸入資料之該狀態使用符合該業界標準之一壓縮格式。
- 如請求項17之電腦實作方法,其中該指令包含:一作業碼欄位,其包括用以指定一作業之一作業碼;及複數個暫存器欄位,其用以指定將由該指令使用之複數個暫存器,其中該複數個暫存器包含用以識別將由該指令用作一輸出之一輸出運算元位置之一個暫存器,及用以識別將由該指令用作一輸入之一輸入運算元位置之另一暫存器,該輸入取決於該函式,其中基於該函式為該壓縮函式,該輸入包含來自該輸入運算元位置之資料以被編碼以提供儲存至該輸出運算元位置之壓縮資料符號,且其中基於該函式為該解壓縮函式,該輸入包含來自該輸入運算元位置之該等壓縮資料符號以被解碼以提供儲存至該輸出運算元位置之未壓縮資料。
- 如請求項17之電腦實作方法,其中待執行之該函式為一產生動態霍夫曼資料表函式,且其中該執行包含基於該函式為該產生動態霍夫曼資料表函式而產生一動態霍夫曼資料表之一壓縮表示以在待執行之該函式在該指令之另一次執行時為該壓縮函式或該解壓縮函式時使用。
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US16/263,735 | 2019-01-31 | ||
| US16/263,735 US10630312B1 (en) | 2019-01-31 | 2019-01-31 | General-purpose processor instruction to perform compression/decompression operations |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| TW202034161A TW202034161A (zh) | 2020-09-16 |
| TWI764078B true TWI764078B (zh) | 2022-05-11 |
Family
ID=69192075
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| TW109100211A TWI764078B (zh) | 2019-01-31 | 2020-01-03 | 用於執行壓縮/解壓縮作業之通用處理器指令之電腦程式產品、電腦系統及電腦實作方法 |
Country Status (14)
| Country | Link |
|---|---|
| US (1) | US10630312B1 (zh) |
| EP (1) | EP3918469A1 (zh) |
| JP (1) | JP7442526B2 (zh) |
| KR (1) | KR102598928B1 (zh) |
| CN (1) | CN113383309B (zh) |
| AU (1) | AU2020213853B2 (zh) |
| BR (1) | BR112021015027A2 (zh) |
| CA (1) | CA3127849A1 (zh) |
| IL (1) | IL283617B2 (zh) |
| MX (1) | MX390761B (zh) |
| SG (1) | SG11202104106WA (zh) |
| TW (1) | TWI764078B (zh) |
| WO (1) | WO2020156926A1 (zh) |
| ZA (1) | ZA202104999B (zh) |
Families Citing this family (7)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US10831497B2 (en) * | 2019-01-31 | 2020-11-10 | International Business Machines Corporation | Compression/decompression instruction specifying a history buffer to be used in the compression/decompression of data |
| US11226839B2 (en) * | 2019-02-27 | 2022-01-18 | International Business Machines Corporation | Maintaining compatibility for complex functions over multiple machine generations |
| US11663119B2 (en) * | 2020-05-29 | 2023-05-30 | International Business Machines Corporation | Select decompression headers and symbol start indicators used in writing decompressed data |
| US11669331B2 (en) * | 2021-06-17 | 2023-06-06 | International Business Machines Corporation | Neural network processing assist instruction |
| US11675592B2 (en) * | 2021-06-17 | 2023-06-13 | International Business Machines Corporation | Instruction to query for model-dependent information |
| US12399743B2 (en) * | 2022-02-23 | 2025-08-26 | International Business Machines Corporation | Padding input data for artificial intelligence accelerators |
| TWI820994B (zh) * | 2022-11-01 | 2023-11-01 | 大陸商星宸科技股份有限公司 | 指令壓縮方法、指令解壓縮方法及流程壓縮方法 |
Citations (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US20070002780A1 (en) * | 2005-06-30 | 2007-01-04 | Nokia Corporation | Signal message compression |
| US20130099946A1 (en) * | 2011-10-21 | 2013-04-25 | International Business Machines Corporation | Data Compression Utilizing Variable and Limited Length Codes |
| US8593308B1 (en) * | 2012-05-31 | 2013-11-26 | International Business Machines Corporation | Method of accelerating dynamic Huffman decompaction within the inflate algorithm |
| US20170366198A1 (en) * | 2014-06-09 | 2017-12-21 | Tidal Systems, Inc. | Vlsi efficient huffman encoding apparatus and method |
Family Cites Families (23)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US5926208A (en) * | 1992-02-19 | 1999-07-20 | Noonen; Michael | Video compression and decompression arrangement having reconfigurable camera and low-bandwidth transmission capability |
| US5442350A (en) * | 1992-10-29 | 1995-08-15 | International Business Machines Corporation | Method and means providing static dictionary structures for compressing character data and expanding compressed data |
| US6604158B1 (en) * | 1999-03-11 | 2003-08-05 | Realtime Data, Llc | System and methods for accelerated data storage and retrieval |
| US20030185301A1 (en) * | 2002-04-02 | 2003-10-02 | Abrams Thomas Algie | Video appliance |
| US7159122B2 (en) | 2003-05-12 | 2007-01-02 | International Business Machines Corporation | Message digest instructions |
| US7991622B2 (en) * | 2007-03-20 | 2011-08-02 | Microsoft Corporation | Audio compression and decompression using integer-reversible modulated lapped transforms |
| US20100223237A1 (en) * | 2007-11-05 | 2010-09-02 | University Of Florida Research Foundation, Inc. | Lossless data compression and real-time decompression |
| JP4758494B2 (ja) | 2009-04-21 | 2011-08-31 | インターナショナル・ビジネス・マシーンズ・コーポレーション | ビット長を符号に変換する回路及び方法 |
| CN101977061B (zh) | 2010-10-19 | 2012-12-26 | 广西师范大学 | 一种通用信息的无损压缩与解压缩方法 |
| US9940230B2 (en) * | 2010-10-22 | 2018-04-10 | Cnex Labs, Inc. | Compression and decompression of data at high speed in solid state storage |
| US9766812B2 (en) | 2011-07-20 | 2017-09-19 | Veritas Technologies Llc | Method and system for storing data in compliance with a compression handling instruction |
| US10534606B2 (en) * | 2011-12-08 | 2020-01-14 | Oracle International Corporation | Run-length encoding decompression |
| US20140006536A1 (en) | 2012-06-29 | 2014-01-02 | Intel Corporation | Techniques to accelerate lossless compression |
| US9154157B2 (en) * | 2012-09-27 | 2015-10-06 | Intel Corporation | Search unit to accelerate variable length compression/decompression |
| US8766827B1 (en) | 2013-03-15 | 2014-07-01 | Intel Corporation | Parallel apparatus for high-speed, highly compressed LZ77 tokenization and Huffman encoding for deflate compression |
| US8947270B2 (en) * | 2013-06-29 | 2015-02-03 | Intel Corporation | Apparatus and method to accelerate compression and decompression operations |
| US9374106B2 (en) | 2013-08-28 | 2016-06-21 | International Business Machines Corporation | Efficient context save/restore during hardware decompression of DEFLATE encoded data |
| US9306596B2 (en) | 2014-06-27 | 2016-04-05 | Intel Corporation | Hybrid CAM assisted deflate decompression accelerator |
| US10102215B2 (en) * | 2015-03-27 | 2018-10-16 | Intel Corporation | Apparatus for hardware implementation of lossless data compression |
| JP6363581B2 (ja) | 2015-05-11 | 2018-07-25 | ヴィア アライアンス セミコンダクター カンパニー リミテッド | 入力ブロックのスキャンと同時にソート済みシンボル・リストを維持するハードウェア・データ圧縮器 |
| US10303759B2 (en) | 2015-12-03 | 2019-05-28 | International Business Machines Corporation | Memory preserving parse tree based compression with entropy coding |
| US9564917B1 (en) * | 2015-12-18 | 2017-02-07 | Intel Corporation | Instruction and logic for accelerated compressed data decoding |
| CN105871382B (zh) | 2016-03-29 | 2019-10-18 | 中海油信息科技有限公司 | 一种Micaps第四类格点数据无损压缩算法 |
-
2019
- 2019-01-31 US US16/263,735 patent/US10630312B1/en active Active
-
2020
- 2020-01-03 TW TW109100211A patent/TWI764078B/zh active
- 2020-01-23 CA CA3127849A patent/CA3127849A1/en active Pending
- 2020-01-23 MX MX2021009157A patent/MX390761B/es unknown
- 2020-01-23 BR BR112021015027-7A patent/BR112021015027A2/pt unknown
- 2020-01-23 EP EP20701986.0A patent/EP3918469A1/en active Pending
- 2020-01-23 IL IL283617A patent/IL283617B2/en unknown
- 2020-01-23 JP JP2021532806A patent/JP7442526B2/ja active Active
- 2020-01-23 WO PCT/EP2020/051658 patent/WO2020156926A1/en not_active Ceased
- 2020-01-23 KR KR1020217023382A patent/KR102598928B1/ko active Active
- 2020-01-23 SG SG11202104106WA patent/SG11202104106WA/en unknown
- 2020-01-23 CN CN202080011700.4A patent/CN113383309B/zh active Active
- 2020-01-23 AU AU2020213853A patent/AU2020213853B2/en active Active
-
2021
- 2021-07-15 ZA ZA2021/04999A patent/ZA202104999B/en unknown
Patent Citations (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US20070002780A1 (en) * | 2005-06-30 | 2007-01-04 | Nokia Corporation | Signal message compression |
| US20130099946A1 (en) * | 2011-10-21 | 2013-04-25 | International Business Machines Corporation | Data Compression Utilizing Variable and Limited Length Codes |
| US8593308B1 (en) * | 2012-05-31 | 2013-11-26 | International Business Machines Corporation | Method of accelerating dynamic Huffman decompaction within the inflate algorithm |
| US20170366198A1 (en) * | 2014-06-09 | 2017-12-21 | Tidal Systems, Inc. | Vlsi efficient huffman encoding apparatus and method |
Also Published As
| Publication number | Publication date |
|---|---|
| JP7442526B2 (ja) | 2024-03-04 |
| IL283617A (en) | 2021-07-29 |
| CN113383309B (zh) | 2025-06-17 |
| TW202034161A (zh) | 2020-09-16 |
| WO2020156926A1 (en) | 2020-08-06 |
| MX390761B (es) | 2025-03-21 |
| US10630312B1 (en) | 2020-04-21 |
| KR20210108995A (ko) | 2021-09-03 |
| IL283617B2 (en) | 2024-02-01 |
| ZA202104999B (en) | 2022-08-31 |
| CA3127849A1 (en) | 2020-08-06 |
| MX2021009157A (es) | 2022-03-17 |
| EP3918469A1 (en) | 2021-12-08 |
| SG11202104106WA (en) | 2021-05-28 |
| CN113383309A (zh) | 2021-09-10 |
| IL283617B1 (en) | 2023-10-01 |
| JP2022518665A (ja) | 2022-03-16 |
| AU2020213853A1 (en) | 2021-06-03 |
| AU2020213853B2 (en) | 2022-09-08 |
| BR112021015027A2 (pt) | 2021-10-05 |
| KR102598928B1 (ko) | 2023-11-03 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| AU2020214177B2 (en) | Compression/decompression instruction specifying a history buffer to be used in the compression/decompression of data | |
| TWI764078B (zh) | 用於執行壓縮/解壓縮作業之通用處理器指令之電腦程式產品、電腦系統及電腦實作方法 | |
| JP7288048B2 (ja) | 汎用プロセッサのための並べ替えおよびマージ命令 | |
| US10698854B1 (en) | Secure and efficient application data processing | |
| JP7413371B2 (ja) | 部分的に完了された命令の移行 | |
| AU2020230012B2 (en) | Spilling temporary results for accommodation of memory boundaries | |
| JP2022503970A (ja) | 命令の複数の実行間のマシン状態の保存および復元 | |
| JP2022521132A (ja) | ベクトル文字列検索命令 | |
| CN113454593B (zh) | 保持多个机器生成上的复杂功能的兼容性 | |
| HK40057634A (zh) | 用於执行压缩/解压操作的通用处理器指令 | |
| HK40057236A (zh) | 指定要在数据压缩/解压中使用的历史缓冲区的压缩/解压指令 | |
| HK40057634B (zh) | 用於执行压缩/解压操作的通用处理器指令 | |
| HK40057237A (zh) | 溢出临时结果以适应存储边界 |