CN111667542B - 适用于人工神经网络的用于处理压缩数据的解压缩技术 - Google Patents

适用于人工神经网络的用于处理压缩数据的解压缩技术 Download PDF

Info

Publication number
CN111667542B
CN111667542B CN201910628257.4A CN201910628257A CN111667542B CN 111667542 B CN111667542 B CN 111667542B CN 201910628257 A CN201910628257 A CN 201910628257A CN 111667542 B CN111667542 B CN 111667542B
Authority
CN
China
Prior art keywords
data structure
element data
destination
elements
value
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
Application number
CN201910628257.4A
Other languages
English (en)
Other versions
CN111667542A (zh
Inventor
J·A·拉托雷
J·H·肖凯特
M·M·帕特尔
J·普尔
M·Y·西乌
R·M·克拉辛斯基
G·文卡塔斯
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nvidia Corp
Original Assignee
Nvidia Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nvidia Corp filed Critical Nvidia Corp
Publication of CN111667542A publication Critical patent/CN111667542A/zh
Application granted granted Critical
Publication of CN111667542B publication Critical patent/CN111667542B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/174Redundancy elimination performed by the file system
    • G06F16/1744Redundancy elimination performed by the file system using compression, e.g. sparse files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T9/00Image coding
    • G06T9/002Image coding using neural networks
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/60General implementation details not specific to a particular type of compression
    • H03M7/6005Decoder aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/14Details of searching files based on file metadata
    • G06F16/156Query results presentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/10Geometric effects
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3059Digital compression and data reduction techniques where the original information is represented by a subset or similar information, e.g. lossy compression
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/60General implementation details not specific to a particular type of compression
    • H03M7/6017Methods or arrangements to increase the throughput
    • H03M7/6023Parallelization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/084Backpropagation, e.g. using gradient descent
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/20Special algorithmic details
    • G06T2207/20081Training; Learning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/20Special algorithmic details
    • G06T2207/20084Artificial neural networks [ANN]

Abstract

本发明公开了一种适用于人工神经网络的用于处理压缩数据的解压缩技术。压缩数据通常有利于减少例如传输和存储数据所需的计算资源。在处理稀疏数据(包括许多零或接近零值的数据)并且只有高于某阈值的非零值才有意义时,对数据进行压缩特别有用。当处理压缩数据时,通常需要对数据进行解压缩以进行处理(例如,由深度学习网络或配置为对稀疏或其他未压缩数据进行操作的其他应用程序)。公开了用于支持由诸如CPU和GPU之类的处理单元对压缩数据进行解压缩的指令。

Description

适用于人工神经网络的用于处理压缩数据的解压缩技术
要求优先权
本申请要求于2019年3月8日提交的、申请号为62/815,887(案卷 号为NVIDP1227+/18-SC-0146US01)、题为“适用于人工神经网络的用于 处理压缩数据的解压缩技术(DECOMPRESSION TECHNIQUES FOR PROCESSING COMPRESSED DATA SUITABLE FORARTIFICIAL NEURAL NETWORK)”的美国临时申请的权益,其全部内容通过引用并 入本文中。
技术领域
本发明涉及压缩数据,更具体地涉及压缩数据的解压缩。
背景技术
在计算中存在许多情况,其中压缩数据是有益的。通常,由于数据 的压缩将减小数据的大小,因此与不压缩数据所需要的计算资源(例如, 带宽、存储等)相比,可以需要更少的计算资源来传输、存储,以及有时 甚至处理压缩数据。当处理稀疏数据时,发现数据的压缩特别有用,如下 所述。当然,应该注意的是,由于上述原因,数据压缩对于可能不一定稀 疏的其他类型的数据可能同样有用。
在深度学习网络和其他应用中,通常包含被认为是稀疏数据(或者 换句话说,包括许多零值或接近零值的数据)的大量数据。由于这些应用 中包含的数据尺寸大,压缩数据(例如,减小数据大小)以便在传输数据 时节省带宽资源并在存储数据时节省存储器资源是有帮助的。通常,数据 将以一种格式压缩,该格式将试图保留原始数据中的有效值(例如,非零 值或高于预定阈值的值),同时排除无效值。
然而,在许多情况下,必须对压缩数据进行解压缩以用于处理目的。 例如,深度学习网络(或上面提到的其他应用)通常要求数据在处理之前 处于解压缩状态。当数据由需要数据处于解压缩状态的硬件单元处理时尤 其如此。解压缩的数据将与最初执行压缩的原始数据相同或基本相同。遗 憾的是,处理压缩稀疏数据或其他类型的压缩数据的传统数据解压缩技术 通常很复杂并且在硬件中需要复杂的算术单元,这是昂贵的。因此具有解决与现有技术相关的这些问题和/或其他问题的需求。
发明内容
在一个实施例中,公开了一种用于对压缩数据的至少一部分进行解 压缩的指令的方法、计算机可读介质和系统。接收N元素数据结构作为输 入,其中N元素数据结构中的每个元素都有一值。预先通过压缩原始M元 素数据结构来生成N元素数据结构,其中N<M。此外,接收与N元素数 据结构相关联的元数据作为输入。元数据为N元素数据结构中的每个值指 定该值在M元素数据结构中起源的位置。此外,可选地初始化目的地M元 素数据结构。通过在相关元数据指定的位置处向目的地M元素数据结构写 入N元素数据结构的一个或更多个值,来执行至少一个指令以将N元素数 据结构的至少一部分解压缩到目的地M元素数据结构的至少一部分中。假 定N元素数据结构完全解压缩到目的地M元素数据结构中,压缩数据和未 压缩数据之间的压缩比是N比M(或N:M)。
在一个实施例中,公开了一种用于指令的方法、计算机可读介质和 系统,该指令将压缩数据作为输入并通过部分地解压缩输入的压缩数据来 生成密度较小的压缩数据。接收N元素数据结构(如上所述)及其相关联 的元数据(也如上所述)作为输入。可以将输入的N元素数据结构解压缩 成M元素数据结构,表示N:M压缩比。执行至少一个指令以从N元素数 据结构及其关联的元数据生成R元素数据结构和对应的元数据,其中N<= R<M(其中“<=”表示“小于或等于”)。R元素数据结构及其相关元数据 完全解压缩为Q元素数据结构,其中Q<=M且Q元素数据结构对应于M 元素数据结构的至少一部分。因此,R元素数据结构(保持压缩的数据) 和Q元素数据结构(保持未压缩的数据)之间的压缩比是R:Q。当R!=N 和Q!=M(其中“!=”表示“不相等”)时,压缩比R:Q>N:M。因此, 所得到的R元素数据结构和元数据表示比N元素数据结构和元数据更低密 度压缩的数据。
附图的简要说明
图1示出了示例性的N:M压缩格式。
图2示出了示例性的4:16压缩格式。
图3示出了用于以N:M压缩格式对压缩数据进行解压缩的示例性流 程图。
图4示出了示例性的4:16解压缩指令。
图5示出了以PAIR模式操作的示例性的4:16解压缩指令。
图6示出了在QUAD模式下操作的示例性的4:16解压缩指令。
图7示出了从更密集压缩的数据示例性生成更不密集压缩的数据。
图8示出了用于通过部分地解压缩更密集压缩的数据,从更密集压 缩的数据生成更不密集压缩的数据的示例性流程图。
图9示出了示例性的2:16至2:4部分解压缩指令。
图10示出了以PAIR模式操作的示例性的2:16至2:4部分解压缩指 令。
图11示出了在QUAD模式下操作的示例性的2:32至2:4部分解压 缩指令。
图12示出了根据一个实施例的并行处理单元。
图13A示出了根据一个实施例的图12的并行处理单元内的通用处理 集群。
图13B示出了根据一个实施例的图3的并行处理单元的存储器分区 单元。
图14A示出了根据一个实施例的图13A的流式多处理器。
图14B是根据一个实施例的使用图12的PPU实现的处理系统的概 念图。
图14C示出了可以实现各种先前实施例的各种架构和/或功能的示例 性系统。
图15是根据一个实施例的由图12的PPU实现的图形处理管线的概 念图。
具体实施方式
图1示出了示例性N:M压缩格式。压缩数据格式100包括N元素数 据结构104和元数据106。将以压缩数据格式100保存的数据解压缩成未压 缩数据格式102。未压缩数据格式102包括M元素数据结构108,其中N<M。 元数据106指示对于N元素数据结构102中的每个数据DN-1,...,D1,D0, 在M元素数据结构108中数据被复制到的位置(例如,M-1,M-2,6,1)。假定将N元素数据结构104中的数据解压缩成M元素数据结构108,则图 1中所示的压缩格式被认为具有N到M(或“N:M”)的压缩到解压缩比。
在一个实施例中,每个数据DN-1,...,D1,D0可以是数值。数值可 以用整数、浮点、固定、对数或用于在计算机上编码数值的任何其他数字 格式进行编码的任意位数表示(例如,4位(“半字节”),8位(“字节”), 16位(“半”),32位(“字”),64位(“双”)等)。
在一个实施例中,元数据106可以包括N个条目,其中每个条目对 应于N元素数据结构104中的一个数据,并且每个条目指示对应的数据被 复制到M元素数据结构108中的位置(例如,索引)。在另一个实施例(未 示出)中,元数据106可以包括M个比特,其中仅设置N个比特,指示N 元素数据结构102中的每个数据将被复制到M元素数据结构108中的位置。在另一个实施例(未示出)中,元数据106可以包括到查找表(“LUT”) 的索引,该查找表提供关于N元素数据结构102中的每个数据将被复制到 M元素数据结构108中的位置的信息。
图2示出了示例性的4:16压缩格式。如图2所示,将压缩数据格式 200解压缩成未压缩数据格式202。压缩数据格式200包括N元素数据结构 204,其中N=4。如图所示,4元素数据结构204包括4个示例性值A,B, C和D。压缩数据格式200还包括元数据206,其具有4个示例性条目,当 将4元素数据结构202解压缩成16元素数据结构208时,4个示例性条目指示示例性值A,B,C和D中的每一个将被复制到M元素数据结构208 (其中M=16)中的何处。假定将4元素数据结构204中的数据解压缩成16元素数据结构208,则图2中所示的压缩格式被认为具有4到16(或“4:16”) 的压缩到解压缩比。
图3示出了用于以N:M压缩格式对压缩数据进行解压缩的方法300 的示例性流程图。可以执行指令以使得对压缩数据的全部或一部分执行方 法300。这样的指令可以由GPU(图形处理单元),CPU(中央处理单元) 或其他计算硬件执行。
在步骤302中,接收N元素数据结构的至少一部分作为输入。可以 通过压缩原始M元素数据结构来生成N元素数据结构,其中N<M。N元 素数据结构中的每个元素包括数据(例如,数值)。N元素数据结构,以及 类似地M元素数据结构可以是数组,向量,矩阵,张量或用于保持数据的任何其他类型的结构。在一个实施例中,原始M元素数据结构可以包括稀 疏数据,在这种情况下,N元素数据结构可以通过压缩M元素数据结构来 生成,以排除零或接近零的值(例如,在接近零的一些小阈值内的值,例 如在-0.03和0.05内的值,或在另一个例子中,在-0.05和0.05内的值)。
在步骤304中,接收N元素数据结构的元数据的至少一部分作为输 入。为N元素数据结构中的每个数据指定元数据,其中数据将被复制到M 元素数据结构中。
在步骤306中,识别目的地M元素数据结构的至少一部分并且可以 对其进行初始化。在一个实施例中,初始化可以包括将目的地M元素数据 结构中的所有或一些元素设置为预定的默认值,例如,零,空,0.05等。 在一个实施例中,初始化可以包括将目的地M元素数据结构中的全部或者 一些元素设置为随机值或伪随机值或接近零值。在一个实施例中,初始化可以包括利用从另一个M元素数据结构或其他数据源获得的值来设置目的 地M元素数据结构中的所有或一些元素。
在步骤308中,使用输入元数据将输入的N元素数据结构的至少一 部分解压缩到目的地M元素数据结构中。通过将在由元数据指定的位置处 接收的N元素数据结构中的每个数据写入目的地M元素数据结构来执行解压缩。目的地M元素数据结构的剩余元素可以保持它们的现有值或初始化 值(例如,零,空,随机值等)。
方法300可以由单个执行线程执行。或者,方法300可以由多个线 程执行。在一个实施例中,单个线程解压缩所有输入的N元素数据结构。 在另一实施例中,一对线程中的每个线程解压缩输入的N元素数据结构的 一半。在又一个实施例中,四线程中的每个线程解压缩输入的N元素数据 结构的四分之一。此外,在一个实施例中,不同线程或单个线程中的不同 指令可以使用相同的输入的N元素数据结构或N元素数据结构的不同实例。 另外,在一个实施例中,不同线程或单个线程中的不同指令可以在目的地M元素数据结构的不同实例上操作。在另一实施例中,不同线程或单个线 程中的不同指令可以在目的地M元素数据结构的共享实例上操作。虽然以 上和下面的本描述描述了执行线程(例如,在GPU上),但是应当注意, 执行的通道(例如,在单指令多数据(SIMD)CPU的每个执行路径上)可 以类似地用于适当的或补充线程。
表1中示出了用于使GPU,CPU或其他计算硬件执行方法300的示 例性指令命名的SCATTER的格式。
表1
SCATTER{.elsize}.mode{.idxSize}{.partial}Rd,Ra,Rb,{Rc,}#VecIdx {#Mask}
其中,
Ra:用于保持N元素数据结构的全部或一部分的源寄存器
Rb:用于保持N元素数据结构的全部或一部分元数据的源寄存器
Rd:用于保持目的地M元素数据结构的全部或一部分的目的地寄存器
{Rc}:包含另一个N元素数据结构的全部或一部分的可选源寄存器, 其可用于初始化Rd(或者,可以用零或任何其他预定义值初始化Rd)
{elsize}:指示用于表示N元素数据结构中的数据的比特数的可选参数 (例如,8比特的elsize=“8b”,16比特的elsize=“16b”等);如果没有 提供,SCATTER默认为8比特
{idxSize}:指示用于表示元数据中的条目的比特数的可选参数(例如, 8比特的idxSize=“U8”,4比特的idxSize=“U4”等);如果没有提供, SCATTER默认为8比特
#VecIdx:指示目的地M元素数据结构的哪一部分保存在Rd中
{#Mask}:可选的位掩码,指示Ra的哪些部分将被解压缩
mode:“THREAD”,“PAIR”或“QUAD”之一,指示如何解释#VecIdx, 如下面更详细描述的
{.partial}:可选参数,指示是否将部分解压缩Ra,例如,创建较低密 度的压缩数据
SCATTER指令将源寄存器Ra视为存储N元素数据结构的X个元素, 其中
Figure SMS_1
其中B是可以存储在寄存器Ra中的比特数(例如,32比 特)。因此,当寄存器Ra保持32比特并且elsize是8比特时,SCATTER 将源寄存器Ra视为存储N元素数据结构的4个元素(即,/>
Figure SMS_2
)。在 另一个例子中,当寄存器Ra保持32比特并且elsize是16比特时,SCATTER 将源寄存器Ra视为存储N元素数据结构的2个元素(即,/>
Figure SMS_3
)。
SCATTER指令还将目的地寄存器Rd视为存储M元素数据结构的X 个元素,其中X如上所述计算。假设M可以比X大得多,则SCATTER将 Rd视为仅保持M元素数据结构的连续X元素部分。M元素数据结构的特 定部分由SCATTER指令的#VecIdx输入和SCATTER指令的模式指定。
在THREAD模式中,SCATTER指令将#VecIdx解释为指示Rd保持 M元素数据结构的位置(#VecIdx*X+X-1)到(#VecIdx*X)。例如,如 果X=4,则#VecIdx值为0指示Rd保持M元素数据结构的位置3...0,#VecIdx值为1指示Rd保持位置7...4,#VecIdx值为2指示Rd保持位置11...8等。在另一个示例中,如果X=2,则#VecIdx值为0指示Rd保持位 置1和0,#VecIdx值为1指示Rd保持位置3和2,等等。
在PAIR模式中,SCATTER指令将#VecIdx解释为指示Rd保持M 元素数据结构的位置(#VecIdx*2X+X-1+(ThreadID模数2)*X)到(#VecIdx *2X+(ThreadID模数2)*X)。ThreadID(“线程标识符”的缩写)是与 执行SCATTER指令的线程相关联的数值。例如,如果X=4且执行SCATTER 指令的线程的ThreadID为28,则#VecIdx值为1指示Rd保持位置11...8。 此外,如果X=4且执行SCATTER指令的线程的ThreadID为29,则#VecIdx值为1指示Rd保持位置15...12。同样,如果X=4且执行SCATTER指令 的线程的ThreadID为29,则#VecIdx值为2指示Rd保持位置23...20。
在QUAD模式中,SCATTER指令将#VecIdx解释为指示Rd保持M 元素数据结构的位置(#VecIdx*4X+X-1+(ThreadID模数4)*X)到(#VecIdx *4X+(ThreadID模数4)*X)。例如,如果X=4并且执行SCATTER指令 的线程的ThreadID是17,则#VecIdx值为1指示Rd保持位置23...20。
表2中示出了符合表1中所示格式的指令的一个示例。
表2
SCATTER.THREAD R12 R10 R11 0
表2中的示例性指令指示N元素数据结构的至少一部分存储在寄存 器R10中,至少一部分元数据存储在R11中,并且R10的内容应解压缩为 R12。此外,如上所解释的,在寄存器R10和R12各自存储32比特的情况 下,#VecIdx的0值指示R12表示具有位置3...0的目的地M元素数据结构的部分。
表3中示出了符合表1中所示格式的指令的另一示例。
表3
SCATTER.16b.THREAD.U4 R12 R10 R11 0
表3中的示例性指令传达表2中所示的相同指令,除了表3中的示 例性指令指示N元素数据结构中的数据以16比特而不是8比特表示,并且 元数据中的条目以4比特而不是8比特表示之外。此外,如上所解释的,在寄存器R10和R12各自存储32比特的情况下,在这种情况下#VecIdx的 0值指示R12表示具有位置1和0的目的地M元素数据结构的部分。
图4示出了执行4:16解压缩的示例性指令集。在本示例中,4:16解 压缩以上述THREAD模式操作。更具体地,执行图4所示的示例性指令集 的每个执行线程对4元素数据结构(在R2中)和元数据(在R3中)执行 完整4:16解压缩为16元素数据结构(在R10,R11,R12,R13中)。在多 线程处理器中,每个线程可以在其自己的一组寄存器上操作(例如,每个 线程具有其自己的32个寄存器,命名为R0,R1,R2,......R31)。因此, 虽然图4中所示的相同指令可以由多个线程处理,但是每个线程可以用存 储在其自己的一组源寄存器R2和R3(表示不同的压缩的4元素数据结构) 中的不同值来执行,以在它自己的一组目的地寄存器R10,R11,R12和 R13中产生相应的解压缩数据。
如图所示,第一指令(SCATTER.THREAD R10,R2,R3,0)指示 N元素数据结构存储在寄存器R2中,元数据存储在R3中,并且至少部分 R2内容应解压缩到R10。此外,0值(对于#VecIdx)指示R10表示具有位 置3...0的目的地M元素数据结构的部分。当执行第一指令时,将来自寄 存器R2的值A复制到对应于目的地M元素数据结构中的位置2的位置处 的R10(由R3中的元数据指定)。因为R3中的元数据指示目的地M元素 数据结构中的位置3...0的R2中没有其他值,所以没有其他值(即,B,C 或D)复制到寄存器R10中。
第二指令(SCATTER.THREAD R11,R2,R3,1)指示N元素数据 结构存储在寄存器R2中,元数据存储在R3中,以及R2的至少一部分内 容应该被解压缩到R11。此外,1值(对于#VecIdx)指示R11表示具有位 置7...4的目的地M元素数据结构的部分。当执行第二指令时,将来自寄 存器R2的值B复制到对应于目的地M元素数据结构中的位置4的位置处 的R11(由R3中的元数据指定)。
第三指令(SCATTER.THREAD R12,R2,R3,2)指示N元素数据 结构存储在寄存器R2中,元数据存储在R3中,并且R2的至少一部分内 容应该被解压缩到R12。此外,2值(对于#VecIdx)指示R12表示具有位 置11...8的目的地M元素数据结构的部分。当执行第三指令时,没有来自 寄存器R2的值被复制到R12,因为R3中的元数据指示R2中的值均不对 应于目的地M元素数据结构中的位置11...8之一。
第四指令(SCATTER.THREAD R13,R2,R3,3)指示N元素数据 结构存储在寄存器R2中,元数据存储在R3中,并且应将R2的至少一部 分内容解压缩到R13。此外,3值(对于#VecIdx)指示R12表示具有位置15...12的目的地M元素数据结构的部分。当执行第四指令时,将来自寄 存器R2的值C和D复制到分别对应于目的地M元素数据结构中的位置14 和15的位置处的R13(由R3中的元数据指定)。
图5示出了以PAIR模式操作的示例性的4:16解压缩指令。在PAIR 模式下,一对线程中的每个线程都可以解压缩N元素数据结构的一半。如 上所讨论的,在一些实施例中,每个线程在其自己的一组寄存器上操作。 在图5所示的示例中,当至少两个线程执行2条指令时,2条指令完成4:16 解压缩,其中每个线程解压缩原始N元素数据结构的一半。
如图所示,第一指令(SCATTER.PAIR R10,R2,R3,0)指示N元 素数据结构存储在寄存器R2中,元数据存储在R3中,应将R2的至少一 部分内容解压缩到R10。此外,0值(对于#VecIdx)指示当执行第一指令 的线程具有偶数ThreadID值(即,(ThreadID模数2)==0)时,R10表示 具有位置3...0的目的地M元素数据结构的部分,以及当执行第一指令的 线程具有奇数ThreadID(即,(ThreadID模数2)==1)时,R10表示具有 位置7...4的目的地M元素数据结构的部分。当具有偶数ThreadID值的线 程执行第一指令时,将来自寄存器R2的值A复制到与目的地M元素数据 结构中的位置2对应的位置处的R10(由R3中的元数据指定)。当具有奇 数ThreadID值的线程执行第一指令时,将来自寄存器R2的值B复制到与 目的地M元素数据结构中的位置4对应的位置处的R10(由R3中的元数 据指定)。
此外,第二指令(SCATTER.PAIR R11,R2,R3,1)指示N元素数 据结构存储在寄存器R2中,元数据存储在R3中,并且R2的至少一部分 内容应解压缩到R11。此外,值1(对于#VecIdx)指示当执行第二指令的 线程具有偶数线程ID值时,R11表示具有位置11...8的目的地M元素数 据结构的部分,以及当执行第二指令的线程具有奇数的ThreadID值时,R11表示具有位置15...12的目的地M元素数据结构的部分。当第二指令由具 有偶数ThreadID值的线程执行时,来自寄存器R2的值均不会被复制到由 R3中的元数据指定的R11中。当具有奇数ThreadID值的线程执行第二指 令时,值C和D被复制到分别对应于目的地M元素数据结构中的位置14 和15的位置处的R11(由R3中的元数据指定)。
图6示出了以QUAD模式操作的示例性的4:16解压缩指令。在 QUAD模式下,四个线程中的每个线程都可以解压缩N元素数据结构的四 分之一。如上所讨论的,在一些实施例中,每个线程在其自己的一组寄存 器上操作。在图6所示的示例中,当至少四个线程执行单个指令时,1个指 令完成4:16解压缩,其中每个线程解压缩原始N元素数据结构的四分之一。
如图所示,第一指令(SCATTER.QUAD R10,R2,R3,0)指示N 元素数据结构存储在寄存器R2中,元数据存储在R3中,并且应将R2的 至少一部分内容解压缩到R10。此外,0值(对于#VecIdx)指示当执行第 一指令的线程具有第一象限ThreadID值(即,(ThreadID模数4)=0)时, R10表示具有位置3...0的目的地M元素数据结构的部分,当线程具有第 二象限ThreadID值(即,(ThreadID模数4)==1)时,R10表示具有位置 7...4的目的地M元素数据结构的部分,当线程具有第三象限ThreadID值 (即,(ThreadID模数4)==2)时,R10表示具有位置11...8的目的地M 元素数据结构的部分,以及当线程具有第四象限ThreadID值(即,(ThreadID 模数4)==3)时,R10表示具有位置15...12的目的地M元素数据结构的 部分。当具有第一象限ThreadID的线程执行第一指令时,将来自寄存器 R2的值A复制到与目的地M元素数据结构的位置2相对应的位置处的R10 (由R3中的元数据指定)。此外,当第一指令由具有第二象限ThreadID的 线程执行时,将来自寄存器R2的值B复制到对应于目的地M元素数据结 构的位置4的位置处的R10(由R3中的元数据指定)。当第一指令由具有 第三象限ThreadID的线程执行时,寄存器R2中的值均不会复制到由R3 中的元数据指定的R10。最后,当第一指令由具有第四象限ThreadID的线 程执行时,将值C和D分别复制到在分别对应于目的地M元素数据结构 的位置14和15的位置处的R10(由元数据指定)。
图7示出了从更密集压缩的数据示例性生成更不密集压缩的数据。 如图7所示,代替将压缩数据格式700解压缩成未压缩数据格式702,如图 2中所描述的,图7示出了压缩数据格式700,其具有更密集压缩的数据(如 图所示为2:8),将其解压缩为几乎等同的更不密集压缩的数据(如图所示, 两组2:4数据)。换句话说,将压缩数据格式700部分解压缩为部分解压 缩的数据格式704。
压缩数据格式700包括N元素数据结构706,其中N=2。如图所示, N元素数据结构706包括2个示例性值F和E。压缩数据格式700还包括 元数据708,其具有2个示例性条目,该条目指示当将N元素数据结构706 解压缩成M元素数据结构709时,将每个示例性值E和F复制到M元素 数据结构709中的何处(当M=8时)。
另一方面,部分解压缩的数据格式704包括两组数据和元数据,对 于每个组,包括R元素数据结构710A,712A(其中R=2),以及对应的元数据710B,712B。每个R元素数据结构710A,712A的元数据710B, 712B包括2个示例性条目,其指示当每个R元素数据结构710A,712A被 解压缩成相应的Q元素数据结构714A,714B时对应的R元素数据结构 710A,712A中的每个示例性值将被复制到Q元素数据结构714A,714B(其 中Q=4)的何处。每个Q元素数据结构对应于M元素数据结构的一部分。
如图所示,用于部分解压缩数据格式704的第一组数据和元数据 710A,710B对应于N元素数据结构的第一元素(E),以及用于部分解压 缩数据格式704的第二组数据和元数据712A,712B对应于N元素数据结 构的第二元素(F)。因此,第一组数据710A存储N元素数据结构的第一 元素(E)的值,其中一个或更多个附加元素存储零或另一个定义的源值。类似地,第二组数据712A存储N元素数据结构的第二元素(F)的值,其 中一个或更多个附加元素存储零或另一个定义的源值。
所示的示例性实施例遵循元数据710B,712B必须从右到左增加的 要求,其中R元素数据结构710A,712A中的零仅对应于Q元素数据结构 714A,714B中的元素1或2。当然,这些要求可能完全取决于执行解压缩 的特定固定功能单元。
更一般地,对于N:M密集压缩的数据,生成两组R:Q几乎等同的更 不密集压缩的数据,其中N<=R。对于该部分解压缩,R元素数据结构710A, 712A及其关联元数据710B,712B完全解压缩到对应的Q元素数据结构 714A,714B中,其中Q<=M并且Q元素数据结构对应于M元素数据结构 的至少一部分。因此,R元素数据结构710A,712A(保持压缩数据)和Q 元素数据结构714A,714B(保持未压缩数据)之间的压缩比是R:Q。当R! =N和Q!=M(其中“!=”表示“不相等”)时,压缩比R:Q>N:M。因 此,得到的R元素数据结构710A,712A和元数据710B,712B表示比N 元素数据结构706和元数据708更不密集压缩的数据。
部分解压缩的数据格式704在要求数据具有某大小的某些应用中可 能是有用的。此外,可以通过配置N元素数据结构被解压缩为的R元素数据结构的大小来配置对N元素数据结构进行解压缩的程度。
图8示出了用于通过部分解压缩更密集压缩的数据从更密集压缩的 数据生成更不密集压缩的数据的方法800的示例性流程图。
在步骤802中,接收N元素数据结构的至少一部分作为输入。可以 通过压缩原始M元素数据结构来生成N元素数据结构,其中N<M。因此, N元素数据结构可以与图3的步骤302中描述的N元素数据结构相同或相 似。
在步骤804中,接收N元素数据结构的元数据的至少一部分作为输 入。元数据为N元素数据结构中的每个数据指定在将N元素数据结构解压 缩为M元素数据结构时将数据复制到M元素数据结构中的何处。
在步骤806中,识别至少两个目的地R元素数据结构并且可将其初 始化,其中N<=R<M。在一个实施例中,初始化可以包括将目的地R元素 数据结构中的所有或一些元素设置为预定的默认值(例如,零,来自一个 或更多个其他R元素数据结构的值等)。
在步骤808中,输入的N元素数据结构的至少两部分分别存储在相 应的目的地R元素数据结构中。目的地R元素数据结构的剩余元素可以保 持其初始化值或现有值。
在步骤810中,为每个R元素数据结构生成元数据。应当注意,步 骤810是本方法800的可选步骤,并且在另一个实施例中可以离线或以其 他方式与方法800分开执行。元数据为R元素数据结构中的每个数据指定 当R元素数据结构被解压缩为Q元素数据结构时数据被复制到Q元素数据 结构中的何处。在本实施例的上下文中,R元素数据结构及其关联的元数 据被完全解压缩到Q元素数据结构中,其中Q<=M且Q元素数据结构对应 于M元素数据结构的至少一部分。同样,R元素数据结构(保持压缩数据) 和Q元素数据结构(保持未压缩数据)之间的压缩比是R:Q。当R!=N 和Q!=M(其中“!=”表示“不相等”)时,压缩比R:Q>N:M。因此, 所得到的一组R元素数据结构和元数据表示比N元素数据结构和元数据更 不密集的压缩数据。通常,当从N:M解压缩到R:Q时,则N<=R(例如, 如果R:Q=2:4,那么N必须是1或2,但是如果R:Q是4:8,那么N可以 是1,2,3或4,其中例如N:M=4:16)。
方法800可以由单个执行线程执行。或者,方法800可以由多个线 程(例如,2(一对)或4(四)个线程)执行。在一个实施例中,单个线 程解压缩所有输入的N元素数据结构。在另一实施例中,一对线程中的每 个线程解压缩输入的N元素数据结构的一半。在又一个实施例中,四个线程中的每一个解压缩输入N元素数据结构的四分之一。
用于使GPU,CPU或其他计算硬件执行方法800的步骤802-808的 示例性指令的格式在上面的表1中示出,具体地通过在指令中包括参数 “.partial”。
用于使GPU,CPU或其他计算硬件执行方法800的步骤810的示例 性指令的格式在以下表4中示出。
表4
spMetadata{.elsize}.mode{.idxSize}Rd,Ra,{Rb,}#VecIdx,
{#Mask},#Dest
其中:
{elsize}:指示用于表示N元素数据结构中的数据的比特数的可选 参数(例如,8比特的elsize=“8b”,16比特的elsize=“16b”等);
如果没有提供,SCATTER默认为8比特
mode:“THREAD”,“PAIR”或“QUAD”之一,其指示Ra的全 部、一半或四分之一应该由执行该指令的线程解压缩;由特定线程 解压缩的特定一半或四分之一是基于特定线程的标识号
(“ThreadID”)的
{idxSize}:指示用于表示元数据中的条目的比特数的可选参数(例 如,8比特的idxSize=“U8”,4比特的idxSize=“U4”,2比特的idxSize=“U2”等);如果没有提供,SCATTER默认为8比特
Rd:目的地寄存器,用于保持目的地R元素数据结构的全部或部分
Ra:用于保持N元素数据结构的全部或一部分的源寄存器
{Rb}:用于保持N元素数据结构的全部或一部分元数据的源寄存器
#VecIdx:指示目的地R元素数据结构的哪一部分保持在Rd中
{#Mask}:可选的位掩码,指示将Ra的哪些部分进行解压缩
#Dest:0,...,7,指示在其中写入元数据的半字节
图9示出了示例性2:16(N:M)至2:4(R:Q)部分解压缩指令。在 本示例中,部分解压缩指令以上述“线程”模式操作。具体地,单个执行 线程对特定的一组目的地寄存器执行部分解压缩,其中每组目的地寄存器 包括用于存储R元素数据结构的第一寄存器和用于存储为R元素数据结构 生成的相应元数据的第二寄存器。因此,在所示的例子中,有2组指令,完成了2:16到2:4的部分解压缩。
如图所示,第一指令(SCATTER.THREAD.partial R10,R2,R3,0, 3)指示N元素数据结构存储在寄存器R2中,元数据存储在R3中,并且 应该将R2的至少一部分内容解压缩到R10。此外,0值(对于#VecIdx)指 示未压缩数据结构(M)的哪个部分保持在R10中(其中0表示M的元素 0...7)。在本实施例中,将#VecIdx除以2,因为2个原始数据值被放到两 个目的地数据结构中,每个目的地数据结构一个。3值(对于#Mask)指示 要解压缩的R2的部分(其中3表示未压缩的数据结构(M)中的元素,在 该情况下,其对应于保持值A的N中的元素)。执行时,第一执行线程将 值A从寄存器R2复制到R10中的元素1。在一个实施例中,R10中的元素 0将是先前初始化的值。
第二指令(spMETADATA.THREAD.U2 R11,R3,0,3,0)指示N 元素数据结构的元数据存储在寄存器R3中,并且基于该元数据和第一指令 的结果,将R10中的数据的新的元数据写入寄存器R11。在本示例中,寄 存器R11中的每个索引是2位。此外,0值(对于#VecIdx)指示要写入的 R11的子部分(其中0表示元素0...3)。另外,3值(对于#Mask)指示未 压缩数据中的元素3将包括在部分压缩的数据中,并且最终0值(对于#Dest) 指示R11的子部分中的部分,R10的元数据要写入到其中(其中0表示R11 的所指示子部分的元素0...1)。当被执行时,第一执行线程向R11写入解 压缩时要向其写入R10中的值A的Q元素数据结构中的位置。如图所示, 在本实施例中,R11的所指示子部分的第一元素可以保持值0、1或2,并 且R11的所指示子部分的第二元素可以保持值1、2或3。此外,在所示的示例中,R11的所指示子部分的前两个元素(元素0...1)对应于与后两个 元素(元素2...3)不同的组(以及Q元素数据结构的相应子部分),因此, 虽然元素0和2都保持值1,但这些元素有效地对应于Q元素数据结构中 的不同位置。
第三指令(SCATTER.THREAD.partial R12,R2,R3,1,3)指示N 元素数据结构存储在寄存器R2中,元数据存储在R3中,以及应该将R2 的至少一部分内容解压缩到R12。此外,1值(对于#VecIdx)指示未压缩 的数据结构(M)的哪个部分保持在R12中(其中1表示M的元素8...15)。 3值(对于#Mask)指示要解压缩的R2的部分(其中3,二进制表示为11, 表示R2的两个第一元素)。当执行时,第二执行线程将值B从寄存器R2 复制到R12中的元素3。在一个实施例中,R12中的元素2将是先前初始化的值。
第四指令(spMETADATA.THREAD.U2 R13,R3,1,3,1)指示N 元素数据结构的元数据存储在寄存器R3中,并且基于该元数据和第三指令 的结果,将R12中的数据的新的元数据写入寄存器R11。此外,1值(对 于#VecIdx)指示要写入的R11的子部分(其中1表示元素4...7)。此外, 3Value(对于#Mask)指示未压缩数据中的元素0和1将包括在部分压缩的 数据中,以及最后的1值(对于#Dest)指示将要向其写入R12的元数据的 R11的子部分的部分(其中1表示R11的所指示的子部分的元素2…3)。 当被执行时,第二执行线程向R11写入解压缩时要向其写入R12中的值B 的Q元素数据结构中的位置。如图所示,在本实施例中,R11的所指示的 子部分的第一元素可以保持值0、1或2,以及R11的所指示的子部分的第 二元素可以保持值1、2或3。此外,在所示的示例中,R11的所指示的子 部分的前两个元素(元素0...1)对应于与第二两个元素(元素2…3)不同 的组(以及Q元素数据结构的相应子部分),所以虽然元素0和2都保持值 1,但这些元素有效对应于Q元素数据结构中的不同位置。
图10示出了在PAIR模式下操作的示例性2:16至2:4部分解压缩指 令。在PAIR模式中,一对线程中的每个线程都可以为N元素数据结构的一半提供部分解压缩。换句话说,该对中的每个线程生成一组2:4数据。 在所示的示例中,每个线程在其自己的一组寄存器上操作。
如图所示,第一指令(SCATTER.PAIR.partial R10,R2,R3,0,3) 指示N元素数据结构存储在寄存器R2中,元数据存储在R3中,R2的至 少部分内容应解压缩到R10。此外,0值(对于#VecIdx)指示当执行第一 指令的线程具有偶数ThreadID值(即,(ThreadID模数2)==0)时,R10 表示具有位置7...0的目的地M元素数据结构的部分,以及当执行第一指令的线程具有奇数ThreadID(即,(ThreadID模数2)==1)时,R10表示 具有位置15...8的目的地M元素数据结构的部分。3值(对于#Mask)指 示要解压缩的R2的部分。当第一指令由具有偶数ThreadID值的线程执行 时,来自寄存器R2的值A被复制到R10。当第一指令由具有奇数ThreadID 值的线程执行时,来自寄存器R2的值B被复制到R10。
此外,除了本实施例中的线程对之外,与上面参考图9描述的类似 地执行第二指令(spMETADATA.PAIR.U2 R11,R3,0,3,0)。因此,将 值A写入其R10副本的线程将在其R11副本中写入A的新的元数据,将值 B写入其R10副本的线程将在其R11副本中写入B的新的元数据。
图11示出了以QUAD模式操作的示例性2:32至2:4部分解压缩指 令。在QUAD模式中,四个线程中的每一个都可以为N元素数据结构的四 分之一提供部分解压缩。换句话说,四个线程中的每个线程生成一组2:4 数据。在所示的示例中,每个线程在其自己的一组寄存器上操作。
如图所示,第一指令(SCATTER.QUAD.partial R10,R2,R3,0,3) 指示N元素数据结构存储在寄存器R2中,元数据存储在R3中,以及应该 将R2的至少一部分内容解压缩到R10。此外,0值(对于#VecIdx)指示当 执行第一指令的线程具有第一象限ThreadID值(即,(ThreadID模数4) ==0)时,R10表示具有位置7...0的目的地M元素数据结构的部分,以及当线程具有第二象限ThreadID值(即,(ThreadID模数4)==1)时R10 表示具有位置15...8的目的地M元素数据结构的部分,当线程具有第三象 限ThreadID值(即,(ThreadID模数4)==2)时,R10表示具有位置23... 16的目的地M元素数据结构的部分,以及当线程具有第四象限ThreadID值(即,(ThreadID模数4)==3)时,R10表示具有位置31...24的目的 地M元素数据结构的部分。3值(对于#Mask)指示要解压缩的R2的部分。
当第一指令由具有第一象限ThreadID的线程执行时,将来自寄存器 R2的值A复制到R10。此外,当第一指令由具有第二象限ThreadID的线 程执行时,来自寄存器R2的值均不会复制到R10。当第一指令由具有第三 象限ThreadID的线程执行时,将来自寄存器R2的值B复制到R10。最后, 当第一指令由具有第四象限ThreadID的线程执行时,来自寄存器R2的值均不会复制到R10。
此外,除了本实施例中的四线程外,与上面参照图9描述的类似地 执行第二指令(spMETADATA.QUAD.U2 R11,R3,0,3,0)。因此,将 值A写入其R10副本的线程将在其R11副本中写入A的新的元数据,将值 B写入其R10副本的线程将在其R11副本中写入B的新的元数据。
压缩数据
以上描述提供了用于数据的完整和部分解压缩指令的实施例。然而, 如上所述,这些完整和部分解压缩指令对通过压缩M元素数据结构生成的 N元素数据结构进行操作。可以以提供完整和部分解压缩指令所使用的元 数据的任何方式执行压缩。
并行处理架构
图12示出了根据一个实施例的并行处理单元(PPU)1200。在一个 实施例中,PPU1200是在一个或更多个集成电路设备上实现的多线程处理 器。PPU 1200是一种设计为并行处理许多线程的延迟隐藏架构。线程(例 如,执行线程)是配置成由PPU 1200执行的指令集的实例化。在一个实施例中,PPU 1200是配置成实现图形渲染管线的图形处理单元(GPU),以 处理三维(3D)图形数据以便生成二维(2D)图像数据,以在诸如液晶显示(LCD)设备的显示设备上显示。在其他实施例中,PPU 1200可以用于 执行通用计算。尽管出于说明性目的在此提供了一个示例性并行处理器, 但应该强烈注意,这样的处理器仅出于说明性目的而提出,并且可以采用 任何处理器来补充和/或替代该处理器。
一个或更多个PPU 1200可以配置成加速数千个高性能计算(HPC), 数据中心和机器学习应用。PPU 1200可以配置成加速许多深度学习系统和 应用,包括自主车辆平台,深度学习,高精度语音,图像和文本识别系统, 智能视频分析,分子模拟,药物发现,疾病诊断,天气预报,大数据分析, 天文学,分子动力学模拟,金融建模,机器人技术,工厂自动化,实时语言翻译,在线搜索优化和个性化用户推荐等。
如图12所示,PPU 1200包括输入/输出(I/O)单元1205,前端单元1215,调度器单元1220,工作分配单元1225,集线器1230,交叉开关(Xbar) 1270,一个或更多个通用处理集群(GPC)1250,以及一个或更多个分区 单元1280。PPU 1200可以经由一个或更多个高速NVLink 1210互连连接到 主机处理器或其他PPU 1200。PPU 1200可以经由互连1202连接到主机处 理器或其他外围设备。PPU 1200还可以连接到包括多个存储器设备1204 的本地存储器。在一个实施例中,本地存储器可以包括多个动态随机存取存储器(DRAM)设备。DRAM设备可以配置为高带宽存储器(HBM)子 系统,其中多个DRAM裸晶堆叠在每个设备内。
NVLink 1210互连使得系统能够扩展并且包括与一个或更多个CPU 组合的一个或更多个PPU 1200,支持PPU 1200和CPU之间的高速缓存一 致性以及CPU主控。NVLink 1210可以通过集线器1230向/从PPU 1200 的其他单元发送数据和/或命令,例如一个或更多个复制引擎、视频编码器、 视频解码器、电源管理单元等(未明确示出)。结合图14B更详细地描述 NVLink 1210。
I/O单元1205配置成通过互连1202从主机处理器(未示出)发送和 接收通信(例如,命令、数据等)。I/O单元1205可以通过互连1202或通 过一个或更多个中间设备(例如内存桥)与主机处理器直接通信。在一个 实施例中,I/O单元1205可以经由互连1202与一个或更多个其他处理器(诸 如一个或更多个PPU 1200)通信。在一个实施例中,I/O单元1205实现外 围组件互连快速(PCIe)接口,用于通过PCIe总线通信,并且互连1202 是PCIe总线。在替代实施例中,I/O单元1205可以实现其他类型的公知接 口,用于与外部设备通信。
I/O单元1205对经由互连1202接收的数据包进行解码。在一个实施 例中,数据包表示配置成使PPU 1200执行各种操作的命令。I/O单元1205 按照命令指定的将解码的命令发送到PPU 1200的各种其他单元。例如,可 以将一些命令发送到前端单元1215。可以将其他命令发送到集线器1230 或PPU 1200的其他单元,诸如一个或更多个复制引擎、视频编码器、视频 解码器、电源管理单元等(未明确示出)。换句话说,I/O单元1205配置成 在PPU1200的各种逻辑单元之间和之中路由通信。
在一个实施例中,由主机处理器执行的程序对缓冲器中的命令流进 行编码,该缓冲器向PPU 1200提供工作负载以进行处理。工作负载可以包 括要由这些指令处理的若干指令和数据。缓冲器是存储器中的区域,其可 由主机处理器和PPU 1200访问(例如,读/写)。例如,I/O单元1205可以 配置成经由通过互连1202传输的存储器请求访问连接到互连1202的系统 存储器中的缓冲器。在一个实施例中,主机处理器将命令流写入缓冲器, 然后将指向命令流开始的指针发送到PPU 1200。前端单元1215接收指向 一个或更多个命令流的指针。前端单元1215管理一个或更多个流,从流中 读取命令并将命令转发到PPU 1200的各个单元。
将前端单元1215耦合到调度器单元1220,调度器单元1220配置各 种GPC 1250以处理由一个或更多个流定义的任务。调度器单元1220配置 成跟踪与由调度器单元1220管理的与各种任务有关的状态信息。状态可以 指示将任务分配给哪个GPC 1250,任务是活动的还是不活动的,与任务相 关联的优先级等等。调度器单元1220管理一个或更多个GPC1250上的多 个任务的执行。
调度器单元1220耦合到工作分配单元1225,工作分配单元1225配 置成分派任务以在GPC 1250上执行。工作分配单元1225可以跟踪从调度 器单元1220接收的多个调度任务。在一个实施例中,工作分配单元1225 管理每个GPC 1250的待处理(pending)任务池和活动任务池。待处理任务池可包括多个时隙(例如,32个时隙),其包含指派为由特定GPC1250 处理的任务。活动任务池可以包括用于由GPC 1250主动处理的任务的多个 时隙(例如,4个时隙)。当GPC 1250完成任务的执行时,将该任务从GPC 1250的活动任务池中逐出,并且选择并调度来自待处理任务池的其他任务 之一,以用于在GPC 1250上执行。如果活动任务在GPC 1250上已空闲, 例如在等待数据依赖性被解决时,那么可以从GPC 1250中逐出活动任务并 将其返回到待处理任务池,同时选择并调度待处理任务池中的另一个任务以在GPC 1250上执行。
工作分配单元1225经由XBar 1270与一个或更多个GPC 1250通信。 XBar 1270是将PPU 1200的许多单元耦合到PPU 1200的其他单元的互连 网络。例如,XBar 1270可以配置成将工作分配单元1225耦合到特定GPC 1250。虽然未明确示出,但是PPU 1200的一个或更多个其他单元也可以经 由集线器1230连接到XBar 1270。
任务由调度器单元1220管理,并由工作分配单元1225分派到GPC 1250。GPC 1250配置成处理任务并生成结果。结果可以由GPC 1250内的 其他任务消耗,经由XBar 1270路由到不同的GPC 1250,或者存储在存储器1204中。结果可以经由分区单元1280写入存储器1204,分区单元1280 实现用于向/从存储器1204读取和写入数据的存储器接口。结果可以经由 NVLink 1210发送到另一个PPU 1204或CPU。在一个实施例中,PPU 1200 包括U个分区单元1280,其等于耦合到PPU 1200的独立且不同的存储器 设备1204的数量。分区单元1280将在下面结合图13B更详细地描述。
在一个实施例中,主机处理器执行驱动程序内核,该驱动程序内核 实现应用程序编程接口(API),该API使得在主机处理器上执行的一个或 更多个应用程序能够调度操作用于在PPU 1200上执行。在一个实施例中, 多个计算应用程序由PPU 1200同时执行,并且PPU 1200为多个计算应用 程序提供隔离、服务质量(QoS)和独立地址空间。应用程序可以生成指 令(例如,API调用),其使得驱动程序内核生成一个或更多个任务以供PPU 1200执行。驱动程序内核将任务输出到由PPU 1200处理的一个或更多个流。每个任务可以包括一组或更多组相关线程,在此称为线程束(warp)。 在一个实施例中,线程束包括可以并行执行的32个相关线程。协作线程可 以指代包括执行任务的指令的多个线程,并且可以通过共享存储器交换数 据。结合图14A更详细地描述了线程和协作线程。
图13A示出了根据一个实施例的图12的PPU 1200的GPC 1250。如 图13A所示,每个GPC 1250包括用于处理任务的多个硬件单元。在一个实施例中,每个GPC 1250包括管线管理器1310,预光栅操作单元(PROP) 1315,光栅引擎1325,工作分配交叉开关(WDX)1380,存储器管理单元 (MMU)1390,以及一个或更多个数据处理集群(DPC)1320。应当理解, 图13A的GPC 1250可以包括除了图13A中所示的单元之外的或代替图13A 中所示的单元的其他硬件单元。
在一个实施例中,GPC 1250的操作由管线管理器1310控制。管线 管理器1310管理一个或更多个DPC 1320的配置,以用于处理分配给GPC 1250的任务。在一个实施例中,管线管理器1310可以配置一个或更多个 DPC 1320中的至少一个以实现图形渲染管线的至少一部分。例如,DPC 1320可以配置成在可编程流式多处理器(SM)1340上执行顶点着色器程序。管线管理器1310还可以配置成将从工作分配单元1225接收的数据包路由到GPC 1250中的适当逻辑单元。例如,可以将一些数据包路由到PROP 1315和/或光栅引擎1325中的固定功能硬件单元,而可以将其他数据包路 由到DPC 1320以供图元引擎1335或SM 1340处理。在一个实施例中,管 线管理器1310可以配置一个或更多个DPC 1320中的至少一个以实现神经 网络模型和/或计算管线。
PROP单元1315配置成将由光栅引擎1325和DPC 1320生成的数据 路由到光栅操作(ROP)单元,其结合图13B更详细地描述。PROP单元 1315还可以配置成执行颜色混合的优化,组织像素数据,执行地址转换等。
光栅引擎1325包括配置成执行各种光栅操作的多个固定功能硬件单 元。在一个实施例中,光栅引擎1325包括设置引擎,粗光栅引擎,剔除引 擎,裁剪引擎,精细光栅引擎和图块合并引擎。设置引擎接收变换的顶点并生成与由顶点定义的几何图元相关联的平面方程。平面方程被发送到粗 光栅引擎以生成图元的覆盖信息(例如,图块的x,y覆盖掩码)。粗光栅 引擎的输出被发送到剔除引擎,其中与未通过z测试的图元相关联的片段 被剔除,并且被发送到裁剪引擎,其中位于视锥体外的片段被裁剪掉。经 过剪裁和剔除后留下来的那些片段可以被传递到精细光栅引擎,以基于由 设置引擎生成的平面方程来生成像素片段的属性。光栅引擎1325的输出包 括要由例如在DPC 1320内实现的片段着色器处理的片段。
包括在GPC 1250中的每个DPC 1320包括M管道控制器(MPC) 1330,图元引擎1335和一个或更多个SM 1340。MPC 1330控制DPC 1320 的操作,将从管线管理器1310接收的数据包路由到DPC 1320中的适当单 元。例如,可以将与顶点相关联的数据包路由到图元引擎1335,图元引擎 1335配置成从存储器1204获取与顶点相关联的顶点属性。相反,可以将与着色器程序相关联的数据包发送到SM 1340。
SM 1340包括可编程流式处理器,其配置成处理由多个线程表示的 任务。每个SM1340是多线程的并且配置成同时执行来自特定线程组的多 个线程(例如,32个线程)。在一个实施例中,SM 1340实现SIMD(单指 令、多数据)架构,其中一组线程(例如,线程束)中的每个线程配置成基于相同的指令集处理不同的数据集。线程组中的所有线程都执行相同的指令。在另一实施例中,SM 1340实现SIMT(单指令、多线程)架构,其 中一组线程中的每个线程配置成基于相同的指令集处理不同的数据集,但 是其中允许一组线程中的各个线程在执行期间发散。在一个实施例中,为 每个线程束维护程序计数器、调用栈和执行状态,当线程束内的线程发散时,使线程束和线程束内的串行执行之间的并发性成为可能。在另一实施 例中,为每个个体线程维护程序计数器、调用栈和执行状态,使得在线程 束内和线程束之间的所有线程之间的同等并发性。当为每个个体线程维护 执行状态时,可以将执行相同指令的线程收敛并且并行执行以获得最大效 率。下面结合图14A更详细地描述SM 1340。
MMU 1390提供GPC 1250和分区单元1280之间的接口。MMU 1390 可以提供虚拟地址到物理地址的转换、存储器保护和存储器请求的仲裁。 在一个实施例中,MMU 1390提供一个或更多个转换后备缓冲器(TLB), 用于执行虚拟地址到存储器1204中的物理地址的转换。
图13B示出了根据一个实施例的图12的PPU 1200的存储器分区单 元1280。如图13B所示,存储器分区单元1280包括光栅操作(ROP)单 元1350,二级(L2)高速缓存1360和存储器接口1370。存储器接口1370耦合到存储器1204。存储器接口1370可以实现32、64、128、1024位数据 总线等,用于高速数据传输。在一个实施例中,PPU 1200合并U个存储器 接口1370,每对分区单元1280一个存储器接口1370,其中每对分区单元 1280连接到相应的存储器设备1204。例如,PPU 1200可以连接到多达Y 个存储器设备1204,例如高带宽存储器堆栈或图形双数据速率,版本5, 同步动态随机存取存储器或其他类型的永久存储。
在一个实施例中,存储器接口1370实现HBM2存储器接口并且Y 等于U的一半。在一个实施例中,HBM2存储器堆栈与PPU 1200位于相 同的物理封装上,与传统的GDDR5SDRAM系统相比提供了显著的功率和 面积节省。在一个实施例中,每个HBM2堆栈包括四个存储器裸晶并且Y 等于4,其中HBM2堆栈包括每裸晶两个128位通道,总共8个通道和1024 位的数据总线宽度。
在一个实施例中,存储器1204支持单错误校正双错误检测(SECDED) 纠错码(ECC)以保护数据。ECC为对数据损坏敏感的计算应用程序提供 更高的可靠性。在PPU 1200处理非常大的数据集和/或运行应用程序延长 的时间段的大规模集群计算环境中,可靠性尤为重要。
在一个实施例中,PPU 1200实现多级存储器层级。在一个实施例中, 存储器分区单元380支持统一存储器,以为CPU和PPU 1200存储器提供 单个统一虚拟地址空间,从而实现虚拟存储器系统之间的数据共享。在一个实施例中,跟踪PPU 1200对位于其他处理器上的存储器的访问频率,以 确保将存储器页面移动到更频繁地访问页面的PPU 1200的物理存储器。在 一个实施例中,NVLink 1210支持地址转换服务,其允许PPU 1200直接访 问CPU的页表并提供由PPU 1200对CPU存储器的完全访问。
在一个实施例中,复制引擎在多个PPU 1200之间或在PPU 1200和 CPU之间传输数据。复制引擎可以为未映射到页表的地址生成页面错误。 然后,存储器分区单元1280可以服务页面错误,将地址映射到页表中,之 后复制引擎可以执行传输。在传统系统中,存储器被固定(例如,不可分 页)以用于多个处理器之间的多个复制引擎操作,从而大大减少了可用存储器。使用硬件页面错误,可以将地址传递给复制引擎,而不必担心内存 页是否是常驻的,并且复制过程是透明的。
来自存储器1204或其他系统存储器的数据可以由存储器分区单元 1280获取并存储在L2高速缓存1360中,L2高速缓存1360位于芯片上并 且在各种GPC 1250之间共享。如图所示,每个存储器分区单元1280包括 与相应的存储器设备1204相关联的L2高速缓存1360的一部分。然后,可 以在GPC 1250内的各种单元中实现较低级别的高速缓存。例如,SM1340 中的每一个可以实现一级(L1)高速缓存。L1高速缓存是专用于特定SM 1340的私有存储器。可以获取来自L2高速缓存1360的数据并将其存储在 每个L1高速缓存中,以便在SM1340的功能单元中进行处理。L2高速缓 存1360耦合到存储器接口1370和XBar 1270。
ROP单元1350执行与像素颜色有关的图形光栅操作,例如颜色压缩、 像素混合等。ROP单元1350还结合光栅引擎1325实现深度测试,接收与 来自光栅引擎1325的剔除引擎的像素片段相关联的样本位置的深度。针对 深度缓冲器中的对应深度测试与片段相关联的样本位置的深度。如果片段 通过样本位置的深度测试,则ROP单元1350更新深度缓冲器并将深度测试的结果发送到光栅引擎1325。应当理解,分区单元1280的数量可以不同 于GPC1250的数量,并且因此每个ROP单元1350可以耦合到每个GPC 1250。ROP单元1350跟踪从不同GPC 1250接收的数据包,并且确定由 ROP单元1350生成的结果通过Xbar 1270被路由到哪个GPC 1250。尽管ROP单元1350包括在图13B中的存储器分区单元1280内,但是在其他实施例中,ROP单元1350可以在存储器分区单元1280的外部。例如,ROP 单元1350可以驻留在GPC 1250或其他单元内。
图14A示出了根据一个实施例的图13A的流式多处理器1340。如图 14A所示,SM1340包括指令高速缓存1405,一个或更多个调度器单元1410, 寄存器文件1420,一个或更多个处理核1450,一个或更多个特殊功能单元 (SFU)1452,一个或更多个加载/存储单元(LSU)1454,互连网络1480,共享存储器/L1高速缓存1470。
如上所述,工作分配单元1225分派任务用于在PPU 1200的GPC 1250上执行。将任务分配给GPC 1250内的特定DPC 1320,并且如果任务 与着色器程序相关联,可以将任务分配给SM 1340。调度器单元1410从工作分配单元1225接收任务并管理针对指派给SM 1340的一个或更多个线程 块的指令调度。调度器单元1410调度线程块以作为并行线程的线程束执行, 其中每个线程块被分配至少一个线程束。在一个实施例中,每个线程束执行32个线程。调度器单元1410可以管理多个不同的线程块,将线程束分 配给不同的线程块,然后在每个时钟周期期间将来自多个不同的协作组的 指令分派给各个功能单元(例如,核1450、SFU 1452和LSU 1454)。
协作组是用于组织通信线程组的编程模型,其允许开发者表达线程 正在通信的粒度,使得表达能够更丰富,更有效的并行分解。协作启动API 支持线程块之间的同步,以执行并行算法。传统的编程模型提供用于同步 协作线程的单个简单构造:跨线程块的所有线程的屏障(例如,syncthreads ()函数)。然而,程序员通常希望以小于线程块粒度的方式定义线程组, 并在所定义的组内进行同步,以使得以集体组范围的功能接口的形式实现更高的性能,设计灵活性和软件重用。
协作组使程序员能够在子块(例如,小到单个线程)和多块粒度的 情况下明确地定义线程组,并且执行集合操作,诸如在协作组中的线程上 的同步。编程模型支持跨软件边界的清晰组合,因此库和实用功能可以在 其本地上下文中安全地同步,而无需对收敛进行假设。协作组图元支持新 的协作并行模式,包括生产者-消费者并行,机会并行以及跨线程块的整个网格的全局同步。
分派单元1415配置成向一个或更多个功能单元发送指令。在该实施 例中,调度器单元1410包括两个分派单元1415,其使得能够在每个时钟周 期期间分派来自相同线程束的两个不同指令。在替代实施例中,每个调度 器单元1410可以包括单个分派单元1415或附加分派单元1415。
每个SM 1340包括寄存器文件1420,其为SM 1340的功能单元提供 一组寄存器。在一个实施例中,寄存器文件1420在每个功能单元之间划分, 使得每个功能单元被分配寄存器文件1420的专用部分。在另一个实施例中, 寄存器文件1420在由SM 1340执行的不同线程束之间划分。寄存器文件 1420为连接到功能单元的数据路径的操作数提供临时存储。
每个SM 1340包括L个处理核1450。在一个实施例中,SM 1340包 括大量(例如,128个等)不同的处理核1450。每个核1450可以包括完全 管线化的单精度、双精度和/或混合精度处理单元,其包括浮点算术逻辑单 元和整数算术逻辑单元。在一个实施例中,浮点算术逻辑单元实现用于浮 点算术的IEEE 754-2008标准。在一个实施例中,核1450包括64个单精度 (32位)浮点核,64个整数核,32个双精度(64位)浮点核和8个张量 核。
张量核配置成执行矩阵运算,以及在一个实施例中,核1450中包括 一个或更多个张量核。具体地,张量核配置成执行深度学习矩阵算术,例 如用于神经网络训练和推理的卷积运算。在一个实施例中,每个张量核在 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矩阵乘法的其他 中间乘积累加。在实践中,张量核用于执行更大的二维或更高维矩阵运算, 这些运算是从这些较小的元素构建的。诸如CUDA9C++API之类的API 公开了专门的矩阵加载,矩阵乘法和累加以及矩阵存储操作,以有效地使 用来自CUDA-C++程序的张量核。在CUDA级别,线程束级接口假设16×16 大小的矩阵,其跨越线程束的所有32个线程。
每个SM 1340还包括执行特殊功能(例如,属性评估,倒数平方根 等)的M个SFU1452。在一个实施例中,SFU 1452可以包括树遍历单元, 其配置成遍历层次树数据结构。在一个实施例中,SFU 1452可以包括配置成执行纹理映射过滤操作的纹理单元。在一个实施例中,纹理单元配置成 从存储器1204加载纹理映射(例如,2D纹理像素阵列)并对纹理映射进 行采样以产生经采样的纹理值,以用于由SM 1340执行的着色器程序中。 在一个实施例中,纹理映射存储在共享存储器/L1高速缓存1370中。纹理 单元实现纹理操作,例如使用mip-map(例如,不同细节级别的纹理映射) 的过滤操作。在一个实施例中,每个SM 1240包括两个纹理单元。
每个SM 1340还包括N个LSU 1454,其实现共享存储器/L1高速缓 存1470和寄存器文件1420之间的加载和存储操作。每个SM 1340包括将 每个功能单元连接到寄存器文件1420和将LSU 1454连接到寄存器文件 1420、共享存储器/L1高速缓存1470的互连网络1480。在一个实施例中, 互连网络1480是可以配置成将任何功能单元连接到寄存器文件1420中的任何寄存器和将LSU 1454连接到寄存器文件1420和共享存储器/L1高速 缓存1470中的存储器位置的交叉开关1420。
共享存储器/L1高速缓存1470是片上存储器阵列,其允许SM 1340 与图元引擎1335之间以及SM 1340中的线程之间的数据存储和通信。在一 个实施例中,共享存储器/L1高速缓存1470包括128KB的存储容量,并且 位于从SM 1340到分区单元1280的路径中。共享存储器/L1高速缓存1470 可用于高速缓存读取和写入。共享存储器/L1高速缓存1470、L2高速缓存 1360和存储器1204中的一个或更多个是后备存储。
将数据高速缓存和共享存储器功能组合到单个存储器块中为两种类 型的存储器访问提供了最佳的整体性能。容量可用作不使用共享存储器的 程序的高速缓存。例如,如果共享存储器配置为使用一半容量,则纹理和 加载/存储操作可以使用剩余容量。在共享存储器/L1高速缓存1470内的集 成使得共享存储器/L1高速缓存1470能够用作用于流式传输数据的高吞吐 量管道,同时提供对频繁重用数据的高带宽和低延迟访问。
当配置用于通用并行计算时,与图形处理相比,可以使用更简单的 配置。具体地,绕过图12中所示的固定功能图形处理单元,创建更简单的 编程模型。在通用并行计算配置中,工作分配单元1225将线程块直接指派 和分发给DPC 1320。块中的线程执行相同的程序,在计算中使用唯一的线 程ID以确保每个线程生成唯一的结果,使用SM 1340执行程序并执行计算,使用共享存储器/L1高速缓存1470以在线程之间通信,并且使用LSU 1454 以通过共享存储器/L1高速缓存1470和存储器分区单元1280读取和写入全 局存储器。当SM1340配置用于通用并行计算时,其还可以写入调度器单 元1220可以用来在DPC 1320上启动新工作的命令。
PPU 1200可以包括在台式计算机,膝上型计算机,平板计算机,服 务器,超级计算机,智能电话(例如,无线、手持设备),个人数字助理(PDA), 数码相机,车辆,头戴式显示器,手持电子设备等中。在一个实施例中,PPU 1200体现在单个半导体衬底上。在另一个实施例中,PPU 1200与一个 或更多个其他设备(例如附加PPU 1200,存储器1204,精简指令集计算机 (RISC)CPU,存储器管理单元(MMU),数模转换器(DAC)等)一起包括在片上系统(SoC)中。
在一个实施例中,PPU 1200可以包括在包括一个或更多个存储器设 备1204的图形卡上。图形卡可以配置成与台式计算机的主板上的PCIe插槽相接合。在又一个实施例中,PPU 1200可以是包括在主板的芯片组中的 集成图形处理单元(iGPU)或并行处理器。
示例性计算系统
随着开发人员在诸如人工智能计算之类的应用中披露和利用更多的 并行性,具有多个GPU和CPU的系统用于各种行业。数据中心、研究机 构和超级计算机中部署了具有数千到数万个计算节点的高性能GPU加速系 统,以解决日益严峻的问题。随着高性能系统内处理设备数量的增加,需 要扩展通信和数据传输机制以支持增加的带宽。
图14B是根据一个实施例的使用图12的PPU 1200实现的处理系统 1400的概念图。示例性系统1465可以配置成实现图3中所示的方法100 和/或图8中所示的方法200。处理系统1400包括CPU 1430,交换机1410, 以及多个PPU 1200,每个都具有各自的存储器1204。NVLink 1210在每个 PPU 1200之间提供高速通信链路。尽管在图14B中示出了特定数量的NVLink 1210和互连1202连接,但是到每个PPU 1200和CPU 1430的连接 的数量可以变化。交换机1410在互连1202和CPU 1430之间接合。PPU 1200、 存储器1204和NVLink 1210可以位于单个半导体平台上以形成并行处理模 块1425。在一个实施例中,交换机1410支持用于在各种不同连接和/或链 接之间接口的两个或更多个协议。
在另一实施例(未示出)中,NVLink 1210在每个PPU 1200和CPU 1430之间提供一个或更多个高速通信链路,并且交换机1410在互连1202 和每个PPU 1200之间接合。PPU1200、存储器1204和互连1202可以位于 单个半导体平台上,以形成并行处理模块1425。在又一个实施例(未示出) 中,互连1202在每个PPU 1200和CPU 1430之间提供一个或更多个通信 链路,交换机1410使用NVLink 1210在每个PPU 1200之间接合,以在PPU 1200之间提供一个或更多个高速通信链路。在另一个实施例(未示出)中, NVLink 1210通过交换机1410在PPU 1200和CPU 1430之间提供一个或更多个高速通信链路。在又一个实施例(未示出)中,互连1202在每个PPU 1200之间直接提供一个或更多个通信链路。一个或更多个NVLink 1210高 速通信链路可以实现为物理NVLink互连,或者使用与NVLink 1210相同 的协议实现为芯片上或裸晶上互连。
在本说明书的上下文中,单个半导体平台可以指在裸晶或芯片上制 造的唯一的基于单一半导体的集成电路。应当注意,术语单个半导体平台 还可以指具有增加的连接性的多芯片模块,其模拟片上操作并且相对于利 用传统总线实现方式进行了实质性改进。当然,根据用户的期望,各种电 路或设备也可以单独地或以半导体平台的各种组合设置。或者,并行处理模块1425可以实现为电路板基板,并且PPU 1200和/或存储器1204中的 每一个可以是封装后的设备。在一个实施例中,CPU 1430、交换机1410 和并行处理模块1425位于单个半导体平台上。
在一个实施例中,每个NVLink 1210的信号传输速率是20到25千 兆字节/秒,并且每个PPU 1200包括六个NVLink 1210接口(如图14B所 示,针对每个PPU 1200,包括五个NVLink 1210接口)。每个NVLink 1210 在每个方向上提供25千兆字节/秒的数据传输速率,六个链路提供1200千 兆字节/秒的数据传输速率。当CPU 1430还包括一个或更多个NVLink1210 接口时,NVLink 1210可专门用于如图14B所示的PPU到PPU通信,或 PPU到PPU和PPU到CPU的某种组合。
在一个实施例中,NVLink 1210允许从CPU 1430到每个PPU 1200 的存储器1204的直接加载/存储/原子访问。在一个实施例中,NVLink 1210 支持一致性操作,允许将从存储器1204读取的数据存储在CPU 1430的高 速缓存层次结构中,减少了CPU 1430的高速缓存访问延迟。在一个实施例 中,NVLink 1210包括对地址转换服务(ATS)的支持,允许PPU1200直 接访问CPU 1430内的页表。一个或更多个的NVLink 1210还可以配置成在低功率模式下操作。
图14C示出了示例性系统1465,其中可以实现各种先前实施例的各 种架构和/或功能。示例性系统1465可以配置成实现图3中所示的方法100 和/或图8中所示的方法200。
如图所示,提供了系统1465,其包括连接到通信总线1475的至少一 个中央处理单元1430。通信总线1475可以使用任何合适的协议(例如PCI (外围组件互连),快速外围组件互连(PCI-Express),AGP(加速图形端 口),超传输(HyperTransport)或任何其他总线或一个或更多个点对点通信协议)来实现。系统1465还包括主存储器1440。控制逻辑(软件)和数据存储在主存储器1440中,主存储器1440可以采用随机存取存储器(RAM) 的形式。
系统1465还包括输入设备1460,并行处理系统1425和显示设备1445, 例如,传统的CRT(阴极射线管),LCD(液晶显示器),LED(发光二极管),等离子显示器等。可以从输入设备1460(例如键盘、鼠标、触摸板、 麦克风等)接收用户输入。前述模块和/或设备中的每一个甚至可以位于单个半导体平台上以形成系统1465。或者,各个模块也可以根据用户的期望 单独地或以半导体平台的各种组合来设置。
此外,出于通信目的,系统1465可以通过网络接口1435耦合到网 络(例如,电信网络、局域网(LAN)、无线网络、诸如因特网的广域网(WAN)、 对等网络、电缆网络等)进行通信。
系统1465还可以包括辅助存储器(未示出)。辅助存储器1510包括 例如硬盘驱动器和/或可移除存储驱动器,表示软盘驱动器,磁带驱动器, 光盘驱动器,数字通用盘(DVD)驱动器,记录设备,通用串行总线(USB) 闪存。可移除存储驱动器以众所周知的方式从可移除存储单元读取和/或写 入可移除存储单元。
计算机程序或计算机控制逻辑算法可以存储在主存储器1440和/或 辅助存储器中。在执行这样的计算机程序时,使系统1465能够执行各种功 能。存储器1440、存储装置和/或任何其他存储装置是计算机可读介质的可 能示例。
可以在通用计算机系统、电路板系统、专用于娱乐目的的游戏控制 台系统,特定于应用的系统和/或任何其他所需的系统的上下文中实现各种 先前附图的架构和/或功能。例如,系统1465可以采用以下形式:台式计 算机,膝上型计算机,平板计算机,服务器,超级计算机,智能电话(例 如,无线,手持设备),个人数字助理(PDA),数码相机,车辆,头戴式 显示器,手持电子设备,移动电话设备,电视,工作站,游戏控制台,嵌 入式系统和/或任何其他类型的逻辑。
虽然上面已经描述了各种实施例,但是应该理解,它们仅以示例的 方式呈现,而不是限制。因此,优选实施例的宽度和范围不应受任何上述 示例性实施例的限制,而应仅根据所附权利要求及其等同物来定义。
图形处理管线
在一个实施例中,PPU 1200包括图形处理单元(GPU)。PPU 1200 配置成接收指定用于处理图形数据的着色器程序的命令。图形数据可以定 义为一组图元,诸如点、线、三角形、四边形、三角形条等。通常,图元 包括指定图元的多个顶点的数据(例如,在模型空间坐标系中)以及与图 元的每个顶点相关联的属性。PPU 1200可以配置成处理图形图元以生成帧缓冲器(例如,用于显示器的每个像素的像素数据)。
应用程序将场景的模型数据(例如,顶点和属性的集合)写入诸如 系统存储器或存储器1204的存储器。模型数据定义可在显示器上可见的每 个对象。然后,应用程序对驱动程序内核进行API调用,其请求要呈现和 显示的模型数据。驱动程序内核读取模型数据并将命令写入一个或更多个流以执行处理模型数据的操作。命令可以引用要在PPU 1200的SM 1340 上实现的不同着色器程序,包括顶点着色器、外壳着色器、域着色器、几 何着色器和像素着色器中的一个或更多个。例如,SM 1340中的一个或更多个可以配置成执行顶点着色器程序,该顶点着色器程序处理由模型数据 定义的多个顶点。在一个实施例中,不同的SM 1340可以配置成同时执行 不同的着色器程序。例如,SM 1340的第一子集可以配置成执行顶点着色 器程序,而SM 1340的第二子集可以配置成执行像素着色器程序。SM 1340的第一子集处理顶点数据以产生经处理的顶点数据,并将经处理的顶点数 据写入L2高速缓存1360和/或存储器1204。在将经处理的顶点数据光栅化 (例如,从三维数据变换为屏幕空间中的二维数据)以产生片段数据之后,SM 1340的第二子集执行像素着色器以产生经处理的片段数据,然后将其 与其他经处理的片段数据混合并写入存储器1204中的帧缓冲器。顶点着色 器程序和像素着色器程序可以同时执行,以管线化方式处理来自同一场景 的不同数据,直到场景的所有模型数据都已经被渲染到帧缓冲器。然后, 将帧缓冲器的内容发送到显示控制器以在显示设备上显示。
图15是根据一个实施例的由图12的PPU 1200实现的图形处理管线 1500的概念图。图形处理管线1500是实现为从3D几何数据生成2D计算 机生成的图像的处理步骤的抽象流程图。众所周知,管线架构可以通过将 操作分成多个阶段来更有效地执行长延迟操作,其中每个阶段的输出耦合 到下一个连续阶段的输入。因此,图形处理管线1500接收从图形处理管线 1500的一个阶段发送到下一阶段的输入数据1501,以生成输出数据1502。在一个实施例中,图形处理管线1500可以表示由
Figure SMS_4
API定义的图形 处理管线。作为选择,图形处理管线1500可以在先前附图和/或任何一个 或更多个后续附图的功能和架构的上下文中实现。
如图15所示,图形处理管线1500包括管线架构,该管线架构包括 多个阶段。这些阶段包括但不限于数据组装阶段1510,顶点着色阶段1520, 图元组装阶段1530,几何着色阶段1540,视口缩放、剔除和裁剪(VSCC) 阶段1550,光栅化阶段1560,片段着色阶段1570和光栅操作阶段1580。 在一个实施例中,输入数据1501包括配置处理单元以实现图形处理管线 1500的阶段的命令和要由阶段处理的几何图元(例如,点、线、三角形、 四边形、三角形条或扇形等)。输出数据1502可以包括被复制到存储器中 的帧缓冲器或其他类型的表面数据结构的像素数据(例如,颜色数据)。
数据组装阶段1510接收输入数据1501,其指定高阶表面、图元等的 顶点数据。数据组装阶段1510在临时存储器或队列中收集顶点数据,例如 通过从主机处理器接收包括指向存储器中的缓冲器的指针的命令并从缓冲 器读取顶点数据。然后将顶点数据发送到顶点着色阶段1520以进行处理。
顶点着色阶段1520通过针对每个顶点一次执行一组操作(例如,顶 点着色器或程序)来处理顶点数据。例如,可以将顶点指定为与一个或更 多个顶点属性(例如,颜色、纹理坐标、表面法线等)相关联的4坐标向 量(例如,<x,y,z,w>)。顶点着色阶段1520可以操纵各个顶点属性, 诸如位置、颜色、纹理坐标等。换句话说,顶点着色阶段1520对顶点坐标 或与顶点相关联的其他顶点属性执行操作。这些操作通常包括照明操作(例 如,修改顶点的颜色属性)和变换操作(例如,修改顶点的坐标空间)。例如,可以使用对象坐标空间中的坐标来指定顶点,通过将坐标乘以将坐标 从对象坐标空间转换到世界空间或归一化设备坐标(NCD)空间的矩阵来 对顶点进行变换。顶点着色阶段1520生成经变换的顶点数据,该经变换的 顶点数据被发送到图元组装阶段1530。
图元组装阶段1530收集由顶点着色阶段1520输出的顶点,并将顶 点分组为几何图元,以供几何着色阶段1540处理。例如,图元组装阶段1530 可配置成将每三个连续顶点分组为几何图元(例如,三角形),以用于传输 到几何着色阶段1540。在一些实施例中,可以将特定顶点重用于连续几何 图元(例如,三角形条中的两个连续三角形可以共享两个顶点)。图元组装阶段1530将几何图元(例如,关联顶点的集合)发送到几何着色阶段1540。
几何着色阶段1540通过对几何图元执行一组操作(例如,几何着色 器或程序)来处理几何图元。曲面细分操作可以从每个几何图元生成一个 或更多个几何图元。换句话说,几何着色阶段1540可以将每个几何图元细 分为两个或更多个几何图元的更精细网格,以供图形处理管线1500的其余 部分处理。几何着色阶段1540将几何图元发送到视口SCC阶段1550。
在一个实施例中,图形处理管线1500可以在流式多处理器和顶点着 色阶段1520、图元组装阶段1530、几何着色阶段1540、片段着色阶段1570 和/或与之相关联的硬件/软件内操作,可以顺序地执行处理操作。一旦顺序 处理操作完成,在一个实施例中,视口SCC阶段1550可以利用该数据。 在一个实施例中,可以将由图形处理管线1500中的一个或更多个阶段处理的图元数据写入高速缓存(例如,L1高速缓存、顶点高速缓存等)。在这 种情况下,在一个实施例中,视口SCC阶段1550可以访问高速缓存中的 数据。在一个实施例中,将视口SCC阶段1550和光栅化阶段1560实现为 固定功能电路。
视口SCC阶段1550执行几何图元的视口缩放、剔除和裁剪。渲染 的每个表面与抽象摄像机位置相关联。摄像机位置表示观看场景的观看者 的位置,并定义包围场景对象的视锥体。视锥体可包括观察平面、后平面 和四个裁剪平面。可以将完全在视锥体之外的任何几何图元剔除(例如, 丢弃),因为几何图元将不会对最终渲染场景做出贡献。可以将部分在视锥体内和部分在视锥体外的任何几何图元裁剪掉(例如,变换为包围在视锥 体内的新的几何图元。此外,几何图元可以各自基于视锥体的深度来缩放。 然后,将所有可能可见的几何图元发送到光栅化阶段1560。
光栅化阶段1560将3D几何图元转换为2D片段(例如,能够用于 显示等)。光栅化阶段1560可以配置成利用几何图元的顶点来设置一组平面方程,从中可以内插各种属性。光栅化阶段1560还可以计算多个像素的 覆盖掩码,其指示像素的一个或更多个样本位置是否截取几何图元。在一 个实施例中,还可以执行z测试以确定几何图元是否被已经被光栅化的其 他几何图元遮挡。光栅化阶段1560生成片段数据(例如,与每个被覆盖像 素的特定样本位置相关联的内插顶点属性),其被发送到片段着色阶段1570。
片段着色阶段1570通过对每个片段执行一组操作(例如,片段着色 器或程序)来处理片段数据。片段着色阶段1570可以生成片段的像素数据 (例如,颜色值),诸如通过使用片段的内插纹理坐标执行照明操作或采样 纹理映射。片段着色阶段1570生成被发送到光栅操作阶段1580的像素数 据。
光栅操作阶段1580可以对像素数据执行各种操作,诸如执行阿尔法 测试,模板测试,以及将像素数据与对应于与像素相关联的其他片段的其 他像素数据混合。当光栅操作阶段1580已经完成处理像素数据(例如,输 出数据1502)时,可以将像素数据写入诸如帧缓冲器、颜色缓冲器等的渲染目标。
应当理解,除了上述一个或更多个阶段之外或代替上述一个或更多 个阶段,可以在图形处理管线1500中包括一个或更多个附加阶段。抽象图 形处理管线的各种实现可以实现不同的阶段。此外,在一些实施例中(例 如,几何着色阶段1540),可以从图形处理管线中排除上述一个或更多个阶 段。其他类型的图形处理管线也被考虑为在本公开的范围内。此外,图形 处理管线1500的任何阶段可以由诸如PPU 1200的图形处理器内的一个或 更多个专用硬件单元实现。图形处理管线1500的其他阶段可以由诸如PPU 1200的SM 1340之类的可编程硬件单元实现。
可以经由由诸如CPU之类的主机处理器执行的应用程序来实现图形 处理管线1500。在一个实施例中,设备驱动程序可以实现应用程序编程接 口(API),其定义可以由应用程序使用的各种功能,以便生成图形数据用于显示。设备驱动程序是包括控制PPU 1200的操作的多个指令的软件程序。 API为程序员提供抽象概念,其允许程序员利用专用图形硬件(例如PPU 1200)来生成图形数据,而不需要程序员利用PPU 1200的特定指令集。应 用程序可以包括被路由到PPU 1200的设备驱动程序的API调用。设备驱动 程序解释API调用并执行各种操作以响应API调用。在某些情况下,设备驱动程序可以通过在CPU上执行指令来执行操作。在其他情况下,设备驱 动器可以至少部分地通过利用CPU和PPU 1200之间的输入/输出接口在 PPU 1200上启动操作来执行操作。在一个实施例中,设备驱动程序配置成 利用PPU 1200的硬件来实现图形处理管线1500。
可以在PPU 1200内执行各种程序以便实现图形处理管线1500的各 个阶段。例如,设备驱动程序可以在PPU 1200上启动内核以在一个SM 1340 (或多个SM 1340)上执行顶点着色阶段1520。设备驱动程序(或由PPU 1300执行的初始内核)还可以在PPU 1300上启动其他内核,以执行图形处理管线1500的其他阶段,例如几何着色阶段1540和片段着色阶段1570。 此外,图形处理管线1500的一些阶段可以在固定单元硬件上实现,例如在 PPU 1300内实现的光栅化器或数据汇编器。可以理解,在由后续内核在SM 1340上处理之前,来自一个内核的结果可以通过一个或更多个中间固定功 能硬件单元来处理。
机器学习
在诸如PPU 1200之类的处理器上开发的深度神经网络(DNN)已被 用于各种用例,从自动驾驶汽车到更快的药物开发,从在线图像数据库中 的自动图像标注到视频聊天应用中的智能实时语言翻译。深度学习是一种 建模人类大脑的神经学习过程,不断学习,不断变得更聪明,并随着时间 的推移更快地递送更准确结果的技术。最初由成人教导儿童正确识别和分 类各种形状,最终能够在没有任何指导的情况下识别形状。类似地,深度学习或神经学习系统需要在对象识别和分类方面进行训练,以便在识别基 本对象、被遮挡对象等时更智能和更有效,同时还为对象分配上下文。
在最简单的水平,人脑中的神经元观察所接收的各种输入,将重要 性级别分配给这些输入中的每一个,并且将输出传递给其他神经元以进行 动作。人工神经元或感知器是神经网络的最基本模型。在一个示例中,感 知器可以接收表示感知器被训练以识别和分类的对象的各种特征的一个或 更多个输入,并且基于该特征在定义物体的形状中的重要性,为这些特征 中的每一个分配某权重。
深度神经网络(DNN)模型包括许多连接节点的多个层(例如,感 知器、玻尔兹曼机器、径向基函数、卷积层等),其可以用大量输入数据进 行训练以快速解决复杂问题且准确度高。在一个示例中,DNN模型的第一 层将汽车的输入图像分解成各个部分并寻找诸如线和角度的基本图案。第二层组装线以寻找更高级别的图案,例如轮子、挡风玻璃和镜子。下一层 识别车辆的类型,最后几层为输入图像生成标签,识别特定汽车品牌的模 型。
一旦训练了DNN,就可以部署DNN并用于在称为推理的过程中识 别和分类对象或图案。推理的例子(DNN从给定输入中提取有用信息的过 程)包括识别存入ATM机的支票上的手写数字,识别照片中朋友的图像,向超过五千万用户提供电影推荐,识别和分类不同类型的无人驾驶汽车中 的汽车、行人和道路危险,或实时翻译人类语音。
在训练期间,数据在前向传播阶段中流过DNN,直到产生指示与输 入相对应的标签的预测。如果神经网络没有正确标记输入,则分析正确标 签和预测标签之间的误差,并在后向传播阶段针对每个特征调整权重,直 到DNN在训练数据集中正确标记输入和其他输入。训练复杂的神经网络需 要大量的并行计算性能,包括PPU 1200支持的浮点乘法和加法。推理的计 算密集程度低于训练,是一种对延迟敏感的过程,其中经训练的神经网络应用于以前没有见过的新输入以分类图像,翻译语音,并且通常推断新信 息。
神经网络严重依赖于矩阵数学运算,并且复杂的多层网络在效率和 速度方面都需要大量的浮点性能和带宽。PPU 1200拥有数千个处理核,针 对矩阵数学运算进行了优化,并提供数十至数百TFLOPS性能,是一个能 够提供基于深度神经网络的人工智能和机器学习应用所需性能的计算平台。

Claims (22)

1.一种用于对压缩数据进行解压缩的方法,包括:
接收N元素数据结构的至少一部分作为输入,所述N元素数据结构是具有N个元素的数据结构,
其中通过压缩原始M元素数据结构生成所述N元素数据结构,所述原始M元素数据结构是具有M个元素的数据结构,
其中所述N元素数据结构中的每个元素都有一值,其中N<M;
接收与所述N元素数据结构相关联的元数据的至少一部分作为输入,所述元数据为所述N元素数据结构中的每个值指定所述原始M元素数据结构的所述M个元素中的一者,所述值起源于所述原始M元素数据结构的所述M个元素中的一者;
识别目的地M元素数据结构的至少一部分,所述目的地M元素数据结构是具有M个元素的目的地数据结构;以及
执行至少一个指令以通过以下方式将所述N元素数据结构的至少一部分解压缩到所述目的地M元素数据结构中:
识别待被写入到所述目的地M元素数据结构的所述N元素数据结构的一个或更多个值,
从针对所述N元素数据结构的所述一个或更多个值中的每一者的所述输入元数据确定所述N元素数据结构的值起源于所述原始M元素数据结构的所述M个元素中的哪一者,以及
将所述N元素数据结构的所述一个或更多个值中的每一者写入到所述目的地M元素数据结构的与所述原始M元素数据结构的所述M个元素中的那一者相对应的元素,所述N元素数据结构的值起源于所述原始M元素数据结构的所述M个元素中的一者。
2.如权利要求1所述的方法,其中:
所述N元素数据结构是N元素向量,并且其中所述M元素数据结构是M元素向量,或
所述N元素数据结构是N元素张量,并且其中所述M元素数据结构是M元素张量。
3.如权利要求1所述的方法,其中识别所述目的地M元素数据结构还包括:通过将所述目的地M元素数据结构中的每个元素设置为零来初始化所述目的地M元素数据结构。
4.如权利要求1所述的方法,其中识别所述目的地M元素数据结构还包括:通过将所述目的地M元素数据结构中的每个元素设置为来自另一个M元素数据结构的值来初始化所述目的地M元素数据结构。
5.如权利要求1所述的方法,其中识别所述目的地M元素数据结构还包括:通过将所述目的地M元素数据结构中的每个元素设置为来自一组数据结构的M个元素的选择的值来初始化所述目的地M元素数据结构。
6.如权利要求1所述的方法,其中执行至少一个指令包括执行来自单个线程或单个执行通道中的指令。
7.如权利要求6所述的方法,其中所述单个线程或所述单个执行通道使用所述目的地M元素数据结构的单个实例。
8.如权利要求1所述的方法,其中执行至少一个指令包括执行来自多个线程或多个执行通道中的指令。
9.如权利要求8所述的方法,其中所述多个线程或所述多个执行通道被分成组,并且每个组使用所述目的地M元素数据结构的不同实例。
10.如权利要求8所述的方法,其中所述多个线程或所述多个执行通道共享以下中的至少一个:
所述N元素数据结构的单个实例,和
所述目的地M元素数据结构的单个实例。
11.一种非暂时性计算机可读介质,存储能够由处理器执行以执行用于对压缩数据进行解压缩的方法的代码,所述方法包括:
接收N元素数据结构的至少一部分作为输入,所述N元素数据结构是具有N个元素的数据结构,
其中通过压缩原始M元素数据结构生成所述N元素数据结构,所述原始M元素数据结构是具有M个元素的数据结构,
其中所述N元素数据结构中的每个元素都有一值,其中N<M;
接收与所述N元素数据结构相关联的元数据的至少一部分作为输入,所述元数据为所述N元素数据结构中的每个值指定所述原始M元素数据结构的所述M个元素中的一者,所述值起源于所述原始M元素数据结构的所述M个元素中的一者;
识别目的地M元素数据结构的至少一部分,所述目的地M元素数据结构是具有M个元素的目的地数据结构;以及
执行至少一个指令以通过以下方式将所述N元素数据结构的至少一部分解压缩到所述目的地M元素数据结构中:
识别待被写入到所述目的地M元素数据结构的所述N元素数据结构的一个或更多个值,
从针对所述N元素数据结构的所述一个或更多个值中的每一者的所述输入元数据确定所述N元素数据结构的值起源于所述原始M元素数据结构的所述M个元素中的哪一者,以及
将所述N元素数据结构的所述一个或更多个值中的每一者写入到所述目的地M元素数据结构的与所述原始M元素数据结构的所述M个元素中的那一者相对应的元素,所述N元素数据结构的值起源于所述原始M元素数据结构的所述M个元素中的一者。
12.一种用于对压缩数据进行解压缩的系统,包括:
存储器;和
至少一个处理器,用于:
接收N元素数据结构的至少一部分作为输入,所述N元素数据结构是具有N个元素的数据结构,
其中通过压缩原始M元素数据结构生成所述N元素数据结构,所述原始M元素数据结构是具有M个元素的数据结构,
其中所述N元素数据结构中的每个元素都有一值,其中N<M;
接收与所述N元素数据结构相关联的元数据的至少一部分作为输入,所述元数据为所述N元素数据结构中的每个值指定所述原始M元素数据结构的所述M个元素中的一者,所述值起源于所述原始M元素数据结构的所述M个元素中的一者;
识别目的地M元素数据结构的至少一部分,所述目的地M元素数据结构是具有M个元素的目的地数据结构;以及
执行至少一个指令以通过以下方式将所述N元素数据结构的至少一部分解压缩到所述目的地M元素数据结构中:
识别待被写入到所述目的地M元素数据结构的所述N元素数据结构的一个或更多个值,
从针对所述N元素数据结构的所述一个或更多个值中的每一者的所述输入元数据确定所述N元素数据结构的值起源于所述原始M元素数据结构的所述M个元素中的哪一者,以及
将所述N元素数据结构的所述一个或更多个值中的每一者写入到所述目的地M元素数据结构的与所述原始M元素数据结构的所述M个元素中的那一者相对应的元素,所述N元素数据结构的值起源于所述原始M元素数据结构的所述M个元素中的一者。
13.一种用于对压缩数据进行部分解压缩的方法,包括:
接收N元素数据结构的至少一部分作为输入,所述N元素数据结构是具有N个元素的数据结构,
其中通过压缩原始M元素数据结构生成所述N元素数据结构,所述原始M元素数据结构是具有M个元素的数据结构,
其中所述N元素数据结构中的每个元素都有一值,其中N<M;
接收与所述N元素数据结构相关联的元数据的至少一部分作为输入,所述元数据为所述N元素数据结构中的每个值指定所述原始M元素数据结构的所述M个元素中的一者,所述值起源于所述原始M元素数据结构的所述M个元素中的一者;
识别至少两个目的地R元素数据结构,所述至少两个目的地R元素数据结构每一者是具有R个元素的目的地数据结构,
其中N<=R<M,以及
其中所述至少两个目的地R元素数据结构中的每一者代表目的地M元素数据结构的不同部分;以及执行至少一个指令以通过以下方式将所述N元素数据结构解压缩到所述至少两个目的地R元素数据结构:
识别待被存储在所述至少两个目的地R元素数据结构的输入的N元素数据结构的至少两部分,
从针对所述输入的N元素数据结构的所述至少两部分中的每一者的所述输入元数据确定所述输入的N元素数据结构的部分起源于所述原始M元素数据结构的所述M个元素中的哪一者,以及
将所述输入的N元素数据结构的所述至少两部分中的每一者存储在所述至少两个目的地R元素数据结构的一者中,所述至少两个目的地R元素数据结构中的所述一者代表所述目的地M元素数据结构的与所述原始M元素数据结构的所述M个元素中的那一者相对应的部分,所述输入的N元素数据结构的部分起源于所述原始M元素数据结构的所述M个元素中的一者。
14.如权利要求13所述的方法,其中所述N元素数据结构是N元素向量,并且其中所述至少两个目的地R元素数据结构的每个都是R元素向量,或者所述N元素数据结构是N元素张量,并且其中所述至少两个目的地R元素数据结构的每个均为R元素张量。
15.如权利要求13所述的方法,其中识别所述至少两个目的地R元素数据结构还包括:通过将所述至少两个目的地R元素数据结构中的每个元素设置为零来初始化所述至少两个目的地R元素数据结构。
16.如权利要求13所述的方法,其中识别所述至少两个目的地R元素数据结构还包括:通过将所述至少两个目的地R元素数据结构中的每个元素设置为来自另一个R元素数据结构的值来初始化所述至少两个目的地R元素数据结构。
17.如权利要求13所述的方法,其中识别所述至少两个目的地R元素数据结构还包括:通过将所述至少两个目的地R元素数据结构中的每个元素设置为来自一组数据结构的R元素的选择的值来初始化所述至少两个目的地R元素数据结构。
18.如权利要求13所述的方法,其中执行至少一个指令包括执行来自单个线程或单个执行通道中的指令。
19.如权利要求18所述的方法,其中所述单个线程或所述单个执行通道使用所述至少两个目的地R元素数据结构的单个实例。
20.如权利要求13所述的方法,其中执行至少一个指令包括执行来自多个线程或多个执行通道中的指令。
21.如权利要求20所述的方法,其中所述多个线程或所述多个执行通道被分成组,并且每个组使用所述至少两个目的地R元素数据结构的不同实例。
22.如权利要求13所述的方法,执行至少一个指令以将所述N元素数据结构解压缩到所述至少两个目的地R元素数据结构还包括:
为所述至少两个目的地R元素数据结构中的每一个生成新的元数据。
CN201910628257.4A 2019-03-08 2019-07-12 适用于人工神经网络的用于处理压缩数据的解压缩技术 Active CN111667542B (zh)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201962815887P 2019-03-08 2019-03-08
US62/815,887 2019-03-08
US16/359,787 US11379420B2 (en) 2019-03-08 2019-03-20 Decompression techniques for processing compressed data suitable for artificial neural networks
US16/359,787 2019-03-20

Publications (2)

Publication Number Publication Date
CN111667542A CN111667542A (zh) 2020-09-15
CN111667542B true CN111667542B (zh) 2023-06-20

Family

ID=72147080

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910628257.4A Active CN111667542B (zh) 2019-03-08 2019-07-12 适用于人工神经网络的用于处理压缩数据的解压缩技术

Country Status (3)

Country Link
US (1) US11379420B2 (zh)
CN (1) CN111667542B (zh)
DE (1) DE102019134020A1 (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11489541B2 (en) 2019-05-21 2022-11-01 Nvidia Corporation Compression techniques for data structures suitable for artificial neural networks
US20230315479A1 (en) * 2020-09-10 2023-10-05 NEC Laboratories Europe GmbH Method and system for supporting throughput-oriented computing
US11362670B2 (en) * 2020-10-30 2022-06-14 International Business Machines Corporation ReLU compression to reduce GPU memory
US11720252B1 (en) * 2022-03-04 2023-08-08 Microsoft Technology Licensing, Llc Method and apparatus for compressing and decompressing sparse data sets

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1528091A (zh) * 2001-07-13 2004-09-08 �ź㴫 压缩层次树的方法、相应的信号以及解码信号的方法
CN1643514A (zh) * 2002-03-26 2005-07-20 汤姆森许可贸易公司 使用来自不同源的元数据的方法和设备
CN103688250A (zh) * 2011-07-11 2014-03-26 微软公司 使用动态方案来优化数据处理
CN103885752A (zh) * 2012-12-20 2014-06-25 辉达公司 多线程处理单元中可编程的混合
CN105474309A (zh) * 2013-07-22 2016-04-06 弗朗霍夫应用科学研究促进协会 高效率对象元数据编码的装置及方法
CN106575216A (zh) * 2014-09-19 2017-04-19 英特尔公司 数据元素选择和合并处理器、方法、系统和指令
US9792298B1 (en) * 2010-05-03 2017-10-17 Panzura, Inc. Managing metadata and data storage for a cloud controller in a distributed filesystem
CN107301668A (zh) * 2017-06-14 2017-10-27 成都四方伟业软件股份有限公司 一种基于稀疏矩阵、卷积神经网络的图片压缩方法
CN109328361A (zh) * 2016-06-14 2019-02-12 多伦多大学管理委员会 用于深度神经网络的加速器

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6938047B2 (en) 2003-02-19 2005-08-30 Maui X-Stream, Inc. Methods, data structures, and systems for processing media data streams
GB2447494A (en) 2007-03-15 2008-09-17 Linear Algebra Technologies Lt A method and circuit for compressing data using a bitmap to identify the location of data values
US8938517B2 (en) * 2011-05-06 2015-01-20 SpotStorage, Inc. System, method and computer program product for managing a remote storage
US8682820B2 (en) * 2011-11-02 2014-03-25 Sap Ag On demand multi-objective network optimization
CN104011673B (zh) * 2011-12-30 2016-12-07 英特尔公司 向量频率压缩指令
US8949488B2 (en) * 2013-02-15 2015-02-03 Compellent Technologies Data replication with dynamic compression
US9652152B2 (en) * 2014-10-29 2017-05-16 Qualcomm Incorporated Efficient decompression locality system for demand paging
US11221990B2 (en) * 2015-04-03 2022-01-11 The Mitre Corporation Ultra-high compression of images based on deep learning
US10169073B2 (en) 2015-12-20 2019-01-01 Intel Corporation Hardware accelerators and methods for stateful compression and decompression operations
CN107480150B (zh) 2016-06-07 2020-12-08 阿里巴巴集团控股有限公司 一种文件加载方法和装置
US20180095674A1 (en) * 2016-09-30 2018-04-05 Intel Corporation Selective data compression/decompression for intermemory transfer interface
US10726335B2 (en) * 2017-10-26 2020-07-28 Uber Technologies, Inc. Generating compressed representation neural networks having high degree of accuracy
US11588499B2 (en) * 2018-11-05 2023-02-21 Samsung Electronics Co., Ltd. Lossless compression of neural network weights

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1528091A (zh) * 2001-07-13 2004-09-08 �ź㴫 压缩层次树的方法、相应的信号以及解码信号的方法
CN1643514A (zh) * 2002-03-26 2005-07-20 汤姆森许可贸易公司 使用来自不同源的元数据的方法和设备
US9792298B1 (en) * 2010-05-03 2017-10-17 Panzura, Inc. Managing metadata and data storage for a cloud controller in a distributed filesystem
CN103688250A (zh) * 2011-07-11 2014-03-26 微软公司 使用动态方案来优化数据处理
CN103885752A (zh) * 2012-12-20 2014-06-25 辉达公司 多线程处理单元中可编程的混合
CN105474309A (zh) * 2013-07-22 2016-04-06 弗朗霍夫应用科学研究促进协会 高效率对象元数据编码的装置及方法
CN106575216A (zh) * 2014-09-19 2017-04-19 英特尔公司 数据元素选择和合并处理器、方法、系统和指令
CN109328361A (zh) * 2016-06-14 2019-02-12 多伦多大学管理委员会 用于深度神经网络的加速器
CN107301668A (zh) * 2017-06-14 2017-10-27 成都四方伟业软件股份有限公司 一种基于稀疏矩阵、卷积神经网络的图片压缩方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
帧删除篡改检测及定位;卢贺楠 等;《小型微型计算机系统》;1588-1593 *

Also Published As

Publication number Publication date
CN111667542A (zh) 2020-09-15
DE102019134020A1 (de) 2020-09-10
US11379420B2 (en) 2022-07-05
US20200285618A1 (en) 2020-09-10

Similar Documents

Publication Publication Date Title
US11182649B2 (en) Generation of synthetic images for training a neural network model
CN111143174B (zh) 在共享功率/热约束下操作的硬件的最佳操作点估计器
CN110766778B (zh) 使用散列执行并行路径空间滤波的方法和系统
CN111210498B (zh) 降低多边形网格的细节水平以减少被渲染几何的复杂度
CN111667542B (zh) 适用于人工神经网络的用于处理压缩数据的解压缩技术
CN109936745B (zh) 用于改善原始视频数据的解压的方法和系统
US11463272B2 (en) Scalable in-network computation for massively-parallel shared-memory processors
CN110675480B (zh) 用于获取纹理操作的采样位置的方法和装置
US10861230B2 (en) System-generated stable barycentric coordinates and direct plane equation access
EP3678037A1 (en) Neural network generator
CN111191784A (zh) 转置的稀疏矩阵乘以稠密矩阵用于神经网络训练
CN112288619A (zh) 用于在渲染图形时预加载纹理的技术
CN115797543A (zh) 单个图像逆向渲染
CN113743573A (zh) 用于访问和利用压缩数据及其状态信息的技术
CN112041894A (zh) 渲染期间提高涉及水面的场景的真实感
CN113822975A (zh) 用于对图像进行有效采样的技术
CN115039076A (zh) 无障碍和无围栏共享存储器同步
CN113393564A (zh) 利用全局照明数据结构的基于水塘的时空重要性重采样
CN110908929B (zh) 用于高带宽缩放的一致数据高速缓存
CN111221498A (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