CN114116635A - 压缩数据流的并行解压缩 - Google Patents
压缩数据流的并行解压缩 Download PDFInfo
- Publication number
- CN114116635A CN114116635A CN202110979990.8A CN202110979990A CN114116635A CN 114116635 A CN114116635 A CN 114116635A CN 202110979990 A CN202110979990 A CN 202110979990A CN 114116635 A CN114116635 A CN 114116635A
- Authority
- CN
- China
- Prior art keywords
- compressed data
- segments
- dictionary
- output
- data
- 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
Links
Images
Classifications
-
- 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
- H03M7/3088—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing the use of a dictionary, e.g. LZ78
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/174—Redundancy elimination performed by the file system
- G06F16/1744—Redundancy elimination performed by the file system using compression, e.g. sparse files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/0644—Management of space entities, e.g. partitions, extents, pools
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- 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
-
- 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
-
- 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/60—General implementation details not specific to a particular type of compression
- H03M7/6005—Decoder aspects
-
- 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/60—General implementation details not specific to a particular type of compression
- H03M7/6017—Methods or arrangements to increase the throughput
- H03M7/6023—Parallelization
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Human Computer Interaction (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
公开了压缩数据流的并行解压缩。在不同示例中,可以生成对应于根据串行压缩算法(诸如算术编码、熵编码等)压缩的压缩数据流的元数据,以便允许并行解压缩该压缩数据。因此,可以不需要对压缩数据流本身进行修改,并且可以最低限度地影响系统的带宽和存储要求。此外,通过并行解压缩,系统可受益于更快的解压缩时间,同时还减少或完全移除使用元数据用于并行解压缩的系统的采用周期。
Description
背景技术
长期以来,无损压缩算法被用于减小用于存储和传送的数据集的大小。许多传统的压缩算法依赖于Lempel-Ziv(LZ)算法、霍夫曼编码或其组合。作为示例,DEFLATE压缩格式(互联网标准RFC1951)组合LZ算法和霍夫曼编码,以便与电子邮件通信、下载网页、生成ZIP文件以便存储在硬盘驱动器上等一起使用。像DEFLATE的算法可以在数据传送中节省带宽和/或可以通过用更少的比特存储数据来保存磁盘空间。然而,由于对用于重建稍后输入的先前输入的强依赖性,传统的压缩算法本质上是固有串行的,这使得这些压缩技术对于并行处理单元(诸如图形处理单元(GPU))上的解压缩较不理想。结果,用于处理压缩数据的细粒度并行解压缩算法是罕见的。
用于并行解压缩的大多数常规方法依赖于修改压缩算法本身,以便移除LZ算法的数据危险和/或移除或限制霍夫曼编码步骤。用于并行解压缩的现有方法的示例包括LZ4和LZ排序和置空(LZSSE)。尽管以LZ算法和/或霍夫曼编码的压缩益处中的一些为代价,这些和类似方法能够从并行处理架构实现一些益处——例如,减少的运行时间。例如,与在DEFLATE压缩格式的传统顺序实现方式下压缩的相同文件相比,这些并行解压缩算法通常导致文件大小的10%-15%的增加。
这些并行解压缩算法的另一缺点是传统文件格式的广泛使用对广泛采用任何新提议的格式呈现显著障碍。例如,对于已经根据更传统的压缩格式(如使用LZ算法、霍夫曼编码或其组合)存储数据的系统,系统可能需要被重新配置为与新的压缩算法类型一起工作。该重新配置可能是昂贵的,因为系统的带宽和存储要求可能已经针对串行压缩算法的较低带宽和减小的文件大小进行了优化,并且并行解压缩算法的带宽和存储要求的增加可能需要额外的资源。此外,在移除现有复制之前,可能必须重新格式化来自现有压缩格式的已存储数据和/或可能必须以更新格式存储数据的新复制——由此进一步增加采用周期的时间并且可能要求获取附加资源。
发明内容
本公开的实施例涉及用于执行压缩数据流的并行解压缩的技术。公开了生成用于根据更传统的压缩算法(如Lempel-Ziv(LZ)、霍夫曼编码、其组合、和/或其他压缩算法)压缩的数据流的元数据的系统和方法,以便暴露数据流中的不同类型的并行度以用于压缩数据的并行解压缩。例如,元数据可指示压缩数据中对应于压缩数据的各个数据部分或块的分界(demarcation)、每个内容部分内的数据分段的分界和/或每个数据部分或块内的字典分段的分界。此外,元数据可以指示数据输出流中的输出位置,从而使得解压缩器——尤其是当并行解压缩时——可以识别解压缩数据适合在输出流内的何处。照此,并且与常规系统(如以上所描述的那些系统)相比,与压缩流相关联的元数据导致压缩数据流的总文件大小的更微小(例如,1%-2%)的增加,而不需要对压缩数据流本身进行任何修改。因此,与常规并行解压缩算法相比,系统的带宽和存储要求可能受到最小影响,同时还由于压缩数据的并行处理而实现更快解压缩时间的益处。另外,由于压缩流不受影响(例如,在使用DEFLATE格式的情况下,压缩流仍对应于DEFLATE格式),可以避免与较老系统和文件兼容性的问题,因为采用中央处理单元(CPU)解压缩的系统可以忽略元数据并且根据常规技术串行解压缩该压缩数据,而使用并行处理器(诸如GPU)进行解压缩的系统可使用元数据来并行地解压缩数据。
附图说明
以下参照附图详细描述用于压缩数据流的并行解压缩的本系统和方法,其中:
图1描绘了根据本公开的一些实施例的示出用于对压缩数据流进行并行解压缩的过程100的示例数据流程图;
图2A描绘了根据本公开的一些实施例的对应于用于对压缩数据流进行并行解压缩的元数据的示例表;
图2B描绘了根据本公开的一些实施例的对应于用于对压缩数据流进行并行解压缩的前缀和格式的元数据的示例表;
图2C描绘了根据本公开的一些实施例的对应于字典和与字典相关联的元数据的示例表;
图2D描绘了根据本公开的一些实施例的对应于用于对压缩数据流的块进行并行解压缩的元数据的示例表;
图2E描绘了根据本公开的一些实施例的对应于不适于并行处理的压缩数据流的复制的示例表;
图2F描绘了根据本公开的一些实施例的对应于适合于并行处理的压缩数据流的复制的示例表;
图3描绘了根据本公开的一些实施例的对应于用于生成压缩数据流的元数据以用于压缩数据流的并行解压缩的方法的流程图;
图4描绘了根据本公开的一些实施例的对应于用于对压缩数据流进行并行解压缩的方法的流程图;
图5描绘了适合用于实现本公开的一些实施例的示例计算设备的框图;以及
图6是适合用于实现本公开的一些实施例的示例数据中心的框图。
具体实施方式
公开了关于压缩数据流(compressed data stream)的并行解压缩的系统和方法。尽管本文主要针对使用Lempel-Ziv(LZ)算法和/或霍夫曼(Huffman)编码(例如,DEFLATE、LZ4、LZ分类和设置空(LZSSE)、PKZIP、LZJaccard距离(LZJD)、LZWelch(LZW)、BZIP2、有限状态熵等)压缩的数据流来描述,但这不旨在是限制性的。照此,在不脱离本发明的范围的情况下,可使用其他压缩算法和/或技术。例如,Fibonacci编码、Shannon-Fano编码、算术编码、人工蜂群算法、Bentley、Sleator、Tarjan和Wei(BSTW)算法、通过部分匹配的预测(PPM)、游程编码(RLE)、熵编码、Rice编码、Golomb编码、字典类型编码等。作为另一个示例,本文中所描述的元数据生成和并行解压缩技术可适合于包括用于编码符号的可变比特长度和/或复制(例如,复制可对应于一个符号、两个符号、五个符号等)的可变输出大小的任何压缩数据格式。
本文描述的元数据生成和解压缩技术可以在实现数据压缩和解压缩的任何技术空间中使用——尤其是用于无损压缩和解压缩。例如,但不限于,本文中所描述的技术可针对以下项实现:音频数据、光栅图形、三维(3D)图形、视频数据、密码学、遗传学和基因组学、医学成像(例如,用于压缩医学中的数字成像和通信(DICOM)数据),可执行文件,将数据移动到网络服务器和从网络服务器移动数据,在中央处理单元(CPU)和图形处理单元(GPU)之间和之中发送数据(例如,用于增加CPU和GPU之间的输入/输出(I/O)带宽),数据存储(例如,以减少数据占用空间)、电子邮件、文本、消息传递、压缩文件(例如,ZIP文件、GZIP文件等),和/或其他技术空间。本文描述的系统和方法可以特别适合于针对I/O密集使用情况来放大存储和增加PCIe带宽——诸如在CPU与GPU之间通信数据。
参照图1,图1是示出了根据本公开的一些实施例的用于对压缩数据流进行并行解压缩的过程100的示例数据流程图。应当理解,本文所述的这种和其他布置仅作为示例被阐述。除了所示的那些布置和元素之外或代替所示的那些布置和元素,可以使用其他布置和元素(例如,机器、接口、功能、顺序、功能分组等),并且一些元素可以一起省略。进一步,本文描述的许多元件是可被实现为分立或分布式组件或结合其他组件、和在任何合适的组合和位置中实现的功能实体。本文中描述为由实体执行的不同功能可由硬件、固件和/或软件执行。例如,不同功能可由执行存储在存储器中的指令的处理器执行。
过程100可以包括接收和/或生成数据102。例如,数据102可以对应于任何类型的技术空间,诸如但不限于本文中描述的那些技术空间。例如,数据102可对应于文本数据、图像数据、视频数据、音频数据、基因组测序数据和/或其他数据类型或其组合。在一些实施例中,数据102可对应于使用无损压缩技术存储和/或传输的数据。
过程100可以包括压缩器104压缩数据102以生成压缩数据106。数据102可根据任何压缩格式或算法(诸如但不限于本文中描述的那些压缩格式或算法)来压缩。例如,但不限于,数据102可根据Lempel-Ziv算法、霍夫曼编码、DEFLATE格式和/或另一压缩格式或技术来压缩。
压缩数据分析器108可分析压缩数据106以确定其中并行化的机会。例如,压缩数据分析器108可识别压缩数据132内的对应于可至少部分并行地处理而不影响其他分段的处理的数据流各部分的分段(或部分)。在一些实施例中,分段的数目对于每个数据块可以是相同的,或者可以是不同的(例如,动态确定的)。分段的数目不限于任何特定数目;然而,在一些非限制性实施例中,压缩数据的每个块可分裂为32个不同分段,使得GPU上的线程束中的32个线程(或协处理器)可并行地处理该32个分段。作为其他非限制性示例,压缩数据106或其块可以被分离(split)为4个分段(segment)、12个分段、15个分段、64个分段等。分段的数目可对应于每个数据块和/或对应于用于字典译码的数据结构的对应于每个块的每个部分,如本文中所描述。如此,数据结构(字典)可以被分离成用于并行解码的多个分段,并且数据可以被分离成用于并行解码的(在实施例中,相等的)多个分段——例如,使用已经解码的字典。
为了确定压缩数据106的哪个部分与每个分段相关联,压缩数据分析器108可以对压缩数据106执行第一传递(pass)以确定压缩数据106内的符号或令牌的数量。在第二传递中,符号的数量然后可以用于确定在每个分段中将包括多少符号和哪些符号。在一些实施例中,符号的数量可在分段之间被均等地或尽可能均等地划分。例如,在存在320个符号和32个分段的情况下,每个分段可包括10个符号。在其他示例中,可以调整符号的数量——例如,针对分段中的一个或更多个分段加或减一个或更多个符号——以便简化解压缩。例如,代替在以上示例中选择每分段10个符号,分段中的一个或更多个分段可以包括11个符号(而其他分段可以包括9个符号),以便使分段边界对应于某个字节间隔——例如,4字节间隔——解压缩器114可以更容易地处理(例如,通过避免在压缩数据106的字节之间分离输出)。
随后,所述分段可由元数据生成器110分析以生成对应于压缩数据106的元数据112,所述元数据112向解压缩器114提供信息以并行地解压缩压缩数据106。例如,在每个分段内,元数据112可识别三条信息。首先,识别在压缩数据中何处开始解码分段的比特数;第二,输出缓冲器中被解码的结果将被插入的位置;以及第三,复制列表(或匹配)内的位置或地点以开始输出延迟复制——例如,复制索引。例如,对于第三类型的元数据112,因为解码可以并行执行,其中使用LZ算法,解压缩器114可以不串行地解码复制,所以复制可以被批处理以供稍后执行。照此,复制索引可以包括在元数据112中以向解压缩器114指示节省每个复制的输出缓冲器中的空间,且还可在单独数据数组中存储复制索引,使得一旦解压缩器114执行了第一传递,复制可由解压缩器114执行以将数据填充到输出缓冲器。在一些实施例中,复制窗口可以是设定长度——例如,滑动窗口。例如,在使用LZ77的情况下,复制的滑动窗口可以是32kb,而在其他算法中,滑动窗口可以是不同的(例如,16kb、64kb、128kb等)或可变大小。照此,可基于滑动窗口大小生成压缩数据106。作为元数据112的结果,GPU上的并行性可被执行,使得GPU的每个线程可开始彼此独立地解码压缩数据106的一部分。在以上使用32个分段的示例中,此过程100可以导致32路并行性,并且每个线程可以对压缩数据106或其块的1/32进行解码。
在一些实施例中,元数据可对应于每个分段的比特数、每个分段的输出字节的数量和/或每个分段中的复制的数量。然而,在其他实施例中,可对该数据(例如,比特数、输出字节数和/或复制数)执行前缀和操作以生成前缀和格式的元数据112。因此,元数据112可对应于每个分段的输入(比特、半字节、字节等)位置(例如,如使用每个先前分段的比特、半字节或字节的数目来确定的),每个分段的输出(比特、半字节、字节等)位置(例如,如使用来自先前分段的输出比特、半字节或字节的数目所确定的),以及在正在为其生成元数据112的当前分段之前的每个分段中包括的复制的数量。这两种格式的元数据之间的差异的示例在图2A和图2B中示出,如本文进一步详细描述的。在一些实施例中,由于每个分段的输入比特、输出位置和/或复制索引的值单调递增,所以可通过存储共同偏移(由所有分段共享的)和每个分段中的输入比特、输出位置和复制索引之间的差来压缩元数据112。
如本文所述,压缩数据分析器108可分析压缩数据106以确定对应于压缩数据106的内容部分的元数据112,但还可分析压缩数据106以确定与对应于压缩数据106的字典部分(在存在的情况下)相对应的元数据112和/或确定对应于识别压缩数据106的较大流内的块的元数据112。作为示例,压缩数据106的内容部分可能需要字典以便由解压缩器114适当地解码。在使用霍夫曼编码的实施例中,字典可以包括霍夫曼树(或匹配树)的表示。在一些实施例中,诸如在LZ算法和霍夫曼编码两者都被使用(例如,以DEFLATE格式)的情况下,可对复制的字面量(literal)和长度执行第一霍夫曼编码操作,并且可对距离执行第二霍夫曼编码操作。照此,两个或更多个霍夫曼树可被包括在字典内以用于对复制的字面量和长度和距离中的每一个进行解码。
在其他实施例中,字典可以提供关于压缩数据106对应于什么符号或对应于符号的比特值的指示,从而使得解压缩器114可以使用字典来解压缩该压缩数据106的内容部分。在一些实施例中,字典可以被霍夫曼编码,并且还可以对应于用于解压缩该压缩数据106的霍夫曼树。在对于压缩数据106的每个块使用字典的情况下,例如以DEFLATE格式,元数据生成器110可以生成与字典的每个分段的开始输入比特和用于字典所对应的压缩数据106的块的内容部分中的每个符号的比特数相对应的元数据112。照此,字典可基于元数据112被划分为分段并使用GPU的线程并行地处理。如本文所描述的,取决于实施例,分段的数量可以类似于压缩数据106的块的数据或内容部分的分段的数量,或可以是不同的。此外,字典可以包括填充或重复,类似于压缩数据106的数据分段的复制或匹配的填充或重复,并且填充或重复可以用于进一步压缩字典。
压缩数据106可以基于如压缩器104所确定的任何数量的标准和/或根据所使用的压缩格式或算法被分离成任何数量的块。例如,在压缩数据106中的频率或优先级改变的情况下,可创建第一块和第二块。作为非限制性示例,字母A、e和i对于压缩数据106的第一部分可以是最频繁的,而字母g、F和k对于压缩数据106的第二部分可以是最频繁的。照此,根据所使用的特定压缩算法,第一部分可分离为第一块,且第二部分可分离为第二块。压缩器104可以为压缩数据106确定任何数量的块。压缩数据分析器108可分析这些块以确定块在压缩数据106的较大流内的位置。如此,元数据生成器110可以生成识别压缩数据106的每个块(其可以包括未压缩块)的起始输入比特和输出字节(例如,经解码的数据的第一输出字节位置)的元数据112。由于这些块彼此分开并且由元数据112分开地识别,因此这些块还可以被并行地处理——例如,除了每个块内的压缩数据106被并行处理之外。例如,在每个块包括32个分段的情况下,可使用GPU的第一线程束来执行第一块,且可使用与第一块并行的GPU的第二线程束来执行第二块。在其中所述块中的一个或更多个块未被压缩的示例中,可在无字典的情况下发送未经压缩的块,且未经压缩的块的输入比特和输出字节可由解压缩器114使用以将数据直接复制到输出。
结果,元数据112可对应于较大流内的每个块的输入和输出位置、每个块内的字典的输入位置以及字典的每个符号的比特值,以及每个块内的每个分段的输入位置、输出位置和复制索引。该元数据112可以被解压缩器114用来以各种形式的并行性来解码或解压缩该压缩数据106。例如,如在此所描述的,可以并行地解码个体块——例如,使用不同的GPU资源和/或并行处理单元。另外,在每个(并行解压缩的)块内,可将字典(在存在的情况下)分成分段,且可并行地解码或解压缩所述分段(例如,在存在字典的64个分段的情况下,可并行地解码所有64个分段,例如通过使用GPU的64个不同线程或两个线程束)。进一步,在每个(并行解压缩的)块内,块的内容部分可被分成分段,并且分段可被并行地解码或解压缩。进一步地,如在此所定义的,可以由解压缩器114并行地执行这些复制或匹配操作中的一个或更多个——例如,在复制依赖于已经被解码成输出流的数据的情况下,可以与一个或更多个其他复制并行地执行该复制。另外,可以并行地执行每个个体复制操作。例如,在复制具有大于1的长度的情况下,完整复制的每个符号或字符的复制可以由解压缩器114并行地执行——例如,关于图2F,“issi”的每个字符可以并行地执行(例如,在GPU的第一线程上复制“i”、在第二线程上复制“s”、在第三线程上复制“s”以及在第四线程上复制“i”,以便生成输出流的相应输出字节)。
解压缩器114可以接收压缩数据106和与其相关联的元数据112。解压缩器114可使用元数据112来将压缩数据106分离为单独块(其中存在一个以上块)。例如,解压缩器114可以分析对应于压缩数据106的块级别的元数据112,并且可以确定每个块的输入(比特、半字节、字节等)位置(例如,对应于该块的第一比特或压缩数据106)和每个块的输出(比特、半字节、字节等)位置(例如,来自块的数据(在解压缩之后)位于的输出流中的第一输出位置)。在识别出每个块之后,解压缩器114可串行地处理每个块(例如,可处理第一块,接着处理第二块,等等),可分配所述块中的两个或更多个块以供不同GPU资源并行解压缩(例如,通过将第一块分配到第一GPU或其第一组线程以及将第二块分配到第二GPU或第一GPU的第二组线程,等等),或它们的组合。在一些实施例中,每个块可对应于不同类型或模式,例如未压缩模式块、固定码表模式块、生成的码表模式块和/或其他类型。解压缩器114可基于所述模式解压缩该压缩数据106(和/或在处于未压缩模式时解码未压缩数据),且元数据112可基于所述模式而不同。例如,在未压缩模式中,可能不存在字典,因为不需要解压缩数据和/或可能不存在复制或匹配。照此,元数据可仅指示数据的输入位置和输出位置,使得对应于未压缩块的输入数据流被直接复制到输出流。
解压缩器114可以使用与字典和块的内容部分相关联的元数据112解压缩每个数据块。例如,对于每个块,元数据112可识别字典的输入(比特、半字节、字节等)位置和块中的数据的每个分段的每个符号的比特值(或比特数目)。如本文中所描述的,字典可由解压缩器114使用以准确地解压缩块的内容部分。字典可使用对块的内容部分的霍夫曼编码来生成,并且在一些实施例中,对应于字典的压缩数据也可被霍夫曼编码。结果,在实施例中,可以使用霍夫曼编码来压缩压缩数据的字典部分,并且可以对压缩数据的内容部分进行霍夫曼编码。对应于每个块内的压缩数据106的字典部分的元数据112可指示字典的分段的输入位置。例如,在字典被分成32个分段的情况下,元数据112可以指示字典的每个分段的起始输入比特(和/或输出字节或其他位置)。照此,解压缩器114可使用元数据112并行地解压缩或解码压缩数据106的字典部分(例如,GPU的每线程一个分段)。字典可以根据LZ算法(在实施例中,除了使用霍夫曼编码之外)被压缩,并且因此,压缩数据106的字典部分的解压缩可以包括复制或填充。照此,在执行字典的并行解压缩的情况下,由解压缩器114进行的第一传递可解码实际比特值(例如,对应于字典中的每个符号的比特长度),且留下用于待复制或待填充的比特值的占位符。在第二传递期间,解压缩器114可执行填充或复制操作以填充对应于字典的符号的缺失比特值(例如,如本文关于图2C更详细描述的)。
解压缩器114可使用对应于每个块的压缩数据106的内容部分的元数据112来识别压缩数据106的每个分段的第一输入位置(例如,比特、半字节、字节等),解压缩之后的压缩数据106的每个分段的输出流中的输出位置,和/或压缩数据106的每个分段的复制索引或复制数量。解压缩器114可执行前缀和操作以确定每个分段的输入位置、输出位置和复制数目。然而,在其他实施例中,如本文所述,元数据112可替代地指示每个分段中的比特数、每个分段中的输出字节数和每个分段中的复制数,而不是使用前缀和格式来识别输入位置、输出位置和复制索引。解压缩器114可并行地解压缩压缩数据106的所识别出的分段。例如,使用来自元数据112的识别符,解压缩器114可将压缩数据106的对应于各分段的块或部分指派到GPU的不同线程。由解压缩器114进行的通过压缩数据106的每个分段的第一传递可被执行,以将来自压缩数据106的解压缩的字面量(例如,实际符号)直接输出到输出流(例如,在由元数据识别出的位置处),且将复制或匹配信息存储在单独队列中以供稍后处理(例如,在解压缩器114的第二传递中),同时在输出流中为复制保留空间。可使用元数据112来确定输出流中所保留的空间量。这些排队的复制或匹配在本文中可被称为延迟复制。
在延迟复制被排队并且输出流中的占位符被创建之后,解压缩器114可执行通过延迟复制的第二传递。取决于每个复制是否被确定为复制是安全的(例如,如果要被复制的数据已经被解压缩,或者不依赖于尚未被复制的另一复制,则复制可以被确定为安全的),复制中的一个或更多个复制可以被并行地执行。例如,解压缩器114可以在复制序列中向前查看以找到可以并行地执行的附加复制。可以使用元数据112和/或对应于复制的信息来确定并行处理复制的能力。例如,复制在输出流内的输出位置(如从元数据112确定的),源位置(从该源位置进行复制)(如从对应于该复制的编码距离信息确定的),和/或复制的长度(如从对应于复制的编码长度信息确定的)可以用于确定复制是否安全以用于与一个或更多个其他复制并行处理。当源在当前输出光标之前结束并且该复制本身不重叠时,该复制与另一个复制并行执行可能是安全的。作为示例,并且基于实验,同时复制的字节的数量可从3-4增加到90-100或更多。该过程为跨线程的并行性以及为单个线程内的存储器系统并行性提供了显著的附加机会。照此,复制中的一个或更多个复制(例如,块内复制或块间复制)可与一个或更多个其他复制并行执行。关于图2E-图2F描述用于并行执行的安全复制和不安全复制的示例。此外,在一些实施例中,可并行地执行单个复制内的符号。例如,在复制具有大于1的长度的情况下,可使用GPU的两个或更多个线程(或协处理器)并行地将复制内的各个符号复制到输出流(的字节)。
结果,解压缩器114可通过执行压缩数据106的第一传递以输出字面量且执行复制的第二传递以从复制输出符号,来将符号中的每个符号输出到输出流。结果可以是对应于最初由压缩器104压缩的数据102的输出流。在使用无损压缩技术的示例中,数据102输出可以与到压缩器104的数据102输入相同或基本相同。
在一些实施例中,可以对压缩数据106执行具有共享存储器表的二叉树搜索算法,以避免在基于CPU的解码器或解压缩器中发现的典型快速路径/慢速路径实现方式的情况下将发生的跨线程的发散。例如,在CPU上的常规实现方式中,可使用较大数据数组来一次解码某数目的比特。关于DEFLATE格式,每个符号的范围可为1至15比特长,因此当对数据进行解码时,关于每个符号有多长对于解压器来说可能不是立即显而易见的。结果,CPU解压缩器采用一个比特来查看它是否是长度1的符号,然后采用另一个比特来查看它是否是长度2的符号,等等,直到对应于符号的实际比特数被确定。该任务可能是耗时的,并且可能减慢解压缩过程,即使对于CPU实现也是如此。因此,一些方法已实现了一次分析多个比特(例如15个比特)的方法。在这样的实施例中,可以从压缩数据流中拉取15比特,并且可以使用查找表来确定数据对应于哪个符号。然而,此过程是浪费的,因为滑动窗口可能仅为32kb,但系统必须存储15比特以供分析,即使在符号可能仅被压缩为2比特的情况下。因此,在一些实现方式中,可使用快速路径/慢速路径方法,其中提取8个比特,对8比特执行符号查找,并且当符号短于8比特时,使用快速路径,并且当符号大于8比特时,使用慢速路径来确定数据表示什么符号。这个过程也是耗时的,并且减少了用于对压缩数据106进行解压缩的系统的运行时间。
在一个或更多个GPU上,代替使用快速传递/慢速路径方法,其中某个数量的线程(例如,32)正在某个数量的符号(例如,32)上执行,一些将击中快速路径并且一些将击中快速路径,在线程束中混合在一起(例如,在存在32个分段的情况下),这是低效的。为了解决这个问题,可以使用二分搜索算法来提高效率。例如,二分搜索可在小表(例如15个条目长的表)上执行,以确定该表属于哪些符号。由于数组的减小的大小,数组可存储在芯片上的共享存储器中,这可导致在GPU上的快速查找。另外,使用二分搜索算法可以允许所有线程执行相同的代码,即使查看共享存储器中的数组的不同部分。因此,存储器流量可减少,因为二分搜索可查看长度为8的符号,以查看符号是长于8比特还是短于8比特。此外,二叉树的顶层中的一个或更多个(例如,两个)可高速缓存在数据寄存器中,以减少每查找访问的共享存储器的数量(例如,从5到3)。因此,四个访问中的第一访问可始终为相同的访问,而不是每次都从存储器中加载出来,寄存器可在GPU上保持存活。接下来可以是4或12,而不是具有另一级别的存储器访问,系统可以选择是看符号4寄存器还是符号12寄存器,并且这可以将访问的总数减少2个或更多(例如,通常4个用于二分搜索以获得长度,再1个用于获得实际符号,因此这个过程从4加1减少到2加1)。照此,不是加载条目并随后移位符号以进行比较,而是对符号本身进行预移位。
此外,在一些实施例中,压缩数据106的输入流可以被交换(swizzle)或交错(interleave)。例如,因为压缩数据106的块可以被压缩数据分析器108分成一些数量的段(例如,32个),所以每个线程可以从流的远处部分读取。因此,输入流可在预处理中在分段边界处交错(例如,使用元数据112)以改善数据读取局部性。例如,在数据102对应于包括特定语言的所有单词的实际字典的情况下,一个线程可以从以字母“A”开始的单词读取、另一个从字母“D”开始的单词读取、另一个从字母“P”开始的单词读取等等。为了补救这个问题,可以对数据进行重新格式化,从而使得可以从相邻存储器中读取所有线程。例如,可使用来自索引的信息来交错压缩数据106,使得每个线程可从类似高速缓存行读取。照此,数据可被混洗在一起,使得当线程正在处理数据时,它们可在数据中具有某种相似性,即使数据是不同的。对于扑克牌示例,数据的交换或交错可以允许每个线程处理具有相同数字或字符的牌,即使是不同花色。
作为另一示例,例如在使用GPU的线程束中的线程来处理分段的情况下,可执行线程束同步数据并行循环,以加载并处理字典。例如,使用索引和数据并行算法,系统可以并行指示字典条目。当串行处理时,系统可以查看有多少符号是长度2、长度3等。然而,代替串行地执行这些计算,系统可执行数据算法以并行地计算或分配线程至每个符号,接着报告符号是否具有特定长度,且接着执行线程束减少至线程束的总数。例如,在要分析286个符号(例如,0-255字节,块的256端,257-286用于不同长度)的情况下,可并行地分析286个符号中的每个符号。
现在参考图2A-2F,所描述的示例中的每个可以对应于根据DEFLATE压缩格式压缩的数据以及对应于其的元数据112。然而,这仅是出于示例目的,并且如本文中所描述的,本公开的技术可以被实现用于或应用于任何类型的数据压缩格式,诸如但不限于本文中所描述的那些。
图2A描绘了根据本公开的一些实施例的与用于并行解压缩压缩数据流的元数据112相对应的示例表200A。例如,数据102(或其一部分,如其块)可以对应于单词“Mississippi.”压缩器104可以根据DEFLATE压缩算法压缩数据102以生成数据102的压缩版本(例如,压缩数据106),所述压缩版本被表示为“Miss<复制长度4,距离3>ppi。”此外,压缩数据106可以被霍夫曼编码,并且因此,不同符号可以由与压缩器104的某个优先级或频率评估相对应的多个比特来表示。对于非限制性示例,“M”可以由3比特表示,复制可以由4比特表示(例如,3比特用于长度并且1比特用于距离),并且“i”、“s”和“p”可以各自由压缩数据106中的2比特表示。对于该示例,假设压缩数据106的块被分解成四个分段(例如,4路索引),压缩数据分析器108可以分析压缩数据106以确定包括“Mi”的第一分段,包括“ss”的第二分段,包括复制和“p”的第三分段,以及包括“p”的第四分段。例如,十一个字符或符号“Mississippi”可以被分解成八个符号(例如,七个字面量和一个复制),并且这些分段可以被生成为具有基本上相等的大小。然而,由于奇数个符号,第四分段可仅包括一个符号。然后,压缩数据分析器108可以确定每个分段的输出(或输出字节)的数量、每个分段的输入(或输入比特)的数量和/或每个分段中的复制的数量。在一些示例中,元数据生成器110可以直接使用该信息来生成元数据112。然而,在其他示例中,可对此数据执行前缀和操作以根据表200B生成元数据112。
关于图2B,图2B描绘了根据本公开的一些实施例的对应于采用前缀和格式的元数据112的示例表200B,所述元数据用于对压缩数据流进行并行解压缩。例如,代替多个输出,每个分段可替代地由输出流内的输出位置识别,以向解压缩器114指示来自分段的解压缩符号的输出应在哪里开始。代替多个输入,可以识别压缩数据流内的输入位置,以向解压缩器114指示在哪里开始解压缩分段,使得可以向分段分配GPU的唯一线程,以用于并行处理。另外,代替每个分段中的复制的数目,可以在元数据112中识别来自块的先前分段的复制的运行总数,以向解压缩器指示哪个复制对应于队列中的每个延迟复制。最终,在此示例中,元数据112的前缀和格式可向解压缩器114指示,在压缩数据的当前块的内容部分(或数据部分)内,存在11字节的输出,19比特的输入,以及一个复制,并且可以指示每个分段在压缩数据106中何处开始,在何处输出每个分段和/或复制索引。
参见图2C,图2C描绘了根据本公开的一些实施例的与字典和与字典相关联的元数据112相对应的示例表格200C。例如,使用如本文中关于图2A和图2B所描述的符号的相同数量的比特(例如,如使用霍夫曼编码所确定的),字典可被生成以指示这些值。在此实例中,字典可对应于英文字母的小写字母和大写字母。然而,这不旨在是限制性的,并且字典可对应于任何类型的符号,其包括来自任何语言、数字、符号的字符(例如,!$、*、^和/或其他符号类型)等。照此,因为压缩数据106可仅对应于M、i、s和p,所以压缩数据106的字典部分可被压缩以指示这些值。在这样的示例中,数据串202可以表示对应于字典的数据102,其中52个字符(例如,A-Z和a-z)中的每一个由对应于多个比特的值来表示。为了进一步压缩字典,压缩器104可以生成对应于来自数据串202的重复值的填充或复制符号。在这种情况下,重复值是0,所以对应于字典的压缩数据106可以由“<fill 12x>3<fill 21x>2<fill 6x>2002<fill 7x>”表示。”压缩数据分析器108可以分析对应于字典的压缩数据106并且确定分段中断(例如,在使用四个分段的示例中,压缩数据106可以被分离成4个分段)。这四个分段的分离由虚线指示。然后,元数据生成器110可以分析分段信息以生成对应于压缩数据106的块的字典部分的元数据112——例如,以指示字典中的每个分段的起始输入位置和符号编号或索引。
现在参见图2D,图2D描绘了根据本公开的一些实施例的与用于对压缩数据流的块进行并行解压缩的元数据112相对应的示例表200D。例如,假设数据102是“MississippiMississippiMiss”,则压缩器104可以将数据102分离成用于压缩的两个块:对应于“Mississippi”的第一块;对应于“MississippiMiss”的第2块。如此,为了识别不同块在压缩数据106内的位置以及与其相对应的字典,压缩数据分析器108可以分析压缩数据106以确定压缩数据106的每个块的初始输入位置(例如,第一输入比特、半字节、字节等)和/或输出流中的每个块的初始输出位置(例如,第一比特、半字节、字节等)。因此,对应于压缩数据106的流的元数据112可指示压缩数据106的每个块的输入的数目(例如,比特、半字节、字节等)和输出的数目(例如,比特、半字节、字节等),每个块内的每个分段的输入的数目(例如,比特、半字节、字节等)和符号数目,和/或每个块内的每个分段的输入的数目(例如,比特、半字节、字节等)、输出的数目(例如,比特、半字节、字节等),以及复制的数目。在执行前缀和操作的情况下,元数据112可替代地包括压缩数据的每个块的初始输入位置和初始输出位置,每个块的字典部分的每个分段的初始输入位置和符号索引,和/或每个块(或数据部分)的内容部分的每个分段的初始输入位置、初始输出位置和复制索引。在进一步实施例中,可使用两种不同元数据格式的某种组合,使得块、字典或数据中的一个或更多个的元数据是前缀和格式,而块、字典或数据中的一个或更多个不是前缀和格式。
元数据112然后可由解压缩器114用来解压缩该压缩数据106。例如,可以使用元数据112来识别压缩数据106的每个块,从而使得可以并行地对压缩数据106的两个或更多个块——例如,块A和块B——进行解压缩。对于每个块,元数据112可以用于确定字典的分段,从而使得可以并行地对字典进行解压缩——例如,每线程或协处理器一个分段。字典然后可以用于解压缩该压缩流的内容部分。例如,元数据112可指示压缩数据106的内容部分的分段,且解压缩器114可使用字典来解码来自压缩数据106的字面量,且将字面量输出到输出流。解压缩器114可以进一步使用元数据112和在压缩数据106中编码的复制信息来为复制保留输出流的各部分,并且用关于每个复制的信息(例如,源位置、距离、长度等)来填充队列或数据结构。如本文所述,压缩数据106的内容部分的分段可被并行地解压缩。在解压缩之后,解压缩器114可对队列中的延迟复制执行复制操作,以用相应的复制的符号填充输出流中的预留的占位符。作为示例,并且关于图2A,由源位置1、复制长度4以及距离3指示的“issi”的复制可以用于将“i”复制到位置4、将“s”复制到位置5、以及将“i”复制到位置6。在位置6处的“i”可以被称为重叠复制,因为在位置6处的“i”从位置4处的“i”被复制,该“i”直到复制开始才存在。如在此所描述的,在一些实施例中,可以并行执行个体复制操作,从而使得可以使用GPU的不同线程并行执行“issi”复制中的两个或更多个。
此外,在一些实施例中,当确定复制是安全的时,可以并行地执行单独的复制。例如,参考图2E,图2E描绘了根据本公开的一些实施例的对应于不适于并行处理的压缩数据流的复制的示例表400E。例如,在压缩数据106对应于“MississippiMississippi”的情况下,压缩数据106可以包括两个复制(例如,如表200E中所指示的复制#1和复制#2)。在本示例中,解压缩器114可以在将要执行第一复制时或在执行第一复制期间确定是否可以并行执行一个或更多个附加复制——例如,第二复制。解压缩器114可以查看第二复制的源位置和第一复制的输出位置,以确定是否存在重叠。在这种情况下,因为第二复制依赖于来自第一复制的输出,所以第二复制与第一复制并行执行可能不是安全的。照此,可以顺序地执行第一复制和第二复制。
作为另一个示例,并且参见图2F,图2F描绘了根据本公开的一些实施例的与适合于并行处理的压缩数据流的复制相对应的示例表400F。例如,在压缩数据106对应于“MississippiMiss”的情况下,压缩数据106可以包括两个复制(例如,如表200F中所指示的复制#1和复制#2)。在本示例中,解压缩器114可以在将要执行第一复制时或在执行第一复制期间确定是否可以并行执行一个或更多个附加复制——例如,第二复制。解压缩器114可以查看第二复制的源位置和第一复制的输出位置,以确定是否存在重叠。在这种情况下,因为第二复制不依赖于来自第一复制的输出(例如,因为第二复制可以在无需在输出缓冲器中填充来自第一复制的结果的情况下执行),所以第二复制与第一复制并行执行可能是安全的。照此,可以并行执行第一复制和第二复制,从而一次提供8个符号的输出,而不是顺序地提供4和4个符号的输出。
现在参见图3-4,在此描述的方法300和400的每个框包括可以使用硬件、固件和/或软件的任何组合执行的计算过程。例如,各种功能可由执行存储在存储器中的指令的处理器执行。方法300和400还可以体现为存储在计算机存储介质上的计算机可用指令。方法300和400可以由独立的应用、服务或托管服务(独立地或与另一托管服务组合)或另一产品的插件来提供,仅举几例。此外,通过举例的方式,关于图1的过程100描述了方法300和400。然而,这些方法300和400可以另外地或可替代地在任何一个过程内由任何一个系统或过程和系统的任何组合(包括但不限于在此描述的那些)来执行。
参见图3,图3描绘了根据本公开的一些实施例的与用于生成压缩数据流的元数据以便并行解压缩该压缩数据流的方法300相对应的流程图。在框B302处,方法300包括分析压缩数据。例如,压缩数据分析器108可分析压缩数据106。
在框B304处,方法300包括:确定在压缩数据的多个分段之间的分界。例如,压缩数据分析器108可确定压缩数据106的分段之间的分界。
在框B306处,方法300包括:至少部分地基于所述分界且针对所述多个分段中的至少两个分段而生成元数据,其指示所述压缩数据内的初始输入位置以及与所述至少两个数据分段中的每个数据分段相对应的输出数据中的初始输出位置。例如,元数据生成器110可以生成对应于分段的元数据112,以识别压缩数据106的每个块的内容部分的一些或所有分段的初始输入位置、初始输出位置和/或复制索引。
在框B308处,方法300包括:将压缩数据和元数据发送到解压缩器。例如,压缩数据106和元数据112可由解压缩器114用来至少部分并行地解压缩该压缩数据106。
现在参见图4,图4描绘了根据本公开的一些实施例的与用于并行解压缩压缩数据流的方法400相对应的流程图。在框B402,方法400包括:接收压缩数据和与其相对应的元数据。例如,解压缩器114可以接收压缩数据106和元数据112。
在框B404处,方法400包括:基于元数据来确定对应于压缩数据的初始输入位置和初始输出位置。例如,元数据112可指示压缩数据106中的初始输入位置和输出数据流中对应于压缩数据106的每个块的初始输出位置。
在框B406处,方法400包括:基于初始输入位置和初始输出位置,确定压缩数据的字典的两个或更多个字典分段的输入字典位置和符号索引。例如,元数据112可指示对应于压缩数据106的字典的分段的初始输入位置和符号索引。
在框B408处,方法400包括:基于输入字典位置至少部分并行地解压缩该字典。例如,元数据112可指示字典的分段,且此信息可由解压缩器114使用,以使用GPU的线程并行地处理字典的每个分段。
在框B410处,方法400包括:基于初始输入位置和初始输出位置,确定压缩数据的多个分段中的至少两个分段的输入分段位置、输出分段位置和复制索引值。例如,解压缩器114可使用元数据112来确定块或数据部分中的压缩数据106的每个分段的压缩数据106中的初始输入位置、输出流中的初始输出位置和复制索引(例如,在当前分段之前的分段中的复制的数目)。
在框B412处,方法400包括:根据输入分段位置和输出分段位置并行地解压缩至少两个分段以生成解压缩输出。例如,解压缩器114可使用元数据112和字典来从压缩数据106生成数据102。照此,一旦数据102已被恢复,则数据102可在接收端上被用来执行一个或更多个操作。例如,在数据102被压缩并从CPU传递到GPU以用于并行处理的情况下,数据可接着传递回到CPU。在数据102对应于文本、消息传递或电子邮件的情况下,数据可以显示在设备(例如,用户设备或客户端设备)上。在数据102对应于视频、音频、图像等的情况下,可使用显示器、扬声器、头戴式耳机、听筒等来输出数据。在数据102对应于网站的情况下,网站可以被显示在接收设备(例如,用户设备或客户端设备)上的浏览器内。照此,解压缩数据可以多种方式中的任一种使用,并且由于并行解压缩,与常规方法相比,在使用较少存储器资源的同时可以更快地可用。
示例计算设备
图5是适合用于实现本公开的一些实施例的示例计算设备500的框图。计算设备500可以包括直接或间接耦合以下设备的互连系统502:存储器504,一个或更多个中央处理单元(CPU)506、一个或更多个图形处理单元(GPU)508,通信接口510、输入/输出(I/O)端口512、输入/输出部件514、电源516、一个或更多个呈现组件518(例如,一个或更多个显示器)和一个或更多个逻辑单元520。在至少一个实施例中,一个或更多个计算设备500可以包括一个或更多个虚拟机(VM),和/或其组件中的任何组件可以包括虚拟组件(例如,虚拟硬件组件)。对于非限制性示例,一个或更多个GPU 508可以包括一个或更多个vGPU,一个或更多个CPU 506可以包括一个或更多个vCPU,和/或一个或更多个逻辑单元520可以包括一个或更多个虚拟逻辑单元。照此,一个或更多个计算设备500可以包括分立组件(例如,专用于计算设备500的全GPU)、虚拟组件(例如,专用于计算设备500的GPU的一部分)、或其组合。
尽管图5的各个框被示为经由具有线路的互连系统502连接,但是这并不意图是限制性的,并且仅仅为了清楚起见。例如,在一些实施例中,诸如显示设备之类的呈现组件518可以被认为是I/O组件514(例如如果显示器为触摸屏)。作为另一个示例,CPU 506和/或GPU508可以包括存储器(例如,存储器504可以表示除了GPU 508、CPU 506和/或其他组件的存储器以外的存储设备)。换言之,图5的计算设备仅仅是说明性的。在诸如“工作站”、“服务器”、“膝上型电脑”、“台式机”、“平板电脑”、“客户端设备”、“移动设备”、“手持式设备”、“游戏控制台”、“电子控制单元(ECU)”、“虚拟现实系统”和/或其他设备或系统类型之类的类别之间不进行区分,因为所有这些都被考虑在图5的计算设备的范围内。
互连系统502可以表示一条或更多条链路或总线,例如地址总线、数据总线、控制总线或者其组合。互连系统502可以包括一种或更多种总线类型,例如行业标准架构(ISA)总线、扩展行业标准架构(EISA)总线、视频电子标准协会(VESA)总线、外围组件互连(PCI)总线、外围组件互连快速(PCIe)总线,和/或另一种类型的总线或链路。在一些实施例中,组件之间存在直接连接。作为示例,CPU 506可以直接连接到存储器504。此外,CPU 506可以直接连接到GPU 508。在组件之间存在直接或点对点连接的情况下,互连系统502可以包括PCIe链路以执行连接。在这些示例中,计算设备500中不需要包括PCI总线。
存储器504可以包括各种各样的计算机可读介质中的任何介质。计算机可读介质可以是可以由计算设备500访问的任何可用介质。计算机可读介质可以包括易失性和非易失性介质以及可移除和不可移除介质。举例而言且非限制性地,计算机可读介质可以包括计算机存储介质和通信介质。
计算机存储介质可以包括易失性和非易失性介质和/或可移除和不可移除介质,其以用于存储诸如计算机可读指令、数据结构、程序模块和/或其他数据类型之类的信息的任何方法或技术实现。例如,存储器504可以存储计算机可读指令(例如其表示程序和/或程序元素,例如操作系统)。计算机存储介质可以包括但不限于RAM、ROM、EEPROM、闪存或者其他存储技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储装置、磁带盒、磁带、磁盘存储装置或其他磁存储设备,或者可以用来存储期望的信息且可以由计算设备500访问的任何其他介质。当在本文使用时,计算机存储介质并不包括信号本身。
计算机存储介质可以在诸如载波之类的调制数据信号或其他传输机制中包含计算机可读指令、数据结构、程序模块和/或其他数据类型,并且包括任何信息输送介质。术语“调制数据信号”可以指这样的信号,该信号使它的特性中的一个或更多个以这样的将信息编码到该信号中的方式设置或改变。举例而言且非限制性地,计算机存储介质可以包括诸如有线网络或直接有线连接之类的有线介质,以及诸如声音、RF、红外和其他无线介质之类的无线介质。任何以上所述的组合也应当包含在计算机可读介质的范围内。
CPU 506可以被配置为执行至少一些计算机可读指令以便控制计算设备500的一个或更多个组件执行本文描述的方法和/或过程中的一个或更多个。CPU 506中的每个可以包括能够同时处理大量软件线程的一个或更多个核(例如一个、两个、四个、八个、二十八个、七十二个等等)。CPU 506可以包括任何类型的处理器,并且可以包括不同类型的处理器,这取决于实现的计算设备500的类型(例如具有用于移动设备的较少核的处理器以及具有用于服务器的更多核的处理器)。例如,取决于计算设备500的类型,处理器可以是使用精简指令集计算(RISC)实现的高级RISC机器(ARM)处理器或者使用复杂指令集计算(CISC)实现的x86处理器。除了一个或更多个微处理器或者诸如数学协处理器之类的补充协处理器之外,计算设备500还可以包括一个或更多个CPU 506。
除了或替代CPU 506,GPU 508可以被配置为执行至少一些计算机可读指令以控制计算设备500的一个或更多个组件来执行本文描述的一种或更多种方法和/或过程。一个或更多个GPU 508可以是集成GPU(例如,具有一个或更多个CPU 506和/或一个或更多个GPU508可以是分立的GPU。在实施例中,一个或更多个GPU 508可以是一个或更多个CPU 506的协处理器。计算设备500可以使用GPU 508来渲染图形(例如,3D图形)或执行通用计算。例如,GPU 508可用于GPU上的通用计算(GPGPU)。GPU 508可以包括能够同时处理成百上千个软件线程的成百上千个核心。GPU 508可以响应于渲染命令(例如,通过主机接口从CPU 506接收的渲染命令)生成用于输出图像的像素数据。GPU 508可以包括图形存储器,例如显示存储器,用于存储像素数据或任何其他合适的数据,例如GPGPU数据。显示存储器可以被包括作为存储器504的一部分。GPU 508可以包括并行操作(例如,经由链路)的两个或更多个GPU。链路可以直接连接GPU(例如,使用NVLINK),也可以通过交换机(例如,使用NVSwitch)连接GPU。当组合在一起时,每个GPU 508可以为输出的不同部分或不同的输出(例如,用于第一图像的第一GPU和用于第二图像的第二GPU)生成像素数据或GPGPU数据。每个GPU可包括自己的存储器,也可与其他GPU共享存储器。
除了或替代CPU 506和/或GPU 508,逻辑单元520可以被配置为执行至少一些计算机可读指令以控制计算设备500的一个或更多个组件来执行本文所述的一种或更多种方法和/或过程。在实施例中,CPU 506、GPU 508和/或逻辑单元520可以分立地或联合地执行方法、过程和/或其部分的任何组合。一个或更多个逻辑单元520可以是CPU 506和/或GPU 508中的一个或更多个的一部分和/或与CPU 506和/或GPU 508中的一个或更多个集成,和/或一个或更多个逻辑单元520可以是分立的组件或以其他方式在CPU 506和/或GPU 508的外部。在实施例中,一个或更多个逻辑单元520可以是一个或更多个CPU 506和/或一个或更多个GPU 508的协处理器。
逻辑单元520的示例包括一个或更多个处理核心和/或其组件,例如张量核心(TC)、张量处理单元(TPU)、像素视觉核心(PVC)、视觉处理单元(VPU)、图形处理集群(GPC)、纹理处理集群(TPC)、流式多处理器(SM)、树遍历单元(TTU)、人工智能加速器(AIA)、深度学习加速器(DLA)、算术逻辑单元(ALU))、专用集成电路(ASIC)、浮点单元(FPU)、输入/输出(I/O)元件、外围组件互连(PCI)或外围组件互连快速(PCIe)元件等。
通信接口510可以包括一个或更多个接收器、发送器和/或收发器,其使得计算设备500能够经由电子通信网络与其他计算设备通信,包括有线和/或无线通信。通信接口510可以包括使能通过若干不同网络中的任何网络进行通信的组件和功能,所述网络例如无线网络(例如Wi-Fi、Z波、蓝牙、蓝牙LE、ZigBee等等)、有线网络(例如通过以太网或无限带宽通信)、低功率广域网(例如LoRaWAN、SigFox等等)和/或因特网。
I/O端口512可以使得计算设备500能够逻辑地耦合到包括I/O组件514、呈现组件518和/或其他组件在内的其他设备,其中一些可以内置到(例如集成到)计算设备500中。说明性I/O组件514包括麦克风、鼠标、键盘、操纵杆、游戏垫、游戏控制器、碟形卫星天线、扫描仪、打印机、无线设备等等。I/O组件514可以提供处理用户生成的空中手势、语音或其他生理输入的自然用户接口(NUI)。在一些实例中,输入可以传输至适当的网络元件以便进一步处理。NUI可以实现语音识别、手写笔识别、面部识别、生物特征识别、屏幕上和邻近屏幕的手势识别、空中手势、头部和眼睛跟踪以及与计算设备500的显示器关联的触摸识别(如下文更详细地描述的)的任意组合。计算设备500可以包括诸如立体相机系统之类的深度相机、红外相机系统、RGB相机系统、触摸屏技术以及这些的组合,以用于手势检测和识别。此外,计算设备500可以包括使能运动检测的加速度计或陀螺仪(例如作为惯性测量单元(IMU)的部分)。在一些示例中,加速度计或陀螺仪的输出可以由计算设备500用来渲染沉浸式增强现实或者虚拟现实。
电源516可以包括硬接线电源、电池电源或者其组合。电源516可以向计算设备500供电以使得计算设备500的组件能够操作。
呈现组件518可以包括显示器(例如监视器、触摸屏、电视屏幕、平视显示器(HUD)、其他显示器类型或者其组合)、扬声器和/或其他呈现组件。呈现组件518可以接收来自其他组件(例如GPU 508、CPU 506等等)的数据,并且输出该数据(例如作为图像、视频、声音等等)。
示例数据中心
图6示出了可以在本公开的至少一个实施例中使用的示例数据中心600。数据中心600可以包括数据中心基础设施层610、框架层620、软件层630和/或应用层640。
如图6所示,数据中心基础设施层610可以包括资源协调器612、分组的计算资源614和节点计算资源(“节点C.R.”)616(1)-616(N),其中“N”代表任何完整的正整数。在至少一个实施例中,节点C.R.616(1)-616(N)可以包括但不限于任何数量的中央处理单元(“CPU”)或其他处理器(包括加速器、现场可编程门阵列(FPGA)、图形处理器或图形处理单元(GPU)等),内存设备(例如动态只读内存),存储设备(例如固态硬盘或磁盘驱动器),网络输入/输出(“NW I/O”)设备,网络交换机,虚拟机(“VM”),电源模块和/或冷却模块等。在一些实施例中,节点C.R.616(1)-616(N)中的一个或更多个节点C.R.可以对应于具有一个或更多个上述计算资源的服务器。此外,在一些实施例中,节点C.R.616(1)-616(N)可包括一个或更多个虚拟组件,诸如vGPU、vCPU等,和/或节点C.R.616(1)-616(N)中的一个或更多个可对应于虚拟机(VM)。
在至少一个实施例中,分组的计算资源614可以包括容纳在一个或更多个机架内的节点C.R.616的单独分组(未示出),或者容纳在各个地理位置的数据中心内的许多机架(也未示出)。分组的计算资源614内的节点C.R.的单独分组可以包括可以被配置或分配为支持一个或更多个工作负载的分组的计算、网络、内存或存储资源。在至少一个实施例中,可以将包括CPU、GPU和/或其他处理器的几个节点C.R.616分组在一个或更多个机架内,以提供计算资源来支持一个或更多个工作负载。一个或更多个机架还可以包括任何数量的电源模块、冷却模块和/或网络交换机,以任意组合。
资源协调器622可以配置或以其他方式控制一个或更多个节点C.R.616(1)-616(N)和/或分组的计算资源614。在至少一个实施例中,资源协调器622可以包括用于数据中心600的软件设计基础结构(“SDI”)管理实体。资源协调器622可以包括硬件、软件或其某种组合。
在至少一个实施例中,如图6所示,框架层620可以包括作业调度器632、配置管理器634、资源管理器636和/或分布式文件系统638。框架层620可以包括支持软件层630的软件632和/或应用程序层640的一个或更多个应用程序642的框架。软件632或应用程序642可以分别包括基于Web的服务软件或应用程序,例如由Amazon Web Services,Google Cloud和Microsoft Azure提供的服务或应用程序。框架层620可以是但不限于一种免费和开放源软件网络应用框架,例如可以利用分布式文件系统638来进行大范围数据处理(例如“大数据”)的Apache SparkTM(以下称为“Spark”)。在至少一个实施例中,作业调度器632可以包括Spark驱动器,以促进对数据中心600的各个层所支持的工作负载进行调度。配置管理器634可以能够配置不同的层,例如软件层630和包括Spark和用于支持大规模数据处理的分布式文件系统638的框架层620。资源管理器636能够管理映射到或分配用于支持分布式文件系统638和作业调度器632的集群或分组计算资源。在至少一个实施例中,集群或分组计算资源可以包括数据中心基础设施层610上的分组的计算资源614。资源管理器636可以与资源协调器612协调以管理这些映射的或分配的计算资源。
在至少一个实施例中,包括在软件层630中的软件632可以包括由节点C.R.616(1)-616(N)的至少一部分,分组计算资源614和/或框架层620的分布式文件系统638使用的软件。一种或更多种类型的软件可以包括但不限于Internet网页搜索软件、电子邮件病毒扫描软件、数据库软件和流视频内容软件。
在至少一个实施例中,应用层640中包括的一个或更多个应用程序642可以包括由节点C.R.616(1)-616(N)的至少一部分、分组的计算资源614和/或框架层620的分布式文件系统638使用的一种或更多种类型的应用程序。一种或更多种类型的应用程序可以包括但不限于任何数量的基因组学应用程序,认知计算和机器学习应用程序,包括训练或推理软件,机器学习框架软件(例如PyTorch、TensorFlow、Caffe等)和/或其他与一个或更多个实施例结合使用的机器学习应用程序。
在至少一个实施例中,配置管理器634、资源管理器636和资源协调器612中的任何一个可以基于以任何技术上可行的方式获取的任何数量和类型的数据来实现任何数量和类型的自我修改动作。自我修改动作可以减轻数据中心600的数据中心操作员做出可能不好的配置决定并且可以避免数据中心的未充分利用和/或执行差的部分。
数据中心600可以包括工具、服务、软件或其他资源,以根据本文所述的一个或更多个实施例来训练一个或更多个机器学习模型或者使用一个或更多个机器学习模型来预测或推理信息。例如,可以通过使用上文关于数据中心600描述的软件和/或计算资源,根据神经网络架构通过计算权重参数来训练机器学习模型。在至少一个实施例中,通过使用通过诸如但不限于本文所述的一种或更多种训练技术计算出的权重参数,可以使用上面与关于数据中心600所描述的资源,使用对应于一个或更多个神经网络的经训练或部署的机器学习模型来推理或预测信息。
在至少一个实施例中,数据中心600可以使用CPU、专用集成电路(ASIC)、GPU、FPGA和/或其他硬件(或与其对应的虚拟计算资源)来使用上述资源来执行训练和/或推理。此外,上述的一个或更多个软件和/或硬件资源可以配置成一种服务,以允许用户训练或执行信息推理,例如图像识别、语音识别或其他人工智能服务。
示例网络环境
适合用于实现本公开的实施例的网络环境可以包括一个或更多个客户端设备、服务器、网络附加存储(NAS)、其他后端设备、和/或其他设备类型。客户端设备、服务器和/或其他设备类型(例如,每个设备)可以在图5的一个或更多个计算设备500的一个或更多个实例上实现——例如,每个设备可以包括一个或更多个计算设备500的类似部件、特征和/或功能。此外,在实现后端设备(例如,服务器、NAS等)的情况下,后端设备可被包括作为数据中心600的一部分,数据中心600的示例在本文中关于图6更详细地描述。
网络环境的组件可以经由一个或更多个网络彼此通信,所述网络可以是有线的、无线的或两者。网络可以包括多个网络或多个网络中的一网络。例如,网络可包括一个或更多个广域网(WAN)、一个或更多个局域网(LAN)、一个或更多个公共网络,诸如互联网和/或公共交换电话网(PSTN)和/或一个或更多个私有网络。在网络包括无线电信网络的情况下,诸如基站、通信塔或者甚至接入点(以及其他组件)之类的组件可以提供无线连接。
兼容网络环境可以包括一个或更多个对等网络环境(在这种情况下,服务器可以不包括在网络环境中)和一个或更多个客户端-服务器网络环境(在这种情况下,一个或更多个服务器可以包括在网络环境中)。在对等网络环境中,本文相对于服务器所描述的功能可在任何数量的客户端设备上实现。
在至少一个实施例中,网络环境可包括一个或更多个基于云的网络环境、分布式计算环境、其组合等。基于云的网络环境可包括框架层、工作调度器、资源管理器和在一个或更多个服务器上实现的分布式文件系统,所述服务器可包括一个或更多个核心网服务器和/或边缘服务器。框架层可包括支持软件层的软件和/或应用层的一个或更多个应用程序的框架。所述软件或应用程序可分别包括基于网络的服务软件或应用程序。在实施例中,一个或更多个客户端设备可以使用基于web的服务软件或应用程序(例如,通过经由一个或更多个应用编程接口(API)访问服务软件和/或应用程序)。框架层可以是但不限于自由和开源软件web应用框架的类型,诸如可以使用分布式文件系统进行大规模数据处理(例如,“大数据”)。
基于云的网络环境可提供执行本文描述的计算和/或数据存储功能(或其一个或更多个部分)的任何组合的云计算和/或云存储。这些不同功能中的任何功能可以分布在来自(例如,可以分布在州、地区、国家、全球等上的一个或更多个数据中心的)中央或核心服务器的多个位置上。如果与用户(例如,客户端设备)的连接相对靠近边缘服务器,则核心服务器可以将功能的至少一部分指定给边缘服务器。基于云的网络环境可以是私有的(例如,限于单个组织),可以是公共的(例如,对许多组织可用),和/或其组合(例如,混合云环境)。
一个或更多个客户端设备可以包括本文关于图5描述的一个或更多个示例计算设备500的部件、特征和功能中的至少一些部件、特征和功能。作为示例而非限制,客户端设备可被体现为个人计算机(PC),膝上型计算机、移动设备、智能电话、平板计算机、智能手表、可穿戴计算机、个人数字助理(PDA)、MP3播放器、虚拟现实耳机、全球定位系统(GPS)或装置,视频播放器、摄像机、监视设备或系统、车辆、船,飞船、虚拟机、无人机、机器人、手持式通信设备、医院设备、游戏设备或系统、娱乐系统、车辆计算机系统、嵌入式系统控制器、遥控器、电器、消费电子设备、工作站、边缘设备、这些描绘的设备的任何组合,或任何其他合适的装置。
本公开可以在由计算机或者诸如个人数字助理或其他手持式设备之类的其他机器执行的、包括诸如程序模块之类的计算机可执行指令的机器可用指令或者计算机代码的一般背景下进行描述。通常,包括例程、程序、对象、组件、数据结构等等的程序模块指的是执行特定任务或者实现特定抽象数据类型的代码。本公开可以在各种各样的系统配置中实践,这些配置包括手持式设备、消费电子器件、通用计算机、更专业的计算设备等等。本公开也可以在其中任务由通过通信网络链接的远程处理设备执行的分布式计算环境中实践。
如在本文中使用的,关于两个或更多元素对“和/或”的叙述应当解释为仅指一个元素或者元素组合。例如,“元素A、元素B和/或元素C”可以包括仅仅元素A,仅仅元素B,仅仅元素C,元素A和元素B,元素A和元素C,元素B和元素C,或者元素A、B和C。此外,“元素A或元素B中的至少一个”可以包括元素A中的至少一个,元素B中的至少一个,或者元素A中的至少一个和元素B中的至少一个。进一步,“元素A和元素B中的至少一个”可以包括元素A中的至少一个,元素B中的至少一个,或者元素A中的至少一个和元素B中的至少一个。
本文详细地描述了本公开的主题以满足法定要求。然而,描述本身并非意在限制本公开的范围。相反地,本发明人已经设想到,要求保护的主题也可以以其他的方式具体化,以包括与本文中结合其他当前或未来技术描述的步骤不同的步骤或者相似的步骤的组合。而且,尽管术语“步骤”和/或“框”在本文中可以用来隐含采用的方法的不同元素,但是这些术语不应当被解释为暗示本文公开的各个步骤之中或之间的任何特定顺序,除非明确描述了各步骤的顺序。
Claims (34)
1.一种方法,包括:
接收压缩数据和对应于所述压缩数据的元数据;
至少部分地基于所述元数据来确定对应于所述压缩数据的初始输入位置和初始输出位置;
至少部分地基于所述初始输入位置和所述初始输出位置,确定所述压缩数据的多个分段中的至少两个分段的输入分段位置和输出分段位置;以及
根据所述输入分段位置和所述输出分段位置并行地解压缩所述至少两个分段以生成解压缩输出。
2.根据权利要求1所述的方法,还包括:
至少部分地基于所述元数据,确定所述压缩数据的块的字典的每个字典分段的输入字典位置和符号索引;以及
解压缩所述字典,
其中使用所述字典来执行解压缩所述多个分段。
3.根据权利要求2所述的方法,其中并行执行所述解压缩所述字典,使得使用处理器的相应线程解压缩所述字典的每个字典分段。
4.根据权利要求2所述的方法,还包括:至少部分地基于所述元数据确定所述压缩数据的所述多个分段中的每个分段的复制索引值。
5.根据权利要求2所述的方法,其中所述初始输入位置指示所述压缩数据的多个块中的至少两个块的一个或更多个块输入位置,以及所述初始输出位置指示所述压缩数据的多个块中的至少两个块的一个或更多个块输出位置,所述多个分段对应于所述多个块中的单个块。
6.根据权利要求5所述的方法,其中使用两个或更多个处理器资源并行地解压缩所述多个块中的两个或更多个块。
7.根据权利要求6所述的方法,其中使用图形处理单元GPU的相应线程束来处理所述两个或更多个块中的每个块。
8.根据权利要求6所述的方法,其中所述并行地解压缩所述至少两个分段包括:使用处理器的单独的处理线程并行地解压缩每个分段。
9.根据权利要求2所述的方法,其中所述解压缩所述至少两个分段包括:对所述多个分段执行传递,以将一个或更多个字面量从所述压缩数据输出到输出数据,以在所述输出数据中保留空间用于一个或更多个复制操作,以及将复制信息存储在数据结构中。
10.根据权利要求9所述的方法,其中所述解压缩所述至少两个分段包括:对所述一个或更多个复制操作执行另一传递以执行所述一个或更多个复制操作,以及将对应于所述一个或更多个复制操作的符号输出至所述输出流。
11.根据权利要求10所述的方法,其中所述一个或更多个复制操作中的至少一个复制操作与所述一个或更多个复制操作中的一个或更多个其他复制操作并行地被执行。
12.根据权利要求10所述的方法,其中复制操作的第一符号与所述复制操作的第二符号并行地被复制到所述输出。
13.根据权利要求1所述的方法,其中所述压缩数据包括用于对所述压缩数据内的符号进行编码的比特的可变长度或用于编码在所述压缩数据中的一个或更多个复制操作的可变输出大小中的至少一个。
14.根据权利要求1所述的方法,其中所述压缩数据对应于使用字典编码或熵编码中的至少一个来编码的数据。
15.一种方法,包括:
分析压缩数据以确定所述压缩数据的多个分段之间的分界;
至少部分地基于所述分界并针对所述多个分段中的至少两个分段生成元数据,所述元数据指示所述压缩数据内的初始输入位置和对应于所述至少两个数据分段中的每个数据分段的输出数据中的初始输出位置;以及
将所述压缩数据和所述元数据发送到解压缩器。
16.根据权利要求15所述的方法,其中所述元数据进一步指示对应于所述至少两个数据分段的复制索引。
17.根据权利要求15所述的方法,还包括:
至少部分地基于所述分析,确定在对应于所述压缩数据的字典的字典分段之间的附加分界;以及
生成指示所述压缩数据内的所述字典的每个字典分段的至少另一个初始输入位置的附加元数据,
其中所述发送还包括:发送所述附加元数据。
18.根据权利要求15所述的方法,还包括:
至少部分地基于所述分析,确定所述压缩数据的附加分段之间的附加分界;以及
生成指示所述压缩数据的每个附加分段的另一个初始输入位置的附加元数据,
其中所述发送还包括:发送所述附加元数据。
19.根据权利要求15所述的方法,其中根据DEFLATE压缩格式对所述压缩数据进行压缩,并且所述方法还包括:
至少部分地基于所述分析,确定所述压缩数据内的附加分界;以及
生成指示对应于所述附加分界的另一个初始输入位置的附加元数据,
其中所述发送还包括:发送所述附加元数据。
20.根据权利要求15所述的方法,其中所述压缩数据对应于具有可变输入长度或可变输出长度中的至少一个的数据流。
21.根据权利要求15所述的方法,其中根据Lempel-Ziv算法或霍夫曼编码中的至少一个来压缩所述压缩数据。
22.根据权利要求15所述的方法,其中使用算术编码或熵编码中的至少一个来压缩所述压缩数据。
23.根据权利要求15所述的方法,其中所述压缩数据包括用于对所述压缩数据内的符号进行编码的比特的可变长度或用于编码在所述压缩数据中的一个或更多个复制操作的可变输出大小中的至少一个。
24.根据权利要求15所述的方法,其中所述元数据的至少一部分是以前缀和格式编码的。
25.一种系统,包括:
一个或更多个处理器;
一个或更多个存储器设备,其上存储有指令,所述指令在使用所述一个或更多个处理器执行时,使所述一个或更多个处理器实例化:
压缩数据分析器,用于识别压缩数据的分段;
元数据生成器,用于至少部分地基于识别出的分段,生成指示所述压缩数据的所述识别出的分段中的每个识别出的分段的初始输入位置、初始输出位置和复制索引的元数据;以及
解压缩器,用于:
接收所述压缩数据和所述元数据;
使用处理器的线程并行地且根据所述元数据处理所述识别出的分段;
至少部分地基于所述处理,将字面量符号输出到一输出并且将信息复制到延迟复制队列;以及
处理所述复制信息以将复制的符号输出到所述输出。
26.根据权利要求25所述的系统,还包括压缩器,用于从输入数据流生成所述压缩数据。
27.根据权利要求25所述的系统,其中所述处理所述复制信息包括:与第二复制操作并行地处理第一复制操作。
28.根据权利要求25所述的系统,其中所述处理所述复制信息包括:与复制操作的第二符号并行地处理所述复制操作的第一符号。
29.根据权利要求25所述的系统,其中:
所述压缩数据分析器进一步用于识别所述压缩数据内的块;以及
所述识别出的分段对应于具有两个或更多个分段的块。
30.根据权利要求25所述的系统,其中:
所述压缩数据分析器进一步用于识别对应于所述识别出的分段的字典的字典分段;
所述元数据进一步指示所述字典分段的初始字典位置;
并行地处理所述字典分段以生成所述字典;以及
所述处理所述识别出的分段至少部分地基于所述字典。
31.根据权利要求30所述的系统,其中至少部分地基于正在对所述压缩数据流执行的第一编码传递来生成所述字典,并且至少部分地基于正在对所述字典的压缩版本执行的第二编码传递来压缩所述字典。
32.根据权利要求25所述的系统,其中所述压缩数据包括用于对所述压缩数据内的符号进行编码的比特的可变长度或者用于编码在所述压缩数据中的复制的可变输出大小中的至少一个。
33.根据权利要求25所述的系统,其中所述系统被包括在以下各项中的至少一项中:
用于自主或半自主机器的控制系统;
用于自主或半自主机器的感知系统;
用于执行模拟操作的系统;
用于执行深度学习操作的系统;
用于执行实时流广播的系统;
用于执行视频监控服务的系统;
用于执行智能视频分析的系统;
使用边缘设备实现的系统;
用于生成光线跟踪的图形输出的系统;
合并一个或更多个虚拟机VM的系统;
至少部分地在数据中心中实现的系统;或
至少部分地使用云计算资源实现的系统。
34.一种方法,包括:
接收压缩数据和对应于所述压缩数据的元数据,所述元数据指示对应于所述压缩数据的初始输入位置和初始输出位置,以及所述压缩数据的多个分段中的至少两个分段的输入分段位置和输出分段位置;以及
使用对应于由所述初始输入分段和所述输入分段位置指示的位置的输入并行地解压缩所述至少两个分段,其中所述解压缩的输出具有对应于所述初始输出位置和所述输出分段位置的位置。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/002,564 US11405053B2 (en) | 2020-08-25 | 2020-08-25 | Parallel decompression of compressed data streams |
US17/002,564 | 2020-08-25 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114116635A true CN114116635A (zh) | 2022-03-01 |
Family
ID=80221720
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110979990.8A Pending CN114116635A (zh) | 2020-08-25 | 2021-08-25 | 压缩数据流的并行解压缩 |
Country Status (4)
Country | Link |
---|---|
US (3) | US11405053B2 (zh) |
JP (1) | JP2022037900A (zh) |
CN (1) | CN114116635A (zh) |
DE (1) | DE102021121333A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116521063A (zh) * | 2023-03-31 | 2023-08-01 | 北京瑞风协同科技股份有限公司 | 一种hdf5的试验数据高效读写方法及装置 |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20240031431A1 (en) * | 2022-07-21 | 2024-01-25 | Kbr Wyle Services Llc | System and methods for transmitting information using an electronic media |
CN117331512B (zh) * | 2023-12-01 | 2024-04-12 | 芯动微电子科技(武汉)有限公司 | 对gpu核内存储器执行写操作的数据压缩及处理方法 |
CN117375627B (zh) * | 2023-12-08 | 2024-04-05 | 深圳市纷享互联科技有限责任公司 | 适用于字符串的纯文本格式数据的无损压缩方法和系统 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9264068B2 (en) * | 2014-05-09 | 2016-02-16 | Micron Technology, Inc. | Deflate compression algorithm |
US10230392B2 (en) * | 2016-12-28 | 2019-03-12 | Intel Corporation | Techniques for parallel data decompression |
-
2020
- 2020-08-25 US US17/002,564 patent/US11405053B2/en active Active
-
2021
- 2021-07-29 JP JP2021123793A patent/JP2022037900A/ja active Pending
- 2021-08-17 DE DE102021121333.9A patent/DE102021121333A1/de active Pending
- 2021-08-25 CN CN202110979990.8A patent/CN114116635A/zh active Pending
-
2022
- 2022-08-02 US US17/879,436 patent/US11817886B2/en active Active
-
2023
- 2023-11-13 US US18/508,010 patent/US20240080041A1/en active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116521063A (zh) * | 2023-03-31 | 2023-08-01 | 北京瑞风协同科技股份有限公司 | 一种hdf5的试验数据高效读写方法及装置 |
CN116521063B (zh) * | 2023-03-31 | 2024-03-26 | 北京瑞风协同科技股份有限公司 | 一种hdf5的试验数据高效读写方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
US20220376701A1 (en) | 2022-11-24 |
US11817886B2 (en) | 2023-11-14 |
US20240080041A1 (en) | 2024-03-07 |
US20220069839A1 (en) | 2022-03-03 |
US11405053B2 (en) | 2022-08-02 |
JP2022037900A (ja) | 2022-03-09 |
DE102021121333A1 (de) | 2022-03-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113574540B (zh) | 点云编解码方法、装置和电子设备 | |
US11817886B2 (en) | Parallel decompression of compressed data streams | |
US11475605B2 (en) | Geometry encoding of duplicate points | |
US11132818B2 (en) | Predicting attributes for point cloud compression according to a space filling curve | |
KR102596644B1 (ko) | 메모리 대역폭 활용을 감소시키기 위해 활성화 데이터의 압축 및 압축 해제를 사용하는 신경망 프로세서 | |
KR102362066B1 (ko) | 포인트 클라우드 기하학적 압축 | |
JP7261300B2 (ja) | 適応ポイントクラウド属性コーディングのための方法、装置、及びコンピュータプログラム | |
CN111902807B (zh) | 生成硬件兼容压缩纹理的方法、计算机设备和介质 | |
CN113826029B (zh) | 点云信息编码方法、装置、计算机设备及存储介质 | |
WO2019226429A1 (en) | Data compression by local entropy encoding | |
CN108287877B (zh) | 一种rib渲染压缩文件fpga压缩/解压缩系统及硬件解压方法 | |
Ponchio et al. | Multiresolution and fast decompression for optimal web-based rendering | |
US20220012945A1 (en) | Point cloud geometry upsampling | |
US20240314293A1 (en) | Lossless image compression using block based prediction and optimized context adaptive entropy coding | |
US11653009B2 (en) | Multi-pixel caching scheme for lossless encoding | |
CN115238345A (zh) | Bim模型处理方法、装置、存储介质及电子装置 | |
JP7083004B2 (ja) | データ出力方法、データ取得方法、装置および電子機器 | |
CN115088017A (zh) | 点云的树内几何量化 | |
US20240171786A1 (en) | Coding of displacements using skew flag for vertex mesh (v-mesh) | |
US20230336799A1 (en) | Video streaming scaling using virtual resolution adjustment | |
US20240291503A1 (en) | System and method for multi-type data compression or decompression with a virtual management layer |
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 |