CN113609029B - 动态压缩具有统一值的存储器区域的技术 - Google Patents
动态压缩具有统一值的存储器区域的技术 Download PDFInfo
- Publication number
- CN113609029B CN113609029B CN202011060083.5A CN202011060083A CN113609029B CN 113609029 B CN113609029 B CN 113609029B CN 202011060083 A CN202011060083 A CN 202011060083A CN 113609029 B CN113609029 B CN 113609029B
- Authority
- CN
- China
- Prior art keywords
- value
- stored
- granule
- memory
- values
- 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.)
- Active
Links
Classifications
-
- 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/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0608—Saving storage space on storage systems
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/42—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code using table look-up for the coding or decoding process, e.g. using read-only memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/0292—User address space allocation, e.g. contiguous or non contiguous base addressing using tables or multilevel address translation means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
- G06F12/0646—Configuration or reconfiguration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0891—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using clearing, invalidating or resetting means
-
- 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/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- 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/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
-
- 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
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/4031—Fixed length to variable length coding
- H03M7/4037—Prefix coding
- H03M7/4043—Adaptive prefix coding
- H03M7/4056—Coding table selection
-
- 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/70—Type of the data to be coded, other than image and sound
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Memory System (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本文公开了动态压缩具有统一值的存储器区域的技术。当处理器内部维护存储在其外部存储器中的值的压缩版本时,减少了处理器与外部存储器之间的访问。然后,处理器可以引用压缩版本,而不是访问外部存储器。一种压缩技术涉及在处理器上维护字典,该字典将存储器的部分映射到值。当存储器的一部分的所有值都是统一的(例如,相同的)时,该值被存储在存储器的该部分的字典中。此后,当处理器需要访问存储器的该部分时,将从字典中而不是从外部存储器中检索该值。本文公开了用于扩展例如这种基于字典的压缩的能力的技术,从而进一步减少了处理器与其外部存储器之间的访问量。
Description
技术领域
本公开涉及基于字典(dictionary)的压缩,并且更具体地,涉及可扩展的基于字典的压缩。
背景技术
常规地,零带宽清除(ZBC)命令用于将单个值与存储器中的多个位置相关联,而无需将该值实际写入每个存储器位置。通过将单个值(称为统一值(uniform value))存储在表中特定索引处的全局统一表(global uniform table)中,并将该索引与多个存储器位置相关联来完成该关联。此后,当需要从多个存储器位置之一读取值时,使用与该存储器位置相关联的索引从全局统一表中检索该值。这些存储器位置在片外存储器中,因此实际从存储器位置读取值或将值写入存储器位置会消耗存储器访问带宽。相反,全局统一表通常存储在芯片上。因此,片上处理单元可以使用全局统一表快速引用存储器位置的值,而不必访问片外存储器。
在没有ZBC命令的情况下,清除缓冲区、深度缓冲区(例如z缓冲区)或颜色缓冲区实际上需要将值(例如,代表最大深度值的值或代表单个颜色的值)写入正被清除的缓冲区的所有存储器位置。在使用ZBC命令时,该值首先存储在全局统一表的条目中,并为被清除的缓冲区存储与该条目对应的索引。统一值表中有多个条目可用,使得能够将不同的缓冲区清除为不同的值。当使用ZBC压缩缓冲区时,索引是缓冲区内所有值的压缩表示(因此,ZBC机制可以被认为是基于字典的压缩)。
ZBC机制减少了清除(写入)缓冲区和读取清除的缓冲区所消耗的片外存储器带宽。然而,现有的ZBC机制具有至少两个缺点。ZBC压缩的性能受到全局统一表容量的限制。当所有条目都已用于存储值时,即使不再引用表中的特定值,也很难(例如,耗时)回收或释放任何条目来存储新值。因此,需要扩展这种基于字典的压缩机制的能力,该机制不仅可以用于压缩存储在片外存储器中的图形相关数据,还可以用于压缩有时可能仅具有统一(例如相同)值的任何类型的数据。
发明内容
公开了用于动态统一值硬件压缩的方法、计算机可读介质和系统。在一个实施例中,一种用于动态压缩值的方法包括以下步骤:接收要存储在多个颗粒(granule)中的第一颗粒中的第一值,确定如果将第一值存储在第一颗粒中,存储在与第一颗粒相关联的多个存储器位置中的所有值将具有统一值,确定第一值存储在表中,在该表中的第一索引处,以及更新与第一颗粒对应的第一CSI,以指示第一颗粒被压缩并指示第一颗粒的所有值都具有作为与表中的第一索引相关联的值的统一值。多个颗粒中的每个颗粒与存储器的用于存储多个值的多个存储器位置相关联,并且多个颗粒中的每个颗粒与对应的压缩状态信息(CSI)相关联。该表保持多个值,其中表中的每个值都与唯一索引相关联,其中由于接收到将第一值写入表中的命令,因此第一值预先存储在表中。
附图说明
图1A示出了示例性系统。
图1B示出了用于CSI的示例性编码。
图1C示出了另一示例性系统。
图1D示出了用于从存储器中检索值的方法的示例性流程图。
图1E示出了用于清除存储器中的值的方法的示例性流程图。
图2A示出了另一示例性系统。
图2B示出了用于将值写入存储器的方法的示例性流程图。
图3示出了示例性并行处理单元。
图4A示出了图3的并行处理单元内的示例性通用处理集群。
图4B示出了图3的并行处理单元的示例性存储器分区单元。
图5A示出了图4A的示例性流式多处理器。
图5B示出了根据一个实施例的使用图3的PPU实现的处理系统的示例图。
图5C示出了其中可以实现本公开的各种实施例的各种架构和/或功能的示例性系统。
图6示出了由图3的PPU实现的图形处理管线的示例图。
具体实施方式
常规的零带宽清除(ZBC)机制依赖于单个全局统一表。因此,可用于经由ZBC压缩将缓冲区清除为统一值的不同值的数量限于全局统一表中的条目数。如本文进一步所述,例如,通过将可用于ZBC编码的值的数量扩展到超过片上存储限制来增强常规ZBC机制。
图1A示出了根据本公开的实施例的包括处理器120和存储器110的示例性系统。在以下描述的上下文中,区域是与本地统一表(local uniform table)(例如本地统一表111或112)相关联的存储器的一部分。所有区域都与全局统一表(例如全局统一表105)相关联。可以在诸如存储器110之类的存储器内定义多个区域。在一个实施例中,所有区域都具有相等的大小。在另一个实施例中,区域可以具有不同的大小。区域也可以是连续的或不连续的。在一个实施例中,区域的大小或容量可配置为2-5MB的数据。如图1A所示,存储器110包括由不同图案(点或条纹)指示的两个区域。
与单个压缩状态信息(CSI)相关联的多个存储器位置被称为颗粒(granule)。如下面进一步描述的,CSI可以指示存储在颗粒的多个存储器位置中的所有值是否统一(uniform)。每个区域可以与一个或更多个颗粒相关联。在一个实施例中,一个或更多个颗粒与纹理位图的图块相关联,其中纹理位图被划分为多个图块。
当颗粒中的所有值都是统一的(相同或接近相等)时,可以使用ZBC压缩对整个颗粒进行编码。如果颗粒中每个值之间的差异都在锚定值的预定义阈值内,则颗粒的值彼此近似相等。锚定值可以例如是颗粒中的值、颗粒的值的平均值或最常出现在颗粒中的值。
值可以被编码为任意数量的位或字节。例如,可以将值编码为一个、两个、四个、八个或十六个字节。在一个实施例中,值表示一个或更多个像素、纹理像素、深度、神经网络权重、神经网络激活或任何其他类型的数据。
如图1A所示,第一区域包括颗粒107、108、109和113(以虚线图案示出),第二区域包括颗粒101、102、103、104和106(以条纹图案示出)。每个颗粒都与CSI关联,如图1A所示。在一个实施例中,存储器110中与一组颗粒(例如,区域)或单个颗粒相对应的存储器位置可以是连续的,也可以不是连续的。换句话说,存储器110中与单个颗粒和/或单个区域相关联的存储器位置可以是连续的或不连续的。在一个实施例中,CSI表121和122包含条目,其中每个条目映射存储器110中的存储器位置(颗粒)与CSI。与每个颗粒相关联的存储器位置可以是一个或更多个物理或虚拟存储器地址和/或物理或虚拟存储器地址的范围。在一个实施例中,每个CSI表对应于不同的区域,并且每个CSI表引用本地统一表。
如图1A所示,第一区域的CSI表121指示第一区域内的颗粒107(非连续的)是未压缩的(如CSI表121中的“U”和存储器110中的“unc”所指示的)。存储在存储器110中的未压缩的值可以是统一的,也可以不是统一的。CSI表121还指示第一区域内的颗粒108是ZBC压缩的(如CSI表121中的“C”所指示的),因此颗粒108中的所有值均是统一的。CSI表121还指示可以在与第一区域相关联的统一表之一中的索引(idx)4处找到颗粒108的统一值,该统一表可以是全局统一表105或本地统一表111。如图1A所示,索引0-15对应于全局统一表105中的条目,索引16和更大的索引对应于本地统一表111中的条目。存储在全局统一表105中索引4处的值为“E”。因此,颗粒108的所有值都具有相同的值“E”。在一个实施例中,全局统一表105总是存储在芯片上而不是存储在芯片外存储器中。在一个实施例中,本地统一表111和CSI表121在处理器正在访问第一区域时被存储在芯片上,但是表111和121可以被保存在芯片外,例如,当处理器无法访问第一区域时被保存在存储器110上。通常,统一表中值的位宽大于那些表中索引的位宽。
如在CSI表121中进一步指出的,第一区域内的颗粒109是ZBC压缩的,并且颗粒109的统一值可以在与第一区域相关联的统一表中的索引(idx)20处找到(它们是全局统一表105和本地统一表111)。在一个实施例中,CSI表121或122中的索引的最高有效位(msb)在与颗粒相关联的全局统一表和局部统一表之间进行选择,并且剩余的位被用作用于选择该表中的条目的索引。例如,如果索引由5位表示,则最高有效位指示索引是对应于全局统一表(例如,当msb等于0时)还是本地表(例如,当msb等于1时),其余4位指示表中的特定条目。在该示例下,索引值为20(其用二进制为10100)将指示相应的统一值存储在本地表中(假设msb 10100为1),并且该统一值位于本地表中的第4个条目(假定为二进制值0100是4)处。返回图1A,ZBC压缩的颗粒109与本地统一表111的索引20相关联。存储在本地统一表111中索引20处的值为“45”。因此,颗粒109的所有值都具有相同的值“45”。第一区域中的剩余颗粒(颗粒113)是ZBC压缩的,并且该颗粒内的所有值的值均为“96”,如CSI表121和本地统一表111所指示的。
如CSI表122所示,第二区域中的一个颗粒(颗粒101)未被压缩,其余颗粒(颗粒102、103、104和106)是ZBC压缩的。如上所述,第二区域与全局统一表105和本地统一表112相关联。因此,CSI表122中引用的索引20、31和2指的是全局统一表105和本地统一表112中的条目。如图所示,在图1A中,颗粒102和104是ZBC压缩的,并且颗粒102和104的所有值都具有值“45”(这是本地统一表112的索引20处的值)。颗粒103也是ZBC压缩的,并且颗粒103的所有值都具有值“200”(这是本地统一表112的索引31处的值)。最后,颗粒106是ZBC压缩的,并且颗粒106的所有值都具有值“C”(在全局统一表105的索引2处的值)。
当颗粒被ZBC压缩时,存储在存储器110中的颗粒的实际值可能是不确定的(unspecified)值或无用值。由于处理器120可以通过检查CSI表和与该颗粒相关联的统一表来获得ZBC压缩颗粒的所有值,因此处理器120不需要依赖于在存储器110中为颗粒实际存储的内容。处理器120不需要访问存储器110来获得任何ZBC压缩的颗粒的值。
在一个实施例中,全局统一表105和本地统一表111和112具有相同数量的条目。在另一个实施例中,全局统一表105与本地统一表111和112相比具有不同数量的条目。在又一个实施例中,全局统一表105以及每个本地统一表111和112可以具有不同数量的条目。在一实施例中,一个以上的本地统一表可以与单个区域相关联。但是,任何本地统一表仅与区域之一相关联,因此,为与该本地统一表相关联的区域所专用。相反,全局统一表与所有区域相关联。在一个实施例中,仅使用全局统一表,并且没有区域与本地统一表相关联。在另一个实施例中,仅使用本地统一表,并且没有区域与全局统一表相关联。在一个实施例中,每个区域包括相等数量的颗粒。在另一个实施例中,每个区域可以包括不同数量的颗粒。
图1B示出了根据一个实施例的用于CSI的示例性编码100。如图1B所示,用于颗粒的CSI的编码100包括六位[5∶0]。msb(位5)定义颗粒是ZBC压缩的还是未压缩的。例如,当颗粒被ZBC压缩时,位5被断言(assert)(或被设置为1),而当颗粒未被压缩时(即,当值未被压缩时),其被取反(或被设置为0)。如果CSI编码100的第5位指示其对应的颗粒是ZBC压缩的,则CSI编码100的第4位指示颗粒的统一值是位于全局统一表中,还是与颗粒相关联的本地统一表中。例如,如果编码100的第4位为0,则统一值位于全局统一表中。否则,如果第4位为1,则统一值位于本地统一表中。其余的位(位[3∶0])定义到全局或本地统一表中的索引,以用于获取颗粒的统一值。
在一个实施例中,如果除了ZBC压缩之外还使用其他压缩格式,则可以在CSI编码100中包括附加的一个或更多个位,以指示针对该颗粒正在使用哪个压缩格式。在一个实施例中,支持至少一种附加类型的压缩。例如,当使用VDC(可变差分压缩)时,VDC压缩的值需要该值未被压缩时的一半的存储。当支持VDC时,可以使用VDC压缩一个或更多个颗粒(例如,可以将256B的颗粒压缩为128B)。压缩的值存储在颗粒中,消耗了总颗粒容量的一半。在一个实施例中,当颗粒的CSI指示颗粒是VDC压缩的时,处理器从其外部存储器中检索来自颗粒的VDC压缩值。在这样的实施例中,处理器将VDC压缩值解压缩以获得颗粒的未压缩值。在一个实施例中,每个颗粒都具有存储未压缩值的容量(即使当值被压缩时)。
在仅包括全局统一表的常规系统中,到表中的索引可以由五个位表示,并且全局统一表可以存储多达32个不同的全局统一值。在一个实施例中,为了使得能够使用专用的每区域本地统一表而不增加存储在处理器中的统一值的数量,将可用于全局统一表的索引的数量减半。例如,不是在全局统一表中提供32个索引,而是在全局统一表中仅16个索引可用,而在每个本地统一表中16个索引可用。此外,在一个实施例中,在任何时间点仅单个本地表可以被高速缓存在处理器中,并且根据需要将几个不同本地表之一加载到处理器中。因此,在这样的实施例中,正在使用的全局表和本地表占据了常规系统中单个较大的全局表将占据的相同数量的空间。在另一个实施例中,多个本地表可以根据需要被同时高速缓存在处理器中以并行地解压缩多个颗粒。
虽然全局统一表在所有区域之间共享,但是每个本地统一表是特定区域所专用的。在一个实施例中,全局统一表被存储在芯片上,而本地统一表被存储在芯片外并且可以被高速缓存在芯片上。在一个实施例中,本地统一表和CSI是用于数据的元数据(诸如帧缓冲区、纹理贴图、深度缓冲区、神经网络权重等)。作为元数据,本地统一表和CSI可以存储在一个或更多个级别的片上高速缓存中,而片外存储器用作后备存储器。本领域技术人员可以理解的所有种类的高速缓存优化(预取、逐出优先级等)可以应用于元数据。
尽管与仅采用全局统一表的常规系统相比,可以减少全局统一表的索引数量,但是由于增加了本地统一表,每个区域可用的索引总数并未减少。重要的是,所有CSI都可以引用任何全局统一表索引。此外,每个CSI都可以引用与CSI颗粒相关联的本地统一表的任何索引。如上所述,本地统一表是包括一个或更多个颗粒的区域所专用的。可通过增加每个区域的本地统一表的大小(例如,条目和索引的数量)来增加该区域(或一组颗粒)可用的索引数量。可用于区域的索引的数量越多,可以是ZBC压缩的颗粒数越多,其中每个颗粒具有不同的统一值。一种替代技术是减少与每个区域相关联的颗粒数量。例如,如果本地统一表只能存储4个统一值,则将区域限制为仅4个颗粒将确保该区域中的每个颗粒可以是ZBC压缩的,其中每个颗粒具有不同的统一值。如果由于全局或本地统一值表中没有附加条目可用来存储颗粒的统一值而颗粒不能是ZBC压缩的,则将颗粒以未压缩的格式存储在外部存储器中。
如前所述,在一个实施例中,相同大小的多个区域可以表示单个缓冲区(例如,帧缓冲区)。当减小区域大小时,将需要增加表示相同缓冲区所需的区域数量。另外,如果每个颗粒的大小保持恒定,则每个区域将需要与更少数量的颗粒相关联。颗粒和区域的大小在系统中可以变化。不同大小的颗粒和区域可用于不同的缓冲区。同样,单个缓冲区可以由一组大小不同的区域表示,每个区域具有大小不同的颗粒。在一个实施例中,颗粒的大小可以是128至2048字节(包括128字节和2048字节)。在一个实施例中,颗粒大小等于可以存储在高速缓存行中的来自外部存储器的数据量。在一个实施例中,区域包括2至256个颗粒。因此,用于表示单个缓冲区的颗粒和区域的数量是可调的。由于每个区域都与自己的本地统一表相关联,因此可以通过调整代表缓冲区的区域的数量来增加或减少可用于与单个缓冲区相关联的所有颗粒的统一表条目的数量。
例如,当表示缓冲区的区域的数量从32增加到128时,每个区域的存储器大小减小四倍。如果在区域数量增加之前和之后颗粒尺寸保持恒定,则每个区域的颗粒数量和关联的CSI数量也会减少四倍。但是在增加区域数量之前和之后,每个区域仍然具有相同大小的本地统一表。因此,整个缓冲区的本地统一表条目的数量增加了多达四倍。在某些情况下,新调整大小的区域可具有本地表条目,而该区域中的任何颗粒都未引用这些本地表条目。在那些情况下,可以回收此类本地表条目以用于在区域中ZBC压缩其他未压缩颗粒。因此,在增加区域数量之后,与缓冲区相关联的更多颗粒可以是ZBC压缩的。在使用如CSI编码100中所示的四位索引字段的实施例中,潜在地可用于缓冲区的统一值索引的总数是16(全局统一值表条目的总数)+16N(本地统一值表条目的总数乘以用于表示缓冲区的区域数N)。与仅具有单个32条目全局统一值表的常规系统相比,如本文所公开的本地表的使用极大地增加了可以用不同的统一值压缩的颗粒的数量。
图1C是根据本公开的实施例的包括处理器120和存储器110的另一示例性系统。处理器120包括高速缓存115。高速缓存115可以存储一个或更多个本地统一表125和一个或更多个CSI表122。处理器120可以是GPU(图形处理单元)、CPU(中央处理单元)或能够利用全局统一表124、本地统一表125和CSI表122的任何处理器。
如上所讨论的,诸如124的全局统一表和诸如125的一个或更多个本地统一表存储统一值。每个本地统一表125与一区域和CSI表122之一相关联。CSI表的每个条目与存储器110中的颗粒123之一相关联。
在一个实施例中,存储器110中的区域可以代表缓冲区(诸如帧缓冲区)。为了通过将缓冲区的所有值设置为单个值来清除整个缓冲区,该值首先被写入全局统一表124或与该区域相关联的本地统一表125中的未使用条目。接下来,修改与该区域的颗粒相关联的CSI表122中的所有CSI条目,以指示颗粒是ZBC压缩的并且颗粒的统一值存储在全局统一表124或与该区域相关联的本地统一表125的任一个中的适当索引处。在一个实施例中,由处理器120响应于从例如在处理器120上执行的软件接收到清除命令来执行对缓冲区的这种清除,其中该命令识别要清除的缓冲区以及在整个缓冲区范围内统一设置的值。通过以这种方式应用ZBC压缩,可以通过仅修改CSI表122和全局统一表124或本地统一表125中任一个来将整个缓冲区清除为单个值。在不使用ZBC压缩的情况下,与该缓冲区相关联的存储器110中的所有值将需要用清除值重写。
在一个实施例中,软件基于识别流行的统一值的在先配置文件来确定写入全局统一表124和/或本地统一表125的统一值。在一个实施例中,当处理器120为颗粒123识别出统一值时,动态地写入本地统一表125,而无需接收到清除值命令。下面结合图2A和图2B进一步详细描述动态检测和写入统一值到本地统一表125。
全局统一表124、本地统一表125和CSI表122中的每一个可以存储在高速缓存115外部的专用片上存储中、高速缓存115的专用部分中或高速缓存115的非专用条目中。高速缓存115可以处于存储器层次结构的任何级别,例如1级(L1)高速缓存、2级(L2)高速缓存等。在一个实施例中,高速缓存115是图4B所示的L2高速缓存460。在一个实施例中,高速缓存115是图5A所示的共享存储器LI高速缓存570。
存储器110可以用作处理器120使用的任何本地统一表125和CSI表122的后备存储,在这种情况下,一些或所有本地统一表125和CSI表122可以存储在存储器110中。本地统一表125和CSI表122是用于一个或更多个区域的元数据。当这样的元数据存储在高速缓存115中时,诸如预取、逐出优先级等之类的优化可以被应用以最小化访问延时。在一个实施例中,与存储在高速缓存115中的其他数据相比,存储这种元数据的高速缓存条目具有较高的保留优先级,以减少逐出的可能性。
图1D示出了用于从存储器检索值的方法130的示例性流程图。在步骤132中,接收读取请求。在步骤134中,处理器120确定包括在读取请求中的地址是否在区域内。在访问区域之前,将存储器110中的存储器位置与该区域的颗粒相关联。可以使用地址和/或地址范围明确地识别颗粒的存储器位置。或者,可以使用区域的起始地址以及区域中每个颗粒的大小或偏移信息来隐式地识别颗粒的存储器位置。例如,如果一区域的所有颗粒大小相同并且被连续寻址,则可以使用该区域的起始地址和颗粒的大小来计算与该区域中的每个颗粒相关联的存储器位置。
在步骤134中,如果该地址并不与区域相关联,则在步骤140中使用该地址从存储器110读取一个或更多个值,并响应于读取请求返回该一个或更多个值。否则,在步骤136中,从CSI表中读取与该地址相关联的颗粒的条目。例如,参考图1A,当地址与第一区域相关联时,该地址由处理器120(或如图1C所示的高速缓存115)用来从CSI表121中读取条目。该地址对应于第一区域中包括的颗粒107、108、109、113中的一个或另一个颗粒。当地址对应于颗粒107时,要读取的一个或更多个值是未压缩的。当地址对应于颗粒108、109或113时,如CSI表121中所指示的,要读取的一个或更多个值被压缩。
在步骤138中,如果CSI条目指示要读取的颗粒是未压缩的,则在步骤140中,使用该地址从存储器110读取一个或更多个值,并响应于读取请求返回该一个或更多个值。否则,在步骤142中,从CSI条目中读取与该地址相关联的颗粒的索引。例如,当地址对应于颗粒108时,要读取的一个或更多个值是ZBC压缩的并且该颗粒的统一值位于全局统一表105的索引=4处。在步骤144中,处理器120(或如图1C所示的高速缓存115)使用该索引从全局统一表105或本地统一表111中读取统一值。然后,响应于该读取请求,返回统一值。
在一个实施例中,对颗粒的读取或写入导致用于颗粒的CSI从存储器110提取到高速缓存115中,如图1C所示。对颗粒的读取或写入还可以使得包括颗粒的区域的本地统一表被提取到高速缓存115中。在一个实施例中,具有16字节统一值的16-条目本地统一表可以与256字节一样大,并且可以存储在两个128字节的高速缓存行中,每个高速缓存行保持本地统一表的8个条目。存储本地统一表的高速缓存行应支持读和写,包括回写或连续写入支持。
可以通过在CSI表中写入条目来将区域清除为单个统一值,而不是针对相关颗粒通过将统一值写入存储器110中的所有值位置来清除存储器110中的相关颗粒123。在一个实施例中,首先将统一值写入全局统一表和本地统一表,然后将全局统一表和本地统一表中的相应条目对应的索引写入CSI表。例如,可以通过用相同索引来设置一区域中的所有颗粒的所有CSI条目的索引,来将该区域的所有颗粒清除为单个统一值。可替代地,可以通过将不同的索引值写入一区域的颗粒的CSI条目中来将该区域的每个颗粒清除为不同的统一值。
图1E是用于清除存储器中的值的方法150的示例性流程图。在步骤152,处理器120(或如图1C所示的高速缓存115)接收清除区域或颗粒的请求。在一个实施例中,通过识别区域或颗粒(例如,诸如采用存储器地址)和用于统一地设置该区域或颗粒的所有值的值的清除指令来提供请求。在另一个实施例中,处理器120(或高速缓存115)动态地确定未压缩的颗粒或区域的值在服务于更新颗粒或区域中的值的请求时是统一的还是将变得统一,并在内部生成清除颗粒或区域至其统一值的请求。清除请求可以是针对该区域内的单个颗粒或多个颗粒的。在步骤154中,处理器120(或高速缓存115)确定是否存在用于与清除请求相关联的区域的CSI表。如果CSI表不存在,则在步骤154,为该区域创建CSI表和本地统一表。如果无法创建CSI表和本地表,则可以通过将统一值直接写入与相关区域或颗粒关联的存储器位置来服务于清除请求。
在步骤156中创建CSI表和本地统一表之后,在步骤160中,清除请求中包括的统一值被写入全局统一表或本地统一表中的条目。在步骤168中,在步骤160中写入的条目的索引被存储在相关颗粒的CSI表中。如果清除了整个区域,则该区域所有颗粒的CSI表条目都被设置在步骤160中写入的条目的索引。
返回步骤154,当处理器120(或高速缓存115)确定该区域存在CSI表时,则在步骤158中,处理器120(高速缓存115)确定统一值表中是否有空条目可用。在一个实施例中,高速缓存115可以在检查由区域共享的全局统一表中的空条目之前首先检查本地统一表中为该区域所专用的空(未使用的)条目。在步骤160中,包括在写请求中的统一值被写入在步骤158识别的空的统一表条目。在步骤168中,在步骤160中被写入的条目的索引被存储在该区域的CSI表中。
返回到步骤158,当处理器120(或高速缓存115)确定在统一值表中没有空条目可用时,则在步骤166中,将清除请求中包括的统一值写入存储器110中,以用于与和清除请求相关的颗粒相关联的所有值。在步骤168中,用于颗粒的CSI表中的条目被写入以指示颗粒是未压缩的。
在一个实施例中,清除请求是区域清除请求,其将区域中的所有颗粒清除为统一值,从而有效地覆写本地统一表125中的所有条目。因此,不必检查条目在统一表中是否“可用”以及步骤158可以省略。当存在CSI表时,处理器120(或高速缓存115)可以直接前进到步骤160,而无需完成步骤158,并且首先清除本地统一表125,以便所有条目变为空(例如,无效),然后将该值写入本地统一表125中的条目。当执行区域清除请求时,将统一回收本地统一表125中的所有条目。在步骤168中,针对该区域中的所有颗粒,将在步骤160写入的条目的索引存储在CSI表中。
在一个实施例中,为全局统一表124维护计数,其中该计数指示全局统一表124中存储统一值的条目数。类似地,可以为每个本地统一表125维护计数。该一个或更多个计数可以在步骤158处用于确定统一表是否具有空条目。启动新应用程序时或在其他时间(例如,在清除所有区域之前),可以通过软件清除计数。例如,可将应用程序编程接口(API)清除调用用于清除计数。在一个实施例中,区域清除请求清除正在被清除的区域的计数。对于每个被写入的条目,特定表的计数被更新(例如,递增),并且一旦计数达到最大值(等于条目数),则在清除表的计数之前不能写入该表。在另一实施例中,全局统一表124和本地统一表125中的每一个可以为其每个条目维护一标志,该标志指示该条目是有效还是无效。在这样的实施例中,如果条目的对应标志被设置为无效,则该条目为空。可以在步骤158中检查标志以确定统一表是否具有空条目。
在一个实施例中,由执行所有压缩颗粒的就地解压缩、清除计数并为未压缩的每个颗粒更新CSI条目的驱动程序软件或处理器120统一回收本地统一表中的所有条目。任选地,在统一回收本地统一表期间,引用全局统一表105的任何压缩颗粒可以保持压缩。
本文公开的各种实施例保留了常规ZBC机制的优点,即减少了清除区域和读取被清除区域所消耗的片外存储器带宽,同时提供了本地统一表125的其他好处,并克服了常规ZBC机制的缺点。例如,各种当前实施例不受全局统一表的容量的限制。与仅使用单个全局统一表存储的统一值数量相比,能够使用ZBC压缩用于更大数量的统一值将使许多应用程序受益。例如,不同的游戏场景可使用通过API指定的不同的清除颜色。与场景有关的照明和其他效果可能会为游戏和其他类型的应用程序产生大范围的特定于场景的统一值。在本发明的各个实施例中,统一表的容量可通过使用本地统一表来扩展。因为本地统一表125与每个区域相关联,所以可以通过将缓冲区再划分为更多区域来为缓冲区增加用于存储统一值的本地统一表条目的数量。相反,可以通过将缓冲区的区域合并为更少的区域来减少缓冲区的本地统一表条目的数量。
另外,本发明的各个实施例克服了常规ZBC机制的主要缺点。当全局统一值表的所有表条目都已用于存储统一值时,很难(例如,很耗时)回收或释放条目以存储新的统一值。通常,只有在没有区域引用条目的情况下,才可以回收该条目。但是,鉴于多个区域共享全局统一值表,因此很难识别出何时没有区域依赖于全局统一表中的条目。相反,本发明的各个实施例将每个区域专用的单独的本地统一表关联起来。因此,鉴于在尝试修改本地统一表时仅需要考虑单个区域,可以更轻松地释放或回收本地统一表中的条目。
动态统一值硬盘压缩
如先前所解释的,ZBC机制减少了用于清除(写入)区域和读取所清除的区域所消耗的片外存储器带宽。但是,常规ZBC机制的缺点是只能经由API调用使用清除命令来执行ZBC压缩。但是,随着将不同的值写入缓冲区,缓冲区或缓冲区的某些部分可能会动态地变得统一。例如,通过图形API绘图调用、计算API调用和复制API调用,缓冲区或缓冲区的一部分可能突然全部变得统一,从而缓冲区或该部分中的所有值都具有相同或接近相同的值。
因此,在本发明的各种实施方式中,当向颗粒中写入值或修改颗粒中的值时,检查颗粒内的值的统一性。当值是统一的时,处理器(或高速缓存)将检查统一值是否与统一表中存储的任何统一值匹配。找到匹配后,相应的索引被存储在颗粒的CSI条目中。在一个实施例中,处理器(或高速缓存)还可以将统一值写入统一表的空条目中。在一个实施例中,当统一表中没有条目可用时,可以例如通过将现有区域细分为多个较小的区域来动态创建附加条目,每个较小的区域与其自身的本地统一表相关联。
在一个实施例中,当在区域的本地统一表和/或全局统一表中没有条目可用时,该区域被分开成两个或更多个分离的较小区域。为每个新的较小区域克隆该区域的本地统一表和CSI表,针对每个新的较小区域,清空不在该较小区域中的颗粒的条目(在统一表和CSI表中)。在另一实施例中,当空条目不可用于写入统一值时,在该区域的本地统一表中创建附加条目。在另一个实施例中,当空条目不可用于写入统一值时,在全局统一表中创建附加条目。
图2A示出了另一示例性系统。该示例性系统包括处理器220和存储器110。与图1C所示的处理器120相比,处理器220包括高速缓存215。高速缓存215包括统一值识别单元225,其被配置为检测颗粒何时是统一的以及何时是ZBC压缩的。尽管图1C描绘了高速缓存215内的统一值识别单元225,但是其他实施例可以在处理器220的其他部分中包括单元225。例如,统一值识别单元225可以被包括在图4B所示的存储器分区单元380中或图5A中所示的加载/存储单元(LSU)554中。
在一个实施例中,统一值识别单元225可以响应于例如使用图1E的示例性方法150接收到清除命令,将统一值写入全局统一表124和本地统一表125。在一个实施例中,本地统一表125不是在处理器120(或高速缓存215)或存储器110中实现,并且仅全局统一表124可用于存储统一值。在另一个实施例中,不实现全局统一表124,并且统一值只能存储在本地统一表125中。统一值识别单元225可以被配置为使用全局统一表124和/或本地统一表125来执行动态统一值识别。
在一个实施例中,在对存储器110进行写入操作期间,当整个颗粒被写入并且所有被写入的值是统一的(相同或接近相等)时,统一值识别单元225可识别颗粒的统一值。在另一个实施例中,当仅写入颗粒的一部分并且在写入该部分之后颗粒将是统一的时,统一值识别单元225可识别颗粒的统一值。
在统一值识别单元225识别出颗粒的统一值之后,单元225可以在统一值表中搜索统一值。当统一值已经存储在颗粒的全局统一值表或本地统一表中时,获得存储统一值的条目的索引。统一值识别单元225然后可以通过将索引存储在颗粒的CSI表条目中并将CSI表条目标记为ZBC压缩的,来动态地ZBC压缩颗粒。
当在表中找不到统一值时,可以将其存储在统一表中的未使用条目中,并且将对应的索引存储在颗粒的CSI表条目中。当统一表中没有条目可用时,用于颗粒的CSI表条目采用ZBC压缩位无效进行写入,并且统一值实际上以不同的压缩格式或未压缩的格式存储在存储器110中的颗粒中。
在一个实施例中,软件使用配置数据来识别流行的统一值。然后可以使用清除值命令将流行的统一值写入全局统一表124和/或本地统一表125,并期望这种统一值将用于ZBC压缩颗粒。在一个实施例中,统一值识别单元225通过维持直方图来执行统一值配置,该直方图跟踪动态检测到的统一值的出现频率。例如,直方图可以保持在某时间段内检测到特定统一值的次数的计数器(tally)。在一个实施例中,代替单个全局直方图或除了单个全局直方图之外,还维护每区域直方图。全局直方图对识别全局统一表的值有用,而每区域直方图对识别每个本地统一表的值有用。在一个实施例中,每索引计数被保持在统一值表中,其中该计数指示引用每个索引的颗粒的数量。还可以为无法存储在统一值表中的每个统一值维护统一值计数,其中该计数指示不是ZBC压缩的但如果已将统一值添加到统一值表中则可以已经是ZBC压缩的颗粒的数量。每索引和/或统一值计数可用于配置(profiling)和生成直方图。
在一个实施例中,统一值识别单元225实现启发式算法以确定何时将由直方图跟踪的统一值添加到统一表的空条目。另外,在一个实施例中,统一值识别单元225实现启发式算法以确定要从统一表中移除的统一值。例如,在执行游戏应用程序期间,统一值识别单元225可以生成用于M个帧的直方图。在M个帧后,分析直方图,然后添加、移除或替换一个或更多个统一值。
图2B示出了用于将值写入存储器的方法200的示例性流程图。在步骤205中,处理器120(或高速缓存215)接收对包括在区域中的颗粒的地址的写请求。对不包含在任何区域中的地址的写请求被写入到存储器110中与写请求一起包括的地址相对应的一个或更多个位置。在步骤210中,处理器120(或高速缓存215)确定针对与该地址相关联的区域是否存在CSI表。如果不存在CSI表,则在步骤230中,为该区域创建CSI表和本地统一表。替代地,如以上所指示的那样,处理写请求,就好像写请求的地址不与区域相关联一样。
在步骤235中,统一值识别单元225确定将写请求中指示的一个或更多个值写入颗粒是否会导致统一颗粒。当颗粒中的所有值相同或接近相等时,颗粒是统一的。例如,当颗粒存储32位像素值时,如果颗粒中的所有32位像素值都相同或接近相等,则颗粒是统一的。统一值识别单元225可以比较颗粒中的所有值以确定这些值是否是统一的。在一个实施例中,并行比较颗粒中的所有值。在另一个实施例中,迭代地比较颗粒中的值。本领域技术人员将理解,可以采用许多不同的技术来确定颗粒的值是否是统一的。
如果颗粒将不是统一的,则处理器120(或高速缓存器215)从步骤235前进到步骤240,并将非统一值存储到与颗粒相关联的片外存储器110中的位置。值可以以未压缩格式或不同(非ZBC)压缩格式存储。对于不覆写整个压缩颗粒的写操作,首先对颗粒进行解压缩以将一个或更多个新值与现有值合并,然后可以将颗粒重新压缩或保持为未压缩格式。在步骤240之后,颗粒的CSI条目被写入,以指示颗粒不是ZBC压缩的。
在步骤235中,如果由于写入颗粒将是统一的,则处理器120(或高速缓存215)检查要写入的值是否与存储在颗粒的全局统一表124或本地统一表125中的统一值匹配。
在一个实施例中,全局统一表124和/或本地统一表125被实现为内容可寻址存储器(CAM),当匹配的统一值存储在CAM中时,该CAM返回索引。当在条目中找到匹配的统一值时,统一值识别单元225前进到步骤250,并写入颗粒的具有匹配索引的CSI条目。否则,当要写入的值与统一表中存储的统一值不匹配时,在步骤255中,处理器120(或高速缓存215)确定统一表中是否有空条目可用。在一个实施例中,处理器120(或高速缓存215)可以在检查由区域共享的全局统一表中的空条目之前,首先检查该区域专用的本地统一表中的空(未使用的)条目。在步骤260中,将包括在写请求中的统一值写入在步骤255中识别的空统一表条目。在步骤270中,将在步骤260中写入的条目的索引存储在颗粒的CSI表中和断言的ZBC压缩位。
返回到步骤255,当处理器120(或高速缓存215)确定在统一值表中没有空条目可用时,则在步骤265中,处理器120(或高速缓存215)将区域分开为两个(或在一些实施例中,多个)较小的区域。在一个实施例中,为了产生两个较小的区域,将原始区域的CSI表分成两个CSI表,并且为两个较小的区域克隆原始区域的本地统一表。因此,正被写入的颗粒与两个较小区域之一相关联,因为与该颗粒相关联的CSI条目被包括在仅用于两个较小区域之一的CSI表中。在分开后,较小区域的单独CSI表中CSI表条目的组合数量等于原始区域的CSI表中条目的数量。但是,两个较小区域的本地统一表中可用的条目的组合数量是原始区域的本地统一表中可用的条目的数量的两倍。CSI表在较小区域中不再引用的统一值将从较小区域的本地统一表中移除(例如,通过减少统一值表中统一值的计数)或被无效(例如,通过断言统一值表中的条目的无效标志),从而清空较小区域的本地统一表中的一个或更多个条目。在步骤260中,将包括在写请求中的统一值写入较小区域的空的统一表条目。在步骤270中,将在步骤260中写入的条目的索引存储在颗粒的CSI表中,并断言ZBC压缩位。
如先前所解释的,ZBC机制减少了用于清除(写入)存储器块和读取清除的存储器所消耗的片外存储器带宽。但是,现有ZBC机制的缺点是只能使用Graphics API级别的清除命令执行ZBC压缩。当在处理器120或220中实现动态统一值识别和ZBC压缩时,动态生成的缓冲区可受益于ZBC压缩。另外,处理器120或220可被配置为通过维持直方图来跟踪动态检测的统一值发生的频率来执行配置,并且还可以实现启发式算法以确定何时将来自直方图的值提升到全局统一表124或本地统一表125。
并行处理架构
图3示出了根据一个实施例的并行处理单元(PPU)300。在一个实施例中,PPU 300是在一个或更多个集成电路器件上实现的多线程处理器。PPU 300是设计用于并行处理许多线程的延迟隐藏体系架构。线程(即,执行线程)是被配置为由PPU 300执行的指令集的实例。在一个实施例中,PPU 300是图形处理单元(GPU),其被配置为实现用于处理三维(3D)图形数据的图形渲染管线,以便生成用于在显示装置(诸如液晶显示(LCD)设备)上显示的二维(2D)图像数据。在其他实施例中,PPU 300可以用于执行通用计算。尽管为了说明的目的本文提供了一个示例性并行处理器,但应特别指出的是,该处理器仅出于说明目的进行阐述,并且可使用任何处理器来补充和/或替代该处理器。
一个或更多个PPU 300可以被配置为加速数千个高性能计算(HPC)、数据中心和机器学习应用。PPU 300可被配置为加速众多深度学习系统和应用,包括自动驾驶汽车平台、深度学习、高精度语音、图像和文本识别系统、智能视频分析、分子模拟、药物研发、疾病诊断、天气预报、大数据分析、天文学、分子动力学模拟、金融建模、机器人技术、工厂自动化、实时语言翻译、在线搜索优化和个性化用户推荐,等等。
如图3所示,PPU 300包括输入/输出(I/O)单元305、前端单元315、调度器单元320、工作分配单元325、集线器330、交叉开关(Xbar)370、一个或更多个通用处理集群(GPC)350以及一个或更多个存储器分区单元380。PPU 300可以经由一个或更多个高速NVLink 310互连连接到主机处理器或其他PPU 300。PPU 300可以经由互连302连接到主机处理器或其他外围设备。PPU 300还可以连接到包括多个存储器设备的本地存储器304。在一个实施例中,本地存储器可以包括多个动态随机存取存储器(DRAM)设备。DRAM设备可以被配置为高带宽存储器(HBM)子系统,其中多个DRAM裸晶(die)堆叠在每个设备内。
NVLink 310互连使得系统能够扩展并且包括与一个或更多个CPU结合的一个或更多个PPU 300,支持PPU 300和CPU之间的高速缓存一致性,以及CPU主控。数据和/或命令可以由NVLink 310通过集线器330发送到PPU 300的其他单元或从其发送,例如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。结合图5B更详细地描述NVLink 310。
I/O单元305被配置为通过互连302从主机处理器(未示出)发送和接收通信(例如,命令、数据等)。I/O单元305可以经由互连302直接与主机处理器通信,或通过一个或更多个中间设备(诸如内存桥)与主机处理器通信。在一个实施例中,I/O单元305可以经由互连302与一个或更多个其他处理器(例如,一个或更多个PPU 300)通信。在一个实施例中,I/O单元305实现外围组件互连高速(PCIe)接口,用于通过PCIe总线进行通信,并且互连302是PCIe总线。在替代的实施例中,I/O单元305可以实现其他类型的已知接口,用于与外部设备进行通信。
I/O单元305对经由互连302接收的数据包进行解码。在一个实施例中,数据包表示被配置为使PPU 300执行各种操作的命令。I/O单元305按照命令指定将解码的命令发送到PPU 300的各种其他单元。例如,一些命令可以被发送到前端单元315。其他命令可以被发送到集线器330或PPU 300的其他单元,诸如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。换句话说,I/O单元305被配置为在PPU 300的各种逻辑单元之间和之中路由通信。
在一个实施例中,由主机处理器执行的程序在缓冲区中对命令流进行编码,该缓冲区向PPU 300提供工作量用于处理。工作量可以包括要由那些指令处理的许多指令和数据。缓冲区是存储器中可由主机处理器和PPU300两者访问(例如,读/写)的区域。例如,I/O单元305可以被配置为经由通过互连302传输的存储器请求访问连接到互连302的系统存储器中的缓冲区。在一个实施例中,主机处理器将命令流写入缓冲区,然后向PPU 300发送指向命令流开始的指针。前端单元315接收指向一个或更多个命令流的指针。前端单元315管理一个或更多个流,从流读取命令并将命令转发到PPU 300的各个单元。
前端单元315耦合到调度器单元320,其配置各种GPC 350以处理由一个或更多个流定义的任务。调度器单元320被配置为跟踪与由调度器单元320管理的各种任务相关的状态信息。状态可以指示任务被指派给哪个GPC 350,该任务是活动的还是不活动的,与该任务相关联的优先级等等。调度器单元320管理一个或更多个GPC 350上的多个任务的执行。
调度器单元320耦合到工作分配单元325,其被配置为分派任务以在GPC 350上执行。工作分配单元325可以跟踪从调度器单元320接收到的若干调度的任务。在一个实施例中,工作分配单元325为每个GPC 350管理待处理(pending)任务池和活动任务池。待处理任务池可以包括若干时隙(例如,32个时隙),其包含被指派为由特定GPC 350处理的任务。活动任务池可以包括若干时隙(例如,4个时隙),用于正在由GPC 350主动处理的任务。当GPC350完成任务的执行时,该任务从GPC 350的活动任务池中逐出,并且来自待处理任务池的其他任务之一被选择和调度以在GPC 350上执行。如果GPC 350上的活动任务已经空闲,例如在等待数据依赖性被解决时,那么活动任务可以从GPC 350中逐出并返回到待处理任务池,而待处理任务池中的另一个任务被选择并调度以在GPC 350上执行。
工作分配单元325经由XBar(交叉开关)370与一个或更多个GPC 350通信。XBar370是将PPU 300的许多单元耦合到PPU 300的其他单元的互连网络。例如,XBar 370可以被配置为将工作分配单元325耦合到特定的GPC 350。虽然没有明确示出,但PPU 300的一个或更多个其他单元也可以经由集线器330连接到XBar 370。
任务由调度器单元320管理并由工作分配单元325分派给GPC 350。GPC 350被配置为处理任务并生成结果。结果可以由GPC 350内的其他任务消耗,经由XBar 370路由到不同的GPC 350,或者存储在存储器304中。结果可以经由存储器分区单元380写入存储器304,存储器分区单元380实现用于从存储器304读取数据和向存储器304写入数据的存储器接口。结果可以通过NVLink310发送到另一个PPU 300或CPU。在一个实施例中,PPU 300包括数目为U的存储器分区单元380,其等于耦合到PPU 300的存储器304的独立且不同的存储器设备的数目。下面将结合图4B更详细地描述存储器分区单元380。
在一个实施例中,主机处理器执行实现API的驱动程序内核,其使得能够在主机处理器上执行一个或更多个应用程序以调度操作用于在PPU 300上执行。在一个实施例中,多个计算应用由PPU 300同时执行,并且PPU 300为多个计算应用程序提供隔离、服务质量(QoS)和独立地址空间。应用程序可以生成指令(例如,API调用),其使得驱动程序内核生成一个或更多个任务以由PPU 300执行。驱动程序内核将任务输出到正在由PPU 300处理的一个或更多个流。每个任务可以包括一个或更多个相关线程组,本文称为线程束(warp)。在一个实施例中,线程束包括可以并行执行的32个相关线程。协作线程可以指代包括执行任务的指令并且可以通过共享存储器交换数据的多个线程。结合图5A更详细地描述线程和协作线程。
图4A示出了根据一个实施例的图3的PPU 300的GPC 350。如图4A所示,每个GPC350包括用于处理任务的多个硬件单元。在一个实施例中,每个GPC 350包括管线管理器410、预光栅操作单元(PROP)415、光栅引擎425、工作分配交叉开关(WDX)480、存储器管理单元(MMU)490以及一个或更多个数据处理集群(DPC)420。应当理解,图4A的GPC 350可以包括代替图4A中所示单元的其他硬件单元或除图4A中所示单元之外的其他硬件单元。
在一个实施例中,GPC 350的操作由管线管理器410控制。管线管理器410管理用于处理分配给GPC 350的任务的一个或更多个DPC 420的配置。在一个实施例中,管线管理器410可以配置一个或更多个DPC 420中的至少一个来实现图形渲染管线的至少一部分。例如,DPC 420可以被配置为在可编程流式多处理器(SM)440上执行顶点着色程序。管线管理器410还可以被配置为将从工作分配单元325接收的数据包路由到GPC 350中适当的逻辑单元。例如,一些数据包可以被路由到PROP 415和/或光栅引擎425中的固定功能硬件单元,而其他数据包可以被路由到DPC 420以供图元引擎435或SM 440处理。在一个实施例中,管线管理器410可以配置一个或更多个DPC 420中的至少一个以实现神经网络模型和/或计算管线。
PROP单元415被配置为将由光栅引擎425和DPC 420生成的数据路由到光栅操作(ROP)单元,结合图4B更详细地描述。PROP单元415还可以被配置为执行颜色混合的优化,组织像素数据,执行地址转换等。
光栅引擎425包括被配置为执行各种光栅操作的若干固定功能硬件单元。在一个实施例中,光栅引擎425包括设置引擎、粗光栅引擎、剔除引擎、裁剪引擎、精细光栅引擎和瓦片聚合引擎。设置引擎接收变换后的顶点并生成与由顶点定义的几何图元关联的平面方程。平面方程被发送到粗光栅引擎以生成图元的覆盖信息(例如,瓦片的x、y覆盖掩码)。粗光栅引擎的输出被发送到剔除引擎,其中与未通过z-测试的图元相关联的片段被剔除,并且被发送到裁剪引擎,其中位于视锥体之外的片段被裁剪掉。那些经过裁剪和剔除后留下来的片段可以被传递到精细光栅引擎,以基于由设置引擎生成的平面方程生成像素片段的属性。光栅引擎425的输出包括例如要由在DPC 420内实现的片段着色器处理的片段。
包括在GPC 350中的每个DPC 420包括M管道控制器(MPC)430、图元引擎435和一个或更多个SM 440。MPC 430控制DPC 420的操作,将从管线管理器410接收到的数据包路由到DPC 420中的适当单元。例如,与顶点相关联的数据包可以被路由到图元引擎435,图元引擎435被配置为从存储器304提取与顶点相关联的顶点属性。相反,与着色程序相关联的数据包可以被发送到SM 440。
SM 440包括被配置为处理由多个线程表示的任务的可编程流式处理器。每个SM440是多线程的并且被配置为同时执行来自特定线程组的多个线程(例如,32个线程)。在一个实施例中,SM 440实现SIMD(单指令、多数据)体系架构,其中线程组(例如,线程束)中的每个线程被配置为基于相同的指令集来处理不同的数据集。线程组中的所有线程都执行相同的指令。在另一个实施例中,SM 440实现SIMT(单指令、多线程)体系架构,其中线程组中的每个线程被配置为基于相同的指令集处理不同的数据集,但是其中线程组中的各个线程在执行期间被允许发散。在一个实施例中,为每个线程束维护程序计数器、调用栈和执行状态,当线程束内的线程发散时,使能线程束之间的并发和线程束内的串行执行。在另一个实施例中,为每个个体线程维护程序计数器、调用栈和执行状态,从而在线程束内和线程束之间的所有线程之间实现相等的并发。当为每个个体线程维护执行状态时,执行相同指令的线程可以被收敛并且并行执行以获得最大效率。下面结合图5A更详细地描述SM 440。
MMU 490提供GPC 350和存储器分区单元380之间的接口。MMU 490可以提供虚拟地址到物理地址的转换、存储器保护以及存储器请求的仲裁。在一个实施例中,MMU 490提供用于执行从虚拟地址到存储器304中的物理地址的转换的一个或更多个转换后备缓冲器(TLB)。
图4B示出了根据一个实施例的图3的PPU 300的存储器分区单元380。如图4B所示,存储器分区单元380包括光栅操作(ROP)单元450、二级(L2)高速缓存460和存储器接口470。存储器接口470耦合到存储器304。存储器接口470可以实现用于高速数据传输的32、64、128、1024位数据总线等。在一个实施例中,PPU 300合并了U个存储器接口470,每对存储器分区单元380有一个存储器接口470,其中每对存储器分区单元380连接到存储器304的对应的存储器设备。例如,PPU 300可以连接到多达Y个存储器设备,诸如高带宽存储器堆叠或图形双数据速率版本5的同步动态随机存取存储器或其他类型的持久存储器。
在一个实施例中,存储器接口470实现HBM2存储器接口,并且Y等于U的一半。在一个实施例中,HBM2存储器堆叠位于与PPU 300相同的物理封装上,提供与常规GDDR5 SDRAM系统相比显著的功率高和面积节约。在一个实施例中,每个HBM2堆叠包括四个存储器裸晶并且Y等于4,其中HBM2堆叠包括每个裸晶两个128位通道,总共8个通道和1024位的数据总线宽度。
在一个实施例中,存储器304支持单错校正双错检测(SECDED)纠错码(ECC)以保护数据。对于对数据损毁敏感的计算应用程序,ECC提供了更高的可靠性。在大型集群计算环境中,PPU 300处理非常大的数据集和/或长时间运行应用程序,可靠性尤其重要。
在一个实施例中,PPU 300实现多级存储器层次。在一个实施例中,存储器分区单元380支持统一存储器以为CPU和PPU 300存储器提供单个统一的虚拟地址空间,使得虚拟存储器系统之间的数据能够共享。在一个实施例中,跟踪PPU 300对位于其他处理器上的存储器的访问频率,以确保存储器页面被移动到更频繁地访问该页面的PPU 300的物理存储器。在一个实施例中,NVLink 310支持地址转换服务,其允许PPU 300直接访问CPU的页表并且提供由PPU 300对CPU存储器的完全访问。
在一个实施例中,复制引擎在多个PPU 300之间或在PPU 300与CPU之间传输数据。复制引擎可以为未映射到页表的地址生成页面错误。然后,存储器分区单元380可以服务页面错误,将地址映射到页表中,之后复制引擎可以执行传输。在常规系统中,针对多个处理器之间的多个复制引擎操作固定存储器(例如,不可分页),其显著减少了可用存储器。由于硬件分页错误,地址可以传递到复制引擎而不用担心存储器页面是否驻留,并且复制过程是否透明。
来自存储器304或其他系统存储器的数据可以由存储器分区单元380取回并存储在L2高速缓存460中,L2高速缓存460位于芯片上并且在各个GPC 350之间共享。如图所示,每个存储器分区单元380包括与对应的存储器304相关联的L2高速缓存460的一部分。然后可以在GPC 350内的多个单元中实现较低级高速缓存。例如,每个SM 440可以实现一级(L1)高速缓存。L1高速缓存是专用于特定SM 440的专用存储器。来自L2高速缓存460的数据可以被获取并存储在每个L1高速缓存中,以在SM 440的功能单元中进行处理。L2高速缓存460被耦合到存储器接口470和XBar 370。
ROP单元450执行与诸如颜色压缩、像素混合等像素颜色相关的图形光栅操作。ROP单元450还与光栅引擎425一起实现深度测试,从光栅引擎425的剔除引擎接收与像素片段相关联的样本位置的深度。测试与片段关联的样本位置相对于深度缓冲区中的对应深度的深度。如果片段通过样本位置的深度测试,则ROP单元450更新深度缓冲区并将深度测试的结果发送给光栅引擎425。将理解的是,存储器分区单元380的数量可以不同于GPC 350的数量,并且因此每个ROP单元450可以耦合到每个GPC 350。ROP单元450跟踪从不同GPC 350接收到的数据包并且确定由ROP单元450生成的结果通过Xbar 370被路由到哪个GPC 350。尽管在图4B中ROP单元450被包括在存储器分区单元380内,但是在其他实施例中,ROP单元450可以在存储器分区单元380之外。例如,ROP单元450可以驻留在GPC 350或另一个单元中。
图5A示出了根据一个实施例的图4A的流式多处理器440。如图5A所示,SM 440包括指令高速缓存505、一个或更多个调度器单元510、寄存器文件520、一个或更多个处理核心550、一个或更多个特殊功能单元(SFU)552、一个或更多个加载/存储单元(LSU)554、互连网络580、共享存储器/L1高速缓存570。
如上所述,工作分配单元325调度任务以在PPU 300的GPC 350上执行。任务被分配给GPC 350内的特定DPC 420,并且如果该任务与着色器程序相关联,则该任务可以被分配给SM 440。调度器单元510接收来自工作分配单元325的任务并且管理指派给SM 440的一个或更多个线程块的指令调度。调度器单元510调度线程块以作为并行线程的线程束执行,其中每个线程块被分配至少一个线程束。在一个实施例中,每个线程束执行32个线程。调度器单元510可以管理多个不同的线程块,将线程束分配给不同的线程块,然后在每个时钟周期期间将来自多个不同的协作组的指令分派到各个功能单元(即,核心550、SFU 552和LSU554)。
协作组是用于组织通信线程组的编程模型,其允许开发者表达线程正在进行通信所采用的粒度,使得能够表达更丰富、更高效的并行分解。协作启动API支持线程块之间的同步性,以执行并行算法。常规的编程模型为同步协作线程提供了单一的简单结构:跨线程块的所有线程的栅栏(barrier)(例如,syncthreads()函数)。然而,程序员通常希望以小于线程块粒度的粒度定义线程组,并在所定义的组内同步,以集体的全组功能接口(collective group-wide function interface)的形式使能更高的性能、设计灵活性和软件重用。
协作组使得程序员能够在子块(例如,像单个线程一样小)和多块粒度处明确定义线程组并且执行集体操作,诸如协作组中的线程上的同步性。编程模型支持跨软件边界的干净组合,以便库和效用函数可以在他们本地环境中安全地同步,而无需对收敛进行假设。协作组图元启用合作并行的新模式,包括生产者-消费者并行、机会主义并行以及跨整个线程块网格的全局同步。
分派单元515被配置为向一个或更多个功能单元传送指令。在该实施例中,调度器单元510包括两个分派单元515,其使得能够在每个时钟周期期间调度来自相同线程束的两个不同指令。在替代实施例中,每个调度器单元510可以包括单个分派单元515或附加分派单元515。
每个SM 440包括寄存器文件520,其提供用于SM 440的功能单元的一组寄存器。在一个实施例中,寄存器文件520在每个功能单元之间被划分,使得每个功能单元被分配寄存器文件520的专用部分。在另一个实施例中,寄存器文件520在由SM 440执行的不同线程束之间被划分。寄存器文件520为连接到功能单元的数据路径的操作数提供临时存储器。
每个SM 440包括L个处理核心550。在一个实施例中,SM 440包括大量(例如128个等)不同的处理核心550。每个核心550可以包括完全管线化的、单精度、双精度和/或混合精度处理单元,其包括浮点运算逻辑单元和整数运算逻辑单元。在一个实施例中,浮点运算逻辑单元实现用于浮点运算的IEEE 754-2008标准。在一个实施例中,核心550包括64个单精度(32位)浮点核心、64个整数核心、32个双精度(64位)浮点核心和8个张量核心(tensorcore)。
张量核心被配置为执行矩阵运算,并且在一个实施例中,一个或更多个张量核心被包括在核心550中。具体地,张量核心被配置为执行深度学习矩阵运算,诸如用于神经网络训练和推理的卷积运算。在一个实施例中,每个张量核心在4×4矩阵上运算并且执行矩阵乘法和累加运算D=A×B+C,其中A、B、C和D是4×4矩阵。
在一个实施例中,矩阵乘法输入A和B是16位浮点矩阵,而累加矩阵C和D可以是16位浮点或32位浮点矩阵。张量核心在16位浮点输入数据以及32位浮点累加上运算。16位浮点乘法需要64次运算,产生全精度的积,然后使用32位浮点与4×4×4矩阵乘法的其他中间积相加来累加。在实践中,张量核心用于执行由这些较小的元素建立的更大的二维或更高维的矩阵运算。API(诸如CUDA9C++API)公开了专门的矩阵加载、矩阵乘法和累加以及矩阵存储运算,以便有效地使用来自CUDA-C++程序的张量核心。在CUDA层面,线程束级接口假定16×16尺寸矩阵跨越线程束的全部32个线程。
每个SM 440还包括执行特殊函数(例如,属性评估、倒数平方根等)的M个SFU 552。在一个实施例中,SFU 552可以包括树遍历单元,其被配置为遍历分层树数据结构。在一个实施例中,SFU 552可以包括被配置为执行纹理图过滤操作的纹理单元。在一个实施例中,纹理单元被配置为从存储器304加载纹理图(例如,纹理像素的2D阵列)并且对纹理图进行采样以产生经采样的纹理值,用于在由SM 440执行的着色器程序中使用。在一个实施例中,纹理图被存储在共享存储器/L1高速缓存570中。纹理单元实现纹理操作,诸如使用mip图(即,不同细节层次的纹理图)的过滤操作。在一个实施例中,每个SM 440包括两个纹理单元。
每个SM 440还包括N个LSU 554,其实现共享存储器/L1高速缓存570和寄存器文件520之间的加载和存储操作。每个SM 440包括将每个功能单元连接到寄存器文件520以及将LSU 554连接到寄存器文件520、共享存储器/L1高速缓存570的互连网络580。在一个实施例中,互连网络580是交叉开关,其可以被配置为将任何功能单元连接到寄存器文件520中的任何寄存器,以及将LSU 554连接到寄存器文件和共享存储器/L1高速缓存570中的存储器位置。
共享存储器/L1高速缓存570是片上存储器阵列,其允许数据存储和SM 440与图元引擎435之间以及SM 440中的线程之间的通信。在一个实施例中,共享存储器/L1高速缓存570包括128KB的存储容量并且在从SM 440到存储器分区单元380的路径中。共享存储器/L1高速缓存570可以用于高速缓存读取和写入。共享存储器/L1高速缓存570、L2高速缓存460和存储器304中的一个或更多个是后备存储。
将数据高速缓存和共享存储器功能组合成单个存储器块为两种类型的存储器访问提供最佳的总体性能。该容量可由程序用作不使用共享存储器的高速缓存。例如,如果将共享存储器配置为使用一半容量,则纹理和加载/存储操作可以使用剩余容量。在共享存储器/L1高速缓存570内的集成使共享存储器/L1高速缓存570起到用于流式传输数据的高吞吐量管线的作用,并且同时提供对频繁重用数据的高带宽和低延迟的访问。
当被配置用于通用并行计算时,与图形处理相比,可以使用更简单的配置。具体地,图3所示的固定功能图形处理单元被绕过,创建了更简单的编程模型。在通用并行计算配置中,工作分配单元325将线程块直接指派并分配给DPC 420。块中的线程执行相同的程序,使用计算中的唯一线程ID来确保每个线程生成唯一结果,使用SM 440执行程序并执行计算,使用共享存储器/L1高速缓存570以在线程之间通信,以及使用LSU 554通过共享存储器/L1高速缓存570和存储器分区单元380读取和写入全局存储器。当被配置用于通用并行计算时,SM 440还可以写入调度器单元320可用来在DPC 420上启动新工作的命令。
PPU 300可以被包括在台式计算机、膝上型计算机、平板电脑、服务器、超级计算机、智能电话(例如,无线、手持设备)、个人数字助理(PDA)、数码相机、运载工具、头戴式显示器、手持式电子设备等中。在一个实施例中,PPU 300包含在单个半导体衬底上。在另一个实施例中,PPU 300与一个或更多个其他器件(诸如附加PPU 300、存储器304、精简指令集计算机(RISC)CPU、存储器管理单元(MMU)、数字-模拟转换器(DAC)等)一起被包括在片上系统(SoC)上。
在一个实施例中,PPU 300可以被包括在图形卡上,图形卡包括一个或更多个存储器设备。图形卡可以被配置为与台式计算机的主板上的PCIe插槽接口。在又一个实施例中,PPU 300可以是包含在主板的芯片集中的集成图形处理单元(iGPU)或并行处理器。
示例性计算系统
具有多个GPU和CPU的系统被用于各种行业,因为开发者在应用(诸如人工智能计算)中暴露和利用更多的并行性。在数据中心、研究机构和超级计算机中部署具有数十至数千个计算节点的高性能GPU加速系统,以解决更大的问题。随着高性能系统内处理设备数量的增加,通信和数据传输机制需要扩展以支持该增加带宽。
图5B是根据一个实施例的使用图3的PPU 300实现的处理系统500的概念图。示例性系统565可以被配置为实现图1D中所示的方法130、图1E中所示的方法150、和/或图2B中所示的方法200。处理系统500包括CPU 530、交换机510和多个PPU 300以及相应的存储器304。NVLink 310提供每个PPU 300之间的高速通信链路。尽管图5B中示出了特定数量的NVLink 310和互连302连接,但是连接到每个PPU 300和CPU 530的连接的数量可以改变。交换机510在互连302和CPU 530之间接口。PPU 300、存储器304和NVLink 310可以位于单个半导体平台上以形成并行处理模块525。在一个实施例中,交换机510支持两个或更多个在各种不同连接和/或链路之间接口的协议。
在另一个实施例(未示出)中,NVLink 310在每个PPU 300和CPU 530之间提供一个或更多个高速通信链路,并且交换机510在互连302和每个PPU 300之间进行接口。PPU 300、存储器304和互连302可以位于单个半导体平台上以形成并行处理模块525。在又一个实施例(未示出)中,互连302在每个PPU 300和CPU 530之间提供一个或更多个通信链路,并且交换机510使用NVLink 310在每个PPU 300之间进行接口,以在PPU 300之间提供一个或更多个高速通信链路。在另一个实施例(未示出)中,NVLink 310在PPU 300和CPU 530之间通过交换机510提供一个或更多个高速通信链路。在又一个实施例(未示出)中,互连302在每个PPU 300之间直接地提供一个或更多个通信链路。可以使用与NVLink 310相同的协议将一个或更多个NVLink 310高速通信链路实现为物理NVLink互连或者片上或裸晶上互连。
在本说明书的上下文中,单个半导体平台可以指在裸晶或芯片上制造的唯一的单一的基于半导体的集成电路。应该注意的是,术语单个半导体平台也可以指具有增加的连接的多芯片模块,其模拟片上操作并通过利用常规总线实现方式进行实质性改进。当然,根据用户的需要,各种电路或器件还可以分开放置或以半导体平台的各种组合来放置。可选地,并行处理模块525可以被实现为电路板衬底,并且PPU 300和/或存储器304中的每一个可以是封装器件。在一个实施例中,CPU 530、交换机510和并行处理模块525位于单个半导体平台上。
在一个实施例中,每个NVLink 310的信令速率是20到25千兆位/秒,并且每个PPU300包括六个NVLink 310接口(如图5B所示,每个PPU 300包括五个NVLink 310接口)。每个NVLink 310在每个方向上提供25千兆位/秒的数据传输速率,其中六条链路提供300千兆位/秒。当CPU 530还包括一个或更多个NVLink 310接口时,NVLink 310可专门用于如图5B所示的PPU到PPU通信,或者PPU到PPU以及PPU到CPU的某种组合。
在一个实施例中,NVLink 310允许从CPU 530到每个PPU 300的存储器304的直接加载/存储/原子访问。在一个实施例中,NVLink 310支持一致性操作,允许从存储器304读取的数据被存储在CPU 530的高速缓存分层结构中,减少了CPU 530的高速缓存访问延迟。在一个实施例中,NVLink 310包括对地址转换服务(ATS)的支持,允许PPU 300直接访问CPU530内的页表。一个或更多个NVLink 310还可以被配置为以低功率模式操作。
图5C示出了示例性系统565,其中可以实现各种先前实施例的各种体系架构和/或功能。示例性系统565可以被配置为实现图1D中所示的方法130、图1E中所示的方法150、和/或图2B中所示的方法200。
如图所示,提供系统565,其包括连接到通信总线575的至少一个中央处理单元530。通信总线575可以使用任何合适的协议来实现,诸如PCI(外围组件互连)、PCI-Express、AGP(加速图形端口)、超传输或任何其他总线或一个或更多个点对点通信协议。系统565还包括主存储器540。控制逻辑(软件)和数据被存储在主存储器540中,主存储器540可以采取随机存取存储器(RAM)的形式。
系统565还包括输入设备560、并行处理系统525和显示设备545,例如常规CRT(阴极射线管)、LCD(液晶显示器)、LED(发光二极管)、等离子显示器等。可以从输入设备560(例如键盘、鼠标、触摸板、麦克风等)接收用户输入。前述模块和/或设备中的每一个甚至可以位于单个半导体平台上以形成系统565。可选地,根据用户的需要,各个模块还可以分开放置或以半导体平台的各种组合来放置。
此外,系统565可以出于通信目的通过网络接口535耦合到网络(例如,电信网络、局域网(LAN)、无线网络、广域网(WAN)(诸如因特网)、对等网络、电缆网络等)。
系统565还可以包括辅助存储(未示出)。辅助存储610包括例如硬盘驱动器和/或可移除存储驱动器、代表软盘驱动器、磁带驱动器、光盘驱动器、数字多功能盘(DVD)驱动器、记录设备、通用串行总线(USB)闪存。可移除存储驱动器以众所周知的方式从可移除存储单元读取和/或写入可移除存储单元。
计算机程序或计算机控制逻辑算法可以存储在主存储器540和/或辅助存储中。这些计算机程序在被执行时使得系统565能够执行各种功能。存储器540、存储和/或任何其他存储是计算机可读介质的可能示例。
各种在先附图的体系架构和/或功能可以在通用计算机系统、电路板系统、专用于娱乐目的的游戏控制台系统、专用系统和/或任何其他所需的系统的上下文中实现。例如,系统565可以采取台式计算机、膝上型计算机、平板电脑、服务器、超级计算机、智能电话(例如,无线、手持设备)、个人数字助理(PDA)、数字相机、运载工具、头戴式显示器、手持式电子设备、移动电话设备、电视机、工作站、游戏控制台、嵌入式系统和/或任何其他类型的逻辑的形式。
虽然上面已经描述了各种实施例,但是应该理解,它们仅以示例的方式呈现,而不是限制。因此,优选实施例的宽度和范围不应受任何上述示例性实施例的限制,而应仅根据所附权利要求及其等同物来限定。
图形处理管线
在一个实施例中,PPU 300包括图形处理单元(GPU)。PPU 300被配置为接收指定用于处理图形数据的着色程序的命令。图形数据可以被定义为一组图元,例如点、线、三角形、四边形、三角形带等。典型地,图元包括指定图元的多个顶点(例如,在模型空间坐标系中)的数据以及与图元的每个顶点相关联的属性。PPU 300可以被配置为处理图元以生成帧缓冲区(例如,用于显示器的像素中的每一个的像素数据)。
应用程序将场景的模型数据(例如,顶点和属性的集合)写入存储器(诸如系统存储器或存储器304)。模型数据定义可能在显示器上可见的对象中的每一个。然后应用程序对驱动程序内核进行API调用,其请求要被渲染和显示的模型数据。驱动程序内核读取模型数据并将命令写入一个或更多个流以执行操作来处理模型数据。这些命令可以参考要在PPU 300的SM 440上实现的不同着色程序,包括顶点着色、外壳着色、域着色、几何着色和像素着色中的一个或更多个。例如,SM 440中的一个或更多个可以被配置为执行顶点着色程序,其处理由模型数据定义的多个顶点。在一个实施例中,不同的SM 440可以被配置为同时执行不同的着色程序。例如,SM 440的第一子集可以被配置为执行顶点着色程序,而SM 440的第二子集可以被配置为执行像素着色程序。SM 440的第一子集处理顶点数据以产生经处理的顶点数据,并将经处理的顶点数据写入L2高速缓存460和/或存储器304。在经处理的顶点数据被光栅化(例如,从三维数据转换成屏幕空间中的二维数据)以产生片段数据之后,SM 440的第二子集执行像素着色以产生经处理的片段数据,然后将其与其他经处理的片段数据混合并被写入存储器304中的帧缓冲区。顶点着色程序和像素着色程序可以同时执行,以管线方式处理来自同一场景的不同数据,直到该场景的所有模型数据已经被渲染到帧缓冲区。然后,帧缓冲区的内容被传送到显示控制器以在显示设备上显示。
图6是根据一个实施例的由图3的PPU 300实现的图形处理管线600的概念图。图形处理管线600是被实现以从3D几何数据生成2D计算机生成图像的处理步骤的抽象流程图。众所周知,管线架构可以通过将操作分成多个阶段来更高效地执行长延迟操作,其中每个阶段的输出耦合到下一个连续阶段的输入。因此,图形处理管线600接收从图形处理管线600的一个阶段传送到下一阶段的输入数据601,以生成输出数据602。在一个实施例中,图形处理管线600可表示由API定义的图形处理管线。作为选择,图形处理管线600可以在先前附图和/或一个或更多个任何后续附图的功能和架构的上下文中实现。
如图6所示,图形处理管线600包括包含多个阶段的管线架构。这些阶段包括但不限于数据组装阶段610、顶点着色阶段620、图元组装阶段630、几何着色阶段640、视口缩放、剔除和裁剪(viewport scale,cull,and clip,VSCC)阶段650、光栅化阶段660、片段着色阶段670和光栅操作阶段680。在一个实施例中,输入数据601包括命令,其配置处理单元以实现图形处理管线600的阶段,并配置几何图元(例如,点、线、三角形、四边形、三角形带或扇形等)以由这些阶段处理。输出数据602可以包括像素数据(即,颜色数据),其被复制到存储器中的帧缓冲区或其他类型的表面数据结构中。
数据组装阶段610接收输入数据601,其指定用于高阶表面、图元等的顶点数据。数据组装阶段610收集临时存储或队列中的顶点数据,诸如通过从主机处理器接收包括指向存储器中的缓冲区的指针的命令并从该缓冲区读取顶点数据。顶点数据然后被传送到顶点着色阶段620以进行处理。
顶点着色阶段620通过对顶点中的每一个执行一次一组操作(例如,顶点着色器或程序)来处理顶点数据。顶点可以例如被指定为与一个或更多个顶点属性(例如,颜色、纹理坐标、表面法线等)相关联的4坐标向量(例如,<x,y,z,w>)。顶点着色阶段620可以操纵各个顶点属性,诸如位置、颜色、纹理坐标等。换句话说,顶点着色阶段620对与顶点相关联的顶点坐标或其他顶点属性执行操作。这些操作通常包括光照操作(例如,修改顶点的颜色属性)和变换操作(例如,修改顶点的坐标空间)。例如,可以使用对象坐标空间中的坐标来指定顶点,其通过将坐标乘以矩阵进行变换,该矩阵将坐标从对象坐标空间转换到世界空间或归一化设备坐标(normalized-device-coordinate,NCD)空间。顶点着色阶段620生成被传送到图元组装阶段630的经变换的顶点数据。
图元组装阶段630收集由顶点着色阶段620输出的顶点并且将顶点分组成几何图元以由几何着色阶段640处理。例如,图元组装阶段630可以被配置为将每三个连续顶点分组为用于传送到几何着色阶段640的几何图元(例如,三角形)。在一些实施例中,特定顶点可以被重新用于连续几何图元(例如,三角形带中的两个连续三角形可以共享两个顶点)。图元组装阶段630将几何图元(例如,相关联的顶点的集合)传送到几何着色阶段640。
几何着色阶段640通过对几何图元执行一组操作(例如,几何着色器或程序)来处理几何图元。曲面细分(tessellation)操作可以从每个几何图元生成一个或更多个几何图元。换言之,几何着色阶段640可以将每个几何图元细分为两个或更多个几何图元的更精细的网格,以由图形处理管线600的其余部分进行处理。几何着色阶段640将几何图元传送到视口SCC阶段650。
在一个实施例中,图形处理管线600可以在流式多处理器和顶点着色阶段620、图元组装阶段630、几何着色阶段640、片段着色阶段670和/或与其相关联的硬件/软件内操作,可顺序地执行处理操作。一旦顺序处理操作完成,在一个实施例中,视口SCC阶段650可以利用数据。在一个实施例中,由图形处理管线600中的阶段的一个或更多个处理的图元数据可以被写入高速缓存(例如,L1高速缓存、顶点高速缓存等)中。在这种情况下,在一个实施例中,视口SCC阶段650可以访问高速缓存中的数据。在一个实施例中,视口SCC阶段650和光栅化阶段660被实现为固定功能电路。
视口SCC阶段650执行几何图元的视口缩放、剔除和裁剪。正被渲染的每个表面都与抽象相机位置相关联。相机位置表示正观看该场景的观看者的位置并定义了包围该场景的对象的视锥体。视锥体可以包括观看平面、后平面和四个裁剪平面。完全位于视锥体之外的任何几何图元都可被剔除(例如丢弃),因为这些几何图元将不会对最终渲染的场景做出贡献。部分位于视锥体内并且部分位于视锥体外的任何几何图元可以被裁剪(例如,转换为被包围在视锥体内的新的几何图元)。此外,可以基于视锥体的深度来对每个几何图元进行缩放。然后将所有可能可见的几何图元传送到光栅化阶段660。
光栅化阶段660将3D几何图元转换成2D片段(例如,能够用于显示等)。光栅化阶段660可以被配置为利用几何图元的顶点来设置一组平面方程,从中可以内插各种属性。光栅化阶段660还可以计算多个像素的覆盖掩码,其指示像素的一个或更多个样本位置是否拦截几何图元。在一个实施例中,还可以执行z测试以确定几何图元是否被已经被光栅化的其他几何图元遮挡。光栅化阶段660生成片段数据(例如,与每个被覆盖像素的特定样本位置相关联的内插顶点属性),其被传送到片段着色阶段670。
片段着色阶段670通过对片段中的每一个执行一组操作(例如,片段着色器或程序)来处理片段数据。片段着色阶段670可以生成片段的像素数据(例如,颜色值),诸如通过使用片段的内插纹理坐标执行光照操作或采样纹理图。片段着色阶段670生成像素数据,其被发送到光栅操作阶段680。
光栅操作阶段680可对像素数据执行各种操作,诸如执行阿尔法测试、模板测试(stencil test)以及将像素数据与对应于与像素相关联的其他片段的其他像素数据混合。当光栅操作阶段680已经完成对像素数据(例如,输出数据602)的处理时,可以将像素数据写入渲染目标,诸如帧缓冲区、颜色缓冲区等。
应当领会,除上述阶段中的一个或更多个以外或代替上述阶段中的一个或更多个,一个或更多个额外的阶段可以被包括在图形处理管线600中。抽象图形处理管线的各种实现方式可以实现不同的阶段。此外,在一些实施例中,上述阶段中的一个或更多个可以从图形处理管线中排除(诸如几何着色阶段640)。其他类型的图形处理管线被认为是在本公开的范围内所构想的。此外,图形处理管线600的任何阶段可以由图形处理器(诸如PPU300)内的一个或更多个专用硬件单元来实现。图形处理管线600的其他阶段可以由可编程硬件单元(诸如PPU 300的SM 440)来实现。
图形处理管线600可以经由由主机处理器(诸如CPU)执行的应用程序来实现。在一个实施例中,设备驱动程序可以实现API,其定义可以被应用程序利用以生成用于显示的图形数据的各种功能。设备驱动程序是软件程序,其包括控制PPU 300的操作的多个指令。API为程序员提供抽象,其允许程序员利用专用图形硬件(诸如PPU 300)来生成图形数据而不要求程序员利用PPU 300的特定指令集。应用程序可以包括被路由到PPU 300的设备驱动程序的API调用。设备驱动程序解释API调用并执行各种操作以响应API调用。在一些情况下,设备驱动程序可以通过在CPU上执行指令来执行操作。在其他情况下,设备驱动程序可以至少部分地通过利用CPU和PPU 300之间的输入/输出接口在PPU 300上启动操作来执行操作。在一个实施例中,设备驱动程序被配置为利用PPU 300的硬件来实现图形处理管线600。
可以在PPU 300内执行各种程序以便实现图形处理管线600的各个阶段。例如,设备驱动程序可以启动PPU 300上的内核以在一个SM 440(或多个SM 440)上执行顶点着色阶段620。设备驱动程序(或由PPU 400执行的初始内核)还可启动PPU 400上的其他内核以执行图形处理管线600的其他阶段,诸如几何着色阶段640和片段着色阶段670。另外,图形处理管线600的阶段中的一些可以在固定单元硬件(诸如在PPU 400内实现的光栅器或数据组装器)上实现。应当领会,在被SM 440上的后续内核处理之前,来自一个内核的结果可以由一个或更多个中间固定功能硬件单元处理。
机器学习
在处理器(诸如PPU 300)上开发的深度神经网络(DNN)已经用于各种使用情况:从自驾车到更快药物开发,从在线图像数据库中的自动图像字幕到视频聊天应用中的智能实时语言翻译。深度学习是一种技术,它建模人类大脑的神经学习过程,不断学习,不断变得更聪明,并且随着时间的推移更快地传送更准确的结果。一个孩子最初是由成人教导,以正确识别和分类各种形状,最终能够在没有任何辅导的情况下识别形状。同样,深度学习或神经学习系统需要在物体识别和分类方面进行训练,以便在识别基本物体、遮挡物体等同时还有为物体分配情景时变得更加智能和高效。
在最简单的层面上,人类大脑中的神经元查看接收到的各种输入,将重要性级别分配给这些输入中的每一个,并且将输出传递给其他神经元以进行处理。人造神经元或感知器是神经网络的最基本模型。在一个示例中,感知器可以接收一个或更多个输入,其表示感知器正被训练为识别和分类的对象的各种特征,并且在定义对象形状时,这些特征中的每一个基于该特征的重要性赋予一定的权重。
深度神经网络(DNN)模型包括许多连接节点(例如,感知器、玻尔兹曼机器、径向基函数、卷积层等)的多个层,其可以用大量输入数据来训练以快速高精度地解决复杂问题。在一个示例中,DNN模型的第一层将汽车的输入图像分解为各个部分,并查找基本图案(诸如线条和角)。第二层组装线条以寻找更高级别的图案,诸如轮子、挡风玻璃和镜子。下一层识别运载工具类型,最后几层为输入图像生成标签,识别特定汽车品牌的型号。
一旦DNN经过训练,DNN就可以被部署并用于在被称为推理(inference)的过程中识别和分类对象或图案。推理的示例(DNN从给定输入中提取有用信息的过程)包括识别存入ATM机中的支票存款上的手写数字,识别照片中朋友的图像,向超过五千万用户提供电影推荐,在无人驾驶汽车中识别和分类不同类型的汽车、行人和道路危险,或实时翻译人类言语。
在训练期间,数据在前向传播阶段流过DNN,直到产生预测为止,其指示对应于输入的标签。如果神经网络没有正确标记输入,则分析正确标签和预测标签之间的误差,并且在后向传播阶段期间针对每个特征调整权重,直到DNN正确标记该输入和训练数据集中的其他输入为止。训练复杂的神经网络需要大量的并行计算性能,包括由PPU 300支持的浮点乘法和加法。与训练相比,推理的计算密集程度比训练更低,是一个延迟敏感过程,其中经训练的神经网络应用于它以前没有见过的新的输入,以进行图像分类、翻译语音以及通常推理出新的信息。
神经网络严重依赖于矩阵数学运算,并且复杂的多层网络需要大量的浮点性能和带宽来提高效率和速度。采用数千个处理核心,针对矩阵数学运算进行了优化,并传送数十到数百TFLOPS的性能,PPU 300是能够传送基于深度神经网络的人工智能和机器学习应用所需性能的计算平台。
注意,本文描述的技术可以体现在存储在计算机可读介质中的可执行指令中,以供基于处理器的指令执行机器、系统、装置或设备使用或与其结合使用。本领域技术人员将意识到,对于一些实施例,可以包括各种类型的计算机可读介质来存储数据。如本文所使用的,“计算机可读介质”包括用于存储计算机程序的可执行指令的任何合适的介质中的一个或更多个,使得指令执行机器、系统、装置或设备可以从计算机可读介质中读取(或获取)指令,并执行指令用于执行所描述的实施例。合适的存储格式包括电子、磁性、光学和电磁格式中的一种或更多种。常规示例性计算机可读介质的非穷举列表包括:便携式计算机软磁盘,随机存取存储器(RAM),只读存储器(ROM),可擦可编程只读存储器(EPROM),闪存设备,以及包括便携式光盘(CD)、便携式数字视频盘(DVD)等的光学存储设备。
应该理解,附图中示出的组件的布置是出于说明的目的,并且其他布置也是可能的。例如,本文描述的一个或更多个元件可以全部或部分地实现为电子硬件组件。其他元件可以用软件、硬件或软件和硬件的组合实现。而且,可以组合这些其他元件中的一些或全部,可以完全省略一些其他元件,并且可以添加附加组件,同时仍然实现本文所述的功能。因此,本文描述的主题可以以许多不同的变型体现,并且所有这样的变型都被认为在权利要求的范围内。
为了促进对本文描述的主题的理解,根据动作序列描述了许多方面。本领域技术人员将认识到,各种动作可以由专用电路或电路,由一个或更多个处理器执行的程序指令,或两者的结合来执行。本文对任何动作序列的描述并不旨在暗示必须遵循为执行该序列而描述的特定顺序。除非本文另外指出或与上下文明显矛盾,否则本文描述的所有方法可以以任何合适的顺序执行。
在描述主题的上下文中(特别是在所附权利要求的上下文中),术语“一”,“一个”和“该”以及类似的引用的使用应解释为涵盖单数形式和复数形式,除非本文另有说明或与上下文明显矛盾。术语“至少一个”的使用,后跟一个或更多个项目的列表(例如,“A和B中的至少一个”)应解释为是指从所列项目(A或B)中选择的一个项目或两个或更多个所列项目(A和B)的任意组合,除非本文另有说明或与上下文明显矛盾。此外,前述描述仅出于说明的目的,而非出于限制的目的,因为所寻求的保护范围由所附的权利要求及其等同物限定。除非另外要求,否则本文提供的任何和所有示例或示例性语言(例如“诸如”)的使用仅旨在更好地说明主题,并且不对主题的范围构成限制。在权利要求书和书面描述中,术语“基于”和其他类似的短语的使用表示带来结果的条件,并不旨在排除带来该结果的任何其他条件。说明书中的任何语言都不应解释为指示任何未要求保护的要素对于实践所要求保护的发明是必不可少的。
Claims (19)
1.一种计算机实现的方法,包括:
接收要存储在多个颗粒中的第一颗粒中的第一值,其中所述多个颗粒中的每个颗粒与存储器的用于存储多个值的多个存储器位置相关联,并且所述多个颗粒中的每个颗粒与对应的压缩状态信息CSI相关联;
确定如果所述第一值存储在所述第一颗粒中,则存储在与所述第一颗粒相关联的所述多个存储器位置中的所有值将具有统一值;
确定所述第一值被存储在表中,在所述表中的第一索引处,其中所述表保持多个值,其中所述表中的每个值与唯一索引相关联;以及
更新与所述第一颗粒相对应的第一CSI,以指示所述第一颗粒被压缩并指示存储在与所述第一颗粒相关联的所述多个存储器位置中的所有值都具有作为与所述表中的所述第一索引相关联的值的统一值;以及
维持计数器,所述计数器包括在所述多个颗粒中的颗粒的计数,其中所述计数是存储未存储在所述表中的第二统一值的颗粒的数量。
2.根据权利要求1所述的计算机实现的方法,其中所述第一值被编码为一个、两个、四个、八个或十六个字节。
3.根据权利要求1所述的计算机实现的方法,其中所述第一值表示像素、纹理像素、深度、神经网络权重或神经网络激活。
4.根据权利要求1所述的计算机实现的方法,其中与所述多个颗粒中的每个颗粒相关联的所述多个存储器位置是连续的。
5.根据权利要求1所述的计算机实现的方法,其中所述多个颗粒中的一个或更多个颗粒与纹理位图的图块相关联,其中所述纹理位图被划分为多个图块。
6.根据权利要求1所述的计算机实现的方法,其中所述确定如果所述第一值存储在所述第一颗粒中,则存储在与所述第一颗粒相关联的所述多个存储器位置中的所有值将具有统一值的步骤,包括:
将所述第一值与存储在与所述第一颗粒相关联的所述多个存储器位置中的其他值进行比较;以及
确定所述第一值和所述其他值是统一的。
7.根据权利要求1所述的计算机实现的方法,还包括:针对所述表中的每个索引,维持所述多个颗粒中引用所述索引的颗粒的索引计数。
8.如权利要求7所述的计算机实现的方法,还包括:基于与第二值相对应的索引计数和所述第二统一值的所述计数,用所述第二统一值替换存储在所述表中的所述第二值。
9.根据权利要求1所述的计算机实现的方法,还包括:
接收要存储在所述多个颗粒中的第二颗粒中的第二值;
确定如果所述第二值存储在所述第二颗粒中,则存储在与所述第二颗粒相关联的所述多个存储器位置中的所有值将具有所述第二统一值;以及
确定存储在所述表中的所述多个值中没有值等于所述第二统一值。
10.根据权利要求9所述的计算机实现的方法,还包括:
识别与所述表中的可用条目相对应的第二索引;以及
将所述第二统一值存储在所述可用条目中。
11.根据权利要求9所述的计算机实现的方法,还包括:
确定没有所述表的条目可用;
更新与所述第二颗粒相对应的第二CSI,以指示所述第二颗粒未被压缩;以及
将所述第二值存储到存储在与所述第二颗粒相关联的所述多个存储器位置中的所有值中。
12.根据权利要求9所述的计算机实现的方法,还包括:
确定没有所述表的条目可用;
克隆所述表以产生第二表;
将所述多个颗粒分成第一部分和第二部分,其中所述表仅存储所述第一部分的统一值,所述第二表仅存储所述第二部分的统一值;
识别与所述第二表中的可用条目相对应的第二索引;以及
将所述第二统一值存储在所述可用条目中。
13.根据权利要求1所述的计算机实现的方法,其中所述多个颗粒中的第二颗粒与第二表相关联,并且所述第二颗粒不能引用所述表,所述第一颗粒不能引用所述第二表。
14.根据权利要求1所述的计算机实现的方法,其中所述多个颗粒中的每个颗粒与所述表相关联。
15.一种系统,包括:
处理器,耦合到存储器并被配置为:
接收要存储在多个颗粒中的第一颗粒中的第一值,其中所述多个颗粒中的每个颗粒与存储器的用于存储多个值的多个存储器位置相关联,并且所述多个颗粒中的每个颗粒与对应的压缩状态信息CSI相关联;
确定如果所述第一值存储在所述第一颗粒中,则存储在与所述第一颗粒相关联的所述多个存储器位置中的所有值将具有统一值;
确定所述第一值被存储在表中,在所述表中的第一索引处,其中所述表保持多个值,其中所述表中的每个值与唯一索引相关联;
更新与所述第一颗粒相对应的第一CSI,以指示所述第一颗粒被压缩并且指示存储在与所述第一颗粒相关联的所述多个存储器位置中的所有值都具有作为与所述表中的所述第一索引相关联的值的统一值;以及
维持计数器,所述计数器包括在所述多个颗粒中的颗粒的计数,其中所述计数是存储未存储在所述表中的第二统一值的颗粒的数量。
16.根据权利要求15所述的系统,其中所述处理器还被配置为通过以下步骤确定如果所述第一值存储在所述第一颗粒中,则存储在与所述第一颗粒相关联的所述多个存储器位置中的所有值将具有统一值:
将所述第一值与要存储在与所述第一颗粒相关联的多个存储器位置中的其他值进行比较;以及
确定所述第一值和所述其他值是统一的。
17.根据权利要求15所述的系统,其中所述处理器还被配置为通过以下步骤确定如果所述第一值存储在所述第一颗粒中,则存储在与所述第一颗粒相关联的所述多个存储器位置中的所有值将具有统一值:
将所述第一值与存储在与所述第一颗粒相关联的多个存储器位置中的其他值进行比较;以及
确定所述第一值和所述其他值是统一的。
18.根据权利要求15所述的系统,其中所述处理器还被配置为针对所述表中的每个索引,维持所述多个颗粒中引用所述索引的颗粒的索引计数。
19.一种存储计算机指令的非暂时性计算机可读介质,所述计算机指令在由一个或更多个处理器执行时,使一个或更多个处理器执行以下步骤:
接收要存储在多个颗粒中的第一颗粒中的第一值,其中所述多个颗粒中的每个颗粒与存储器的用于存储多个值的多个存储器位置相关联,并且所述多个颗粒中的每个颗粒与对应的压缩状态信息CSI相关联;
确定如果所述第一值存储在所述第一颗粒中,则存储在与所述第一颗粒相关联的所述多个存储器位置中的所有值将具有统一值;
确定所述第一值被存储在表中,在所述表的第一索引处,其中所述表保持多个值,其中所述表中的每个值与唯一索引相关联;
更新与所述第一颗粒相对应的第一CSI,以指示所述第一颗粒被压缩并指示存储在与所述第一颗粒相关联的所述多个存储器位置中的所有值都具有作为与所述表中的所述第一索引相关联的值的统一值;以及
维持计数器,所述计数器包括在所述多个颗粒中的颗粒的计数,其中
所述计数是存储未存储在所述表中的第二统一值的颗粒的数量。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/866,813 US11513686B2 (en) | 2020-05-05 | 2020-05-05 | Techniques for dynamically compressing memory regions having a uniform value |
US16/866,813 | 2020-05-05 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113609029A CN113609029A (zh) | 2021-11-05 |
CN113609029B true CN113609029B (zh) | 2023-08-29 |
Family
ID=78231997
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011060083.5A Active CN113609029B (zh) | 2020-05-05 | 2020-09-30 | 动态压缩具有统一值的存储器区域的技术 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11513686B2 (zh) |
CN (1) | CN113609029B (zh) |
DE (1) | DE102021111335A1 (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11263051B2 (en) * | 2020-05-05 | 2022-03-01 | Nvidia Corporation | Techniques for scaling dictionary-based compression |
US11790478B2 (en) * | 2020-08-03 | 2023-10-17 | Qualcomm Incorporated | Methods and apparatus for mapping source location for input data to a graphics processing unit |
US11687456B1 (en) * | 2021-12-21 | 2023-06-27 | Advanced Micro Devices, Inc. | Memory coloring for executing operations in concurrent paths of a graph representing a model |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1666196A (zh) * | 2002-05-10 | 2005-09-07 | 甲骨文国际公司 | 存储和访问数据,以及提高数据库查询语言语句性能的方法和机制 |
CN103885903A (zh) * | 2012-12-19 | 2014-06-25 | 辉达公司 | 用于经由纹理硬件实施存储器访问操作的技术 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100318759A1 (en) * | 2009-06-15 | 2010-12-16 | Microsoft Corporation | Distributed rdc chunk store |
US8627041B2 (en) * | 2009-10-09 | 2014-01-07 | Nvidia Corporation | Efficient line and page organization for compression status bit caching |
KR101403356B1 (ko) * | 2012-10-22 | 2014-06-05 | (주)티베로 | 데이터 압축 장치, 데이터 압축 방법 및 그 방법을 위한 컴퓨터 판독 가능한 기록 매체 |
US20160378352A1 (en) * | 2015-06-26 | 2016-12-29 | Intel Corporation | Efficient solid state drive data compression scheme and layout |
SE540178C2 (en) * | 2016-01-29 | 2018-04-24 | Zeropoint Tech Ab | Methods, devices and systems for compressing and decompressing data |
US10970816B2 (en) * | 2018-08-13 | 2021-04-06 | Nvidia Corporation | Motion blur and depth of field reconstruction through temporally stable neural networks |
-
2020
- 2020-05-05 US US16/866,813 patent/US11513686B2/en active Active
- 2020-09-30 CN CN202011060083.5A patent/CN113609029B/zh active Active
-
2021
- 2021-05-03 DE DE102021111335.0A patent/DE102021111335A1/de active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1666196A (zh) * | 2002-05-10 | 2005-09-07 | 甲骨文国际公司 | 存储和访问数据,以及提高数据库查询语言语句性能的方法和机制 |
CN103885903A (zh) * | 2012-12-19 | 2014-06-25 | 辉达公司 | 用于经由纹理硬件实施存储器访问操作的技术 |
Non-Patent Citations (1)
Title |
---|
分布共享存储系统中的数据预送技术;谢向辉,韩承德,唐志敏;计算机学报(第03期);第241-248段 * |
Also Published As
Publication number | Publication date |
---|---|
US20210349639A1 (en) | 2021-11-11 |
CN113609029A (zh) | 2021-11-05 |
US11513686B2 (en) | 2022-11-29 |
DE102021111335A1 (de) | 2021-11-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110176054B (zh) | 用于训练神经网络模型的合成图像的生成 | |
US10565747B2 (en) | Differentiable rendering pipeline for inverse graphics | |
CN110766778B (zh) | 使用散列执行并行路径空间滤波的方法和系统 | |
US11113790B2 (en) | Adding greater realism to a computer-generated image by smoothing jagged edges | |
CN111210498B (zh) | 降低多边形网格的细节水平以减少被渲染几何的复杂度 | |
US11836597B2 (en) | Detecting visual artifacts in image sequences using a neural network model | |
CN111143174B (zh) | 在共享功率/热约束下操作的硬件的最佳操作点估计器 | |
US11496773B2 (en) | Using residual video data resulting from a compression of original video data to improve a decompression of the original video data | |
CN113609029B (zh) | 动态压缩具有统一值的存储器区域的技术 | |
US11379420B2 (en) | Decompression techniques for processing compressed data suitable for artificial neural networks | |
US11847733B2 (en) | Performance of ray-traced shadow creation within a scene | |
CN112041894A (zh) | 渲染期间提高涉及水面的场景的真实感 | |
CN113822975B (zh) | 用于对图像进行有效采样的技术 | |
US20210398253A1 (en) | Adding greater realism to a computer-generated image by smoothing jagged edges | |
CN113743573A (zh) | 用于访问和利用压缩数据及其状态信息的技术 | |
US11263051B2 (en) | Techniques for scaling dictionary-based compression | |
CN113808183B (zh) | 使用扭曲的复合估计乘积积分 | |
CN115205091A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |