CN113743573A - 用于访问和利用压缩数据及其状态信息的技术 - Google Patents

用于访问和利用压缩数据及其状态信息的技术 Download PDF

Info

Publication number
CN113743573A
CN113743573A CN202110571784.3A CN202110571784A CN113743573A CN 113743573 A CN113743573 A CN 113743573A CN 202110571784 A CN202110571784 A CN 202110571784A CN 113743573 A CN113743573 A CN 113743573A
Authority
CN
China
Prior art keywords
memory block
compression
memory
software
compressed
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202110571784.3A
Other languages
English (en)
Inventor
R·兰根
P·R·布朗
W·A·甘地
S·J·海因里希
M·海耶
E·M·克里加里夫
P·克里希纳穆尔蒂
柳东韩
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 CN113743573A publication Critical patent/CN113743573A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/084Multiuser, multiprocessor or multiprocessing cache systems with a shared cache
    • 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
    • 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
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/21Design or setup of recognition systems or techniques; Extraction of features in feature space; Blind source separation
    • G06F18/214Generating training patterns; Bootstrap methods, e.g. bagging or boosting
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0608Saving storage space on storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • 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/6047Power optimization with respect to the encoder, decoder, storage or transmission

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Data Mining & Analysis (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Evolutionary Computation (AREA)
  • Computing Systems (AREA)
  • Biomedical Technology (AREA)
  • General Health & Medical Sciences (AREA)
  • Computational Linguistics (AREA)
  • Biophysics (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Molecular Biology (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Evolutionary Biology (AREA)
  • Databases & Information Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Stored Programmes (AREA)

Abstract

公开了用于访问和利用压缩数据及其状态信息的技术。一些系统压缩用户模式软件使用的数据,而用户模式软件意识不到发生了任何压缩。为了保持这种错觉,这些系统阻止用户模式软件意识到和/或访问数据的底层压缩状态。虽然这种方法保护在这种系统中使用的专有压缩技术不被解密,但这种限制条件限制了用户模式软件以新的方式使用数据的底层压缩形式的能力。本文公开了各种技术,用于允许用户模式软件直接或间接地访问数据的底层压缩状态。例如,此类技术能够用于允许单个系统或多个系统上的各种用户模式软件以系统的底层压缩格式交换数据,即使用户模式软件无法解密压缩格式。

Description

用于访问和利用压缩数据及其状态信息的技术
技术领域
本公开涉及压缩,并且更具体地涉及访问和利用压缩数据和压缩状态信息。
背景技术
一些系统压缩用户模式软件使用的数据,而用户模式软件意识不到发生了任何压缩。为了保持这种错觉,这些系统阻止用户模式软件意识到和/或访问数据的底层压缩状态。因此,用户模式软件目前不存在直接访问数据的底层压缩状态的机制。具体地,在这种系统中,指示存储器块中的数据是以压缩格式还是未压缩格式存储的压缩状态信息(compStatus)对用户模式软件不可见,并且当用户模式软件试图访问存储器块中的数据时,存储器块中存储的任何压缩数据被自动地解压。因此,用户模式软件不可能读取存储在存储器块中的数据的压缩版本。虽然这种限制保护了在这种系统中使用的专有压缩技术不被解密,但这种限制条件限制了用户模式软件以新的方式使用数据的底层压缩形式的能力。具有解决这些和/或其他相关问题的需求。
发明内容
公开了用于访问和利用压缩数据和压缩状态信息的技术。在一个实施例中,用于访问和利用压缩数据和压缩状态信息的方法可以包括接收指定存储器中的存储器块的指令、读取与存储器块相对应的压缩状态和/或压缩数据以及返回压缩状态和/或压缩数据的步骤。在一个实施例中,压缩数据是由能够执行用户模式软件的系统压缩的数据,并且该数据由系统在没有任何用户模式软件的干预或在任何用户模式软件的指示下压缩。在一个实施例中,压缩数据采用用户模式软件无法解压缩的格式。在一个实施例中,第一系统上的第一用户模式软件从第一系统获取压缩数据及其相关的压缩状态,并将其发送到第二系统上的第二用户模式软件,使得第二系统能够解压缩压缩数据以供例如第二用户模式软件使用。
附图说明
图1A示出了压缩和未压缩的存储器块的示例图。
图1B示出了用于访问压缩值和压缩状态的包括处理器和存储器的示例性系统。
图1C示出了用于访问存储器块的压缩值和压缩状态的方法的示例性流程图。
图1D示出了示例性系统,其中多个处理器能够在它们之间访问和/或传输压缩值和压缩状态信息。
图2A示出了用于访问存储器块的压缩值和压缩状态的方法的示例性流程图。
图2B示出了用于访问存储器块的压缩值和压缩状态的方法的示例性流程图。
图3示出了示例性并行处理单元。
图4A示出了图3的并行处理单元内的示例性通用处理集群。
图4B示出了图3的并行处理单元的示例性存储器分区单元。
图5A示出了图4A的示例性流式多处理器。
图5B示出了使用图3的PPU实现的处理系统的示例图。
图5C示出了示例性系统,其中可以实现各种先前实施例的各种架构和/或功能。
图6示出了由图3的PPU实现的图形处理管线的示例图。
具体实施方式
与存储器块相对应的压缩状态信息(compStatus)至少指示存储器块的数据是以压缩格式还是未压缩格式存储的。这些数据包括一个或更多个值。当存储器块存储编码压缩值的数据时,该数据也被称为压缩原子(compAtom)。在一个实施例中,存储器块是以未压缩格式存储数据所需的存储器的量。存储器块可以对应于存储器的连续或非连续部分。压缩原子的大小由用于压缩存储器块的未压缩数据的压缩格式确定。例如,当采用2:1压缩时,压缩原子的大小是存储器块大小的一半。在一个实施例中,压缩状态信息进一步指示存储在存储器块上的压缩原子的压缩格式。在这样的实施例中,需要压缩状态信息来正确地解压缩压缩原子。
在一个实施例中,压缩状态信息指示与存储器块相关联的所有值是否是统一的(uniform)(相同或接近相等)。如果存储器块中的每个值之间的差在锚定值(anchorvalue)的预定义阈值内,则存储器块的值彼此接近相等。例如,锚定值可以是存储器块中的值、存储器块的值的平均值,或者是存储器块中最常出现的值。在一个实施例中,当存储器块是统一的时,对应于存储器块的压缩状态信息将索引存储到保存统一值的表中,并且值不需要实际存储在存储器块中。可以通过使用压缩状态信息中的索引读取表中的条目来检索存储器块的值。在一个实施例中,允许用户模式软件直接写入压缩状态信息和表中,以快速地将与存储器块相关联的所有值设置为统一值。因此,当存储器块是帧缓冲区或表面的一部分时,帧缓冲区或表面的该部分可以被快速地设置为统一值。
在一个实施例中,用户模式软件能够查询存储器块的压缩状态信息以识别统一的那些。当本地节点需要存储在远程节点上的存储器块的值时,可以从远程节点访问该存储器块的压缩状态信息。对于统一的存储器块,本地节点能够从远程节点获得统一的存储器块中所有值的单个统一值,而不是传统地使远程节点解压缩并将存储器块的所有值传输到本地节点。因此,在节点之间传输统一的存储器块所需的带宽大大减少。在一个实施例中,节点是微处理器,例如CPU、GPU或FPGA。在另一实施例中,节点是微处理器内的处理元件,例如核心、ALU或固定功能单元。在一个实施例中,节点通过收发器、总线、网络、互联网或共享存储器与另一节点通信。
此外,当两个节点都理解特定的压缩状态信息和压缩原子格式时,即使用户模式软件本身无法解压缩数据,在两个节点上执行的用户模式软件也能够交换压缩格式的数据。更具体地,源节点上的用户模式软件能够读取源节点上的压缩状态信息及其对应的压缩原子,并将其发送到汇聚(sink)节点上的用户模式软件。然后,汇聚节点上的用户模式软件可以将接收到的压缩状态信息和压缩原子存储在汇聚节点上。由于汇聚节点理解源节点的压缩状态信息和压缩原子格式,因此汇聚节点能够解压缩压缩原子以供例如在汇聚节点上执行的用户模式软件使用。因此,通过允许用户模式软件直接访问节点使用的压缩状态信息和压缩原子来自动压缩存储在节点上的一些数据,用户模式软件能够以较少的带宽和/或时间在节点之间传输这些数据。
在一个实施例中,允许用户模式软件读取和写入存储在节点中的压缩状态信息和压缩原子,从而绕过或卸载节点的硬件压缩和解压缩逻辑。在一个实施例中,压缩状态信息的子集可以被保留以供具有软件定义的压缩/解压缩的软件独占访问,而其余压缩状态信息只能由硬件访问。至少一种软件定义的压缩状态信息格式可以被定义和解释为需要由软件执行压缩和/或解压缩。
在一个实施例中,为软件定义了不同级别的访问或许可。一个或更多个软件程序可以包括在为特定访问级别定义的组中。访问级别可以用于确定是否允许软件读取和写入特定的压缩状态信息和压缩原子。例如,可以为能够访问压缩状态信息的保留的子集的软件定义组。访问每个压缩状态信息所需的访问级别可以被存储在压缩状态信息中。或者,与每个压缩状态信息和/或组定义相关联的访问级别可以被存储在寄存器中或与其他状态信息一起。
图1A示出了压缩和未压缩的存储器块的示例图100。六个存储器块101、102、103、104、106和107中的每一个可以使用由与该存储器块相关联的压缩状态信息所标识的不同的压缩格式来解压缩或压缩。存储器块可以全部为相同大小,也可以具有不同的大小。存储器块能够存储一个或更多个值。每个值都被编码,例如,用1、2、4、8、16或一些其他的字节数。值可以表示例如像素、纹理像素、深度、神经网络权重、神经网络激活或任何其他类型的值。每个存储器块都与用于存储压缩或未压缩值的一组存储器位置相关联。在一个实施例中,存储器位置在片外存储器中。与特定存储器块相关联的压缩状态信息也与存储在存储器块中的压缩原子(例如,压缩值)相关联。在一个实施例中,压缩状态信息是存储器块的元数据。在一个实施例中,压缩状态信息也存储在存储器块中。在另一实施例中,压缩状态信息与存储器块分开存储。在一个实施例中,压缩状态信息被存储在片外存储器中并且被高速缓存在片上。
如图1A所示,与存储器块106和107相关联的压缩状态信息是未压缩的(unc)。存储在存储器块106和107中的值是未压缩格式的。与存储器块中的三个存储器块101、102和104相关联的压缩状态信息是“comp1”,其指示与那些存储器块相关联的值被压缩成压缩原子,压缩原子被存储在存储器块中以代替未压缩的值。压缩状态信息“comp1”进一步指示使用标识为“comp1”的压缩格式来压缩存储在相应存储器块中的压缩原子。例如,“comp1”可以指运行长度编码压缩格式、VDC(变量差分压缩)或任何其他压缩格式。VDC压缩值的压缩原子相比于值未被压缩时需要一半的存储空间(例如,256B存储器块可以被压缩到128B)。因此,压缩原子占用了总存储器块容量的一半。
剩余的存储器块103与压缩状态信息ZBC相关联,其指示与存储器块相关联的值是零带宽清除(ZBC)压缩的。当与存储器块相关联的所有值是统一的时,可以使用ZBC压缩对整个存储器块进行编码。ZBC压缩存储器块的压缩状态信息包括对统一值表中的条目的引用(例如索引),其中表中的每个条目可以存储一值。当存储器块是ZBC压缩的时,与该存储器块相关联的所有值都被认为具有与存储器块的压缩状态信息所引用的统一值表条目中存储的值相同的值。统一值表可以被存储在片上,而不是存储在片外存储器中。附加存储器块(未示出)也可以是ZBC压缩的。在一个实施例中,附加值被存储在统一值表的不同条目中,并且每个条目可以由一个或更多个压缩状态信息为其对应的存储器块而引用。在一个实施例中,压缩状态信息可以包含指示与存储器块相关联的值是否是压缩的信息、用于对值进行编码的压缩格式和/或与统一值表中的条目相对应的索引。
图1B示出了包括用于访问压缩值和压缩状态信息的处理器150和存储器105的示例性系统。处理器150可以是GPU(图形处理单元)、CPU(中央处理单元)、FPGA(现场可编程门阵列)或任何其他类型的处理器。在一个实施例中,处理器150是图3所示的并行处理单元300。
处理器150包括执行单元130和高速缓存160。处理器150被耦连到专用本地存储器105。处理器150接收并执行指令,包括查询、读取和/或写入压缩状态存储(compStatusstorage)152和/或存储器块存储(memory block storage)154的指令。该指令包括一个或更多个操作数。在一个实施例中,操作数之一是压缩状态信息、压缩原子和/或存储器块的标识符。这种标识符的示例是与存储器块相关联的虚拟或物理存储器地址。执行单元130根据执行指令的需要生成对高速缓存160的请求。存储器块存储154和/或压缩状态存储152的至少一部分可以被加载到高速缓存160中。
映射单元140从执行单元130接收包括存储器块的地址的请求,并且在必要时将该地址转换为输出到存储器105的对应物理地址。在一个实施例中,映射不是公开的,并且在处理器150中被安全地独占地处理。请求可以指定对压缩状态存储152或存储器块存储154的读取或写入。对于一些指令,首先读取存储器块的压缩状态信息,并且基于压缩状态信息,执行单元130确定是否应读取存储器块的至少一部分(例如压缩原子)。例如,当执行访问存储器块中的值的指令并且相应的压缩状态信息指示存储器块是ZBC压缩的时,不读取存储器块。相反,执行单元130使用压缩状态信息中包含的索引来读取统一值表134的条目,以获得该值,而不是从存储器105读取该值。在一个实施例中,统一值表134被存储在高速缓存160中。
在一个实施例中,访问检查单元132被配置为将对压缩状态存储152和/或存储器块存储154的访问限制为某些类型的软件。例如,某些类型的用户模式软件可以被允许访问压缩状态存储152的部分或全部。如本文中进一步描述的,读取压缩状态信息的请求可能导致压缩状态信息的实际比特或关于压缩状态信息对于请求的软件可用的信息。写入压缩状态信息的请求可以被允许或限制为包含某些预定义位模式的一组特定压缩状态信息。读取存储器块的请求可以返回由执行单元130控制的压缩形式或未压缩形式的值。执行单元130向高速缓存160提供值、读、写、压缩启用(compEnable)和解压缩启用(decompEnable)信号,并且高速缓存160提供压缩或未压缩的值和一个或更多个压缩状态信息。
高速缓存160包括压缩单元135和解压缩单元138。对于写入请求,压缩单元135可以将从执行单元130获得的值与经由解压缩单元138从存储器105获得的潜在其它值一起压缩,并将压缩或未压缩的值发送到存储器105。压缩启用信号启用/禁用存储到存储器块存储154的值的压缩。类似地,解压缩单元138从存储器105获得压缩或未压缩的值,并且可以在向执行单元130提供部分或全部解压缩的值之前解压缩这些值。解压缩启用信号启用/禁用从存储器块存储154读取的值的解压缩。在一个实施例中,压缩单元135和解压缩单元138仅仅传递从压缩状态存储152读取或向其写入的值,而不进行任何处理。
通常,以内核模式(例如,内核模式驱动程序)执行的软件(例如,指令、程序、驱动程序、代码、应用程序等)被允许访问其正在其内执行的系统上的任何资源(例如,存储器、高速缓存、寄存器等),并且出于安全原因,以用户模式(例如,用户模式驱动程序或应用程序)执行的软件被允许受限地访问这些资源。例如,在传统系统中,用户模式软件不能直接读取或写入压缩状态存储152或存储器块存储154。在一个实施例中,写入存储器块存储154和从存储器块存储154读取的值分别被自动压缩和解压缩。压缩和解压缩是自动的,因为它们是在请求读或写操作的软件无需请求或指定执行这种压缩和/或解压缩的情况下执行的。在这样的实施例中,用于将数据存储在存储器块中的压缩格式对于用户模式软件来说可能是不透明的(未知的),确保底层系统使用的压缩算法和/或格式不被揭示。在一个实施例中,内核模式软件分配存储器105中的位置以存储由用户模式软件创建的所有可压缩数据的压缩状态信息。但是,出于安全原因,内核模式软件可不向用户模式软件提供对压缩状态信息的直接访问。具体地,在这样的系统中,可以通过在内核模式下执行的软件使用常规指令(例如读、写、加载和存储)来访问压缩状态信息,并且不能通过在用户模式下执行的软件使用常规指令来访问压缩状态信息,这使得压缩状态信息和压缩原子相对于用户模式软件是安全的。为了克服这些限制,可以提供允许用户模式软件访问压缩状态信息和/或压缩原子的指令(称为访问指令)。
在一个实施例中,为用户模式软件提供不同类别的新访问指令,以访问压缩状态存储152和存储器块存储154。在一个实施例中,使得原始的、受限的和抽象的访问指令类别可供用户模式软件使用。
原始访问指令类别允许用户模式软件直接读取和/或写入压缩状态信息、压缩原子和存储器块。特别地,可以使用原始指令读取(绕过自动解压缩电路)和写入(绕过自动压缩电路)。
受限类别的访问指令允许用户模式软件读取和/或写入一组受限的压缩状态信息、压缩原子和/或相应的存储器块。在一个实施例中,用户模式软件可以使用受限的指令来仅访问软件定义的压缩状态信息、压缩原子和/或相应的存储器块。在一个实施例中,用户模式软件可以使用受限的指令来仅访问系统中使用的压缩状态信息、压缩原子和/或相应的存储器块的子集,而不管它们是由软件(内核模式或用户模式)还是由硬件定义的。
抽象类别的指令允许用户模式软件获取有关压缩状态信息、压缩原子和/或相应存储器块的信息,而无需用户模式软件直接访问压缩状态信息、压缩原子和/或相应存储器块的比特(bit)。例如,用户模式软件可以使用抽象指令来确定存储器块是否完全统一并获得统一值。抽象查询功能还使得使用这些查询结果的算法能够在没有修改的情况下跨底层压缩算法有很大差异的多个系统架构使用。这种受限的抽象查询功能可以在用户模式软件中用于各种优化,而无需公开关于系统用于生成和存储压缩状态信息和压缩原子的压缩算法或架构的任何直接信息。例如,在帧缓冲区被清除为统一值并且图像已被渲染到帧缓冲区中之后,用户模式软件可以使用抽象指令来快速识别帧缓冲区中包括渲染图像的部分和保持为空的部分(例如,仍然只有最初用于清除帧缓冲区的统一值)。
图1C示出了用于访问存储器块的压缩值和压缩状态的方法110的示例性流程图。在步骤115,由处理器(例如处理器150)接收指定存储器块的访问指令。在一个实施例中,与存储器块相关联的标识符被提供为指令操作数。在一个实施例中,访问指令被包括在原始指令类别中。访问指令可以用于读取或写入存储器块的压缩状态信息,或者读取或写入存储在存储器块中的压缩原子,而无需解压缩或压缩这些值。在一个实施例中,访问指令用于获得压缩原子的大小。
在步骤116,如果指令用于访问存储器块的压缩状态信息,则方法110移动到步骤118。在步骤118,如果指令用于读取操作,则该方法110移动到步骤120;如果指令用于写入操作,则方法110移动到步骤124。返回步骤116,如果指令用于访问存储器块的值,则方法110移动到步骤125。在步骤125,如果指令用于读取操作,则方法110移动到步骤144;如果指令用于写入操作,则方法110移动到步骤142;如果指令用于大小操作,则方法110移动到步骤126。步骤116、118和125由处理器150(或执行单元130)通过检查例如指令的操作码来执行。在一个实施例中,可以在单个步骤中执行部分或全部三个步骤116、118和125。在一个实施例中,可以在单个步骤中执行步骤116、118和125的部分或全部,以及步骤120、126和144的推测性读取操作和步骤124和142的推测性写入操作。
在步骤120,处理器150(或执行单元130)经由高速缓存160访问存储器块的压缩状态信息,如果压缩状态信息尚未高速缓存在高速缓存160中,则根据需要访问压缩状态存储152。在步骤122,通过使导致指令被执行的软件可以访问压缩状态信息的比特来完成指令的执行。例如,实际压缩状态信息比特的全部或部分被复制到软件可访问的寄存器和/或存储器位置。在一个实施例中,压缩状态信息的实际比特仅通过使用不能被用户模式软件使用传统指令访问的访问指令和压缩状态信息来可被用户模式软件访问。
在步骤124,处理器150(或执行单元130)基于指令提供或包括的操作数来写入或修改存储器块的压缩状态信息的比特。压缩状态信息通过高速缓存160写入存储器105,其根据需要访问压缩状态存储152。例如,为了用单个统一值设置存储器块的所有值,可以修改存储器块的压缩状态信息的比特,以指示存储器块是ZBC压缩的,并且指示存储器块的统一值可以位于特定的统一值表条目处。
在步骤126,处理器150(或执行单元130)通过检查与存储器块相关联的压缩状态信息来确定存储器块是否存储压缩原子。如果存储器块存储压缩原子,则处理器150(或执行单元130)通过使压缩原子的大小可以被导致指令被执行的软件访问来完成指令的执行。如果存储器块存储未压缩或ZBC压缩的值,则处理器150(或执行单元130)通过使存储器块的未压缩值的大小可以被导致指令被执行的软件访问来完成指令的执行。例如,表示大小的比特被复制到软件可访问的寄存器和/或存储器位置。在一个实施例中,大小表示用于编码压缩原子的单元数(例如,节拍数(beats))。对压缩原子进行编码所需的单元数取决于用于对存储器块进行编码的压缩格式。例如,如果每个单元是4个字节,并且128个字节的4:1减少压缩会产生32个字节大小的压缩原子,并且压缩原子被编码为32/4=8个单元。类似地,128个字节的2:1压缩将被编码为16个单元。
在步骤144,处理器150(或执行单元130)通过检查与存储器块相关联的压缩状态信息来确定存储器块是否存储压缩原子。如果存储器块存储压缩原子,则处理器150(或执行单元130)通过使存储器块的压缩值(压缩原子)可以被软件访问来完成指令的执行,这导致在不解压缩值的情况下执行指令。换句话说,在步骤144,处理器150(或执行单元130)在从存储器块存储154读取时不使能解压缩单元138解压缩压缩原子。相反,从块存储154读取压缩原子,并且使压缩原子的全部或部分可以被导致指令被执行的软件访问。例如,实际的压缩原子比特的全部或部分被复制到软件可访问的一个或更多个寄存器和/或存储器位置。在一个实施例中,提供索引作为指令的操作数。索引指定从存储器块开始的偏移量,并且指令可以指定从索引开始的比特的全部或部分被读取(无需解压缩),并且使得可以由导致指令被执行的软件访问。
在步骤142,处理器150(或执行单元130)通过基于指令所引用或包括的数据操作数将一个或更多个比特写入存储器块来完成指令的执行。在一个实施例中,当将比特写入存储器块将导致存储器块存储统一值时,处理器150(或执行单元130)通过ZBC压缩存储器块来完成指令的执行。在另一实施例中,在将比特写入存储器块存储154之前,在没有压缩单元135压缩比特的情况下将比特写入存储器块。然而,这些比特可以表示压缩值,其中在执行指令之前该值已被压缩。在一个实施例中,指定存储器块内偏移量的索引被提供为该指令的另一个操作数,并且该指令可以指定从该索引操作数指定的位置开始,将该数据操作数指定的比特的全部或部分写入该存储器块。在一个实施例中,由数据操作数指定的全部或部分比特与先前写入存储器块的现有比特合并,从而覆盖存储器块中的现有比特的一部分。
图1D示出了一个示例性系统,其中多个处理器150能够在它们之间访问和/或传输压缩值和压缩状态信息。如图1D所示,处理器150-1和存储器105-1表示第一处理节点170,处理器150-2和存储器105-2表示第二处理节点171。在一个实施例中,节点170和171中的每一个分别是图5B和图5C所示的系统500和/或525中的并行处理单元(PPU)。当一个处理节点需要来自另一个处理节点的值时,原始、受限和/或抽象类别的访问指令可以用于减少在处理节点之间传输所需要的数据量。
例如,在扫描行交错(SLI)配置中,单个图像的渲染可以分布在多个处理节点之间,使得每个处理节点仅渲染整个图像的一部分。传统上,通过经由接口165将图像的未压缩值从远程存储器105-2传送到本地处理器150-1或本地存储器105-1,可以由本地处理节点170访问由远程处理节点171生成的图像的一部分。本地处理节点170可以通过在处理节点171上执行的访问指令来访问压缩状态存储152-2中的压缩状态信息,而不是从存储器块存储154-2传送未压缩的值。使用用于处理节点171的压缩状态信息,处理节点170只需要获得处理节点171上的ZBC压缩的存储器块的单个统一值,以便访问处理节点171上的ZBC压缩的存储器块的所有值。因此,当ZBC压缩用于节点上时,压缩状态信息读取访问指令可以用于减少需要在两个节点之间传输的数据量。在另一个实施例中,使用用于处理节点171的压缩状态信息,处理节点170可以请求在处理节点171上检索存储器块的压缩原子(其存储压缩值),并且通过接口165将压缩原子发送到处理节点170。只要处理节点170理解如何基于从处理节点171获得的对应压缩状态信息来解压缩也从处理节点171获得的压缩原子,则处理节点170能够解压缩压缩原子以访问压缩原子的解压缩值。通过在处理节点之间传输压缩原子而不是存储器块的未压缩值,处理节点之间需要传输的数据更少。在处理节点170和171上执行的软件可以在节点之间实现压缩状态信息和压缩原子的传输。节点170和171上的软件可以相互通信。每个节点上的软件都可以使用访问指令来获取自身节点上ZBC压缩的存储器块的压缩状态信息、压缩原子和统一值。一旦获得,节点上的软件可以将一个或更多个压缩状态信息、压缩原子或统一值从其节点发送到另一个节点上的软件。在另一节点处,在该另一节点上执行的软件可以接收压缩状态信息、压缩原子或统一值,并使用一个或更多个访问指令将这些信息写入其节点。只要节点的某些部分(例如解压缩单元138)理解如何对压缩原子解压缩,导致压缩原子在两个节点之间传输的软件本身不需要能够理解压缩原子的压缩格式。
如前所述,受限类别的访问指令允许用户模式软件访问某些类型的压缩状态信息和/或压缩原子的压缩状态信息和压缩原子的实际比特。用户模式软件可以访问的特定压缩状态信息和压缩原子可以被控制。例如,压缩状态信息的一个或更多个字段可以指示在对应的存储器块中使用的压缩类型、对应于存储器块的用户模式软件的标识、或者指示存储器块的访问限制的某个其它标识符。可以检查这些字段以确定特定用户模式软件是否可以访问压缩状态信息和/或相应的存储器块。如果允许访问,则用户模式软件可以访问这些压缩状态信息和/或相应压缩原子的实际比特。当使用受限访问指令直接访问压缩原子的比特时,这些比特直接被返回,绕过自动压缩/解压缩电路。换句话说,对于受限访问指令,执行单元130不分别使能压缩单元135和解压缩单元138能够进行压缩和解压缩。访问检查单元132确定是否允许对特定用户模式软件和/或存储器块执行受限访问指令。在一个实施例中,仅当压缩原子的压缩状态信息指示导致执行指令的用户模式软件被允许这样做时,才允许执行读取或写入压缩原子的受限访问指令。
写入与软件定义的压缩状态信息相关联的压缩原子的受限访问指令包括以软件定义的压缩格式编码的值。因此,这些值不应被压缩单元135压缩。类似地,当使用受限访问指令从存储器块存储154读取压缩原子时,使得软件可以访问这些值,而不必由解压缩单元138解压缩。软件定义的压缩使能存储器块以软件定义的压缩格式存储,从而减轻处理器150的压缩和/或解压缩工作负载。
图2A示出了用于访问存储器块的压缩值和压缩状态的方法200的示例性流程图。在步骤201,由处理器接收指定存储器块的访问指令。在一个实施例中,与存储器块相关联的标识符作为指令操作数被提供。在一个实施例中,该指令是受限访问指令。指令的执行导致执行检查,以确定导致指令执行的软件是否可以访问压缩状态信息和/或压缩原子。例如,检查可以确定软件是否包含在具有访问存储器块的压缩状态信息和/或压缩原子的权限的组中。在另一示例中,该检查可以确定存储器块的压缩状态信息和/或压缩原子是否被压缩为允许由任何软件访问的特定类型的压缩格式。在又一示例中,检查可以将存储器块的压缩状态信息的全部或部分比特与作为指令的操作数提供的软件定义的比特模式进行比较,以确定是否允许软件访问存储器块的压缩状态信息和/或压缩原子。
在步骤205,如果指令用于查询软件是否被允许访问存储器块的压缩状态信息和/或压缩原子,则方法200移动到步骤210。否则,方法200移到步骤206。
在步骤210,执行如上所述的检查,以确定软件是否具有对存储器块的压缩状态信息和/或压缩原子的访问权限。指令的执行是通过向导致指令执行的软件提供该检查的指示来完成的。例如,指示可以是一个或更多个布尔(例如,真/假)值,其指示软件是否可以访问压缩状态信息、压缩原子、二者或二者都不。
在步骤206,如果指令用于访问存储器块的压缩状态信息和/或压缩原子,则执行如上所述的检查,以确定软件是否具有访问存储器块的压缩状态信息和/或压缩原子的权限。如果软件不具有访问权限,则方法200通过向导致执行指令的软件发送步骤208中的错误的信号和/或通过向错误的系统(例如内核模式软件)发送信号来完成指令的执行。如果软件确实具有访问权限,则方法200继续到图1C所示的方法110的步骤116。
步骤205和206由处理器150(或执行单元130)通过检查例如指令的操作码来执行。在一个实施例中,可以在单个步骤中执行部分或全部步骤206、116、118和125。
除了原始的和受限的访问指令类别之外,还提供了抽象的访问指令类别,以允许软件获得关于存储器块的压缩状态信息和/或压缩原子的信息,而不向软件提供压缩状态信息和/或压缩原子的实际比特。例如,抽象访问指令可以向软件指示存储器块是否是完全统一的,而不向软件提供压缩状态信息的实际比特。例如,另一个抽象访问指令可以向软件提供存储器块的单个统一值,或者存储器不是统一的指示,而不向软件提供对压缩状态信息、压缩原子和/或统一值表的实际比特的访问。用户模式软件可以使用这种受限的抽象查询功能来实现各种优化,例如参考图1D所述的优化,而不公开系统用于生成和存储压缩状态信息和压缩原子的进程和数据结构的任何直接信息。
图2B示出了用于访问存储器块的压缩值和压缩状态的示例性方法230的示例性流程图。在步骤225,处理器接收指定存储器块的访问指令。在一个实施例中,提供与存储器块相关联的标识符作为指令操作数。在一个实施例中,访问指令是用于向导致指令被执行的软件提供关于存储器块的压缩状态信息的间接信息的抽象指令。例如,访问指令可以用于检查压缩状态信息是否指示存储器块是统一的还是ZBC压缩的(例如,清除的)。或者,访问指令可以用于获得统一的或ZBC压缩的存储器块的统一值。
在步骤227,处理器150(或执行单元130)经由高速缓存160访问存储器块的压缩状态信息,如果压缩状态信息尚未高速缓存在高速缓存160中,则高速缓存160根据需要访问压缩状态存储152。
在步骤235,如果操作是确定存储器块是否是统一的检查指令,则方法230移动到步骤240。在步骤240,处理器150(或执行单元130)检查存储器块的压缩状态信息以确定存储器块的值是否是统一的。指令的执行通过向导致指令被执行的软件提供值是否是统一的指示来完成。在一个实施例中,指示包括布尔值,其中真(True)表示值是统一的,假表示值不是统一的。
返回到步骤235,如果操作是获得存储器块的统一值的读取指令,则方法230移动到步骤255。在步骤255,处理器150(或执行单元130)通过向导致指令被执行的软件提供存储器块的统一值,或者如果存储器块的值不是统一的则提供错误指示,来完成指令的执行。可以使用在存储器块的压缩状态信息中编码的索引从统一值表134读取统一值。或者,可以从与存储器块相关联的压缩原子获得统一值。重要的是,当执行抽象类别指令时,不会公开存储器块的压缩状态信息的比特。
在其它实施例中,访问指令的抽象类别可以用于为存储器块写入压缩状态信息和/或压缩原子。例如,软件可以写入压缩状态信息以指示存储器块是统一的并提供统一值。
总之,访问指令的抽象类别可以用于获取有关压缩状态信息和压缩原子指定的内容的间接信息,而不是用于访问压缩状态信息或压缩原子的实际比特。相反,受限类别和原始类别的指令为某些或所有压缩状态信息和/或压缩原子提供直接访问。在一个实施例中,原始类别的访问指令旨在由处理器制造商/供应商提供的用户模式软件(例如,处理器制造商/供应商的专有驱动软件)使用。
提供抽象的、受限的和原始类别的访问指令使得用户模式代码能够读取和写入压缩状态信息和压缩原子以进行优化(例如上面参考图1D描述的那些优化),同时确保硬件定义的压缩算法的安全性。当压缩状态信息和/或压缩原子的比特由软件使用原始或受限访问指令直接写入时,应以兼容或不干扰现有硬件压缩方案的方式执行此类写入。抽象的、受限的和原始类别的访问指令中的每一个可以用于减少需要在多节点系统中的节点之间传输的数据量。
并行处理架构
图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提供工作量用于处理。工作量可以包括要由那些指令处理的许多指令和数据。缓冲区是存储器中可由主机处理器和PPU 300两者访问(例如,读/写)的区域。例如,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和XBar370。
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(诸如CUDA 9C++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的概念图。示例性系统500可以被配置为实现图1B中所示的方法110、图1D中所示的方法165、图2A中所示的方法200、和/或图2B中所示的方法250。处理系统500包括CPU 530、交换机510和多个PPU300中的每一个以及相应的存储器304。NVLink 310提供每个PPU 300之间的高速通信链路。尽管图5B中示出了特定数量的NVLink 310和互连302连接,但是连接到每个PPU 300和CPU530的连接的数量可以改变。交换机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可以被配置为实现图1B中所示的方法110、图1D中所示的方法165、图2A中所示的方法200、和/或图2B中所示的方法250。
如图所示,提供系统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可表示由
Figure BDA0003082974370000281
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)等。
应理解的是,附图中所示出的组件的布置是出于说明性目的并且其他布置是可能的。例如,本文中所描述的元件中的一个或更多个元件可整体或部分地实现为电子硬件组件。其他元件可以软件、硬件或软件和硬件的组合实现。此外,可以组合这些其他元件中的一些或全部,可以完全省略一些元件,并且可以在仍然实现本文所描述的功能的同时添加附加组件。由此,本文描述的主题可以许多不同的变型来体现,并且所有这样的变型都被设想为在权利要求的范围内。
为了便于理解在此描述的主题,就动作序列而言描述了许多方面。所属领域的技术人员将认识到,不同动作可由专用电路或电路、由一个或更多个处理器执行的程序指令或由两者的组合来执行。本文中对任何动作序列的描述并不旨在暗示必须遵循所描述的用于执行该序列的特定顺序。除非本文另有指示或上下文明显矛盾,本文所述的所有方法都可以任何合适的顺序进行。
术语“一个、一种”和“该(the)”以及在描述该主题的上下文中(特别是在以下权利要求的上下文中)的类似引用的使用应被解释为覆盖单数和复数两者,除非本文另外指明或与上下文明显矛盾。跟随有一个或更多个项目的列表的术语“至少一个”(例如,“A和B中的至少一个”)的使用应被解释为意指选自所列出的项目(A或B)的一个项目或所列出的项目(A和B)中的两个或更多个的任何组合,除非本文另有说明或与上下文明显矛盾。此外,前面的描述仅用于说明的目的,而不是用于限制的目的,因为所寻求的保护范围由阐述的权利要求及其任何等同物限定。本文提供的任何和所有示例或示例性语言(例如,“诸如”)的使用仅旨在更好地说明该主题,并且不对该主题的范围施加限制,除非另外声明。在权利要求书和书面说明书中使用术语“基于”和指示引起结果的条件的其他类似短语并不旨在排除引起该结果的任何其他条件。说明书中的语言不应被解释为指示任何未要求保护的元素对于如所要求保护的本发明的实践是必不可少的。

Claims (30)

1.一种计算机实现的方法,包括:
接收指定存储器的存储器块的指令,其中所述存储器块能够以压缩格式或未压缩格式存储值;
访问与所述存储器块相对应的压缩状态,其中所述压缩状态包括与所述存储器块相关联的值是压缩的还是未压缩的指示;以及
提供与所述压缩状态相关的信息,其中所述指令位于一个或多个访问指令的集合中,其中访问指令允许软件获取与所述压缩状态相关的信息,否则所述信息对于所述软件是不可访问的。
2.根据权利要求1所述的计算机实现的方法,其中所述软件是用户模式软件。
3.根据权利要求2所述的计算机实现的方法,其中所述压缩状态是内核模式软件可访问的,而无需利用所述一个或更多个访问指令的集合。
4.根据权利要求1所述的计算机实现的方法,其中关于所述压缩状态的信息是所述值是统一的指示。
5.根据权利要求1所述的计算机实现的方法,所述方法还包括:
接收指定所述存储器块的第二指令;以及
提供表示与所述存储器块相关联的所有值的统一值。
6.根据权利要求5所述的计算机实现的方法,其中从所述压缩状态引用的表中读取所述统一值。
7.根据权利要求5所述的计算机实现的方法,其中所述统一值是从所述存储器块获得的。
8.根据权利要求1所述的计算机实现的方法,所述方法还包括:
接收指定所述存储器块的第二指令,其中所述值是以压缩格式存储的;以及
提供所述压缩格式的所述值。
9.根据权利要求1所述的计算机实现的方法,所述方法还包括:
接收指定所述存储器块和操作数的第二指令;以及
基于所述操作数更新所述压缩状态。
10.根据权利要求9所述的计算机实现的方法,其中所述操作数指示所述值是统一的。
11.根据权利要求9所述的计算机实现的方法,其中所述操作数指示所述存储器块的值是软件定义的压缩格式的。
12.根据权利要求11所述的计算机实现的方法,所述方法还包括:
接收指定所述软件定义的压缩格式的所述存储器块和所述值的第三指令;以及
将所述软件定义的压缩格式的所述值写入所述存储器块。
13.根据权利要求1所述的计算机实现的方法,其中所述指令在第一处理节点处接收,并且所述方法还包括:
从所述第一处理节点向第二处理节点发送与所述压缩状态相关的信息。
14.根据权利要求13所述的计算机实现的方法,其中所述存储器块存储压缩格式的值,并且所述方法还包括:
将所述压缩格式的值提供给所述第二处理节点。
15.根据权利要求14所述的计算机实现的方法,其中所述信息和值是能够被所述第二处理节点上的第二软件访问的。
16.一种系统,包括:
处理器,与存储器耦接,并且被配置为:
接收指定所述存储器的存储器块的指令,其中所述存储器块能够以压缩格式或未压缩格式存储值;
访问与所述存储器块相对应的压缩状态,其中所述压缩状态包括与所述存储器块相关联的值是压缩的还是未压缩的指示;以及
提供与所述压缩状态相关的信息,其中所述指令位于一个或更多个访问指令的集合中,其中访问指令允许软件获取与所述压缩状态相关的信息,否则所述信息对于所述软件是不可访问的。
17.根据权利要求16所述的系统,其中所述软件是用户模式软件。
18.根据权利要求17所述的系统,其中所述压缩状态是内核模式软件可访问的,而无需利用所述一个或更多个访问指令的集合。
19.根据权利要求16所述的系统,其中关于所述压缩状态的信息是所述值是统一的指示。
20.根据权利要求16所述的系统,其中所述处理器还被配置为:
接收指定所述存储器块的第二指令;以及
提供表示与所述存储器块相关联的所有值的统一值。
21.根据权利要求20所述的系统,其中所述统一值是从所述压缩状态引用的表中读取的。
22.根据权利要求20所述的系统,其中所述统一值是从所述存储器块获得的。
23.根据权利要求16所述的系统,其中所述处理器还被配置为:
接收指定所述存储器块的第二指令,其中所述值是以压缩格式存储的;以及
提供所述压缩格式的所述值。
24.根据权利要求16所述的系统,其中所述处理器还被配置为:
接收指定所述存储器块和操作数的第二指令;以及
基于所述操作数更新所述压缩状态。
25.根据权利要求24所述的系统,其中所述操作数指示所述值是统一的。
26.根据权利要求24所述的系统,其中所述操作数指示所述存储器块的值是软件定义的压缩格式的。
27.根据权利要求26所述的系统,其中所述处理器还被配置为:
接收指定所述软件定义的压缩格式的所述存储器块和值的第三指令;以及
将所述软件定义的压缩格式的所述值写入所述存储器块。
28.根据权利要求16所述的系统,其中在第一处理节点处接收所述指令,并且所述处理器还被配置为:
从所述第一处理节点向第二处理节点发送与所述压缩状态有关的信息。
29.根据权利要求28所述的系统,其中所述存储器块存储压缩格式的值,并且所述处理器还被配置为:
将所述压缩格式的所述值提供给所述第二处理节点。
30.根据权利要求29所述的系统,其中所述信息和值是能够被所述第二处理节点上的第二软件访问的。
CN202110571784.3A 2020-05-29 2021-05-25 用于访问和利用压缩数据及其状态信息的技术 Pending CN113743573A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/888,116 2020-05-29
US16/888,116 US11372548B2 (en) 2020-05-29 2020-05-29 Techniques for accessing and utilizing compressed data and its state information

Publications (1)

Publication Number Publication Date
CN113743573A true CN113743573A (zh) 2021-12-03

Family

ID=78509342

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110571784.3A Pending CN113743573A (zh) 2020-05-29 2021-05-25 用于访问和利用压缩数据及其状态信息的技术

Country Status (3)

Country Link
US (1) US11372548B2 (zh)
CN (1) CN113743573A (zh)
DE (1) DE102021113178A1 (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20230110401A1 (en) * 2021-10-08 2023-04-13 Marvell Asia Pte, Ltd. Machine Learning-Enabled Management of Storage Media Access
CN114445264B (zh) * 2022-01-25 2022-11-01 上海秉匠信息科技有限公司 纹理压缩方法、装置、电子设备及计算机可读存储介质

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5481701A (en) * 1991-09-13 1996-01-02 Salient Software, Inc. Method and apparatus for performing direct read of compressed data file
US20030188110A1 (en) * 2002-03-27 2003-10-02 International Business Machines Corporation Method for performing compressed I/O with memory expansion technology
CN102460376A (zh) * 2009-06-26 2012-05-16 英特尔公司 无约束事务存储器(utm)系统的优化
US20170017550A1 (en) * 2014-07-31 2017-01-19 Hitachi, Ltd. Storage system
CN107111461A (zh) * 2015-02-03 2017-08-29 高通股份有限公司 在基于中央处理单元(cpu)的系统中通过经压缩存储器控制器(cmc)使用背靠背读取操作来提供存储器带宽压缩
US9912957B1 (en) * 2017-04-01 2018-03-06 Intel Corporation Lossless compression for multisample render targets alongside fragment compression
US20180080988A1 (en) * 2009-06-11 2018-03-22 Texas Instruments Incorporated Programmable test compression architecture input/output shift register coupled to sci/sco/pco
US20180203764A1 (en) * 2011-12-30 2018-07-19 Streamscale, Inc. Using parity data for concurrent data authentication, correction, compression, and encryption
US20180293703A1 (en) * 2017-04-10 2018-10-11 Intel Corporation Extended local memory including compressed on-chip vertex data
US20190235793A1 (en) * 2017-02-23 2019-08-01 Hitachi, Ltd. Scale-out type storage system

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5509061B2 (ja) * 2010-12-27 2014-06-04 株式会社日立ソリューションズ 潜像重畳方法、および、潜像重畳装置、潜像重畳システム
US9503510B2 (en) * 2012-03-10 2016-11-22 Headwater Partners Ii Llc Content distribution based on a value metric
US11200004B2 (en) * 2019-02-01 2021-12-14 EMC IP Holding Company LLC Compression of data for a file system

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5481701A (en) * 1991-09-13 1996-01-02 Salient Software, Inc. Method and apparatus for performing direct read of compressed data file
US20030188110A1 (en) * 2002-03-27 2003-10-02 International Business Machines Corporation Method for performing compressed I/O with memory expansion technology
US20180080988A1 (en) * 2009-06-11 2018-03-22 Texas Instruments Incorporated Programmable test compression architecture input/output shift register coupled to sci/sco/pco
CN102460376A (zh) * 2009-06-26 2012-05-16 英特尔公司 无约束事务存储器(utm)系统的优化
US20180203764A1 (en) * 2011-12-30 2018-07-19 Streamscale, Inc. Using parity data for concurrent data authentication, correction, compression, and encryption
US20170017550A1 (en) * 2014-07-31 2017-01-19 Hitachi, Ltd. Storage system
CN107111461A (zh) * 2015-02-03 2017-08-29 高通股份有限公司 在基于中央处理单元(cpu)的系统中通过经压缩存储器控制器(cmc)使用背靠背读取操作来提供存储器带宽压缩
US20190235793A1 (en) * 2017-02-23 2019-08-01 Hitachi, Ltd. Scale-out type storage system
US9912957B1 (en) * 2017-04-01 2018-03-06 Intel Corporation Lossless compression for multisample render targets alongside fragment compression
US20180293703A1 (en) * 2017-04-10 2018-10-11 Intel Corporation Extended local memory including compressed on-chip vertex data

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
李海生;刘成;蔡强;曹健;: "三维模型网格数据压缩技术研究", 系统仿真学报, no. 09, 8 September 2013 (2013-09-08) *

Also Published As

Publication number Publication date
US11372548B2 (en) 2022-06-28
DE102021113178A1 (de) 2021-12-02
US20210373774A1 (en) 2021-12-02

Similar Documents

Publication Publication Date Title
US11182649B2 (en) Generation of synthetic images for training a neural network model
US20200151288A1 (en) Deep Learning Testability Analysis with Graph Convolutional Networks
US11106261B2 (en) Optimal operating point estimator for hardware operating under a shared power/thermal constraint
CN110766778B (zh) 使用散列执行并行路径空间滤波的方法和系统
CN111860757A (zh) 适用于神经网络的高效矩阵格式
US11496773B2 (en) Using residual video data resulting from a compression of original video data to improve a decompression of the original video data
US11379420B2 (en) Decompression techniques for processing compressed data suitable for artificial neural networks
US11327900B2 (en) Securing memory accesses in a virtualized environment
CN111191784A (zh) 转置的稀疏矩阵乘以稠密矩阵用于神经网络训练
US11847733B2 (en) Performance of ray-traced shadow creation within a scene
CN111445003A (zh) 神经网络生成器
CN113609029B (zh) 动态压缩具有统一值的存储器区域的技术
CN113743573A (zh) 用于访问和利用压缩数据及其状态信息的技术
CN110908929A (zh) 用于高带宽缩放的一致数据高速缓存
CN113822975A (zh) 用于对图像进行有效采样的技术
CN115039076A (zh) 无障碍和无围栏共享存储器同步
US11263051B2 (en) Techniques for scaling dictionary-based compression
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