CN113474999A - 溢出临时结果以适应存储边界 - Google Patents

溢出临时结果以适应存储边界 Download PDF

Info

Publication number
CN113474999A
CN113474999A CN202080015708.8A CN202080015708A CN113474999A CN 113474999 A CN113474999 A CN 113474999A CN 202080015708 A CN202080015708 A CN 202080015708A CN 113474999 A CN113474999 A CN 113474999A
Authority
CN
China
Prior art keywords
source
buffer
accelerator
symbol
block
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202080015708.8A
Other languages
English (en)
Inventor
G·G·库鲁普
M·克莱纳
A·T·索菲亚
J·布拉德伯里
A·米什拉
C·雅各比
D·巴塔查吉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of CN113474999A publication Critical patent/CN113474999A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion 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/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • H03M7/4031Fixed length to variable length coding
    • H03M7/4037Prefix coding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30025Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion 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/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code

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)
  • Memory System (AREA)
  • Devices For Executing Special Programs (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Table Devices Or Equipment (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

一个方面包括一种系统架构,其包括处理单元、加速器、主源缓冲器、主目标缓冲器和存储器块。主源缓冲器存储从外部源接收的源符号的第一部分。主目标缓冲器存储从加速器接收的输出符号。存储器包括溢出源缓冲器,其存储从主源缓冲器接收的源符号的第一部分。加速器获取存储在溢出源缓冲器中的源符号的第一部分和存储在主源缓冲器中的源符号的第二部分,并将源符号的第一部分和第二部分一起转换为输出符号。源符号的第二部分包含源符号的不包含在源符号的第一部分中的一部分。

Description

溢出临时结果以适应存储边界
技术领域
本发明总体上涉及管理存储器单元,并且更具体地涉及在溢出(overflow)情况下管理主缓冲器和溢出缓冲器。
背景技术
计算系统经常使用改变数据大小的数据转换操作。例如,数据压缩技术可用于减小大数据文件的大小,并且所使用的数据解压缩技术恢复原始的大数据文件。例如,计算系统可以压缩从外部源接收的几千兆字节(GB)的文件。然而,执行压缩的应用可能仅能够访问较小大小(例如,一兆字节(MB))的缓冲器,使得应用仅能够同时读取或写入大数据文件中的少量数据。在这样的情况下,应用需要将大文件划分成任意小尺寸的块并且单独地压缩每个块而不是一次压缩整个文件。块的大小和对齐是可用缓冲空间的特性,并且通常与输入的结构不一致,输入可以表示大小上许多GB的单个流。
在机器可读级别,数据文件的内容是符号序列。如在此所使用的,术语“符号”(symbol)指位序列(bit sequence)的未划分单元及其在数据转换操作(例如,压缩/解压缩操作)中使用的对应物(counterpart)。“对应物”的含义将在此稍后进行解释。通常,单独的转换技术(例如,压缩/解压缩技术)具有将位序列映射到其含义的表格。例如,如果表将“10100”定义为表示字母“a”,则位序列“10100”是符号,因为划分的部分“10”和“100”中的每一个不用于表示字母“a”,而是可用于表示不同的含义。在这种情况下,符号的长度为5字节。然而,存在许多种类的符号,并且符号的长度根据符号的种类而变化。例如,在压缩的数据文件中,包括由霍夫曼编码算法生成的动态霍夫曼树(“DHT”)的压缩报头可以是符号,因为如果表示DHT的长序列的一部分丢失,则不可能对后面的压缩数据进行解码。此报头的最大大小为约288字节。
在主缓冲器的可用空间比下一符号的大小短(例如,剩余280字节,但下一符号长288字节)的情况下,在常规系统中存在两个选项。一个选项是用符号的一部分(例如,前280字节)填充剩余空间,并且丢弃符号的其他剩余部分(例如,最后8个字节)。然而,丢弃数据可能导致处理中的严重错误。第二选项是仅用先前存储的符号执行转换操作,而不填充主缓冲器的剩余空间。这可能导致浪费的存储器空间。在一些情况下,应用缓冲器使用可能要求可用缓冲器空间被完全填充,即使符号不完全适合。在这样的环境中,计算系统需要管理溢出情况。
因此,本领域需要解决上述问题。
发明内容
从第一方面来看,本发明提供了一种系统,包括:处理单元;加速器;主源缓冲器,被配置为存储从外部源接收的源符号的第一部分;主目标缓冲器,被配置为存储从所述加速器接收的输出符号;以及存储块,包括溢出源缓冲器,其中,所述溢出源缓冲器被配置为存储从所述主源缓冲器接收的所述源符号的所述第一部分,加速器被配置为提取存储在溢出源缓冲器中的源符号的第一部分和存储在主源缓冲器中的源符号的第二部分,并执行将源符号的第一部分和第二部分一起转换为输出符号的转换操作,所述源符号的所述第二部分包括所述源符号的不包含在所述源符号的所述第一部分中的部分,所述处理单元用于调用所述加速器进行转换操作。
从另一方面来看,本发明提供了一种系统,包括:处理单元;加速器;主源缓冲器,被配置为存储从外部源接收的源符号;主目标缓冲器,被配置为存储从所述加速器接收的输出符号的第一部分;以及存储块,包括溢出目标缓冲器,所述溢出目标缓冲器被配置为存储从所述加速器接收的所述输出符号的第二部分,所述输出符号的所述第二部分包括所述输出符号的不包含在所述第一部分中的部分,加速器,被配置为执行将源符号转换成输出符号的转换操作,以及处理单元,被配置为调用加速器来执行转换操作。
从另一方面来看,本发明提供了一种计算机实现的方法,包括:由处理单元或加速器将从外部源接收的源符号的第一部分存储在主源缓冲器中;基于确定在没有从所述外部源接收到所述源符号的第二部分的情况下所述第一部分未完成,由所述处理单元或所述加速器将所述源符号的所述第一部分存储在溢出源缓冲器中;由所述加速器获取存储在所述溢出源缓冲器中的所述源符号的第一部分和存储在所述主源缓冲器中的所述源符号的第二部分;由所述加速器将所述源符号的所述第一部分和所述第二部分一起转换成输出符号;以及由处理单元或加速器将从加速器接收的输出符号存储在主目标缓冲器中,源符号的第二部分包括源符号的未包括在第一部分中的一部分,并且加速器包括硬件引擎。
从另一方面来看,本发明提供了一种计算机实现的方法,包括:通过处理单元或加速器将从外部源接收的源符号存储在主源缓冲器中;由所述加速器执行所述源符号到输出符号的转换操作;由所述处理单元或所述加速器将从所述加速器接收的所述输出符号的第一部分存储在主目标缓冲器中;以及基于确定所述主目标缓冲器不可用于存储所述输出符号的第二部分,由所述处理单元或所述加速器将从所述加速器接收的所述输出符号的所述第二部分存储在溢出目标缓冲器中,其中,源符号的第二部分包括源符号的不包括在第一部分中的部分,以及所述加速器包括硬件引擎。
从另一方面来看,本发明提供了一种管理存储器单元的计算机程序产品,所述计算机程序产品包括计算机可读存储媒质,所述计算机可读存储媒质可由处理电路读取并且存储用于由处理电路执行以便执行用于执行本发明的步骤的方法的指令。
从另一方面来看,本发明提供了一种存储在计算机可读媒质上并且可加载到数字计算机的内部存储器中的计算机程序,所述计算机程序包括软件代码部分,当所述程序在计算机上运行时,所述软件代码部分用于执行本发明的步骤。
根据本发明的一个或多个实施例,提供了一种系统架构,其包括处理单元、加速器、主源缓冲器、主目标缓冲器和存储块。所述主源缓冲器经配置以存储从外部源接收的源符号的第一部分。主目标缓冲器被配置为存储从加速器接收的输出符号。存储块包括溢出源缓冲器。溢出源缓冲器用于存储从主源缓冲器接收到的源符号的第一部分。加速器被配置为提取存储在溢出源缓冲器中的源符号的第一部分和存储在主源缓冲器中的源符号的第二部分,并执行将源符号的第一部分和第二部分一起转换成输出符号的转换操作。源符号的第二部分包含源符号的不包含在源符号的第一部分中的一部分。所述处理单元用于调用所述转换操作。益处可包括防止架构丢失存储在主源缓冲器中的部分源符号,并将源符号的组合的、整个部分发送到加速器,加速器将源符号的整个部分一起转换,以便恢复预期的无失真的输出符号。当加速器是硬件引擎时的另一益处是处理速度比软件实现的压缩的处理速度快。
根据本发明的额外或替代实施例,以上转换操作包含解压缩操作,其将源符号的第一部分和第二部分一起解压缩为输出符号。
根据本发明的额外或替代实施例,处理单元通过微码来控制加速器的操作。
根据本发明的额外或替代实施例,主源缓冲器将源符号的第一部分存储在主源缓冲器的最后可用空间中。益处包含此帮助处理器辨识符号序列中的哪一源符号为待存储于溢出源缓冲器中的对象,且需要溢出源缓冲器的多少空间。
根据本发明的额外或替代实施例,源符号包含压缩报头。益处包括:这通知处理器需要什么样的溢出源缓冲器的最大空间。
根据本发明的额外或替代实施例,存储器块还包括恢复转换操作所需的信息。益处包括:当系统需要恢复解压缩过程时,存储在存储器块中的信息触发。
根据本发明的一个或多个实施例,提供了一种系统架构,其包括处理单元、加速器、主源缓冲器、主目标缓冲器和存储块。主源缓冲器被配置为存储从外部源接收的源符号。主目标缓冲器被配置为存储从加速器接收的输出符号的第一部分。存储块包括溢出目标缓冲器。溢出目标缓冲器被配置为存储从加速器接收的输出符号的第二部分。输出符号的第二部分包括输出符号的不包括在第一部分中的部分。加速器被配置为执行将源符号转换成输出符号的转换操作。所述处理单元用于调用所述转换操作。益处可包括防止架构丢失目标符号的溢出部分,并将目标符号的组合的整个部分发送到下一可用主目标缓冲器,使得接收输出符号的另一设备可接收原始数据而不失真。
上述转换操作可包括将源符号解压缩为输出符号的解压缩操作或将源符号压缩为输出符号的压缩操作。
根据本发明的一个或多个实施例,提供了一种计算机实现的方法,并且包括:存储,通过处理单元或加速器,在主源缓冲器中从外部源接收的源符号的第一部分,基于确定在没有从所述外部源接收到所述源符号的第二部分的情况下所述第一部分未完成,由所述处理单元或所述加速器将所述源符号的所述第一部分存储在溢出源缓冲器中,由所述加速器提取存储在所述溢出源缓冲器中的所述源符号的第一部分和存储在所述主源缓冲器中的所述源符号的第二部分,由所述加速器将所述源符号的所述第一部分和所述第二部分一起转换成输出符号,以及通过处理单元或加速器将从加速器接收的输出符号存储在主目标缓冲器中。源符号的第二部分包括源符号的未包括在第一部分中的一部分,并且加速器包括硬件引擎。益处包括可以用整个源符号完成恢复的转换。
根据本发明的一个或多个实施例,提供了一种计算机实现的方法,并且包括:存储,由主源缓冲器中的处理单元或加速器接收从外部源接收的源符号,由所述加速器执行所述源符号到输出符号的转换操作,由所述处理单元或所述加速器将从所述加速器接收的所述输出符号的第一部分存储在主目标缓冲器中,以及基于确定所述主目标缓冲器不可用于存储所述输出符号的第二部分,由所述处理单元或所述加速器将从所述加速器接收的所述输出符号的所述第二部分存储在溢出目标缓冲器中。源符号的第二部分包括源符号的未包括在第一部分中的一部分,并且加速器包括硬件引擎。计算机实现的方法可进一步包括通过将存储在溢出目标缓冲器中的输出符号的第二部分馈送到主目标缓冲器来恢复转换操作。益处包括:整个转换的输出符号可以被传输到其他设备。
根据本发明的一个或多个实施例,提供了一种用于管理系统架构的计算机程序产品,所述系统架构包括处理单元、加速器、主源缓冲器、主目标缓冲器和溢出源缓冲器。所述计算机程序产品包括计算机可读存储媒质,所述计算机可读存储媒质具有随其体现的程序指令。可由所述处理单元和所述加速器执行的所述程序指令致使所述系统架构执行一种方法,所述方法包括:由所述处理单元或所述加速器将从外部源接收的源符号的第一部分存储在所述主源缓冲器中,基于确定在没有从所述外部源接收到所述源符号的第二部分的情况下所述第一部分未完成,由所述处理单元或所述加速器将所述源符号的所述第一部分存储在所述溢出源缓冲器中,由所述加速器提取存储在所述溢出源缓冲器中的所述源符号的第一部分和存储在所述主源缓冲器中的所述源符号的第二部分,由所述加速器将所述源符号的所述第一部分和所述第二部分一起转换成输出符号,以及由处理单元或加速器将从加速器接收的输出符号存储在主目标缓冲器中。源符号的第二部分包括源符号的未包括在第一部分中的一部分。
通过本发明的技术实现了附加的技术特征和益处。在此详细描述了本发明的实施例和方面,并且这些实施例和方面被认为是所要求保护的主题的一部分。为了更好地理解,参考具体实施方式和附图。
附图说明
在说明书结论的权利要求书中特别指出并清楚地要求保护本文描述的独占权利的细节。从以下结合附图的详细描述中,本发明的实施例的前述和其他特征和优点是显而易见的,其中:
图1A描绘了结合和使用本发明的一个或多个方面的计算环境的一个实例;
图1B描绘了根据本发明的一个或多个方面的图1A的处理器的进一步细节;
图2描绘并入和使用本发明的一个或多个方面的计算环境的另一实例;
图3A描绘了根据本发明的一个方面的DEFLATE转换调用(DFLTCC)指令的一种格式;
图3B描绘了根据本发明的一个方面的由DEFLATE转换调用指令使用的隐式寄存器(implied register)(通用寄存器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描绘根据本发明的一个方面的使用循环历史缓冲器的一个实例;
图19描绘了根据本发明的一个或多个实施例的系统架构;
图20描绘了根据本发明的一个或多个实施例的图19的系统架构的附加特征;
图21描绘了示出根据本发明一个或多个实施例的图19的系统架构的外部设备与存储器之间的数据文件传输的示意图;
图22描绘了框图,展示了根据本发明的一个或多个实施例的图21的存储器中的存储器块;并且
图23描绘了示出根据本发明一个或多个实施例的存储器页异常的示意图。
本文所描绘的图是说明性的。在不脱离本发明的范围的情况下,可以对这里描述的图表或操作进行许多变化。例如,这些动作可按不同次序执行,或动作可被添加、删除或修改。同样,术语“耦合”及其变体描述了在两个元件之间具有通信路径并且不暗示这些元件之间的直接连接,而在它们之间没有中间元件/连接。所有这些变化被视为说明书的一部分。
在附图和所披露实施例的以下详细说明中,附图中展示的这些不同元件配备有两个或三个数字附图标记。在次要例外的情况下,每个附图标记的最左边的数字对应于首先展示其元件的图。
具体实施方式
本发明的一个或多个实施例利用溢出缓冲器来允许指令被暂时中断和挂起。本发明的一个或多个实施例提供一种用于溢出临时结果以适应存储器边界的方法。参数块中的溢出源缓冲器可用以容纳解压缩时的不完整源符号,且参数块(parms block)中的溢出目标缓冲器可用以容纳由解压缩或压缩产生的不完整输出符号。如在此使用的,术语“参数块”指包含用于转换操作(例如,压缩或解压缩操作)的参数的存储器块。本发明的一个或多个实施例最小化发送到溢出缓冲器的数据量,以便最小化溢出缓冲器的大小。溢出缓冲器可以被定义为参数块的一部分,并且存储在溢出缓冲器中的内容可以像参数本身那样被处理。在随后的继续命令中,固件将溢出缓冲器内容复制到适当的存储器页。由于溢出缓冲器被定义为参数块的一部分,因此压缩/解压缩指令的每次调用不需要担心溢出缓冲器地址。作为此实现的结果,加速器可完全消耗可用源和目标缓冲器,即使可用空间不允许加速器完全处理源码元或存储目标输出码元。这使得软件提供的缓冲器在长流中具有固定大小,并且允许加速器完全消耗先前页面以用于访问异常。
现有机制在没有溢出缓冲器的情况下以相对小的主源和目标缓冲器(例如,1MB)解压缩大数据文件(例如,5GB)。由于在解压缩阶段中源符号的大小,在一些情况下,主源缓冲器不在符号的边界上结束。压缩级中可能出现与现有机制类似的情形。如果由于溢出,仅符号的一部分被存储在主缓冲器中,并且仅存储的符号被传送以被压缩,而不添加符号的剩余部分,则被传送以被压缩的符号的内容不完整并且错误。这种错误也可能发生在执行解压缩的设备中。
本发明的一个或多个实施例通过添加溢出缓冲器,使得数据的剩余部分可临时存储在溢出缓冲器中,解决了当代方法的上述缺点/缺点。
在一个或多个计算环境中,在存储设备上维护信息的压缩形式,而不是原始的未压缩形式。压缩形式比原始形式占用更少的字节。结果,与执行与信息的原始形式相同的功能相比,发送和接收并保持信息的压缩形式分别需要更少的时间和空间。
在这样的环境中,操作系统(OS)提供用于执行压缩和解压缩操作的机制。在一个示例中,为了提供这些操作,操作系统合并zlib开源软件库,其遵循在IETF(互联网工程任务组)RFC(请求注解)1951规范中规定的DEFLATE标准压缩技术。所述机制可以包括软件实现,其中用户在通用处理器上执行许多指令以执行压缩或解压缩,或者它可以使用连接到系统的输入/输出(I/O)端口的专用硬件实现,其中I/O设备执行操作。
参见图1A描述并入和使用本发明的一个或多个方面的计算环境的一个实施例。计算环境100包括例如处理器102(例如,中央处理单元),存储器104(例如,主存储器;又名,系统存储器、主存储器、中央存储器、存储器),以及经由彼此耦合的一个或多个输入/输出(I/O)设备和/或接口106,例如,一个或多个总线108和/或其他连接。
在一个示例中,处理器102基于由纽约州阿蒙克市的国际商业机器公司提供的
Figure BDA0003221328490000071
硬件架构,并且是诸如IBM
Figure BDA0003221328490000072
服务器之类的服务器的一部分,所述服务器也由国际商业机器公司提供并实现z/Architecture硬件架构。z/Architecture硬件架构的一个实施例在名称为‘z/Architecture Principles of Operation’的出版物中描述,IBM公开号.SA22-7832-11,第12版,2017年9月。然而,z/Architecture硬件架构仅是一个示例架构;其他架构和/或其他类型的计算环境可包括和/或使用本发明的一个或多个方面。在一个示例中,处理器执行操作系统,诸如也由国际商业机器公司提供的
Figure BDA0003221328490000073
操作系统。IBM、IBM Z、z/OS、z/Architecture是国际商业机器公司的商标,在全世界许多管辖区域中注册。
处理器102包括用于执行指令的多个功能组件。如图1B中所描绘的,这些功能组件包括:例如,指令提取组件120,用于提取要执行的指令;指令解码单元122,用于对所获取的指令进行解码并且获得经解码的指令的操作数;指令执行组件124,用于执行解码的指令;存储器访问组件126,用于在必要时访问存储器以用于指令执行;以及回写组件130,用于提供所执行的指令的结果。根据本发明的一个或多个方面,这些组件中的一个或多个组件可以包括在压缩/解压缩处理(或可以使用本发明的一个或多个方面的其他处理)中使用的一个或多个其他组件的至少一部分或具有对在压缩/解压缩处理(或可以使用本发明的一个或多个方面的其他处理)中使用的一个或多个其他组件的访问权,如本文所描述的。一个或多个其他组件包括例如压缩/解压缩组件(或其他组件)136。
参看图2来描述用以并入且使用本发明的一个或一个以上方面的计算环境的另一实例。在一个示例中,计算环境基于z/Architecture硬件架构;然而,计算环境可基于由国际商业机器公司或其他公司提供的其他架构。
参照图2,在一个示例中,计算环境包括中央电子复合体(CEC)200。CEC200包括多个部件,例如耦接到一个或多个处理器(又名中央处理单元(CPU))204和输入/输出子系统206的存储器202(又名系统存储器、主存储器、主存储器、中央存储器、存储器)。
存储器202包括例如一个或多个逻辑分区208、管理逻辑分区的管理程序210和处理器固件212。管理程序210的一个示例是由纽约Armonk的国际商业机器公司提供的处理器资源/系统管理器(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规范)指定的,其在DEFLATE压缩数据格式规范1.3版互联网工程任务组(Compressed Data Format Specification version 1.3Internet EngineeringTask Force)中描述,请求评论1951,1996年5月。
在一个示例中,未压缩数据是字节序列,并且数据的压缩表示包括符号。符号表示未压缩数据的单独字节,称为字面字节,或者表示未压缩数据的字节的重复出现的序列,称为重复串。作为实例,霍夫曼表指定压缩数据符号和未压缩数据之间的编码和解码。存在两种类型的霍夫曼表:固定-霍夫曼表(FHT),其是包括例如所有可能的编码的预定规范;以及动态霍夫曼表(DHT),其是专门针对要被压缩的数据创建的编码的集合,其可以是所有可能编码的子集。用DHT生成的数据的压缩表示通常小于用FHT生成的相同数据的压缩表示。最近处理的未压缩数据的一部分(被称为历史)被维持用于对表示重复串的压缩数据符号进行编码和解码。历史是重复字符串的参考源。当在操作期间处理数据时更新历史。
如所指示,在一个实例中,DEFLATE转换调用指令使用DEFLATE压缩数据格式,其在RCF1951,DEFLATE压缩数据格式规范版本1.3中描述。应用于DEFLATE转换调用指令的DEFLATE标准的属性包括例如:
·压缩的数据集包括一系列块。存在三种类型的块。一种类型包括3字节报头,其后是长度信息和未压缩数据,两种类型的块包括3字节报头,其后是压缩数据元素。
·压缩的数据元素可包括动态霍夫曼表的压缩的表示、压缩的数据符号和块结束(EOB)符号。
·压缩的数据元素具有不同位长度。
·经压缩的数据元素可在存储中的字节边界之间开始或结束。
·压缩的数据元素按照例如从最右边的字节位置到最左边的字节位置的顺序被加载到字节中。
当压缩的数据元素占据存储中的字节的一部分而不是全部时,访问存储中的整个字节。储存操作数长度指定可寻址字节的数目,其可指定比压缩数据占据的位多的位。
下文进一步描述关于经压缩数据块的额外细节。
参见图3A-3L描述DEFLATE转换调用(DFLTCC)指令的一个实施例。在一个示例中,使用通用处理器(例如,处理器102或204)来执行指令。在本文的描述中,指示特定位置、特定字段和/或字段的特定大小(例如,特定字节和/或位)。然而,可以提供其他位置、字段和/或大小。进一步,虽然指定将位设定为特定值(例如,一或零),但这仅是实例。在其他实例中,可将所述位设定为不同值,例如相反值或另一值。许多变化是可能的。
在一个实施例中,程序(例如,操作系统或用户程序)可执行DEFLATE转换调用指令多次以压缩或解压缩单个数据流。例如,当应用压缩或解压缩大数据流(例如,大于1M字节)时,操作可包括多个调用以压缩或解压缩数据流的经缓冲部分。根据本发明的一个方面,程序声明缓冲器(例如,32K字节的缓冲器),所述缓冲器用于累积在跨越DEFLATE转换调用指令的多个执行的操作期间处理的未压缩数据的历史。缓冲器被称为循环历史缓冲器,其使用DEFLATE转换调用指令来定义,如本文所描述的。
参见图3A,在一个示例中,DEFLATE转换调用(DFLTCC)指令300的格式是表示具有扩展操作码(操作码)字段和附加寄存器字段的寄存器和寄存器操作的RRF格式。作为示例,指令包括:操作码字段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指定未指派或卸载的功能代码时,辨识出规格(specification)异常。
用于DEFLATE转换调用指令的示例分配的函数代码在图3C中示出,并且包括例如:指示DFLTCC-QAF(查询可用函数)函数的函数代码0(313);指示DFLTCC-GDHT(生成动态霍夫曼表)函数的函数代码1(315);指示DFLTCC-CMPR(压缩)函数的函数代码2(317);以及指示DFLTCC-XPND(扩展)函数的函数代码4(319)。每一码使用参数块,且在一实例中,参数块的大小取决于函数。例如,对于DFLTCC-QAF函数,参数块为32字节;对于DFLTCC-GDHT函数,参数块为384字节;对于DFLTCC-CMPR和DFLTCC-XPND函数,参数块为1536字节。在此实例中,未指派其他函数代码。尽管描述了示例功能和功能代码,但是可以使用其他功能和/或功能代码。
当所指定的函数是DFLTCC-CMPR或DFLTCC-XPND时,通用寄存器0的位56指定在操作期间使用的历史缓冲器类型(HBT)。当HBT为零时,历史缓冲器称为在线历史缓冲器。当使用在线历史缓冲器时,当指定DFLTCC-CMPR时,历史例如紧靠第二操作数的左侧,并且当指定DFLTCC-XPND时,历史例如紧靠第一操作数的左侧。当HBT为1时,历史缓冲器称为循环历史缓冲器。当使用循环历史缓冲器时,当指定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时,通用寄存器R1318的内容指定第一操作数的最左字节的逻辑地址。当所指定的函数为DFLTCC-CMPR时,通用寄存器R1+1的内容连同新任务(NT)和参数块(下文描述)的子字节边界(SBB)字段的值指定第一操作数的长度。下表提供说明DFLTCC-CMPR函数的第一操作数的长度为通用寄存器R1+1、NT字段和SBB字段的内容的函数的实例:
Figure BDA0003221328490000111
当指定函数为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+1330的内容用以确定第二操作数的长度332。例如,当指定函数为DFLTCC-GDHT、DFLTCC-CMPR或DFLTCC-XPND时,通用寄存器R2的内容指定第二操作数的最左字节的逻辑地址。当指定函数为DFLTCC-CMPR或DFLTCC-GDHT时,通用寄存器R2+1的内容指定第二操作数的长度。当指定函数为DFLTCC-XPND时,通用寄存器R2+1的内容连同参数块的NT字段和SBB字段的值指定第二操作数的长度。当第二操作数长度被引用并且在指令的执行开始时具有非零值时,从第二操作数位置取回数据。当引用第二操作数长度时,在指令的执行开始时具有值0,并且参数块的继续标记(CF)字段在指令的执行开始时为1,第二操作数不被访问。
当指定DFLTCC-QAF函数时,忽略通用寄存器R2和R2+1的内容。当指定DFLTCC-GDHT函数且通用寄存器R2+1的内容指定等于零的长度时,辨识出指定异常,且不存取第二操作数。当指定DFLTCC-CMPR或DFLTCC-XPND函数时,在指令的执行开始时参数块的继续标记(CF)字段为零,并且通用寄存器R2+1的内容指定等于零的长度,识别指定异常,并且不访问第二操作数。
如图3I所示,当指定的功能是DFLTCC-CMPR或DFLTCC-XPND并且历史缓冲器类型(HBT)是循环的(例如,HBT310=1),通用寄存器R3335的内容指定循环历史缓冲器地址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的原始值的总和,除数是值8。地址和长度的形成和更新取决于寻址模式,如下所述。
作为操作的一部分,当指定函数为DFLTCC-XPND时,通用寄存器R1中的地址递增第一操作数的处理的字节数,并且通用寄存器R1+1中的长度递减相同的数;通用寄存器R2中的地址递增包含处理位位置0的第二操作数的处理的字节的数目,且通用寄存器R2+1中的长度递减相同数目。包括处理位位置0的第二操作数的处理的字节的数量是从整数除法得到的整数商,其中除数是所处理的输入位的数量和SBB的原始值的总和,除数是值8。地址和长度的形成和更新取决于寻址模式,如下所述。
在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。当一个字节是例如1时,安装相应的功能;否则,不安装功能。
进一步,在一个示例中,所安装的参数块格式向量346的位0-15分别对应于DFLTCC-GDHT、DFLTCC-CMPR和DFLTCC-XPND函数的参数块格式0-15。当某个字节位为1时,则安装相应的参数块格式,否则不安装。在一个实例中,将零存储到参数块的保留字节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函数时,第二操作数例如用作源以生成如由DEFLATE标准指定的动态霍夫曼表(DHT)的压缩表示。
在一个实例中,DFLTCC-GDHT功能使用参数块,参照图3K描述所述参数块的实例。在本文所描述的实例参数块中,指示用于特定字段和字段的特定大小的参数块内的特定位置(例如,特定字节和/或位)。然而,可以为一个或多个字段提供其他位置和/或大小。进一步,虽然指定将位设定为特定值(例如,一或零),但这仅是实例。在其他实例中,可将所述位设定为不同值,例如相反值或另一值。许多变化是可能的。
另外,在一个实例中,参数块包含一个或一个以上保留(preserved)字段和一个或一个以上预留(reserved)字段。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指定等于零的计数将被如下处理,在一个示例中:
DHTGC含义
0字面字节的处理计数,重复串长度,以及指针距离等于零到等于一(生成通用DHT)。
1处理重复串长度的计数以及指针距离等于零到等于一。
指定用于字面字节、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(十六进制)含义
00 没有提供附加信息。
01 由参数块版本号362指定的参数块的格式不被模型支持。
02 指定DFLTCC-CMPR或DFLTCC-XPND函数,历史长度字段385(图3L)大于例如32,768,且新任务字段374(图3L)为零。
11 遇到BTYPE(块类型)等于11二进制的压缩数据块。
12 遇到BTYPE等于00二进制且NLEN不等于LEN(长度)的一的补码(the one’scomplement)的经压缩数据块。
21 CDHTL字段366(图3L)适用并且例如小于42或大于2283。
22 在操作期间使用的压缩DHT的HLIT子元素例如大于29(无效DHT)。
23 在操作期间使用的压缩DHT的HDIST子元素例如大于29(无效DHT)。
24 在操作期间使用的压缩DHT指定代码,所述代码在指定针对压缩DHT定义的可能代码长度(例如,19)的字节长度的代码序列中,并且小于霍夫曼算法指定功能霍夫曼树(无效DHT)所需的长度。
26 在操作期间使用的压缩DHT将代码长度16(复制先前的代码长度)指定为由字面字节、EOB符号和重复串长度(无效DHT)组成的元素集合的第一代码长度。
27 在操作期间使用的压缩DHT指定代码,所述代码在指定字面字节的代码长度的代码序列中,并且所述代码不匹配被确定为表示所引用的代码长度的集合的代码中的任何代码,如之前在压缩DHT(无效DHT)中所指定的。
28 在操作期间使用的压缩的DHT指定将码长0(CL0)分配给EOB符号的码。在这种情况下,相应的DHT不指定霍夫曼代码来表示EOB符号(无效DHT)。
29 在操作期间使用的压缩DHT指定代码序列中的代码,所述代码指定用于重复串长度和指针距离的代码长度,并且所述代码不匹配被确定为表示参考代码长度的集合的代码中的任何代码,如压缩DHT(无效DHT)中较早指定的。
2A 在操作期间使用的压缩的DHT指定大于DHT中的霍夫曼代码的数量的代码长度的数量,如由HLIT字段、HDIST字段和例如258中的值的总和指定的。作为示例(无效DHT),这可能具有代码长度16、17和18的不正确使用。
2B 在操作期间使用的压缩DHT指定用于字面字节集、EOB符号和重复串长度的代码长度,其小于由霍夫曼算法指定功能霍夫曼树(无效DHT)所需的长度。
2D 在操作期间使用的压缩的DHT指定用于复制串指针距离的集合的代码长度,其小于由霍夫曼算法指定功能霍夫曼树(无效DHT)所需的长度。
2F CDHTL字段366(图3L)适用并且不等于在操作期间使用的CDHT字段367(图3L)中的压缩DHT的长度。
31 在操作期间使用的压缩DHT不指定对应于在操作期间处理的字面字节或重复串长度的霍夫曼代码(缺乏非通用DHT),或者,规定DFLTCC-XPND函数和BTYPE等于01二进制的压缩数据块中遇到的压缩数据符号,指定重复串长度(11000110或11000111二进制)的无效代码。
32 在操作期间使用的压缩DHT不指定与在操作期间处理的复制串指针距离对应的霍夫曼代码(缺乏的非通用DHT),或者,规定DFLTCC-XPND函数和BTYPE等于01二进制的压缩数据块中遇到的压缩数据符号,指定用于复制串指针距离(11110或11111二进制)的无效代码。
40 遇到压缩的数据符号,其是复制串指针并且指定比在处理符号的点处可用的历史的长度更大的距离。
当操作结束而不报告一般操作数数据异常时,将零存储到OESC字段。
对除了零之外的补充代码的支持是依赖于模型的。当存在多个条件时,在OESC字段中报告哪个代码(如果有的话)是依赖于模型的。
压缩动态霍夫曼表长度(CDHTL)366:参数块的从字节56的位4开始到字节57的位7的12位包含无符号二进制整数,所述整数在参数块的CDHT字段(例如,CDHT367)中将DHT的压缩格式的长度指定为位计数。
CDHTL是当指定DFLTCC-GDHT功能时来自操作的输出。
当指定DFLTCC-CMPR功能并且霍夫曼表类型(例如,图3L的HTT 376)是1时,CDHTL是对操作的输入。当CDHTL未指定CDHT的适当长度时,识别一般操作数数据异常。当指定DFLTCC-CMPR功能时,不修改CDHTL。
当指定DFLTCC-XPND函数并且在仅解码具有BTYPE 10二进制的块的一部分之后操作结束时,将块中的DHT的压缩表示的长度存储到所述字段。当指定DFLTCC-XPND函数并且操作在块边界处结束时,或者在利用BTYPE 00或01二进制解码块的仅一部分之后,将零存储到所述字段。当在具有BTYPE 10二进制的块内恢复解压缩操作时(即,当CF(图3L的继续标记373)等于1和I时)。
FS(不完整功能状态383)等于C或D十六进制(hex),如下所述,所述字段是操作的输入。
压缩动态霍夫曼表(CDHT)367:参数块的字节64-351包含动态霍夫曼表(DHT)的压缩格式。
DHT指定霍夫曼码(位序列)以表示两组元素。一个集合的元素包括字面字节、EOB符号和重复串长度。另一集合的元素包括重复的串指针距离。DHT的压缩表示定义代码长度的集合并指定每一集合的每一元素的代码长度(CL)。期望在操作期间参考的元素的霍夫曼代码从为所述元素指定的CL和具有相同指定CL的相同集合中的元素的数目导出。具体地,DHT的压缩表示例如包括:
·HLIT字段,用于指定表示文字量字节、EOB符号和重复串长度的霍夫曼码的数目。
·HDIST字段,用于指定表示重复串指针距离的霍夫曼码的数目。
·HCLEN(霍夫曼码长度)字段,用于指定表示码长的霍夫曼码的数目。
·一码序列,其指定每一位长度,例如,为所述压缩DHT定义的19码长度。
·代码序列,所述代码序列指定由所述字面字节、EOB符号和重复串长度组成的所述集合的所述元素中的每个元素的代码长度。
·代码序列,其指定由重复串指针距离组成的所述集合的所述元素中的每一者的代码长度。
下文参考具有块类型10二进制的经压缩数据块的描述来描述DHT的经压缩表示的进一步细节。
在一个示例中,DHT的压缩表示在CDHT字段中保持对齐。即,字节64的最右边位包含DHT的压缩表示的HLIT子元素的最低有效位。
当指定DFLTCC-GDHT功能时,DHT的压缩表示是来自操作的输出。
当指定DFLTCC-CMPR功能并且下文描述的HTT为1时,DHT的压缩表示是对操作的输入。CDHT字段不被DFLTCC-CMPR功能修改。
当DFLTCC-XPND函数被指定并且操作仅在用BTYPE 10二进制解码块的一部分之后结束时,块中的DHT的压缩表示被存储到所述字段。当指定DFLTCC-XPND函数并且操作在块边界处结束时,或者在利用BTYPE 00或01二进制解码块的仅一部分之后,将零存储到所述字段。当在具有BTYPE10二进制的块内恢复解压缩操作时(即,当CF等于1且IFS等于C或D十六进制时),所述字段是操作的输入。
当CDHT被修改时,未被用于表示DHT的压缩表示的字段的位被存储为零。
尽管上文相对于参数块360描述了不同字段,但是在其他实施例中可以包括附加的、更少的和/或其他的字段。
DHT生成的各方面由程序使用参数块的动态霍夫曼表生成控制(DHTGC)字段364来指定给机器。既定源包含未压缩数据,且在完成操作之后,用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(当为1时)指示操作部分完成,且继续状态缓冲器的内容(例如,在继续状态缓冲器字段392中)可用以恢复操作。程序将继续旗标(CF)初始化为零,且在为了恢复操作的目的而重新执行指令的情况下不修改CF;否则结果是不可预测的。
新任务(NT)374:参数块的字节16的位0在为1时指示操作应用于经压缩数据集的开始。因此,没有来自先前操作的历史和检查值适用于当前操作。当NT在操作的开始处为1且操作在部分完成之后结束时,将零存储到NT字段。当NT为零时,来自先前操作的历史和检查值应用于当前操作。
校验值类型(CVT)375:参数块的字节16的位2指定包含在参数块的校验值字段(例如,字段387)中的校验值的类型。当CVT是零时,校验值类型是例如32位循环冗余校验(CRC-32)。在CVT为1的情况下,校验值种类例如为32位的Adlerchecksum(Adler-32)。CVT钻头在指令的执行期间不修改。
霍夫曼表类型(HTT)376:当零时,参数块的字节16的位4指定包含由DEFLATE标准定义的固定霍夫曼码(FHT)的表在压缩操作期间被使用。当HTT是1时,在压缩操作期间使用包含如在参数块的CDHT字段中指定的动态霍夫曼码(DHT)的表。HTT不适用于解压缩操作。HTT位在指令的执行期间不被修改。
块连续标志(BCF)377:当指定DFLTCC-CMPR功能时,应用参数块的字节16的位5。当零时,3字节块报头以及当适用时,在存储任何压缩的数据元素之前将如在参数块的CDHT字段(例如,字段367)中指定的动态霍夫曼表的压缩格式存储到第一操作数位置。当为1时,DHT的块头部和压缩格式都不存储到第一操作数位置。当NT为1时,BCF被视为等于0。BCF位在指令的执行期间不被修改。
块关闭控制(BCC)378:当指定DFLTCC-CMPR功能时,应用参数块的字节16的位6。当在存储所有压缩数据符号之后为1时,将块结束(EOB)符号存储到第一操作数位置。当HTT使用FHT指定时,作为实例,霍夫曼代码0000000二进制(其对应于指定用于文字量字节、EOB符号和重复串长度的代码的表中的256的中间整数表示)用于EOB符号。当HTT使用DHT指定时,在DHT中指定用于EOB符号的霍夫曼代码。当BCC位为零时,EOB符号不存储到第一操作数位置。BCC位在指令的执行期间不修改。
块报头最终(BHF)379:当指定DFLTCC-CMPR函数并且BCF377为0或NT374为1时,应用参数块的字节16的位7;否则不适用BHF。当可应用且为1时,在将块报头存储到第一操作数位置之前,将块报头(BFINAL)的第一位设定为1。当可应用且为零时,在将块报头存储到第一操作数位置之前,将块报头的第一位(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中描绘了其他实例。当NT374是1时,SBB381被视为等于000个二进制。
返回图3L,描述参数块370的附加字段:
操作结束补充代码(OESC)365。
不完整功能状态(IFS)383:当某些操作结束时,参数块的字节21的位4-7含有状态信息。在解压缩操作结束时,IFS如下传递关于第二操作数的信息,在一个示例中:
IFS(二进制)含义
0000 在解码具有等于一的BFINAL的块的最后元素之后,操作结束。
1000 在对BTYPE等于00二进制且BFINAL等于0的块的除了最后元素之外的元素进行解码之后,操作结束。
1001 在对BTYPE等于00二进制并且BFINAL等于I的块的除了最后元素之外的元素进行解码之后,操作结束。
1010 在对BTYPE等于01二进制且BFINAL等于0的块的除了最后元素之外的元素进行解码之后,操作结束。
1011 在解码具有等于01二进制的BTYPE和等于一的BFINAL的块的除了最后元素之外的元素之后结束操作。
1100 在对BTYPE等于10二进制且BFINAL等于0的块的除了最后元素之外的元素进行解码之后,操作结束。
1101 在对BTYPE等于10二进制且BFINAL等于1的块的除了最后元素之外的元素进行解码之后,操作结束。
1110 操作结束于块边界,BFINAL等于1的块的最后元素尚未被解码,并且后续块的块头第一元素尚未被处理。
在一个实施例中,解压缩操作可以以等于0000二进制的IFS结束,并且不满足正常完成。在这样的情况下,以设置的条件码1或3结束操作。
当压缩操作结束时,IFS字段是未定义的,但是可以被修改
IFS不是对操作的输入。
不完整函数长度(IFL)384:当某些操作结束时,参数块的字节22-23包含长度信息。对于解压缩操作,IFL应用于第二操作数。当解压缩操作在对具有等于00二进制的BTYPE的块中的一些但不是全部进行解码之后结束时,IFL包含指定第二操作数中的块的尚未被处理的字节数的无符号二进制整数。字节22至23包含例如大端字节次序的IFL,不同于具有等于00二进制的BTYPE的块的LEN字段,其例如小端字节次序(little-endian byteorder)。
当解压缩操作在解码具有等于00二进制的BTYPE和等于1的BFINAL的完整块之后结束时,将零存储到IFL字段。当解压缩操作在解码具有非零BTYPE的块的一些但不是全部之后结束,或者在块边界处结束时,IFL字段是未定义的,但是可以被修改。
当压缩操作结束时,IFL字段是未定义的,但是可以被修改。
IFL不是对操作的输入。
历史长度(HL)385:参数块的字节44-45包含无符号二进制整数,其指定在操作期间可以参考的历史缓冲器中的历史的字节数。HL应用于在线和循环历史缓冲器。当新任务(NT)等于1时,没有历史应用于操作的开始,并且历史长度被视为零作为对操作的输入。
当历史长度大于例如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位为1时,产生例如32位Adler校验和校验值(Adler-32)。
生成校验值的输入是例如4字节基数并且在操作期间处理未压缩数据。基本输入提供用于计算一组压缩数据块的单个和一致的校验值的手段,而不管DFLTCC指令被执行以处理完整的一组压缩数据块的次数。当NT位为0时,校验值字段中的原始值用于生成校验值的基本输入。
在一个示例中,当生成Adler-32校验值时,以下适用:
·当NT位为1时,值1用于4字节基本输入。
·在Adler-32校验值生成中定义的和是模65,521。
·结果以大字节序存储到校验值字段。即,校验值的最高有效字节位于字节48中,并且校验值的最低有效字节位于字节51中。
在一个实施例中,当CRC-32校验值被生成时,以下适用:
·当NT位为1时,值0用于4字节基本输入。
·在生成CRC-32校验值时用作除数的多项式为x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x1+x0,表示为104C11DB7十六进制。在此表示中,最左边位对应于最高有效位。
·生成校验值的第一阶段和最后阶段分别是在存储结果之前计算基本输入的一的补码和计算结果的一的补码。
·结果以小字节序存储到校验值字段。即,校验值的最低有效字节位于字节48中,并且校验值的最高有效字节位于字节51中。
在一个示例中,当操作结束于条件码0设置(condition code 0set)时,检查值仅对程序有意义;否则,校验值只是中间结果,只对恢复操作有意义。当指定DFLTCC-CMPR函数并且操作结束于条件码1、2或3设置时,将由第二操作数地址指定的字节的左边的一些字节设定为可不包含在所得检查值的计算中。当指定DFLTCC-XPND函数并且操作结束于条件码1、2或3设置时,尚未存储在由第一操作数地址指定的字节右侧的一些结果字节可能已经包括在结果校验值的计算中。
块结束符号(EOBS)388:参数块的从字节52的字节0开始到字节53的字节6的十五个字节包含块结束(EOB)符号。参数块的块结束长度(EOBL)字段389指定EOBS字段中的EOB符号的长度。EOB符号在EOBS字段中被左对齐。EOBS字段中未被EOB符号占用的字节存储为零。EOBS字段是当压缩数据时的操作的输出,而不管应用哪种类型的霍夫曼表。EOBS字段不用作操作的输入。
字节52的位0包含EOB符号的最高有效位。当EOB符号的长度为7字节时,字节52的字节6包含EOB符号的最低有效字节。当EOB符号的长度为15字节时,字节53的字节6包含EOB符号的最低有效字节。
对于使用FHT的块,EOB符号是由DEFLATE标准定义的0000000二进制。对于使用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为1时,DHT的压缩表示是对操作的输入。CDHT字段不被DFLTCC-CMPR功能修改。
连续状态缓冲器(CSB)392:当条件使得值1被存储在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的原始值的和,除数是值8。
·通用寄存器R2中的地址递增所处理的源字节的数量,并且通用寄存器R2+1中的长度递减相同的数量。
·设置条件码0。
地址和长度的形成和更新取决于寻址模式。
当发生正常完成时,在操作结束之后不定义参数块的CSB字段392。
在一个例子中,当CPU确定的字节数已被处理时,操作结束且发生以下情形:
·参数块中的继续标记(CF)位373被设置为1。
·参数块中的连续状态缓冲器(CSB)字段392被更新。
·参数块的子字节边界(SBB)字段381被更新。
·参数块的历史长度(HL)字段385被更新。
·当适用时,更新参数块的历史偏移(HO)字段386。
·参数块的校验值字段387被更新。
·依赖于模型的值被存储到参数块的模型版本号(MVN)字段363。
·参数块的块结束长度(EOBL)389和块结束符号(EOBS)388字段被更新。
·参数块的操作结束补充代码(OESC)字段365被设置为零。
·通用寄存器R1中的地址递增包括处理位0的第一操作数的处理的字节数,并且通用寄存器R1+1中的长度递减相同的数。包括处理位0的第一操作数的处理的字节数是由整数除法产生的整数商,其中除数是所处理的输出位的数量与SBB的原始值的和,除数是值8。
·通用寄存器R2中的地址递增所处理的源字节的数量,并且通用寄存器R2+1中的长度递减相同的数量。
·设置条件码3。
地址和长度的形成和更新取决于寻址模式。
CPU确定的字节数取决于模型,且可为每次执行指令时不同的数目。
在指令以条件码3设置结束之后,期望程序不修改指令的任何输入或输出规范并且分支回来重新执行指令以恢复操作。
在某些情况下,尽管以条件码3设置结束指令,但不更新参数块和通用寄存器。这些情形可在CPU在执行DEFLATE转换调用指令的同时执行静默操作或CPU重试时发生。在这些情况下,所处理的CPU确定的字节数为零,数据可能已存储到第一操作数位置,数据可能已存储到第三操作数位置(在适用时),且已设定对应改变位。
在一个实例中,当应用以下条件中的任一者时,第一操作数长度不足以完成操作:
·如由通用寄存器R1+1的内容指定的第一操作数长度在指令的执行开始时为零。
·第一操作数长度在指令的执行期间变为等于零,并且不发生正常完成。
在一个实例中,当通用寄存器R1+1的内容为零时,第一操作数长度为零,而不管参数块的NT字段和SBB字段中的值如何。
在一个实施例中,当第一操作数长度在指令的执行期间变为等于零时,操作结束并且发生以下情形:
·参数块中的继续标记(CF)位373被设置为1。
·参数块中的连续状态缓冲器(CSB)字段392被更新。
·参数块的子字节边界(SBB)字段381被更新。
·参数块的历史长度(HL)字段385被更新。
·当适用时,更新参数块的历史偏移(HO)字段386。
·参数块的校验值字段387被更新。
·依赖于模型的值被存储到参数块的模型版本号(MVN)字段363。
·参数块的块结束长度(EOBL)389和块结束符号(EOBS)388字段被更新。
·参数块的操作结束补充代码(OESC)字段365被设置为零。
·通用寄存器R1中的地址递增包括处理位0的第一操作数的处理的字节数,并且通用寄存器R1+1中的长度递减相同的数。包括处理位0的第一操作数的处理的字节数是由整数除法产生的整数商,其中除数是所处理的输出位的数量与SBB的原始值的和,除数是值8。
·通用寄存器R2中的地址递增所处理的源字节的数量,并且通用寄存器R2+1中的长度递减相同的数量。
·设置条件码1。
地址和长度的形成和更新取决于寻址模式。
当在指令的执行开始时第一操作数长度是零时,操作
在一个实施例中,结束并且发生以下情况:
·设置条件码1。
在指令以条件码1集合结束之后,预期程序修改第一操作数长度、第一操作数地址或两者,并且重新执行指令以恢复操作。
当可应用时,PER储存变更事件被识别如下:
·存储到参数块,如下所述。
·存储到所述第一操作数位置。
·存储第三操作数位置,其例如当历史缓冲器类型(HBT)为一(循环)时发生。
当整个参数块与PER存储区域指定重叠时,当可应用时,对于参数块识别PER储存变更事件。当参数块的仅一部分与PER存储区域指定重叠时,发生以下中的哪一个是依赖于模型的:
·PER储存变更事件在适用于参数块时被识别。
·当可应用时,PER储存变更事件被识别用于储存的参数块的部分。
当可应用时,对于参数块,在HBT为1(循环)时,识别PER零地址检测事件,第一操作数位置、第二操作数位置和第三操作数位置。
条件码2不适用于DFLTC-CCMPR函数。
当指令以条件码1或3设置结束时,可完全地或仅部分地处理从第二操作数位置引用的输入数据。当输入数据仅被部分地处理时,导致参数块的第一操作数位置、第一操作数地址、第一操作数长度和SBB字段不表示与更新的第二操作数地址和长度一致的状态。在这些情况下,部分处理的数据和内部状态信息可被放置在参数块的CSB字段中。部分处理数据的量取决于在操作结束时存在的条件和模型。尽管一些数据可能仅被部分地处理,但是存储在由经更新的第一操作数地址指定的位置的左侧的结果是完整的,并且在操作恢复时将不被修改。此外,预期程序随后重新执行指令以恢复操作,此时在恢复操作之前参考CSB字段的内容。当指令以设置条件码0结束时,所有数据被完全处理,并且与输入和输出数据相关联的所有结果表示一致状态。
在指令以非零条件码设置结束之后,且在为了恢复操作的目的而重新执行指令之前,程序不应修改参数块的任何字段;否则结果是不可预测的。
函数代码4:DFLTCC-XPND(Expand)
当指定DFLTCC-XPND功能时,执行解压缩操作。所述操作包括将来自第二操作数位置的压缩数据符号解码成未压缩数据,所述未压缩数据被存储到第一操作数位置。
在一个示例中,DFLTCC-XPND函数使用参数块,以上关于图3K-3L描述了所述参数块的示例。
下文相对于解压缩数据描述DFLTCC-XPND操作的一个实例。
当第二操作数中的数据集合的最终块的所有元素被解码并且所有未压缩数据被存储到第一操作数位置时,正常完成发生。当块头的BFINAL位为1时,识别数据集合的最后块。当操作由于正常完成而结束时,在一个实施例中发生以下情形:
·模型相关值被存储到参数块的模型版本号(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的原始值的总和,除数是值8。
·设置条件码0。
地址和长度的形成和更新取决于寻址模式。
当发生正常完成时,在操作结束之后不定义参数块的CSB字段392。
当CPU确定数量的字节已经被处理时,操作结束并且发生以下情形,在一个实施例中:
·参数块中的继续标记(CF)位373被设置为1。
·参数块中的连续状态缓冲器(CSB)字段392被更新。
·参数块的子字节边界(SBB)字段381被更新。
·参数块的压缩动态霍夫曼表(CDHT)367和压缩动态霍夫曼表长度(CDHTL)366字段被更新。当在处理具有10二进制的BTYPE值的块的同时发生部分完成时,将表示所述表不需要的CDHT字段的字节存储为零。当在处理具有00或01二进制的BTYPE值的块时发生部分完成时,将零存储到CDHT和CDHTL字段。
·参数块的历史长度(HL)字段385被更新。
·当适用时,更新参数块的历史偏移(HO)字段386。
·参数块的校验值字段387被更新。
·模型相关值被存储到参数块的模型版本号(MVN)字段363。
·参数块的操作结束补充代码(OESC)字段365被设置为零。
·参数块的不完整功能状态(IFS)字段383被更新。
·当可应用时,更新参数块的不完整函数长度(IFL)字段384。
·通用寄存器R1中的地址递增存储在第一操作数位置处的字节的数目,且通用寄存器R1+1中的长度递减相同数目。
·通用寄存器R2中的地址递增包含处理位0的第二操作数的处理的字节的数目,且通用寄存器R2+1中的长度递减相同数目。包括处理位0的第二操作数的处理的字节的数量是从整数除法得到的整数商,其中除数是所处理的输入位的数量和SBB的原始值的总和,除数是值8。
·设置条件码3。
地址和长度的形成和更新取决于寻址模式。
CPU确定的字节数取决于模型,且可为每次执行指令时不同的数目。
在指令以条件码3设置结束之后,期望程序不修改指令的任何输入或输出规范并且分支回来重新执行指令以恢复操作。
在某些情况下,尽管以条件码3设置结束指令,但不更新参数块和通用寄存器。这些情形可在CPU在执行DEFLATE转换调用指令的同时执行静默操作或CPU重试时发生。在这些情况下,所处理的CPU确定的字节数为零,数据可能已存储到第一操作数位置,数据可能已存储到第三操作数位置(在适用时),且已设定对应改变位。
第二操作数长度不足以在应用以下操作时完成操作,例如:
·在操作期间,BFINAL等于1的经压缩数据块的最后元素尚未被解码,以及由第二操作数长度和SBB指定的第二操作数中的位数,小于要解码的下一个元素的位数,并且来自对来自第二操作数位置的数据进行解码的所有结果已经被放置在第一操作数位置处。
在一个实施例中,当第二操作数长度不足以完成操作时,操作已经部分完成,操作结束,并且发生以下情况:
·参数块中的继续标记(CF)位373被设置为1。
·参数块中的连续状态缓冲器(CSB)字段392被更新。
·参数块的子字节边界(SBB)字段381被更新。
·参数块的压缩动态霍夫曼表(CDHT)367和压缩动态霍夫曼表长度(CDHTL)字段366被更新。当在处理具有10二进制的BTYPE值的块的同时发生部分完成时,将表示所述表不需要的CDHT字段的字节存储为零。当在处理具有00或01二进制的BTYPE值的块时发生部分完成时,将零存储到CDHT和CDHTL字段。
·参数块的历史长度(HL)字段385被更新。
·当适用时,更新参数块的历史偏移(HO)字段386。
·参数块的校验值字段387被更新。
·模型相关值被存储到参数块的模型版本号(MVN)字段363。
·参数块的操作结束补充代码(OESC)字段365被设置为零。
·参数块的不完整功能状态(IFS)字段383被更新。
·当可应用时,更新参数块的不完整函数长度(IFL)字段384。
·通用寄存器R1中的地址递增存储在第一操作数位置处的字节的数目,且通用寄存器R1+1中的长度递减相同数目。
·通用寄存器R2中的地址递增包含处理位0的第二操作数的处理的字节的数目,且通用寄存器R2+1中的长度递减相同数目。包括处理位0的第二操作数的处理的字节的数量是从整数除法得到的整数商,其中除数是所处理的输入位的数量和SBB的原始值的总和,除数是值8。
·设置条件码2。
地址和长度的形成和更新取决于寻址模式。
在指令结束于条件码2设置之后,预期程序修改第二操作数长度、第二操作数地址或两者,并且重新执行指令以恢复操作。
当应用以下操作时,第一操作数长度不足以完成操作,例如:
·来自解码来自第二操作数位置的数据的结果由于第一操作数长度等于零而不能被放置在第一操作数位置处。
当第一操作数长度不足以完成操作时,操作已部分完成,操作结束,且在一个实施例中发生以下情形:
·参数块中的继续标记(CF)位373被设置为1。
·参数块中的连续状态缓冲器(CSB)字段392被更新。
·参数块的子字节边界(SBB)字段381被更新。
·参数块的压缩的动态霍夫曼表(CDHT)367和压缩的动态霍夫曼表长度(CDHTL)字段366被更新。当在处理具有10二进制的BTYPE值的块的同时发生部分完成时,将表示所述表不需要的CDHT字段的字节存储为零。当在处理具有00或01二进制的BTYPE值的块时发生部分完成时,将零存储到CDHT和CDHTL字段。
·参数块的历史长度(HL)字段385被更新。
·当适用时,更新参数块的历史偏移(HO)字段386。
·参数块的校验值字段387被更新。
·模型相关值被存储到参数块的模型版本号(MVN)字段363。
·参数块的操作结束补充代码(OESC)字段365被设置为零。
·参数块的不完整功能状态(IFS)字段383被更新。
·当可应用时,更新参数块的不完整函数长度(IFL)字段384。
·通用寄存器R1中的地址递增存储在第一操作数位置处的字节的数目,且通用寄存器R1+1中的长度递减相同数目。
·通用寄存器R2中的地址递增包含处理位0的第二操作数的处理的字节的数目,且通用寄存器R2+1中的长度递减相同数目。包括处理位0的第二操作数的处理的字节的数量是从整数除法得到的整数商,其中除数是所处理的输入位的数量和SBB的原始值的总和,除数是值8。
·设置条件码1。
地址和长度的形成和更新取决于寻址模式。
在指令以条件码1设置结束之后,预期程序修改第一操作数长度、第一操作数地址或两者,并且重新执行指令以恢复操作。
当可应用时,PER储存变更事件被识别如下:
·如本文所述,存储到参数块。
·存储到所述第一操作数位置。
·存储第三操作数位置,其例如当历史缓冲器类型(HBT)为一(循环)时发生。
在一个实例中,当整个参数块与PER存储区域指定重叠时,当可应用时,针对参数块识别PER储存变更事件。在一个实施例中,当参数块的仅一部分与PER存储区域指定重叠时,与模型无关地发生以下中的哪一个:
·PER储存变更事件在适用于参数块时被识别。
·当可应用时,PER储存变更事件被识别用于储存的参数块的部分。
当可应用时,对于参数块,在HBT为1(循环)时,识别PER零地址检测事件,第一操作数位置、第二操作数位置和第三操作数位置。
当指令结束于条件码1、2或3设置时,可完全地或仅部分地处理从第二操作数位置引用的输入数据。当输入数据仅被部分地处理时,产生第一操作数位置,第一操作数地址,第一操作数长度,所述参数块的SBB字段,所述参数块的校验值字段,参数块的HL字段,参数块的IFS字段以及当适用时,参数块的第三操作数位置和HO字段不表示与更新的第二操作数地址和长度一致的状态。在这些情况下,部分处理的数据和内部状态信息可被放置在参数块的CSB字段中。部分处理数据的量取决于在操作结束时存在的条件和模型。尽管一些数据可能仅被部分地处理,但是存储在由经更新的第一操作数地址指定的位置的左侧的结果是完整的,并且在操作恢复时将不被修改。此外,预期程序随后重新执行指令以恢复操作,此时在恢复操作之前参考CSB字段的内容。当操作结束于条件码0集合时,所有数据被完全处理,并且与输入和输出数据相关联的所有结果表示一致状态。
在指令以非零条件码设置结束之后,且在为了恢复操作的目的而重新执行指令之前,程序不应修改参数块的任何字段;否则结果是不可预测的。
压缩的数据块
在一个示例中,例如从左到右处理存储器中的压缩数据块的字节。压缩的数据块可以或可以不在字节边界上开始或结束。压缩的数据块例如是字节流。一次一位地将块的元素加载到存储器中。位流例如在存储器的每一字节内从右向左加载且按字节次序从(例如)从左向右加载。当元素是霍夫曼码时,按从例如元素的最高有效位到最低有效位的顺序存储位。当元素不是霍夫曼码时,按从例如元素的最低有效位到最高有效位的顺序存储位。
图6示出了具有块类型00二进制的块600的示例,其不包含压缩的数据符号。在一个实施例中,以下内容适用于所述实例:
·经压缩的数据块600由字节流602组成,所述字节流602以字节0的位4(标识为b0)开始,并且以字节7的位0(标识为b60)结束。
·位流中遇到的第一元素是字节0的位4中的BFINAL(块报头最终位)。
·在位流中遇到的第二元素是字节0的位2-3中的BTYPE(块类型)。在所述示例中,BTYPE是00二进制的。
·当BTYPE为00二进制(其在此实例中为字节0的位0-1)时,忽略BTYPE左边及字节边界右边的位。
·位流中遇到的第三元素是LEN字段的最低有效字节(LSB),其之后是LEN字段的最高有效字节(MSB)。LEN字段指定具有文字量数据的块中的字节数。例如,原始数据是未压缩的数据。具有文字量数据的字节跟随位流中的NLEN字段。NLEN是LEN的互补序列。在一个示例中,字节1-2以小字节次序包含LEN字段。
·在LEN字段之后的字节流中遇到的元素分别是NLEN字段的最低有效字节,之后是NLEN字段的最高有效字节。字节3到4以小字节次序含有NLEN字段。NLEN字段是LEN字段的1的补码。
·在NLEN字段之后的字节流中遇到的元素是未压缩的数据,被标识为文字量字节。字节5到7包含未压缩数据,其与用以产生此块的源数据未改变。
·在所述块中包含的元素都不是霍夫曼码。此块中的每一元素按从元素的最低有效位到最高有效位的次序存储到位流次序,如由DEFLATE标准定义。由于LEN、NLEN和文字量元素各自是在字节边界上对齐的整数数量的字节,因此这些元素可以被处理为字节单位,并且不一定处理为位单位。
图7示出了具有块类型01二进制的块700的示例,所述块700包含使用固定的霍夫曼表(FHT)生成的压缩的数据符号。在一个实施例中,以下内容适用于所述实例:
·压缩数据块700由字节流702组成,字节流702以字节0的位4开始,标识为b0,并且以字节11的位3结束,标识为b89。
·位流中遇到的第一元素是字节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的示例,所述块800包含使用动态霍夫曼表(DHT)生成的压缩的数据符号。在一个实施例中,以下内容适用于所述实例:
·压缩的数据块800由字节流802组成,字节流802以字节0的位4开始,标识为b0,并且以字节11的位3结束,标识为b89。
·位流中遇到的第一元素是字节0的位4中的BFINAL。
·在位流中遇到的第二元素是字节0的位2-3中的BTYPE。在所述示例中,BTYPE是10二进制的。
·在位流中遇到的第三元素是动态霍夫曼表(DHT)的压缩表示,其在字节0的位1中开始。DHT的压缩表示包括以下子元素,在一个示例中,这些子元素在位流中以列出它们的顺序遇到:
1.HLIT:5位HLIT子元素和257的总和指定表示文字量字节、EOB符号和重复串长度的霍夫曼码的数量。HLIT的有效值范围从例如0至29。在位流中遇到HLIT位,其以HLIT子元件的最低有效位开始且以最高有效位结束。在此实例中,字节0的位1(识别为b3)为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时,生成第一压缩数据块,并且没有来自先前执行的压缩操作的要引用的历史。
在一个示例中,单个块按它们被列出的顺序包含以下元素:
1.最终块指示(BFINAL)。
2.块类型(BTYPE)。
3.动态霍夫曼表的压缩格式,当适用时。
4.压缩的数据符号。
5.块结束(EOB)符号。
压缩操作生成以针对块定义的顺序指定的元素。元素可以在存储器中的字节边界之间开始或结束。子字节边界(SBB)适用于将第一元素存储到第一操作数位置。压缩的数据块是字节流。一次一位地将块的组件加载到存储器中。作为实例,位流在存储器的每一字节内从右向左且按字节次序从左向右加载。
当SBB为非零时,对第一操作数位置处的第一字节的引用为更新引用。
来自第二操作数位置的未压缩数据被压缩并且作为压缩数据符号存储到第一操作数位置。
当在指令的执行开始时第一操作数长度是零时,不访问第一操作数,并且分别在通用寄存器R1和R1+1中的第一操作数地址和第一操作数长度不改变。这在指令的执行开始时CF字段373(图3L)的值为0或1时适用。
当在指令的执行开始时第二操作数长度是零时,第二操作数不被访问,并且通用寄存器R2和R2+1中的第二操作数地址和第二操作数长度分别不被改变。例如,对于以下情况,第二操作数长度在指令的执行开始时为零:
·指令被重新执行以恢复操作(参数块的CF字段373在指令的执行开始时为1),并且完成操作可参考参数块的CSB字段392并且不参考第二操作数来执行。
在一个实施例中,所述程序不使用DEFLATE转换调用指令来执行以下操作:
·生成空的压缩数据块。空压缩数据块由例如块报头、DHT的压缩格式(当适用时)和EOB符号组成。
·关闭打开的压缩数据块。即只存储EOB符号到压缩后的数据块的末尾。
压缩算法包括在最近压缩的数据的更新历史中搜索与来自第二操作数位置的当前正被压缩的数据匹配的字节串。在一个实施例中,在压缩操作开始或恢复之前,应用以下内容:
·当新任务(NT)374是1时,不存在可用于引用的初始历史。
·当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字节缓冲器中。通过例如通用寄存器R3的内容与历史偏移(HO)386(图3L)的总和指定缓冲器(HB)内的历史的第一字节的位置。历史的第一字节是缓冲器中的未压缩数据的最近最少处理的字节。例如,缓冲器(HE)内的历史的最后字节的位置由以下等式指定:
HE=R3+modulo(模)32K(HO+HL-1)
历史的最后一个字节是缓冲器中的未压缩数据的最近处理的字节。当历史偏移(HO)386(图3L)与历史长度(HL)385的总和超过第三操作数的大小(例如,32K字节)时,历史从第三操作数的结尾缠绕至第三操作数的开始。
作为实例,图15A-15E说明当每一执行以部分完成结束时在具有指定的DFLTCC-CMPR函数的DEFLATE转换调用指令的多次执行以及指定的循环历史缓冲器(位310=1)之前和之后的循环历史缓冲器内的历史的位置。例如,图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+modulo32K(HOO+HLO),其中
HOO: 指令执行之前的历史偏移。
HLO: 指令执行之前的历史长度。
字节范围包含例如由以下各者指定的位置且以所述位置结束:
R3+modulo32K(HOO+HLO+BP-1),其中
BP:在指令的执行期间从第二操作数位置处理的字节的数量。
作为实例,对刚刚描述的字节范围进行的存储经受存储类型访问异常、PER存储更改事件和设置改变位。
·不对存储位置的内容进行修改并且不是必须的存储可以对第三操作数位置中不包括在刚刚描述的范围中的字节做出。到这些位置的存储还经受存储类型访问异常、PER存储变更事件和设置改变位。
当HBT为循环且从第二操作数位置处理的字节的数目大于或等于例如32,768时,对第三操作数位置的所有字节进行存储且经受存储类型存取异常、PER存储更改事件和设置改变位。
当块继续旗标(BCF)377为0时,3位块报头(包含BFINAL,之后是BTYPE)被存储到第一操作数位置。块报头的BFINAL字节被设置为等于参数块的块报头最终字节(BHF)379。当霍夫曼表类型(HTT)376是0时,块报头的BTYPE字段被设置为例如01二进制,并且当HTT是1时,块报头的BTYPE字段被设置为例如10二进制。当存储块报头时,将BFINAL位存储到由SBB在第一操作数的第一字节中指定的位。随后,将BTYPE存储到第一操作数位置。当BCF为1时,不存块报头。
当霍夫曼表类型(HTT)是1时,针对一般操作数数据异常条件,检查在参数块中指定的动态霍夫曼表(DHT)367的压缩格式。当DHT的指定压缩格式存在通用操作数数据异常情况时,压缩后的DHT称为无效,不用于压缩数据。下面进一步描述一般操作数数据异常条件的示例定义。当DHT的压缩格式指定用于代码长度的字节长度时,或字面字节的代码长度、EOB符号、重复串长度,或者复制串指针距离,其大于霍夫曼算法指定适当和功能的霍夫曼树所需的长度,压缩的DHT仍然用于导出功能DHT和压缩数据。当块继续旗标(BCF)为0且HTT为1时,将如参数块的CDHT字段367中指定的DHT的压缩格式存储到第一操作数位置。
在压缩操作期间,将来自第二操作数位置的源数据编码成经压缩数据符号。作为编码的一部分,将源数据与历史进行比较。当未找到匹配时,源数据的中间表示是文字量字节,其与源数据相同。当发现匹配时,源数据的中间表示是指向历史内包含源数据的副本的位置的指针。指针由长度和距离组成。长度是与历史中的字符串匹配的源数据字节的数量。所述距离是从历史的结尾到与源数据匹配的字符串的开始的字节数。在一个示例中,使用来自霍夫曼表的两个霍夫曼代码树来将源数据的中间表示编码成压缩的数据符号。当霍夫曼表类型(HTT)是零时,如由DEFLATE标准描述的固定-霍夫曼表(FHT)指定用于编码中间结果的两个霍夫曼代码树。当HTT376为1时,从在参数块的CDHT字段367中指定的DHT的压缩表示导出的动态霍夫曼表(DHT)指定用于编码中间结果的两个霍夫曼码树。如DEFLATE标准所述执行编码。当使用非通用DHT(其未指定将用于对源数据的中间表示进行编码的霍夫曼代码)时,识别通用操作数数据异常。在将结果存储到第一操作数位置之前,按DEFLATE标准指定的次序排列所得压缩数据符号的位。
在一个示例中,副本串长度范围从3字节至258字节。
在处理进一步的源数据之前,如本文所述,更新历史。
在一个示例中,重复所述过程,直到已经处理了所有源字节。
在已处理源字节(例如,所有源字节)且块关闭控制(BCC)378为1之后,将块结束(EOB)符号存储到第一操作数位置。当使用固定霍夫曼表时,霍夫曼码0000000二进制用于EOB符号。当使用动态霍夫曼表(DHT)时,用于EOB符号的霍夫曼代码由DHT指定。在将EOB符号存储到第一操作数位置之前,EOB符号的位按照DEFLATE标准指定的顺序排列。
在一个示例中,当操作的最后一个压缩的数据符号(包括EOB符号)仅占用最后一个字节的一部分来存储时,不包含最后一个符号的一部分的位被存储为零。
在一个实施例中,在处理最后的压缩数据符号之后,发生以下情况:
·模型相关值被存储到参数块的模型版本号(MVN)字段363。
·参数块的子字节边界(SBB)字段381被更新。
·参数块的块结束长度(EOBL)389和块结束符号(EOBS)388字段被更新。
·通用寄存器R1中的地址递增包括处理位0的第一操作数的处理的字节数,并且通用寄存器R1+1中的长度递减相同的数。包括处理位0的第一操作数的处理的字节数是由整数除法产生的整数商,其中除数是所处理的输出位的数量与SBB的原始值的和,除数是值8。
·通用寄存器R2中的地址递增所处理的源字节的数目,且通用寄存器R2+1中的长度递减相同数目。
地址和长度的形成和更新取决于寻址模式。
与压缩源数据一致,源数据是用于生成如上所述的32位校验值的输入。将所得到的校验值存储到参数块的校验值字段387中。
解压缩数据
在一个实施例中,DEFLATE转换调用指令的扩展函数用于将压缩的数据集解码成未压缩的数据。第二操作数位置中的压缩数据集合包括一个或多个连续压缩数据块。在一个实例中,从左到右处理数据集的块,且例如从左到右处理块的字节。块可以或可以不在字节边界上开始或结束。每个块独立于数据集合中的其他块被解码。通用寄存器R2指定数据集中的第一块的最左边字节的逻辑地址。数据集中的最后一个块是在BFINAL位等于1的处理期间遇到的块。在一个实例中,存在要处理的三种类型的块。对块的内容进行解码的技术是块类型(BTYPE)的函数。
当操作开始时(例如,当参数块的继续旗标字段373为零时),由通用寄存器R2、新任务(NT)字段374和子字节边界(SBB)字段381指定的位被解释为经压缩数据块的第一位(块报头的BFINAL位)。
扩展功能包括引用最近解码的未压缩数据的更新的历史。在一个实施例中,在解压操作开始或恢复之前,以下适用:
·当新任务(NT)374是1时,不存在可用于引用的初始历史。
·当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字节缓冲器中维持历史。通过通用寄存器R3的内容和历史偏移(HO)386的总和来指定缓冲器(HB)内的历史的第一字节的位置。历史的第一字节是缓冲器中的未压缩数据的最近最少处理的字节。缓冲器(HE)内的历史的最后字节的位置由例如以下等式指定:
HE=R3+modulo32K(HO+HL-1)。
历史的最后一个字节是缓冲器中的未压缩数据的最近处理的字节。当历史偏移(HO)与历史长度(HL)的总和超过第三操作数的大小(例如,32K字节)时,历史从第三操作数的结尾卷绕到第三操作数的开始。在此所描述的图15A-15E展示了当每个执行以部分完成结束时在具有指定的DFLTCC-XPND函数和循环历史缓冲器的DEFLATE转换调用指令的多次执行之前和之后的循环历史缓冲器内的历史的位置的示例。
在一个实例中,当HBT为循环且存储到第一操作数位置的字节的数目小于例如32,768时,以下情况适用:
·对所述第三操作数位置中的字节范围进行存储。字节的范围包括由以下指定的位置并且从以下指定的位置开始:
R3+modulo32K(HOO+HLO),其中
HOO:指令执行之前的历史偏移。
HLO:指令执行之前的历史长度。
字节范围包含例如由以下各者指定的位置且以所述位置结束:
R3+modulo32K(HOO+HLO+BP-1),其中
BP:在指令的执行期间存储到第一操作数位置的字节的数目。
对刚刚描述的字节范围进行的存储经受存储类型访问异常、PER储存变更事件和设置改变位。
·可以对第三操作数位置中不包括在刚刚描述的范围中的字节进行不修改存储位置的内容并且不是必需的存储。到这些位置的存储还经受存储类型访问异常、PER储存变更事件和设置改变位。
当HBT为循环且存储到第一操作数位置的字节的数目大于或等于例如32,768时,对例如第三操作数位置的所有字节进行存储,且经受存储类型存取异常、PER存储更改事件和设置改变位。
当BTYPE为00二进制时,所述块不包含压缩的数据。在此描述的图6展示了具有等于00二进制的BTYPE的块的一个实例。LEN字段指定块中的文字量字节的数量。LEN字段的字节顺序是小字节序。LEN字段可以指定零文字量字节。块的字面字节被放置在第一操作数位置处。如先前所描述的,还利用块的每个文字量字节来更新历史。
当BTYPE为01二进制时,所述块包含使用固定的霍夫曼表(FHT)生成的压缩的数据符号。FHT由DEFLATE标准定义并且不是块的一部分。如本文所述,图7示出了具有BTYPE等于01二进制的块的一个实例。在解释块报头之后,按照压缩数据符号在块中出现的顺序对压缩数据符号进行解码。例如从左到右处理块的字节,且例如从右到左处理块的每一字节内的位。在一个实例中,在处理块中的下一符号之前完全处理每一符号。不是块结束(EOB)符号的每个符号表示字面值或指向先前在历史缓冲器中解码的子串的指针。先前解码的子串也被称为重复串。在一个示例中,复制串长度范围从3字节至258字节。指针由表示子串长度和从历史末尾到子串开头的距离的代码组成。当符号表示历史中的子串时,从历史缓冲器中引用所述子串。将由解码符号产生的未压缩数据放置在第一操作数位置处。
在处理进一步的源数据之前,如先前描述的那样更新历史。
经更新的历史适用于解码块的下一符号。当遇到EOB符号时,块的处理完成。
当BTYPE是10二进制时,块包含使用动态霍夫曼表(DHT)生成的压缩的数据符号。所使用的DHT的压缩格式为压缩数据块的元素。在此描述的图8展示了具有等于10二进制的BTYPE的块的一个实例。在解释块头部之后,检查在压缩数据块内提供的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的原始值的总和,除数是值8。
地址和长度的形成和更新取决于寻址模式。
当在指令的执行开始时第一操作数长度是零时,不访问第一操作数,并且分别在通用寄存器R1和R1+1中的第一操作数地址和第一操作数长度不改变。这在指令的执行开始时CF字段373的值为零或一时适用。
当第二操作数长度在指令的执行开始时为零时,第二操作数不被存取,且通用寄存器R2及R2+1中的第二操作数地址及第二操作数长度分别不改变。在一个实施例中,对于以下情况,第二操作数长度在指令的执行开始时为零:
·指令被重新执行(例如,参数块的CF字段373在指令的执行的开始处为1),并且当指令先前被执行时整个第二操作数被处理。
解压缩操作可在不将任何结果存储到第一操作数位置的情况下结束,即使数据是从第二操作数位置处理的。在一实例中,当从第二操作数位置处理的数据仅含有以下经压缩数据块元素中的任一者时,此情形发生:
·块报头。
·具有块类型00二进制的块的LEN字段。
·具有块类型00二进制的块的NLEN字段。
·动态霍夫曼表的压缩格式。
·块结束(EOB)符号。
在一个或多个实施例中,以下条件适用于执行DEFLATE转换调用指令:
在一个示例中,当指定DFLTCC-GDHT函数并且发生以下条件时,识别一般操作数数据异常:
·模型不支持参数块版本号362指定的参数块格式。
在一个实例中,当指定DFLTCC-CMPR函数且发生以下条件中的任一者时,识别一般操作数数据异常:
·模型不支持参数块版本号362指定的参数块格式。
·NT374为零且HL385大于例如32768。
·HTT 376是1并且CDHTL 366小于例如42或大于例如2283。
·HTT376为1,并且CDHTL366不等于CDHT字段367中指定的DHT的压缩格式的长度。
·HTT 376是1并且DHT的压缩格式的HLIT子元素大于例如29(无效DHT)。
·HTT376为1,并且DHT的压缩格式的HDIST子元素大于例如29(无效DHT)。
·HTT 376是1,并且DHT的压缩格式(CDHT字段367的内容)指定代码,所述代码在指定用于的字节长度的代码序列中,例如,针对压缩的DHT定义的19个可能的代码长度,并且小于霍夫曼算法指定功能霍夫曼树(无效DHT)所需的长度。
·HTT 376是1并且DHT的压缩格式(CDHT字段367的内容)指定代码长度(例如,16(复制前一代码长度))作为用于由字面字节、EOB符号和重复串长度(无效DHT)组成的元素集合的第一代码长度。
·HTT376为1,并且DHT的压缩格式(CDHT字段367的内容)指定代码,所述代码在指定用于字面字节的代码长度的代码序列中,并且所述代码与被确定为表示所述参考代码长度集合的代码中的任何代码不匹配,如之前在压缩的DHT(无效DHT)中所指定的。
·HTT376是1,并且DHT的压缩格式(CDHT字段367的内容)指定将码长0(CL0)分配给EOB符号的码。在这种情况下,相应的DHT不指定霍夫曼代码来表示EOB符号(无效DHT)。
·HTT 376是1,并且DHT的压缩格式(CDHT字段367的内容)指定在代码序列中的代码,所述代码序列指定用于重复串长度和指针距离的代码长度,并且所述代码与被确定为表示所述参考代码长度集合的代码中的任何代码不匹配,如之前在压缩的DHT(无效DHT)中所指定的。
·HTT376是1,并且DHT的压缩格式(CDHT字段367的内容)指定大于DHT中的霍夫曼码的数目的码长的数目,如由HLIT字段、HDIST字段和例如258中的值的总和指定的。作为示例(无效DHT),这在不正确地使用代码长度16、17和18的情况下是可能的。
·HTT376是一个并且DHT的压缩格式(CDHT字段367的内容)指定用于字面字节集、EOB符号和重复串长度的代码长度,其小于由霍夫曼算法指定功能霍夫曼树(无效DHT)所需的长度。
·HTT376是1,并且DHT的压缩格式(CDHT字段367的内容)指定用于复制串指针距离的集合的代码长度,其小于由霍夫曼算法指定功能霍夫曼树(无效DHT)所需的长度。
·CPU尝试生成压缩的数据符号以表示第二操作数中的字面字节,并且从CDHT字段的内容导出的DHT是非通用的并且不指定对应于所述字面字节的霍夫曼代码。
·CPU尝试生成压缩的数据符号以表示第二操作数中的复制串,并且从CDHT字段的内容导出的DHT是非通用的,并且不指定对应于所述复制串长度或指针距离的霍夫曼代码。
作为实例,当例如指定DFLTCC-XPND函数并且发生以下条件中的任一个时,识别通用操作数数据异常:
·模型不支持参数块版本号362指定的参数块格式。
·NT374为零且HL385大于例如32768。
·遇到BTYPE等于11二进制的压缩数据块。
·遇到BTYPE等于00二进制且NLEN不等于LEN的1”s补码的经压缩数据块。
·遇到DHT的压缩格式(BTYPE等于10二进制的压缩数据块的内容),并且压缩的DHT的HLIT子元素大于例如29(无效DHT)。
·遇到DHT的压缩格式(BTYPE等于10二进制的压缩数据块的内容),并且压缩的DHT的HDIST子元素大于例如29(无效DHT)。
·遇到DHT的压缩格式(BTYPE等于10二进制的压缩数据块的内容),其指定代码序列中的代码,所述代码序列指定位长度,例如,针对压缩的DHT定义的19个可能的代码长度,并且小于霍夫曼算法指定功能霍夫曼树(无效DHT)所需的长度。
·遇到DHT的压缩格式(具有等于10二进制的BTYPE的压缩数据块的内容),其指定代码长度(例如,16(复制先前代码长度))作为用于由字面字节、EOB符号和重复串长度(无效DHT)组成的元素集合的第一代码长度。
·遇到DHT的压缩格式(具有等于10二进制的BTYPE的压缩数据块的内容),其指定代码序列中的代码,所述代码指定字面字节的代码长度,并且所述代码与被确定为表示所述参考代码长度集合的代码中的任何代码不匹配,如之前在压缩的DHT(无效DHT)中所指定的。
·遇到DHT的压缩格式(BTYPE等于10二进制的压缩数据块的内容),其指定将代码长度0(CL0)分配给EOB符号的代码。在这种情况下,相应的DHT不指定霍夫曼代码来表示EOB符号(无效DHT)。
·遇到DHT的压缩格式(BTYPE等于10二进制的压缩数据块的内容),其指定代码序列中的代码,所述代码序列指定用于重复串长度和指针距离的代码长度,并且所述代码与被确定为表示所述参考代码长度集合的代码中的任何代码不匹配,如之前在压缩的DHT(无效DHT)中所指定的。
·遇到DHT的压缩格式(具有等于10二进制的BTYPE的压缩数据块的内容),其指定大于DHT中的霍夫曼码的数目的码长的数目,如由HLIT字段、HDIST字段和例如258中的值的总和所指定。例如(无效DHT),这有可能不正确地使用码长16、17和18。
·遇到DHT的压缩格式(具有等于10二进制的BTYPE的压缩数据块的内容),其指定用于字面字节集、EOB符号和重复串长度的代码长度,其小于由霍夫曼算法指定功能霍夫曼树(无效DHT)所需的长度。
·遇到DHT的压缩格式(具有等于10二进制的BTYPE的压缩数据块的内容),其指定用于复制串指针距离的集合的代码长度,其小于由霍夫曼算法指定功能霍夫曼树(无效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函数,并且历史与第二操作数或参数块重叠。
在某些情况下,尽管结束DEFLATE转换调用指令的执行,其中处理的CPU确定的字节数为零,但数据可能已存储到第一操作数位置,数据可能已存储到第三操作数位置(在适用时),且对应的改变位已设置(在适用时)。在这些情况下,参数块和通用寄存器的内容尚未从原始值修改。当CPU在执行DEFLATE转换调用指令的同时执行静默操作或者CPU重试时,可能发生这些情况。
以下是从执行DEFLATE转换调用指令得到的示例条件码:
0正常完成
1第一操作数长度不足以完成操作
2第二操作数长度不足以完成操作(DFLTCC-XPND)
3 CPU确定的处理数据的量
程序异常:
·访问(提取,操作数2,在线历史;提取和存储,参数块,操作数1,操作数3)
·具有DXC 0的数据,一般操作数
·操作(如果未安装DEFLATE转换设施)
·规范
·交易约束
DEFLATE CONVERSION CALL指令的执行的示例优先级如下所示:
1.-6.具有与用于一般情况的程序中断条件的优先级相同的优先级的异常。
7.A第二指令半字的访问异常。
7.B操作异常。
7.C事务限制。
8.A归因于无效功能代码或无效寄存器编号的规范异常。
8.B归因于未在4K字节边界上指定的参数块的规范异常。
8.C由于在4K字节边界上未指定循环历史缓冲器而引起的规范异常。
9.访问参数块的访问异常。
10.所述模式不支持参数块的指定格式时通用操作数数据异常。
11.由于在指令的执行开始时第二操作数长度等于零且CF等于零而引起的规范异常。
12.由于在指令的执行的开始处第一操作数长度等于零并且指定DFLTCC-CMPR而引起的条件码1。
13.A当指定DFLTCC-CMPR或DFLTCC-XPND时,由于历史长度字段大于32,768和新任务字段引起的一般操作数数据异常为零。
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.在一个实施例中,在执行由指令的参数指定的处理的CPU确定的子部分之后,可完成DEFLATE转换调用指令。当在仅执行CPU确定量的处理而不是所有指定处理之后指令完成时,指令集条件码3。在这样的完成时,PSW(程序状态字)中的指令地址指定下一顺序指令,并且指令的操作数参数已经被调整,使得指令的处理可以通过分支回到指令以再次执行指令来恢复。当指令已执行所有指定处理时,其设定除3以外的条件码。
4.当指定DFLTCC-CMPR函数并且操作以参数块的子字节边界(SBB)字段中的非零值结束时,操作包括存储到由得到的第一操作数地址指定的字节。当指定DFLTCC-XPND函数并且操作以SBB中的非零值结束时,操作包括提取由所得第二操作数地址指定的字节。
5.当操作结束于非零条件码集时,参数块的CSB字段392可包含部分处理的数据,并且预期程序重新执行指令以恢复操作。
6.在以非零条件码集结束的操作之后,并且在为了恢复操作的目的而重新执行指令之前,程序不修改参数块的任何字段;否则结果是不可预测的。
7.当指定DFLTCC-GDHT功能时,根据霍夫曼算法,生成的DHT的压缩表示描述三个适当的完整霍夫曼代码树。即,没有描述不完整的霍夫曼代码树。从DHT的压缩表示中导出不完整的霍夫曼代码树,DHT指定大于霍夫曼算法指定适当和功能的霍夫曼树所需的长度的元素的代码长度。
当指定DFLTCC-CMPR功能时,HTT为1,并且DHT的压缩表示包括欠满霍夫曼码树的描述,利用DFLTCC-XPND函数将压缩数据结果转换为原始未压缩数据,但不是符合DEFLATE标准的所有解码器都能够将结果转换为原始未压缩数据。例如,当由于执行DFLTCC-GDHT功能而没有生成由DFLTCC-CMPR功能的程序指定的DHT的压缩表示时,这可能发生。
8.当DFLTCC-CMPR函数以设置的条件码1结束时,存储到参数块的子字节边界(SBB)字段381的结果是000个二进制。识别此情形可与分配输出缓冲器以供与DEFLATE转换调用指令一起使用的程序相关。
如本文中所描述,在一个方面中,提供单个指令(例如,硬件/软件接口处的单个架构化机器指令,例如,DEFLATE转换调用指令)以使用通用处理器执行压缩和/或解压缩操作。所述指令例如是指令集架构(ISA)中定义的硬件指令。因此,降低了与压缩和/或解压缩操作相关的程序的复杂性。此外,提高了操作的性能,并因此提高了处理器的性能。
有利地,DEFLATE转换调用指令由例如程序员在通用处理器(例如,中央处理单元,在本文中称为处理器)上而不是专用处理器(诸如I/O设备、通过I/O接口连接的应用专用设备或其他类型的专用处理器)上分派。与软件实现方式相比,执行所披露的指令需要显著更少的执行周期来执行相同的操作。进一步,与向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)的一个或多个字段。进一步,程序指定要执行的操作(例如,压缩、扩展等)。
进一步,在一个示例中,程序分配和指定预定义大小(例如,32K字节)的循环缓冲器在存储器中的位置(步骤1802)。另外,程序将未压缩数据流的一部分放置到缓冲器中,并且指定缓冲器的位置和大小作为对DEFLATE转换调用指令的输入(步骤1804),并且指定或更新存储器中的结果缓冲器的位置和大小(步骤1806)。
接着执行DEFLATE转换调用指令(步骤1808)。基于执行指令,处理器从(例如)循环历史缓冲器提取历史作为对操作的输入(步骤1820),且执行指定操作(步骤1822),如本文中所描述。进一步,处理器修改循环历史缓冲器中的历史作为操作的输出(步骤1824)。进行关于整个数据流是否已被处理的确定,查询1826。如果不是,则处理继续步骤1804。否则,处理完成。
循环历史缓冲器的使用提供以下内容,作为实例:
当输入或输出缓冲器的大小被指定用于DEFLATE转换调用指令的个别执行时,相对较小(例如,512字节),历史跨越缓冲数据的多个段,多达例如32K字节可用作DEFLATE转换调用指令的输入,其处理少量的字节。
当输入或输出缓冲器的大小被指定用于DEFLATE转换调用指令的个别执行时,相对较大(例如,128K字节),是缓冲数据的先前段的历史,多达例如32K字节可用作到正处理前32K字节的数据的DEFLATE转换调用指令的输入。
在两种情况下,相比以其他方式可用的历史,更多的历史可用于处理数据。结果,检测重复串的有效性得到改善,从而导致改善的整体压缩比。这有利于在计算环境内的处理并且改善性能。
本发明的一个或多个方面与计算机技术不可扩展地关联并且促进计算机内的处理,从而改进其性能。使用单个架构机器指令来执行压缩和/或解压缩改进了计算环境内的性能。压缩/解压缩数据可用于管理和/或使用数据的许多技术领域,诸如计算机处理、医疗处理、安全、库存控制等。通过在压缩/解压缩中提供优化,通过减少执行时间来改进这些技术领域。
当涉及本发明的一个或多个方面时,参见图19-23描述一个或多个实施例的进一步细节。
现在转向图19,根据本发明的一个或多个实施例总体上示出了系统架构1901。图19中所示的系统架构1901包括中央处理单元(CPU)芯片或集成电路(在下文中被称为“CP”)1910,所述中央处理单元芯片或集成电路包括底板1915,至少一个处理单元(PU)1920、三级(L3)高速缓存和片上一致性单元(在下文中被称为“片上一致性单元”)1930,PCIe桥接单元(PBU)1940、加速器1950和存储器内核(MC)1960。PU1920、芯片上相干单元1930、PBU1940、加速器1950和MC1960被支持并布置在背板1915上。每一PU1920分别经由PU-L3接口1931与芯片上相干单元1930通信。芯片上相干单元1930经由外部总线1932与外部CP和系统控制器(SC)通信。每个PBU1940分别设置成与外围组件互连(PCI)接口1941信号通信。加速器1950可作为NXU加速器提供。每个PBU1940和加速器1950分别通过接口与片上一致性单元1930通信以存储数据和从存储器和高速缓存子系统检索数据。根据本发明的一个或多个实施例,接口可以是与DMA接口具有类似功能和结构的类似直接存储器访问(DMA)的接口1933。尽管未示出,根据本发明的附加或替代实施例,加速器1950可通过类似DMA的接口1933来访问任何存储器单元。MC1960通过存储器接口1961与外部存储器通信。
图19中所示的加速器1950被配置为执行某些功能和操作,包括但不限于DEFLATE操作和其他无损数据压缩算法。DEFLATE是用于数据的压缩或解压缩(其使用LZ77算法和霍夫曼编码的组合)的示范性行业标准算法,其在大小上可以是几千兆字节(GB),其中应用可能仅具有小的缓冲器,并且压缩必须在可以是一兆字节(MB)或更小的相对小的块中完成
在下文中,DEFLATE指令的操作被解释为转换操作的实例。DEFLATE是可以花费许多周期来完成执行的复杂指令。DEFLATE指令在加速器1950上运行。从架构角度来看,DEFLATE是与任何其他指令类似的指令,并且需要遵循相同的原理规则。对于DEFLATE使用情况,软件在调用指令时提供源和目标缓冲器。加速器1950能够完全消耗这些缓冲器中的至少一个,或者与可用缓冲器一起成功完成。这是因为,为了处理流,应用可能给出源数据(例如,256字节),然后需要使全缓冲器可用(即,由加速器消耗)来处理更多的源符号。即使源符号在部分符号上结束,也是这种情况。换句话说,最后可用源可能只是在没有符号的剩余部分的情况下未被解码的部分符号。在目标侧,出于相同的原因,这意味着加速器1950需要能够完全填充目标缓冲器,即使所产生的输出超过可用目标。将向DEFLATE指令供应源页面地址(计算机系统应从其提取待压缩/解压缩的数据)和目标页面地址(计算机系统将压缩/解压缩的结果存储到所述目标页面地址)。由于地址页不可用性,DEFLATE指令可以被中断。稍后,将再次利用固件辅助来调用指令,并且从指令在先前尝试中停止的地方继续所述指令。这需要在不可用页面的开始处以创建所需的访问异常。结果,这还要求DEFLATE指令在下一页恰好不可用的情况下完全和完全消耗源或目标页。本发明的一个或多个实施例处理一种机制以使得DEFLATE即使在存在不完整的源符号和/或过剩的目标缓冲器的情况下也能够完全消耗源和目标缓冲器
就加速器1950可作为NXU加速器提供而言,加速器1950实际上是实施实际DEFLATE算法标准而不是PU1920使得PU1920可关注其他任务的DMA附接硬件加速器。根据本发明的一个或多个实施例,加速器包括硬件引擎,所述硬件引擎包括专门制作为执行特定功能(诸如但不限于DEFLATE算法)的计算机硬件。此外,使用处理速度中的硬件优势,加速器1950可以比软件实现的压缩/解压缩更快地处理压缩/解压缩(例如,快200倍)。当应用执行DEFLATE指令时,微码代表应用操作加速器1950的硬件以执行实际的DEFLATE操作。如本文中所使用的,术语“微码”是指从应用角度来看透明的并且用于实现指令或指令的部分的低级代码。对于DEFLATE,微码代表应用获取并操作加速器1950。PU1920通过微码控制加速器1950的操作。例如,加速器1950将溢出的输出符号的一部分存储到溢出目标缓冲器2120中。换句话说,在处理器PU1910上运行的微码采用输出符号的溢出部分复制到参数块2103中的溢出目标缓冲器2120中
参考图20,CP 1910、一个或多个附加的或外部的CP 2001以及一个或多个附加的或外部的SC 2002可以设置在抽屉2010中。在此类情况下,CP 1910、一个或多个附加的或外部的CP 2001,并且一个或多个附加或外部SC 2002可以经由外部总线2003彼此通信,而一个或多个附加或外部SC 2002还可以经由抽屉互连2011与相对于抽屉2010外部的其他特征通信。
参见图21和22,DEFLATE操作可以在大量数据上运行。例如,可以运行DEFLATE操作以压缩若干GB大小的文件或者解压缩在解压缩之后将是若干GB大小的不同文件的文件。然而,应用程序可在其逻辑主存储器2100中仅具有小大小(例如,1MB)的主源缓冲器2101和/或主目标缓冲器2102,使得所述应用程序仅可一次读取或写入少量数据。在这种情况下,根据本发明的一个或多个实施例,应用将文件划分成任意小尺寸的块,并一次压缩每个块,而不是一次压缩整个文件。逻辑主存储器2100可包含在存储器核心(MC)1960中或通过存储器接口1961连接到PU1920的外部存储器中。然而,逻辑主存储器2100的位置不限于此。
如图21所示,参数块2103可以包括在主存储器2100中。根据本发明的一个或多个实施例,参数块2103是小尺寸(例如,1KB)的存储器块,其包含关于应用如何使用DEFLATE操作(例如,不同的压缩模式)的详细指令。参数块2103包含用于压缩/解压缩操作的参数。参数块2103包含关于要执行的压缩或解压缩的类型的指令。例如,软件可以要求通过使用固定的霍夫曼表(其是预定义的编码)而不是使用DHT来执行DEFLATE,或者软件可以要求在开始时打开新的块或者在结束时关闭它(或者既不这样做)。软件还可以指定尝试更好地压缩,即使这花费了显著更多的时间。此外,如果系统被中断或中止,则解析块2103包含恢复压缩/解压缩操作所需的信息。
如图22所示,参数块2103可包括溢出源缓冲器2110和溢出目标缓冲器2120。参数块2103可始终对处理单元PU1901可用,使得其仅允许PU1901中的微码控制参数块2103。如果不可用,则可以立刻将页面访问异常报告为在DEFLATE调用之外被解决。溢出源缓冲器2110和溢出目标缓冲器2120可共享缓冲器,因为一次只有溢出源缓冲器2110和溢出目标缓冲器2120中的一个使用缓冲器。根据本发明的额外或替代实施例,高速缓冲存储器(例如,512字节)可用作溢出源缓冲器2110和溢出目标缓冲器2120。根据本发明的额外或替代实施例,可提供用于溢出源和溢出目标的个别缓冲器。
在压缩/解压缩技术中,存在具有不同位长度的许多种类的符号。示例性种类的符号如下:
a)未压缩数据的文字量字节,
b)具有在3与258之间的长度的未压缩数据的字面字节的序列,
c)在应用霍夫曼编码之后的压缩编码,
d)在应用霍夫曼编码之后,假设压缩编码由单个距离/长度对表示,
e)c)和d),两者都用“块结束”符号扩展,并且
f)DEFLATE报头,如果它是动态块,则包括编码的DHT。
例如,未压缩数据的文字量的长度是1字节。通常在无损数据压缩中使用的一种算法(例如,LZ77或行程长度编码算法)找到字面串的重复出现并且用代表性字面串和单个距离/长度对替换重复序列。例如,假设存在文字串“alicealicealice.”,在这个字符串中,“alice”重复三次。然后,使用LZ77的压缩结果可以是“alice<LZsymbolA>r<LZSymbolB>”。这里,<LZsymbolA>将是“匹配长度5,5背(back)”,而<LZSymbolB>可以是“匹配长度5,6背”或“匹配长度5,11背”。使用这种算法,可以将多达258字节的重复字面字符串压缩成例如由8位长度和15位距离组成的编码匹配。如果解压缩器恢复此经编码匹配(将其视为一个符号),那么与对应的经压缩数据的相对较小大小(例如,总共2位到31位)相比,结果序列的大小可扩展到258字节。这还可能导致目标侧中的溢出。在符号的定义中,对应于编码匹配的这个解压缩序列是编码匹配的“对应物”(counterpart),并且反之亦然。因此,所述重复串的解压缩序列(对应物)被视为未划分的“一”符号,因为在解压缩序列之中丢弃几个单位串(例如,因为在目标侧不存在用于其的可用存储空间)使得原始序列和恢复的序列不同。术语“对应物”是指由于符号的转换而生成的位序列
在压缩/解压缩示例中,术语“目标符号”在压缩阶段中是指表示字面的压缩符号,表示匹配(例如,LZ77算法中定义的匹配、行程长度编码的结果等)或压缩报头(例如,DHT报头)的符号,解压缩阶段中的术语“源符号”是指表示文字量的压缩符号,表示匹配的符号、或压缩报头,并且解压缩阶段中的术语“目标符号”是指对表示文字量的压缩符号或表示匹配的符号进行解压缩的结果。因此,符号的大小根据符号是在源侧还是输出侧以及符号是在压缩级还是解压缩级而变化。
在对大文件(例如,5GB)解压缩的情况下,在应用中具有相对较小的主源和目标缓冲器(例如,1MB)的情况下,即使目标缓冲器2102中的大量空间仍可用,也可到达主源缓冲器2101的末端。为了在主源缓冲器2101中得到更多的待处理源,主源缓冲器2101需要被完全消耗,直到其可用空间的最后位。否则,应用不能将更多数据带入同一主源缓冲器2101中。换言之,需要消耗部分符号,使得应用可以重用主源缓冲器2101以提供包括在下一循环中完成所提及的部分符号所需的字节(即,剩余部分)的附加源数据。由于在解压缩阶段中的源符号的大小,在一些情况下,主源缓冲器2101不在符号的边界上结束。例如,存储在主源缓冲器2101中的最后一个符号可在主源缓冲器2101结束之前结束9位。如果下一符号的大小大于9位,则剩余的9位可能不足以容纳完整的源符号。类似的情况可以发生在压缩阶段中。例如,几百字节的输出符号到达主目标缓冲器2102的末端,并且所述符号可能在下一目标页上遇到跨页和页访问异常。在这种情况下,例如,对于100字节长度的输出符号,仅17字节适合可用的主目标缓冲器2102,并且剩余的83字节溢出到下一页中,即,剩余的83字节被剩下,而没有主目标缓冲器2102被存储到其中。随着符号的长度较长,跨越存储器页或缓冲器边界的机会增加。
此外,参见图23,页面访问异常可发生在源/目标缓冲器的中间。根据本发明的一个或多个实施例,对于跨越源/目标缓冲器或其页的边界的符号,部分符号(例如,符号的第一部分)填充源/目标缓冲器的剩余空间,并且符号的剩余部分(例如,符号的第二部分)存储在溢出缓冲器中。由于地址页不可用性,DEFLATE指令可被中断。稍后,指令可利用固件辅助被再次调用,并且从指令在先前尝试中停止的地方继续。
例如,当接近主源缓冲器2101上的存储器边界时,遵循DEFLATE指令,参数块2103中的命令发信号通知包含将在主源缓冲器2101中消耗的最后源符号的部分符号的整个源数据。换句话说,加速器1950读取主源缓冲器2101中的完整源符号,直到其到达待处理的流的结束或主源缓冲器2101的结束。在主源缓冲器2101结束时,加速器1950采用在没有符号的剩余部分(“第二部分”)的情况下不能被解码的任何部分符号(“第一部分”),并且将其存储到溢出源缓冲器2110中。此时,由于源符号的第二部分还不在主源缓冲器2101中,加速器1950仅将源符号的第一部分复制到溢出源缓冲器2110中,且稍后连同在重新调用时接收的第二部分一起处理溢出源缓冲器2110中的源符号的第一部分。根据本发明的额外或替代实施例,处理单元(PU)1920而非加速器1950可将第一部分复制到溢出源缓冲器2110中。根据本发明的额外或替代实施例,如果在源存储器页S+1上存在存取异常,那么源存储器页S可能以部分符号结束。在这种情况下,源的未处理的部分符号被复制到溢出源缓冲器2110。在解压缩操作恢复时,溢出源缓冲器2110中的源的部分符号作为源数据被馈送到加速器1950,随后是符号的剩余部分,其在下一循环中被存储在主源缓冲器2101中。
又例如,当接近主目标缓冲器2102上的存储器边界时,其中所产生的输出超过可用主目标缓冲器2102,遵循DEFLATE指令,参数块2103中的命令用信号通知要填充的整个主目标缓冲器2102,包括拟合在主目标缓冲器2102的最后可用空间中的部分输出符号。溢出的输出数据,即最后符号的剩余部分,被存储到参数块2103的溢出目标缓冲器2120中。换句话说,加速器1950将转换的目标符号存储到主目标缓冲器2102中,直到其到达待处理的流的结束或主目标缓冲器2102的结束。在主目标缓冲器2102的末尾,加速器1950取得溢出可用主目标缓冲器2102的任何部分输出符号(“第一部分”),并且将剩余的部分输出符号(“第二部分”)存储到溢出目标缓冲器2120中。根据本发明的附加或替代实施例,如果在目标存储器页T+1上存在访问异常,则完全解压缩的符号可能不会填充到目标页T中。在这种情况下,加速器1950完全消耗页T并将部分符号X放入溢出主目标缓冲器2102中。由于参数块2103包含恢复压缩/解压缩操作所需的信息,在压缩的恢复时,参数块2103的溢出目标缓冲器2120中的内容被复制到新近可用的主目标缓冲器2102中。
处理器PU1910中的微码可以使用在转换技术中定义符号的表(例如,霍夫曼表)来检测符号是否跨越页或缓冲器边界。使用所述表,微码可以检测存储在缓冲器边界的最后可用空间中的符号是否是在没有附加源数据的情况下未完成的部分源符号。
作为此实现的结果,即使缓冲器的可用空间不允许加速器完全处理源符号或存储目标输出符号,加速器1950也可以完全消耗可用的源和目标缓冲器。
关于溢出缓冲器的大小,考虑到符号的1位存储在前一存储器页的最后或下一存储器页的第一者中的情形,溢出缓冲器需要存储符号减1位的可能最大长度。例如,对于溢出源缓冲器2110,在解压缩阶段,DHT报头可具有最大符号长度。因此,溢出源缓冲器2110的大小至少是全DHT报头的最大长度-1字节(例如,288字节-1字节)。
关于溢出目标缓冲器2120,长度要求根据操作是压缩还是解压缩而变化。在压缩阶段,溢出目标缓存2120的长度要求可以与解压缩阶段溢出源缓存2110的长度要求相同,例如,至少全DHT头的最大长度减去1字节。在解压缩阶段,溢出目标缓冲器2120的长度要求可为至少最大符号长度减去1位(例如,258字节-1位)。根据本发明的附加或替代实施例,溢出目标缓冲器2120的长度要求可以是至少最大符号长度-如果1字节是最小存储单元则为1字节(例如,258字节)。
本发明可以是任何可能的集成技术细节水平的系统、方法和/或计算机程序产品。所述计算机程序产品可包含上面具有计算机可读程序指令的计算机可读存储媒体(或媒体),所述计算机可读程序指令用于致使处理器执行本发明的方面。
计算机可读存储媒质可以是可以保留和存储指令以供指令执行设备使用的有形设备。计算机可读存储媒质可以是例如但不限于电子存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或前述各项的任何合适的组合。计算机可读存储媒质的更具体例子的非穷举列表包括以下:便携式计算机盘,硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或闪存),静态随机存取存储器(SRAM)、便携式致密盘只读存储器(CD-ROM),数字通用盘(DVD)、记忆棒、软盘、机械编码设备(诸如穿孔卡片)或具有记录在其上的指令的凹槽中的凸起结构),以及上述的任意合适的组合。如本文中所使用的计算机可读存储媒质不应被解释为瞬态信号本身,诸如无线电波或其他自由传播的电磁波、通过波导或其他传输媒质传播的电磁波(例如,通过光纤电缆的光脉冲)、或通过导线传输的电信号。
本文所述的计算机可读程序指令可从计算机可读存储介质下载到相应的计算/处理设备,或经由网络(例如,互联网、局域网、广域网和/或无线网络)下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光传输光纤、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配器卡或网络接口从网络接收计算机可读程序指令,并转发计算机可读程序指令以存储在相应计算/处理设备内的计算机可读存储媒质中。
用于执行本发明的操作的计算机可读程序指令可以是汇编指令,指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据,集成电路的配置数据,或以一种或多种编程语言的任何组合编写的源代码或目标代码,包括面向对象的Smalltalk、C++等编程语言,以及过程式编程语言,如“C”编程语言或类似的编程语言。计算机可读程序指令可完全在用户的计算机上执行、部分在用户的计算机上执行、作为独立软件包执行、部分在用户的计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在后一种情形中,远程计算机可以通过任何类型的网络(包括局域网(LAN)或广域网(WAN))连接到用户的计算机,或者可以连接到外部计算机(例如,通过使用互联网服务提供商的互联网)。在一些实施例中,电子电路(包括例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA))可以通过利用计算机可读程序指令的状态信息来执行计算机可读程序指令以使电子电路个性化,以便执行本发明的方面。
本文中参考根据本发明的实施例的方法、设备(系统)和计算机程序产品的流程图说明和/或框图描述本发明的方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令来实现。
这些计算机可读程序指令可以被提供给通用计算机的处理器,专用计算机或其他可编程数据处理装置,以产生机器,其通过计算机或其他可编程数据处理装置的处理器执行,创建用于实现在流程图和/或方框图的一个或多个方框中指定的功能/动作的装置。这些计算机可读程序指令还可存储在可指导计算机的计算机可读存储媒质中,可编程数据处理装置,和/或以特定方式起作用的其他设备,使得具有存储在其中的指令的计算机可读存储媒质包括制品,所述制品包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各方面的指令。
计算机可读程序指令还可以加载到计算机、其他可编程数据处理装置上,或使得在计算机上执行一系列操作步骤的其他装置,其他可编程装置或其他设备,以产生计算机实现的过程,使得在计算机上执行的指令,其他可编程装置或其他设备实现流程图和/或框图中的一个或多个方框中规定的功能/动作。
附图中的流程图和框图图示了根据本发明的不同实施例的系统、方法和计算机程序产品的可能实现的架构、功能和操作。对此,流程图或框图中的每个方框可以代表模块、段或指令的一部分,其包括用于实现规定的逻辑功能的一个或多个可执行指令。在一些替代实施例中,框中所标注的功能可以不以图中所标注的次序发生。例如,取决于所涉及的功能,连续示出的两个框实际上可以基本上同时执行,或者这些框有时可以以相反的顺序执行。还将注意的是,框图和/或流程图中的每个框、以及框图和/或流程图中的框的组合可以由基于专用硬件的系统来实现,所述基于专用硬件的系统执行指定的功能或动作或执行专用硬件与计算机指令的组合。
已经出于说明的目的呈现了本发明的不同实施例的描述,但并不旨在是穷尽性的或局限于所披露的实施例。在不脱离所描述的实施例的范围的情况下,许多修改和变化对本领域的普通技术人员而言将是显而易见的。选择本文中所使用的术语以最佳地解释实施例的原理、实际应用或对市场中所发现的技术的技术改进,或使得所属领域的其他普通技术人员能够理解本文中所描述的实施例。
在此参考相关附图描述本发明的不同实施例。在不脱离本发明的范围的情况下,可以设计本发明的替代实施例。在以下描述和附图中的元件之间阐述了各种连接和位置关系(例如,上方、下方、相邻等)。除非另有说明,这些连接和/或位置关系可以是直接的或间接的,并且本发明在这方面并示意图进行限制。因而,实体的耦合可以指直接或间接耦合,并且实体之间的位置关系可以是直接或间接位置关系。此外,本文所述的各种任务和工艺步骤可并入到具有本文未详细描述的附加步骤或功能的更全面的程序或工艺中。
以下定义和缩写用于解释权利要求书和说明书。如在此使用的,术语“包含”(comprises)、“包含”(comprising)、“包括”(includes)、“包括”(including)、“具有”(has)、“具有”(having)、“含有”(contains)或“含有”(containing)或其任何其他变体旨在覆盖非排他性的包含。例如,包含一系列元素的组合物、混合物、工艺、方法、制品或设备不一定仅限于那些元素,而是可包括未明确列出的或此类组合物、混合物、工艺、方法、制品或设备固有的其他元素
另外,术语“示例性”在此用于意指“充当实例、实例或说明。”在此描述为“示范性”的任何实施例或设计不一定被解释为比其他实施例或设计优选或有利。
将理解的是,尽管术语“第一”、“第二”、“第三”等可以在本文中用于描述各种元件、部件、区域、层和/或部分,但是这些元件、部件、区域、层和/或部分不应受这些术语的限制。这些术语仅用于将一个元件、部件、区域、层或部分与另一个元件、部件、区域、层或部分区分开。因此,在不背离在此的传授内容的情况下,以下讨论的“第一元件”、“部件”、“区域”、“层”或“区段”可以被称为第二元件、部件、区域、层或区段。
在此使用的术语仅用于描述具体实施例的目的并且不旨在是限制性的。如在此使用的,单数形式“一个/一种(a/an)”和“所述(the)”旨在包括复数形式,包括“至少一个”,除非内容另外清楚地指示。“至少一个”不应被解释为限制“一个(a)”或“一种(an)”。”“或”是指“和/或。”如在此所使用的,术语“和/或”包括相关联的列出项目中的一个或多个的任何和所有组合。术语“多个”可以被理解为包括大于或等于二的任何整数,即两个、三个、四个、五个等。术语“连接”可以包括间接“连接”和直接“连接”两者。
术语“约”、“基本上”、“大约”及其变体旨在包括与基于在提交本申请时可用的设备的具体量的测量相关联的误差程度。例如,“约”可以包括给定值的±8%或5%、或2%的范围。

Claims (25)

1.一种系统,包括:
处理单元;
加速器;
主源缓冲器,被配置为存储从外部源接收的源符号的第一部分;
主目标缓冲器,被配置为存储从所述加速器接收的输出符号;以及
存储块,包括溢出源缓冲器,其中,所述溢出源缓冲器被配置成存储从所述主源缓冲器接收的所述源符号的所述第一部分,加速器被配置为提取存储在所述溢出源缓冲器中的所述源符号的第一部分和存储在所述主源缓冲器中的所述源符号的第二部分,并执行将所述源符号的第一部分和第二部分一起转换为输出符号的转换操作,所述源符号的所述第二部分包括所述源符号的不包含在所述源符号的所述第一部分中的部分,所述处理单元被配置为调用所述加速器进行转换操作。
2.根据权利要求1所述的系统,其中,所述转换操作包括将所述源符号的所述第一和第二部分一起解压缩成所述输出符号的解压缩操作。
3.根据在前权利要求之一所述的系统,其中所述处理单元可操作用于通过微码控制所述加速器的操作。
4.根据在前权利要求中任一项所述的系统,其中所述主源缓冲器可操作用于将所述源符号的所述第一部分存储在所述主源缓冲器的最后可用空间中。
5.根据在前权利要求中任一项所述的系统,其中所述源符号包括压缩头。
6.根据在前权利要求中任一项所述的系统,其中所述存储块进一步包括恢复所述转换操作所需的信息。
7.一种系统,包括:
处理单元;
加速器;
主源缓冲器,被配置为存储从外部源接收的源符号;
主目标缓冲器,被配置为存储从所述加速器接收的输出符号的第一部分;以及
存储块,包括溢出目标缓冲器,所述溢出目标缓冲器被配置为存储从所述加速器接收的所述输出符号的第二部分,所述输出符号的所述第二部分包括所述输出符号的不包含在所述第一部分中的部分,加速器,被配置为执行将所述源符号转换成输出符号的转换操作,以及处理单元,被配置为调用所述加速器来执行转换操作。
8.根据权利要求7所述的系统,其中,所述转换操作包括将所述源符号解压缩为所述输出符号的解压缩操作或者将所述源符号压缩为所述输出符号的压缩操作。
9.根据权利要求7或8所述的系统,其中,所述处理单元通过微码来控制所述加速器的操作。
10.根据权利要求7至9中任一项所述的系统,其中所述主目标缓冲器将所述输出符号的所述第一部分存储在所述主目标缓冲器的最后可用空间中。
11.根据权利要求7至10中任一项所述的系统,其中,所述源符号包括压缩模式下的压缩头。
12.根据权利要求7至11中任一项所述的系统,其特征在于,所述内存块还包括恢复所述转换操作所需的信息。
13.一种计算机实现的方法,包括:
通过处理单元或加速器将从外部源接收的源符号的第一部分存储在主源缓冲器中;
基于确定在没有从所述外部源接收到所述源符号的第二部分的情况下所述第一部分未完成,由所述处理单元或所述加速器将所述源符号的所述第一部分存储在溢出源缓冲器中;
由所述加速器获取存储在所述溢出源缓冲器中的所述源符号的第一部分和存储在所述主源缓冲器中的所述源符号的第二部分;
由所述加速器将所述源符号的所述第一部分和所述第二部分一起转换成输出符号;并且
由所述处理单元或所述加速器将从所述加速器接收的所述输出符号存储在所述主目标缓冲器中,所述源符号的所述第二部分包括所述源符号的未包括在所述第一部分中的一部分,并且所述加速器包括硬件引擎。
14.根据权利要求13所述的计算机实现方法,其中,所述处理单元通过微码控制所述加速器的操作。
15.根据权利要求13或14所述的计算机实现方法,其中,所述主源缓冲器将所述源符号的所述第一部分存储在所述主源缓冲器的最后可用空间中。
16.根据权利要求15所述的计算机实现方法,其中,所述最后可用空间是就在发生页面访问异常的点之前的所述主源缓冲器中的空间。
17.根据权利要求13至16中任一项所述的计算机实现的方法,其中,将所述源符号的所述第一和第二部分一起转换包括将所述源符号的所述第一和第二部分一起解压缩。
18.一种计算机实现的方法,包括:
通过处理单元或加速器将从外部源接收的源符号存储在主源缓冲器中;
由所述加速器执行所述源符号到输出符号的转换操作;
由所述处理单元或所述加速器将从所述加速器接收的所述输出符号的第一部分存储在主目标缓冲器中;并且
基于确定所述主目标缓冲器不可用于存储所述输出符号的第二部分,由所述处理单元或所述加速器将从所述加速器接收的所述输出符号的所述第二部分存储在溢出目标缓冲器中,其中,源符号的第二部分包括源符号的不包括在第一部分中的部分,以及所述加速器包括硬件引擎。
19.根据权利要求18所述的计算机实现方法,其中,所述处理单元通过微码控制所述加速器的操作。
20.根据权利要求18或19中任一项所述的计算机实现的方法,其中,所述主源缓冲器将所述源符号的所述第一部分存储在所述主源缓冲器的最后可用空间中。
21.根据权利要求20所述的计算机实现方法,其中,所述最后可用空间是就在发生页面访问异常的点之前的所述主源缓冲器中的空间。
22.根据权利要求18至21中任一项所述的计算机实现的方法,进一步包括:通过将存储在所述溢出目标缓冲器中的输出符号的第二部分馈送到所述主目标缓冲器来恢复转换操作。
23.一种用于管理存储器单元的计算机程序产品,所述计算机程序产品包括:计算机可读存储介质,所述计算机可读存储介质由处理电路可读并且存储用于由所述处理电路执行以便执行根据权利要求13至22中任一项所述的方法的指令。
24.一种计算机程序,存储在计算机可读介质上并且可加载到数字计算机的内部存储器中,所述计算机程序包括软件代码部分,当所述程序在计算机上运行时,所述软件代码部分用于执行如权利要求13至22中任一项所述的方法。
25.一种计算机程序,所述计算机程序存储在计算机可读介质上并且加载到如权利要求1至12中任一项所述的系统的所述内部存储器中,所述计算机程序包括软件代码部分,当所述程序在所述系统上运行时,所述软件代码部分用于执行如权利要求13至22中任一项所述的方法。
CN202080015708.8A 2019-02-27 2020-02-27 溢出临时结果以适应存储边界 Pending CN113474999A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/286,703 2019-02-27
US16/286,703 US10673460B1 (en) 2019-02-27 2019-02-27 Spilling temporary results for accommodation of memory boundaries
PCT/EP2020/055105 WO2020174033A1 (en) 2019-02-27 2020-02-27 Spilling temporary results for accommodation of memory boundaries

Publications (1)

Publication Number Publication Date
CN113474999A true CN113474999A (zh) 2021-10-01

Family

ID=69726569

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202080015708.8A Pending CN113474999A (zh) 2019-02-27 2020-02-27 溢出临时结果以适应存储边界

Country Status (9)

Country Link
US (1) US10673460B1 (zh)
EP (1) EP3931971A1 (zh)
JP (1) JP7481073B2 (zh)
CN (1) CN113474999A (zh)
AU (1) AU2020230012B2 (zh)
CA (1) CA3131257A1 (zh)
IL (1) IL284763B1 (zh)
MX (1) MX2021010029A (zh)
WO (1) WO2020174033A1 (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
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
US11119928B2 (en) 2019-02-27 2021-09-14 International Business Machines Corporation Instant quiescing of an accelerator
CN112988673B (zh) * 2021-02-22 2023-02-28 山东英信计算机技术有限公司 一种处理解压缩过程中数据溢出的方法和设备
US11669331B2 (en) * 2021-06-17 2023-06-06 International Business Machines Corporation Neural network processing assist instruction

Family Cites Families (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05189157A (ja) * 1992-01-13 1993-07-30 Toshiba Corp ディスク型記憶装置
JPH10232838A (ja) * 1996-11-05 1998-09-02 Hitachi Ltd ディスク記憶システム
CA2434257A1 (en) 2003-07-03 2005-01-03 Ibm Canada Limited - Ibm Canada Limitee Pairing of spills for parallel registers
US9031826B2 (en) 2006-03-30 2015-05-12 International Business Machines Corporation Method and apparatus for simulating operation in a data processing system
US20100030927A1 (en) 2008-07-29 2010-02-04 Telefonaktiebolaget Lm Ericsson (Publ) General purpose hardware acceleration via deirect memory access
WO2012103359A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Hardware acceleration components for translating guest instructions to native instructions
US8495258B2 (en) 2011-05-24 2013-07-23 International Business Machines Corporation Implementing storage adapter performance optimization with hardware accelerators offloading firmware for buffer allocation and automatically DMA
US8824569B2 (en) * 2011-12-07 2014-09-02 International Business Machines Corporation High bandwidth decompression of variable length encoded data streams
US9152673B2 (en) 2012-12-11 2015-10-06 Intel Corporation Non-deterministic finite automaton (NFA) overflow recovery that ejects an end of scan set of active states into a buffer
US9171007B2 (en) * 2013-03-15 2015-10-27 International Business Machines Corporation Compression/decompression accelerator protocol for software/hardware integration
WO2015042684A1 (en) 2013-09-24 2015-04-02 University Of Ottawa Virtualization of hardware accelerator
US9306596B2 (en) * 2014-06-27 2016-04-05 Intel Corporation Hybrid CAM assisted deflate decompression accelerator
US9419647B2 (en) * 2014-12-16 2016-08-16 Intel Corporation Partitioned data compression using accelerator
US9755731B2 (en) 2015-01-10 2017-09-05 Hughes Network Systems, Llc Hardware TCP accelerator
US10067893B2 (en) 2015-04-03 2018-09-04 Futurewei Technologies, Inc. Acceleration framework with direct data transfer mechanism
US9952865B2 (en) * 2015-04-04 2018-04-24 Texas Instruments Incorporated Low energy accelerator processor architecture with short parallel instruction word and non-orthogonal register data file
US9690488B2 (en) * 2015-10-19 2017-06-27 Intel Corporation Data compression using accelerator with multiple search engines
US10169073B2 (en) 2015-12-20 2019-01-01 Intel Corporation Hardware accelerators and methods for stateful compression and decompression operations
US10177782B2 (en) * 2015-12-26 2019-01-08 Intel Corporation Hardware apparatuses and methods for data decompression
US10055255B2 (en) 2016-04-14 2018-08-21 International Business Machines Corporation Performance optimization of hardware accelerators
US10241956B2 (en) 2016-09-12 2019-03-26 International Business Machines Corporation Virtualizing coherent hardware accelerators
US9715470B1 (en) 2016-09-26 2017-07-25 International Business Machines Corporation Direct memory access between an accelerator and a processor using a coherency adapter
US10691996B2 (en) 2016-12-15 2020-06-23 Beijing Deephi Intelligent Technology Co., Ltd. Hardware accelerator for compressed LSTM
US10374628B2 (en) 2017-04-05 2019-08-06 International Business Machines Corporation In-place data compression with small working memory
US11178063B2 (en) 2017-06-30 2021-11-16 Intel Corporation Remote hardware acceleration

Also Published As

Publication number Publication date
AU2020230012A1 (en) 2021-06-03
IL284763B1 (en) 2024-09-01
JP2022521465A (ja) 2022-04-08
CA3131257A1 (en) 2020-09-03
WO2020174033A1 (en) 2020-09-03
MX2021010029A (es) 2022-06-16
JP7481073B2 (ja) 2024-05-10
US10673460B1 (en) 2020-06-02
AU2020230012B2 (en) 2023-01-12
IL284763A (en) 2021-08-31
EP3931971A1 (en) 2022-01-05

Similar Documents

Publication Publication Date Title
US10698854B1 (en) Secure and efficient application data processing
CN113474999A (zh) 溢出临时结果以适应存储边界
TWI764078B (zh) 用於執行壓縮/解壓縮作業之通用處理器指令之電腦程式產品、電腦系統及電腦實作方法
AU2020214177B2 (en) Compression/decompression instruction specifying a history buffer to be used in the compression/decompression of data
US11119928B2 (en) Instant quiescing of an accelerator
WO2020174300A1 (en) Functional completion when retrying non-interruptible instruction in bi-modal execution environment
US11487547B2 (en) Extended asynchronous data mover functions compatibility indication
CN113454593A (zh) 保持多个机器生成上的复杂功能的兼容性

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 40057237

Country of ref document: HK