CN109582484B - 防范在汽车系统中实现的纠错码(ecc)中的错误 - Google Patents

防范在汽车系统中实现的纠错码(ecc)中的错误 Download PDF

Info

Publication number
CN109582484B
CN109582484B CN201811149658.3A CN201811149658A CN109582484B CN 109582484 B CN109582484 B CN 109582484B CN 201811149658 A CN201811149658 A CN 201811149658A CN 109582484 B CN109582484 B CN 109582484B
Authority
CN
China
Prior art keywords
code
ecc
error
data
decoder
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
CN201811149658.3A
Other languages
English (en)
Other versions
CN109582484A (zh
Inventor
N·R·萨克塞纳
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
Priority claimed from US16/137,002 external-priority patent/US10908995B2/en
Application filed by Nvidia Corp filed Critical Nvidia Corp
Publication of CN109582484A publication Critical patent/CN109582484A/zh
Application granted granted Critical
Publication of CN109582484B publication Critical patent/CN109582484B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/0736Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in functional embedded systems, i.e. in a data processing system designed as a combination of hardware and software dedicated to performing a certain function
    • G06F11/0739Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in functional embedded systems, i.e. in a data processing system designed as a combination of hardware and software dedicated to performing a certain function in a data processing system embedded in automotive or aircraft systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1044Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices with specific ECC/EDC distribution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1048Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using arrangements adapted for a specific error detection or correction feature
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/13Linear codes
    • H03M13/19Single error correction without using particular properties of the cyclic codes, e.g. Hamming codes, extended or generalised Hamming codes
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/29Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes
    • H03M13/2906Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes using block codes

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Detection And Correction Of Errors (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

通常,数据易受由硬件中的故障(即永久性故障)引起的错误的影响,例如存储器和/或通信信道的功能故障。为了检测由硬件故障引起的数据中的错误,引入了纠错码(ECC),其基本上为数据提供了一种冗余,可用于验证数据没有由硬件故障引起的错误。在某些情况下,ECC还可用于校正由硬件故障引起的数据错误。然而,ECC本身也容易出错,特别是包括ECC逻辑中的故障引起的错误。因此提供了一种用于防范ECC中的错误的方法、计算机可读介质和系统。

Description

防范在汽车系统中实现的纠错码(ECC)中的错误
要求优先权
本申请要求2017年9月29日提交的标题为“用于提高包括基于AI的系统的电子系统的可恢复性的故障-保护错误控制代码设计(Fault-Secure Error Control CodeDesigns for Improving Resiliency of Electronic Systems including AI-basedSystems)”的美国临时申请No.62/566,067(代理人案卷号NVIDP1188+/17-SC-0207US01)的优先权,其全部内容通过引用并入本文。
技术领域
本发明涉及用于控制错误数据的代码,更具体地涉及用于控制错误数据的纠错码(ECC)逻辑。
背景技术
通常,数据易受由硬件中的故障(即,永久性故障)引起的错误的影响,例如存储器和/或通信信道的功能中的故障。为了检测由硬件故障引起的数据错误,已经开发了为数据提供一种冗余的代码。在某些情况下,这些代码甚至可用于校正数据中的错误。
所开发的用于检测并且在一些情况下用于校正由硬件故障引起的数据错误的代码的一种设计是纠错码(ECC)。通常,ECC是包括编码器的逻辑,该编码器用于对数据的副本进行编码以形成代码,其中代码与数据相关联地发送和/或存储。ECC逻辑还包括用于对代码进行解码的解码器,使得代码一旦被解码,然后就可以用于检测和可选地校正数据中的错误。不幸的是,ECC逻辑也容易受到故障的影响,这些故障会在代码本身中引入错误。例如,编码器和/或解码器中的故障(诸如编码器/解码器的门被卡在特定值的单个固定故障)可能在代码中引入错误。代码中的错误可能导致误检测数据中的错误,更糟糕的是,错误地校正数据,这将进一步将错误引入数据中。
迄今为止,ECC设计尚未适配于防范ECC逻辑本身引入的错误。因此具有解决与现有技术相关的这些问题和/或其他问题的需求。
发明内容
公开了一种用于防范ECC中的错误的方法、计算机可读介质和系统。在使用中,访问使用纠错码(ECC)逻辑为数据创建的代码,其中代码存储在第一存储器中,并且数据存储在第二存储器中。另外,检测由ECC逻辑中的错误引起的代码中的错误。此外,确定代码中的错误是否可校正。响应于确定代码中的错误是可校正的:校正代码中的错误以形成经校正的代码,从第二存储器检索数据,并使用经校正的代码验证所检索的数据。响应于确定代码中的错误不可校正,代码中的错误被指示为不可校正。
附图说明
图1A示出了根据实施例的用于防范ECC中的错误的方法的流程图。
图1B示出了根据实施例的ECC逻辑体系架构的框图。
图1C示出了根据实施例的图1B的ECC编码器的输入和输出的框图。
图1D示出了根据实施例的图1B的ECC解码器的输入和输出的框图。
图2A-图2E示出了根据实施例的、与用于防范ECC中的错误的ECC逻辑算法设计相关联的SEC-DED ECC逻辑设计的奇偶校验矩阵。
图3示出了根据实施例的并行处理单元。
图4A示出了根据实施例的图3的并行处理单元内的通用处理集群。
图4B示出了根据实施例的图3的并行处理单元的存储器分区单元。
图5A示出了根据实施例的图4A的流式多处理器。
图5B是根据实施例的使用图3的PPU实现的处理系统的概念图。
图5C示出了可以在其中实现各种先前实施例的各种体系架构和/或功能的示例性系统。
图6是根据实施例的由图3的PPU实现的图形处理管线的概念图。
具体实施方式
通常,数据易受由硬件中的故障(失败)引起的错误的影响,例如存储器和/或通信信道的功能中的故障。为了检测数据中的错误(可能是故障硬件或与存储数据交互的辐射的结果),引入了纠错码(ECC)。当存储(或传输)数据时,计算对应于存储数据的ECC;当稍后检索数据时,再次执行该计算。如果ECC匹配第二次计算的结果,则数据没有错误;如果ECC不匹配,则已引入了错误。因此,ECC表示数据的“正确”形式。在某些情况下,由于ECC表示数据的“正确”形式,因此ECC也可用于校正数据中的任何错误。然而,ECC本身也容易受错误的影响,特别是包括由ECC逻辑(电路)中的故障引起的错误,例如ECC逻辑的编码器和/或解码器中的硬件故障。ECC中的错误可导致错误地检测数据中的错误,更糟糕的是,错误地校正数据,这将进一步将错误引入数据中。
以下描述提供了用于防范ECC中特别是由ECC逻辑中的故障引起的错误的各种实施例,并因此提供各种故障-保护ECC逻辑设计。这些故障-保护ECC逻辑设计可以独立使用或彼此结合使用,并且包括约束ECC逻辑的特定部分(例如编码器和/或解码器)的硬件配置,并且还包括修改ECC逻辑使用的传统计算机代码(算法)。这些故障-保护ECC逻辑设计通过提供检测错误的能力以及1)校正ECC以用于验证数据或2)将ECC识别为不可校正并因此不可用于验证数据的能力来最终防范ECC中的上述错误。此外,故障-保护ECC逻辑设计可以在各种系统中实现,以保护那些系统的数据,例如汽车系统和/或基于人工智能(“AI”)的系统。
图1A示出了根据实施例的用于防范ECC中的错误的方法100的流程图。方法100可以由ECC逻辑(电路)结合处理器(例如GPU(图形处理单元)、CPU(中央处理单元)或能够防范ECC中的错误的任何处理器)执行。更具体地,在一些可选实施例中,可以使用图3的并行处理单元(PPU)300和/或在下面描述的任何实施例的上下文中实现方法100。此外,本领域普通技术人员将理解,执行方法100的任何系统都在本发明的实施例的范围和精神内。
如操作110中所示,访问使用纠错码(ECC)逻辑为数据创建的代码,其中代码存储在第一存储器中,并且数据存储在第二存储器中。由于使用ECC逻辑创建代码,因此在本说明书的上下文中,该代码也可以被称为为数据创建的ECC。数据可以是想要使用代码对其进行验证的任何类型的数据,例如可由处理器(包括GPU、CPU、核心)执行的指令、操作数、地址等,并且在这种情况下,可以创建代码用于向数据提供冗余。例如,数据可能能够正在经受通过硬件(例如,存储器、通信信道)中的永久性故障引入的错误,并且可以创建代码以验证数据是否包括错误。因此,可以在硬件处理数据之前,并且因此在潜在错误能够被引入数据之前(例如,在将数据存储在存储器中之前和/或在通过通信信道传送数据之前)创建代码。此外,当从第一存储器检索代码以用于验证数据时,可以参考当前操作来访问代码。
下面参考图1B更详细地描述ECC逻辑创建代码的操作。然而,通常,ECC逻辑是包括编码器和解码器的硬件,所述编码器编码数据以创建代码,所述解码器解码该代码以用于验证数据。编码器和解码器两者都以ECC逻辑的硬件实现,因此会经历故障。ECC逻辑可以被设计为单错误检测(SED)、单错误纠正(SEC)或单错误纠正-双错误检测(SEC-DED),因此ECC逻辑创建的代码可以是SED、SEC或SEC-DED。
如上所述,代码存储在第一存储器中,数据存储在第二存储器中。在一个实施例中,第一存储器和第二存储器可以是不同的物理存储器。例如,在该实施例中,第一存储器可以专用于存储由ECC逻辑创建的代码,第二存储器可以专用于存储生成代码的数据。在另一实施例中,第一存储器和第二存储器可以是同一物理存储器的不同部分。例如,第一存储器可以是物理存储器的第一部分,专用于存储由ECC逻辑创建的代码,并且第二存储器可以是物理存储器的第二部分,专用于存储生成代码的数据。
另外,如操作112所示,检测由ECC逻辑中的错误引起的代码中的错误。在本说明书的上下文中,ECC逻辑中的错误包括ECC逻辑中的硬件故障,例如单个固定故障,其中ECC逻辑中的门被卡在特定值(即逻辑0,1等)。在一个实施例中,代码中的错误可由ECC逻辑的编码器中的错误引起,所述编码器编码数据以形成代码。在另一实施例中,代码中的错误可由ECC逻辑的解码器中的错误引起,所述解码器解码来自第一存储器的代码。
此外,如操作114所示,确定代码中的错误是否是可校正的。这可以由ECC逻辑的解码器执行。如操作116-120所示,响应于确定代码中的错误是可校正的:校正代码中的错误以形成经校正的代码(操作116),从第二存储器检索数据(操作118),以及使用经校正的代码验证所检索的数据(操作120)。因此,当代码被校正时,它可以用于验证数据,甚至在必要时用于校正数据。
如操作122所示,响应于确定代码中的错误不可校正,代码中的错误被指示为不可校正。因此,可以防止错误代码被用于验证数据和进一步错误地校正数据。为此,方法100可以保证对数据执行的任何纠错的完整性,特别是在ECC逻辑中存在故障时。
现在将根据用户的期望阐述关于可以采用其实现前述框架的各种可选体系架构和特征的更多说明性信息。应该特别注意,出于说明性目的阐述了以下信息,并且不应该被解释为以任何方式进行限制。任意以下特征可以可选地并入或不排除所描述的其他特征。
图1B示出了根据实施例的ECC逻辑体系架构200的框图。ECC逻辑体系架构200可以被配置为执行图1A的方法100。
如图所示,n位宽的输入数据(Data In)和k位宽的ECC(由编码器210计算)分别存储在任务存储器212和ECC存储器214中。在本实施例中,任务存储器212和ECC存储器214是同一物理存储器211的不同区域(field)。存储器211具有m个逻辑位置,其形成存储器阵列,每个位置包括n+k位编码数据。存储器的总容量是m(n+k)位。存储器阵列的结构具有列解码因子f。
解码器216解码来自ECC存储器214的读出n+k位编码数据,并生成k-位校正子(syndrome)和最多三个可能的错误指示符:无错误(NE)、可校正错误(CE)和不可校正错误(UE)。当解码器216输出的错误指示符是CE时,校正逻辑218使用k-位校正子来校正来自任务存储器212的n-位读出数据,CE指示可校正错误的情况。解码器216的CE输出控制来自任务存储器212的未修改数据的多路复用(MUX)单元220和来自校正逻辑218的经校正的数据。MUX 220和校正逻辑218可以合并成单个单元,但是这里分别显示以对故障进行更保守的计算。取决于设计参数值,ECC逻辑架构200可以是SED(如在奇偶中)、SEC或SEC-DED,如下所述。
SED(或奇偶):这是当k=1并且编码器210和解码器216是XOR奇偶树时。在该设计中,解码器216仅向NE和UE发信号,并且不存在校正逻辑218和MUX 220单元(与图1B中所示的实施例不同)。
SEC:对于给定的n,选择k使得2k-1≥n+k且2k-1-1<n+k-1。例如,如果n=32,则k=6。(25-1)<(32+5)且(26-1)≥(32+6)。在ECC逻辑体系架构200的这种设计中,解码器216仅向NE和CE发信号。编码器210和解码器216通过奇偶校验矩阵指定的特定奇偶校验等式设计。这在T.R.N.Rao和E.Fujiwara的“计算机系统的错误控制编码(Error-Control Coding forComputer Systems)”,Prentice Hall系列计算机工程,Edward J.McCluskey教授丛书编辑,1989,新泽西中进一步详细描述。ECC逻辑体系架构200可以可选地被配置为仅检测错误;在这种情况下,SEC代码变为双错误检测(DED)代码,并且解码器216仅向NE和UE发信号,并且如在SED代码中那样,不存在校正逻辑218和MUX 220单元。
SEC-DED:如上所述选择的(n,k)SEC代码被扩充为(n,k+1)SEC-DED代码。编码器210和解码器216具有额外校验位的额外奇偶校验等式,如上面提到的“计算机系统的错误控制编码(Error-Control Coding for Computer Systems)”中所述。SEC-DED代码可以用作三重错误检测(TED)代码。
总线接口结构(未示出)上的ECC保护是图1B的特殊情况,其中不需要存储器阵列和行/列解码器。这里,编码器210处于数据源级,并且解码器216和校正逻辑218以总线接口为目标。
图1C示出了根据实施例的图2A的ECC编码器210的输入和输出的框图。ECC设计基于线性纠错码的理论结构,并使用异或(XOR)逻辑门实现。基于线性代码的ECC设计有三个结构组件:
编码器210计算ECC,即从n个数据位D[n-1:0]计算k个校验位C[k-1:0]。计算出的校验位和数据位一起分别存储在ECC存储器214和任务存储器212中。
图1D示出了根据实施例的图2A的ECC解码器216的输入和输出的框图。解码器216将经编码的码字(由C[k-1:0]、D[n-1:0]表示)作为输入并通过称为校正子的中间k-位输出(S[k-1:0])确定是否存在无错误(NE)、可校正错误(CE)或不可校正错误(UE)。NE、CE、UE是互斥的,因为有效结果是(NE,CE,UE)=(1,0,0),(0,1,0)或(0,0,1)。
校正逻辑218使用解码器216输出(S[k-1]:0)和CE信号以产生经校正的数据CD[n-1:0](在由CE=1指示的可校正错误的情况下)或者在CE=0的情况下保留原始数据。
例如,在ISO 26262命名法中,图1B中的ECC逻辑体系架构200被认为是汽车安全-相关电子系统中的安全机制。在该实施例和其他实施例中,它可以用于检测并且在某些情况下用于校正由硬件故障导致的数据中的错误。然而,ECC逻辑本身中的故障可能将错误引入ECC,ECC意图保护数据。特别地,编码器210和/或解码器216中的永久性故障可导致数据损坏而不触发适当的检测机制。
为了防范ECC逻辑本身中的故障引入的错误,可以以多种方式约束ECC逻辑和/或代码。
实施例1-用于编码器的SEC ECC逻辑约束
对于产生SEC代码的ECC逻辑,如果ECC逻辑被约束,则ECC逻辑可以针对所有单个固定故障的进行故障-保护,使得在编码器210中不存在用于各个校验位输出的公共子表达式的共享:C[0],C[1],…,C[k-1]。虽然该编码器210增加了面积和功率开销,但它保证编码器210中的任何单个固定故障将最多损坏单个校验位输出,并且对该损坏结果(即,仅单个校验位错误)的任何解码将校正同样损坏的校验位值。
实施例1-示例
对于线性检错码和纠错码,包括SEC代码,校验位编码器由奇偶校验矩阵[IkxkPkxn]定义,其中单位矩阵表示各个k行中校验位位置C[0]到C[k-1];并且,每行中的奇偶矩阵识别形成相应校验位的奇偶等式的数据位。下面表1中所示的奇偶校验矩阵定义了(11,4)SEC代码,其中n=11个数据位且k=4个校验位。
表1
Figure GDA0003397305490000071
H中的第一个4×4单位子矩阵对应于四个校验位C[0]到C[3]。以下4x11子矩阵对应于数据输入D[0]到D[10]。校验位等式规范地从奇偶校验矩阵导出如下:
1.在矩阵H的每一行中,位置i处的第一非零位识别校验位C[i-1],并且每个后续非零位j1、j2、...分别识别数据位D[j1-k]、D[j2-k]、...。
2.通过在左侧获取所识别的校验位C[i-1]并将其分别等于所识别的数据位D[j1-k]、D[j2-k]、..的模2(XOR)之和来形成矩阵H的每一行的奇偶等式。
在上述过程之后,我们得到表2中所示的(15,4)代码的奇偶等式。这里‘+’表示模2求和。
表2
Figure GDA0003397305490000081
在现有技术中,ECC逻辑编码器将在奇偶等式中共享公共子表达式。例如,D[0]+D[10]分别是C[0]、C[1]和C[2]的等式中的公共子表达式,其可以通过共享XOR(具有输入D[0]和D[10])门输出采用产生输出C[0]、C[1]和C[2]的逻辑结构来实现。
如果无故障数据D[0…10]=11’b00000000000,那么在没有故障的情况下,校验位C[0…3]=4’b0000。但是,如果在具有输入D[0]和D[10]的XOR门的扇出干线节点(fan-outstem node)处发生固定为1的故障,则校验位计算为C[0…3]=4’b0110。如果其被解码(经解码的值将指示数据字段中的单个位纠错(CE)),则数据值将被错误地校正为D[0…10]=11’b00000000010。虽然校验位编码器是针对此故障进行自检(意味着解码器检测到故障),但由于检测到的错误导致静默数据损坏(SDC),因为SEC代码不会发出不可校正错误(UE)信号并且可能导致违反安全目标,因此它不是故障-保护的。
通过约束ECC逻辑,根据上面的描述,如果单个固定为1的故障影响编码器逻辑的C[0]部分,则数据值D[0…10]=11’b00000000000将导致校验位为C[0…3]=4’b1000。一旦对校验位进行解码和校正,则读出的校验位和数据值将为{C[0..3]|D[0…10]}={4’b0000|11’b00000000000}。
实施例2-编码器的SEC-DED ECC逻辑约束
对于产生SEC-DED代码的ECC逻辑,如果ECC逻辑受约束,则ECC逻辑可以针对所有单个固定故障进行故障-保护,使得编码器210中用于各个校验位输出C[0],C[1],…,C[k-1]的多于两个公共子表达式不存在共享。虽然该编码器210约束增加了一些面积开销,但它保证编码器210中的任何单个固定故障最多将损坏两个校验位输出,并且对该损坏结果(即,最多两个校验位错误)的任何解码将校正同样损坏的校验位值或将该错误解码为不可校正(UE)。
实施例2-示例
对于使用额外校验位从(11,4)SEC代码扩充到的(11,5)SEC-DED代码,下面的表3中给出了奇偶校验矩阵H和该SEC-DED代码的相应校验位等式。
表3
Figure GDA0003397305490000091
在现有技术中,ECC逻辑编码器将在奇偶等式中共享公共子表达式。例如,D[0]+D[10]是C[0]、C[1]和C[2]的等式中的公共子表达式,它们分别通过共享XOR(具有输入D[0]和D[10])门输出采用产生输出C[0]、C[1]和C[2]的逻辑结构来实现。
如果无故障数据D[0…10]=11’b00000000000,那么在没有故障的情况下,校验位C[0…3]=4’b0000。然而,如果在具有输入D[0]和D[10]的XOR门输出端处出现固定为1的故障,则校验位计算为C[0…3]=4’b11100。如果其被解码(解码的值将指示数据字段中的单个位纠错),则数据值将被错误地校正为D[0…10]=11’b10000000000。但是,如果我们假设为如上述SEC ECC逻辑设计中的扇出干线故障,其仅损坏C[1]和C[2],则解码器将发出不可校正错误(UE)信号,并且不会导致残留故障。
通过约束ECC逻辑,根据上面的描述,如果单个固定为1的故障影响编码器逻辑的C[0]部分,则数据值D[0…10]=11’b00000000000将导致校验位为C[0…4]=5’b10000。一旦对校验位进行解码和校正,则读出的校验位和数据值将为{C[0..4]|D[0…10]}={5’b00000|11’b00000000000}。此外,如果单个固定故障影响编码器逻辑的C[0]和C[1]部分,则数据值D[0…10]=11’b00000000000将导致校验位为C[0…3]=5’b11000。解码器将发出这种情况为不可校正的双位错误(UE)的信号。
实施例3-奇偶位ECC逻辑
基于奇偶的编码器输出SED代码,并且根据定义,它们是故障-保护的,因为它们仅产生一个校验位C[0]。编码器中的任何故障都将损坏C[0]或不损坏。在任何一种情况下,解码器都会发出不可校正错误的信号或不发出错误信号。它唯一的缺点是,它可能会导致误报情况,并可能影响可用性。
实施例4-用于解码器的ECC逻辑约束
对于解码器216中的内部单个固定故障,如果遵循如编码器210设计的指导,则校正子逻辑相对于内部固定故障是故障-保护的。特别地,SEC解码器设计将类似于图1D中所示的设计,除了将不存在不可校正错误(UE)解码逻辑。因此,关于单个固定故障-保护属性,解码器216逻辑可遵循与编码器210逻辑类似的设计准则。
对于单个位奇偶解码器,解码器216是单输出奇偶树,并且无错(NE)输出也对应于奇偶树的输出。
实施例5-用于ECC逻辑的修改算法
在本实施例中,描述了ECC代码设计技术,其可以增强ECC的故障-保护属性,而不需要来自上述实施例中描述的ECC逻辑设计约束的任何帮助。
为了解释改善故障-保护属性的代码设计技术,让我们首先看一下常规SEC-DED设计中残留故障的来源。所有ECC设计的种子是奇偶校验矩阵。这在前面的部分中通过分别从定义(11,4)和(11,5)ECC代码的奇偶校验矩阵构造编码器和解码器等式来示出。图2A示出了标准(32,7)Hamming ECC代码的奇偶校验矩阵的结构,如T.R.N.Rao和E.Fujiwara的“计算机系统的错误控制编码(Error-Control Coding for Computer Systems)”,PrenticeHall系列计算机工程,Edward J.McCluskey教授丛书编辑,1989,新泽西中所述。该奇偶校验矩阵开头的6×6单位子矩阵表示位C[0]到C[5]。数据位D[0]到D[31]的剩余32个长度6列向量以填充增加的非零值,并且通过跳过已经为6×6单位子矩阵中的校验位选择的权重1列来填充。例如,列向量[0 0 0 0 1 1]T以D[0]的十进制值3开始(跳过已为C[5]和C[2]选择的值1和2),然后列向量[0 0 0 1 0 1]T以D[1]的十进制值5开始(跳过已为C[3]选择的值4)。这种构造给出了具有校验位C[0]到C[5]的(32,6)SEC代码设计。为了获得SEC-DED代码设计,添加了由列向量[0 0 0 0 0 0 1]T表示的附加校验位C[6]。该C[6]校验位是校验位C[0]到C[5]和数据位D[0]到D[31]的整体奇偶。
该奇偶校验矩阵被转换成系统形式,其中重新组合校验位C[6]等式以仅显示为D[0]到D[31]中的数据位子集的函数。获得图2E的奇偶校验矩阵中的最后一行Row[6]的技巧是进行以下逐位操作:Row[6](图2B中)=图2A中行Row[0]到Row[6]的逐位XOR。
系统(n,k)SEC-DED构造的一个有趣结果是奇偶校验矩阵中的所有列都具有奇数权重。根据奇偶校验矩阵结构,还可以预测三个或更多个校验位等式的什么组合共享数据位的公共XOR子表达式。这可以通过对应于校验位位置的行的逐位AND来容易地实现。在数据位位置中具有对应的结果行向量将指向公共子表达式。例如,图2B示出了系统(32,7)SEC-DED代码中校验位3、4、6的公共子表达式。
通过列举所有可能的共享场景,我们可以近似估计存在SEC-DED编码器中的总共448个故障中的大约40个残余故障。这约为8.9%。由于SEC-DED解码器共享相似的设计,我们可以预期相似总数的剩余故障。本地DC覆盖率仍高于91%;但是,安全机制的整体诊断覆盖率可能会低于90%(当我们在行地址解码器和MUX单元中包含故障时)。
公共子表达式的关键源之一是权重大于3的奇数权重列的出现。图2C的奇偶校验矩阵中的32个数据位列中的6个具有权重5。
利用对最低奇数权重列的系统选择来构造SEC-DED奇偶校验矩阵是可能的。这是Hsiao推广的代码构造算法的基础,如T.R.N.Rao和E.Fujiwara的“计算机系统的错误控制编码(Error-Control Coding for Computer Systems)”,Prentice Hall系列计算机工程,Edward J.McCluskey教授丛书编辑,1989,新泽西中所描述的。为此的动机是最小化编码器和解码器电路中的XOR门的数量(并因此最小化逻辑电平的数量)。我们最近的发现是,选择最低奇数权重列也有助于最小化编码器和解码器逻辑中的公共子表达式的共享。例如,大多数(n,k)SEC-DED代码可以通过仅使用权重3列来生成。图2D示出了一个这样的(32,7)SEC-DED代码。
如果仅存在权重3列,则证明在三个或更多个校验位或校正子输出中不能存在任何子表达式共享。例如,图2E示出了只有数据位D[24]在校验位C[3]、C[4]和C[6]之间是公共的,并且没有公共的XOR子表达式。
这导致编码器中总共448个故障中的零残余故障。从而在ECC逻辑设计的编码器和解码器中实现关于单个固定故障的100%本地诊断覆盖。
接下来,我们示出了一种使用Hsiao算法的修改版本生成SEC-DED奇偶校验矩阵的形式方法。
1.给定的数据宽度n位确定校验位长度k,使得:(2k-1-1)≥(n+k-1)且(2k-2-1)<(n+k-2)。
2.为校验位生成kxk单位矩阵。
3.设置奇数权重w=3,代码长度c=n。
4.迭代不同权重w列直到c和
Figure GDA0003397305490000121
的最小值。
5.如果
Figure GDA0003397305490000122
则生成所有奇偶矩阵列。转到7。
6.设置
Figure GDA0003397305490000123
且w=w+2。转到4。
7.生成所有奇偶校验矩阵列。结束。
虽然一些SEC-DED代码(如(32,7))可以通过权重3奇偶校验矩阵来实现,但是将存在使用大于3的奇数权重的情景。例如,对于n=256,步骤1确定k=10。二项式10选择3=120<256,因此使用剩余的136个权重5的列。为了缓解这个问题,可以使用上述ECC逻辑约束或者增加k的值以实现仅具有权重3列的奇偶校验矩阵。例如,如果k=13,则具有在奇偶校验矩阵中仅具有权重3列的(256,13)的SEC-DED代码是可能的。
上述用于保护ECC免于错误的实施例包括各种故障-保护ECC逻辑设计,与传统的ECC设计相比,该设计改善了采用ECC逻辑的电子系统的整体可靠性。一旦电子系统的ECC逻辑变得更可靠并且更能容忍故障,ECC逻辑就可以更可信地执行其检测和校正数据中的错误的预期功能。
因此,故障-保护ECC逻辑设计可以用在存储器结构、数据传输系统、处理器和其他需要更大数据错误可恢复性的系统中。这种系统包括,例如,自动和半自动车辆(诸如汽车、飞机、船只、潜艇);自动和半自动无人机;安全系统;机器人;和其他电子系统,包括暴露于外部元件或能够引起硬件故障的极端条件的电子系统。
故障-保护ECC逻辑设计还可以用在包含人工智能(“AI”)的系统中,其中期望对数据(位)错误具有更大的可恢复性。这样的系统包括,例如,AI动力的客车,医疗、制造和工业领域中的AI动力的机器人,在城市环境中使用的AI动力的无人机(诸如包裹递送)以及AI动力的安全系统。
例如,用于自动或半自动车辆的汽车系统可以使用深度神经网络(“DNN”)用于各种功能,包括识别车道、物体、障碍物、行人以及甚至车辆的乘员。取决于它们的功能,车辆上的处理器执行这种DNN可能需要对错误(包括瞬时错误)的更大可恢复性以满足车辆的整体安全要求。由于故障-保护ECC设计比传统ECC设计更能对抗错误,因此在车辆的一个或更多个处理器、一个或更多个存储器结构和一个或更多个数据传输系统中使用故障-保护ECC设计替代传统ECC设计将更好地保护车辆中利用的数据。此外,可以将故障-保护ECC设计添加到车辆的一个或更多个处理器、一个或更多个存储器结构和一个或更多个数据传输系统中,以保护先前未受ECC保护的数据,从而提高车辆中此类数据的可恢复性。因此,在这些车辆中结合故障-保护ECC设计将提高数据的整体可靠性水平(包括适用于其DNN的数据),以使这些车辆能够满足某些安全要求,包括,例如ISO 26262标准的汽车安全完整性等级(ASIL)安全度量。此外,在上述其他基于AI和非基于AI的系统中合并故障-保护ECC设计将类似地提高这种系统中使用的数据的可靠性,并因此提高这种系统的整体的可恢复性。
并行处理架构
图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按照命令指定将解码的命令发送到PPU300的各种其他单元。例如,一些命令可以被发送到前端单元315。其他命令可以被发送到集线器330或PPU 300的其他单元,诸如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。换句话说,I/O单元305被配置为在PPU 300的各种逻辑单元之间和之中路由通信。
在一个实施例中,由主机处理器执行的程序在缓冲区中对命令流进行编码,该缓冲区向PPU 300提供工作量用于处理。工作量可以包括要由那些指令处理的许多指令和数据。缓冲区是存储器中可由主机处理器和PPU300两者访问(即,读/写)的区域。例如,I/O单元305可以被配置为经由通过互连302传输的存储器请求访问连接到互连302的系统存储器中的缓冲区。在一个实施例中,主机处理器将命令流写入缓冲区,然后向PPU 300发送指向命令流开始的指针。前端单元315接收指向一个或更多个命令流的指针。前端单元315管理一个或更多个流,从流读取命令并将命令转发到PPU 300的各个单元。
前端单元315耦合到调度器单元320,其配置各种GPC 350以处理由一个或更多个流定义的任务。调度器单元320被配置为跟踪与由调度器单元320管理的各种任务相关的状态信息。状态可以指示任务被指派给哪个GPC 350,该任务是活动的还是不活动的,与该任务相关联的优先级等等。调度器单元320管理一个或更多个GPC 350上的多个任务的执行。
调度器单元320耦合到工作分配单元325,其被配置为分派任务以在GPC 350上执行。工作分配单元325可以跟踪从调度器单元320接收到的多个调度任务。在一个实施例中,工作分配单元325为每个GPC 350管理待处理(pending)任务池和活动任务池。待处理任务池可以包括多个时隙(例如,32个时隙),其包含被指派为由特定GPC 350处理的任务。活动任务池可以包括多个时隙(例如,4个时隙),用于正在由GPC 350主动处理的任务。当GPC350完成任务的执行时,该任务从GPC 350的活动任务池中逐出,并且来自待处理任务池的其他任务之一被选择和调度以在GPC 350上执行。如果GPC 350上的活动任务已经空闲,例如在等待数据依赖性被解决时,那么活动任务可以从GPC 350中逐出并返回到待处理任务池,而待处理任务池中的另一个任务被选择并调度以在GPC 350上执行。
工作分配单元325经由XBar(交叉开关)370与一个或更多个GPC 350通信。XBar370是将PPU 300的许多单元耦合到PPU 300的其他单元的互连网络。例如,XBar 370可以被配置为将工作分配单元325耦合到特定的GPC 350。虽然没有明确示出,但PPU 300的一个或更多个其他单元也可以经由集线器330连接到XBar 370。
任务由调度器单元320管理并由工作分配单元325分派给GPC 350。GPC 350被配置为处理任务并生成结果。结果可以由GPC 350内的其他任务消耗,经由XBar 370路由到不同的GPC 350,或者存储在存储器304中。结果可以经由分区单元380写入存储器304,分区单元380实现用于从存储器304读取数据和向存储器304写入数据的存储器接口。结果可以通过NVLink310发送到另一个PPU 304或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所示,每个GPC 350包括用于处理任务的多个硬件单元。在一个实施例中,每个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(单指令、多数据)体系架构,其中线程组(即,warp)中的每个线程被配置为基于相同的指令集来处理不同的数据集。线程组中的所有线程都执行相同的指令。在另一个实施例中,SM 440实现SIMT(单指令、多线程)体系架构,其中线程组中的每个线程被配置为基于相同的指令集处理不同的数据集,但是其中线程组中的各个线程在执行期间被允许发散。在一个实施例中,为每个线程束维护程序计数器、调用栈和执行状态,当线程束内的线程发散时,使线程束和线程束中的串行执行之间的并发成为可能。在另一个实施例中,为每个单独的线程维护程序计数器、调用栈和执行状态,从而在线程束内和线程束之间的所有线程之间实现相等的并发。当为每个单独的线程维护执行状态时,执行相同指令的线程可以被收敛并且并行执行以获得最大效率。下面结合图5A更详细地描述SM440。
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个存储器设备304,诸如高带宽存储器堆叠或图形双数据速率版本5的同步动态随机存取存储器或其他类型的持久存储器。
在一个实施例中,存储器接口470实现HBM2存储器接口,并且Y等于U的一半。在一个实施例中,HBM2存储器堆叠位于与PPU 300相同的物理封装上,提供与常规GDDR5 SDRAM系统相比显著的功率高和面积节约。在一个实施例中,每个HBM2堆叠包括四个存储器裸晶并且Y等于4,其中HBM2堆叠包括每个裸晶两个128位通道,总共8个通道和1024位的数据总线宽度。
在一个实施例中,存储器304支持单错校正双错检测(SECDED)纠错码(ECC)以保护数据。对于对数据损毁敏感的计算机应用程序,ECC提供了更高的可靠性。在大型集群计算环境中,可靠性尤其重要,其中PPU300处理非常大的数据集和/或长时间运行应用程序。
在一个实施例中,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的数量可以不同于GPC350的数量,并且因此每个ROP单元450可以耦合到每个GPC 350。ROP单元450跟踪从不同GPC 350接收到的分组并且确定由ROP单元450生成的结果通过Xbar 370被路由到哪个GPC 350。尽管ROP单元450包括在图4B中的存储器分区单元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高速缓存470中。纹理单元实现纹理操作,诸如使用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的存储容量并且在从SM440到分区单元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、存储器204、精简指令集计算机(RISC)CPU、存储器管理单元(MMU)、数字-模拟转换器(DAC)等)一起被包括在片上系统(SoC)上。
在一个实施例中,PPU 300可以被包括在图形卡上,图形卡包括一个或更多个存储器设备304。图形卡可以被配置为与台式计算机的主板上的PCIe插槽接口。在又一个实施例中,PPU 300可以是包含在主板的芯片集中的集成图形处理单元(iGPU)或并行处理器。
示例性计算系统
具有多个GPU和CPU的系统被用于各种行业,因为开发者在应用(诸如人工智能计算)中暴露和利用更多的并行性。在数据中心、研究机构和超级计算机中部署具有数十至数千个计算节点的高性能GPU加速系统,以解决更大的问题。随着高性能系统内处理设备数量的增加,通信和数据传输机制需要扩展以支持该增加带宽。
图5B是根据实施例的使用图3的PPU 300实现的处理系统500的概念图。示例性系统565可以被配置为实现图1A中所示的方法100。处理系统500包括CPU 530、交换机510和多个PPU 300中的每一个以及相应的存储器304。NVLink 310提供每个PPU 300之间的高速通信链路。尽管图5B中示出了特定数量的NVLink 310和互连302连接,但是连接到每个PPU300和CPU 530的连接的数量可以改变。交换机510在互连302和CPU 530之间接口。PPU 300、存储器304和NVLink 310可以位于单个半导体平台上以形成并行处理模块525。在一个实施例中,交换机510支持两个或更多个在各种不同连接和/或链路之间接口的协议。
在另一个实施例(未示出)中,NVLink 310在每个PPU 300和CPU 530之间提供一个或更多个高速通信链路,并且交换机510在互连302和每个PPU 300之间进行接口。PPU 300、存储器304和互连302可以位于单个半导体平台上以形成并行处理模块525。在又一个实施例(未示出)中,互连302在每个PPU 300和CPU 530之间提供一个或更多个通信链路,并且交换机510使用NVLink 310在每个PPU 300之间进行接口,以在PPU 300之间提供一个或更多个高速通信链路。在另一个实施例(未示出)中,NVLink 310在PPU300和CPU 530之间通过交换机510提供一个或更多个高速通信链路。在又一个实施例(未示出)中,互连302在每个PPU300之间直接提供一个或更多个通信链路。可以使用与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可以被配置为实现图1A中所示的方法100。
如图所示,提供系统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调用,其请求要被渲染和显示的模型数据。驱动程序内核读取模型数据并将命令写入一个或更多个流以执行操作来处理模型数据。这些命令可以参考要在PPU300的SM440上实现的不同着色程序,包括顶点着色、外壳着色、域着色、几何着色和像素着色中的一个或更多个。例如,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 GDA0003397305490000261
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上启动操作来执行操作。在一个实施例中,设备驱动程序被配置为利用PPU300的硬件来实现图形处理管线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)模型包括许多连接的感知器(例如节点)的多个层,其可以用大量输入数据来训练以快速高精度地解决复杂问题。在一个示例中,DLL模型的第一层将汽车的输入图像分解为各个部分,并查找基本图案(诸如线条和角)。第二层组装线条以寻找更高级别的图案,诸如轮子、挡风玻璃和镜子。下一层识别运载工具类型,最后几层为输入图像生成标签,识别特定汽车品牌的型号。
一旦DNN被训练,DNN就可以被部署并用于在被称为推理(inference)的过程中识别和分类对象或图案。推理的示例(DNN从给定输入中提取有用信息的过程)包括识别沉积在ATM机中的支票存款上的手写数字、识别照片中朋友的图像、向超过五千万用户提供电影推荐、识别和分类不同类型的汽车、行人和无人驾驶汽车中的道路危险、或实时翻译人类言语。
在训练期间,数据在前向传播阶段流过DNN,直到产生预测为止,其指示对应于输入的标签。如果神经网络没有正确标记输入,则分析正确标签和预测标签之间的误差,并且在后向传播阶段期间针对每个特征调整权重,直到DNN正确标记该输入和训练数据集中的其他输入为止。训练复杂的神经网络需要大量的并行计算性能,包括由PPU 300支持的浮点乘法和加法。与训练相比,推理的计算密集程度比训练更低,是一个延迟敏感过程,其中经训练的神经网络应用于它以前没有见过的新的输入,以进行图像分类、翻译语音以及通常推理新的信息。
神经网络严重依赖于矩阵数学运算,并且复杂的多层网络需要大量的浮点性能和带宽来提高效率和速度。采用数千个处理核心,针对矩阵数学运算进行了优化,并传送数十到数百TFLOPS的性能,PPU 300是能够传送基于深度神经网络的人工智能和机器学习应用所需性能的计算平台。

Claims (28)

1.一种方法,包括:
使用纠错码(ECC)逻辑访问为数据创建的代码,其中所述代码存储在第一存储器中,所述数据存储在第二存储器中;
检测由所述ECC逻辑中的错误引起的代码中的错误;
确定所述代码中的错误是否是可校正的;
响应于确定所述代码中的错误是可校正的:
校正所述代码中的错误以形成经校正的代码,
从所述第二存储器中检索所述数据,以及
使用所述经校正的代码验证所检索的数据。
2.如权利要求1所述的方法,其中,所述ECC逻辑包括编码器和解码器。
3.如权利要求2所述的方法,其中,所述代码中的错误是由所述编码器中的错误引起的。
4.如权利要求2所述的方法,其中,所述代码中的错误是由所述解码器中的错误引起的。
5.如权利要求1所述的方法,其中,创建所述代码用于向所述数据提供冗余。
6.如权利要求1所述的方法,其中所述代码是以下之一:单错误检测(SED)、单错误校正(SEC)或单错误校正-双错误检测(SEC-DED)。
7.如权利要求1所述的方法,其中所述ECC逻辑中的错误是单个固定故障。
8.如权利要求1所述的方法,其中所述ECC逻辑是SEC,并且所述ECC逻辑的编码器被约束以避免用于形成所述代码的校验位输出的公共子表达式的任何共享。
9.如权利要求8所述的方法,其中当所述代码中的错误是由所述编码器引起的时,所述错误将最多损坏所述校验位输出中的单一一个,所述校验位输出能够由所述ECC逻辑的解码器校正。
10.如权利要求1所述的方法,其中所述ECC逻辑是SEC-DED,并且所述ECC逻辑的编码器被约束以避免用于形成所述代码的校验位输出的两个以上的公共子表达式的共享。
11.如权利要求10所述的方法,其中当所述代码中的错误是由所述编码器引起的时,所述错误将最多损坏所述校验位输出中的两个,所述校验位输出是以下中的任一个:
由所述ECC逻辑的解码器可校正的,或
被解码为由所述ECC逻辑的所述解码器不可校正的。
12.如权利要求1所述的方法,其中,所述ECC逻辑是SEC,并且所述ECC逻辑的解码器被约束以避免用于所述解码器的位输出的公共子表达式的任何共享。
13.如权利要求12所述的方法,其中当所述代码中的错误是由所述解码器引起的时,所述错误将最多损坏由所述ECC逻辑的所述解码器可校正的所述位输出中的单一一个。
14.如权利要求1所述的方法,其中,所述ECC逻辑是SEC-DED,并且所述ECC逻辑的解码器被约束以避免用于所述解码器的位输出的两个以上的公共子表达式的共享。
15.如权利要求14所述的方法,其中当所述代码中的错误是由所述解码器引起的时,所述错误将最多损坏所述位输出中的两个,所述位输出是以下中的任一个:
由所述ECC逻辑的解码器可校正的,或
被解码为由所述ECC逻辑的所述解码器不可校正的。
16.如权利要求1所述的方法,其中由所述ECC逻辑使用的算法被配置为选择最低奇数权重列,以最小化所述ECC逻辑中的公共子表达式的共享。
17.如权利要求1所述的方法,还包括:
响应于确定所述代码中的错误是不可校正的,指示所述代码中的错误是不可校正的。
18.一种系统,包括:
纠错码(ECC)电路,用于:
使用所述ECC电路访问为数据创建的代码,其中所述代码存储在第一存储器中,所述数据存储在第二存储器中;
检测由所述ECC电路中的错误引起的代码中的错误;
确定所述代码中的错误是否是可校正的;
响应于确定所述代码中的错误是可校正的:
校正所述代码中的错误以形成经校正的代码,
从所述第二存储器中检索所述数据,以及
使用所述经校正的代码验证所检索的数据。
19.如权利要求18所述的系统,其中所述ECC电路包括编码器和解码器。
20.如权利要求19所述的系统,其中所述ECC电路是SEC并且所述ECC电路的所述编码器被约束以避免用于形成所述代码的校验位输出的公共子表达式的任何共享,或者所述ECC电路是SEC-DED并且所述ECC电路的所述编码器被约束以避免用于形成所述代码的校验位输出的两个以上的公共子表达式的共享。
21.如权利要求19所述的系统,其中所述ECC电路是SEC并且所述ECC电路的所述解码器被约束以避免用于所述解码器的位输出的公共子表达式的任何共享,或者所述ECC电路是SEC-DED并且所述ECC电路的所述解码器被约束以避免用于所述解码器的位输出的两个以上的公共子表达式的共享。
22.如权利要求18所述的系统,所述ECC电路还用于:
响应于确定所述代码中的错误是不可校正的,指示所述代码中的错误是不可校正的。
23.一种用于自动或半自动车辆的汽车系统,包括:
存储器,其存储:
用于所述汽车系统的多个功能的深度神经网络,和
所述深度神经网络利用的数据;和
纠错码(ECC)电路,用于:
使用所述ECC电路访问为数据创建的代码,其中所述代码存储在所述存储器的第一部分中,所述数据存储在所述存储器的第二部分中;
检测由所述ECC电路中的错误引起的代码中的错误;
确定所述代码中的错误是否是可校正的;
响应于确定所述代码中的错误是可校正的:
校正所述代码中的错误以形成经校正的代码,
从所述存储器的所述第二部分中检索所述数据,以及
使用所述经校正的代码验证所检索的数据。
24.如权利要求23所述的汽车系统,其中所述ECC电路包括编码器和解码器。
25.如权利要求24所述的汽车系统,其中所述ECC电路是SEC并且所述ECC电路的所述编码器被约束以避免用于形成所述代码的校验位输出的公共子表达式的任何共享,或者所述ECC电路是SEC-DED并且所述ECC电路的所述编码器被约束以避免用于形成所述代码的校验位输出的两个以上的公共子表达式的共享。
26.如权利要求24所述的汽车系统,其中所述ECC电路是SEC并且所述ECC电路的所述解码器被约束以避免用于所述解码器的位输出的公共子表达式的任何共享,或者所述ECC电路是SEC-DED并且所述ECC电路的所述解码器被约束以避免用于所述解码器的位输出的两个以上的公共子表达式的共享。
27.如权利要求23所述的汽车系统,其中所述ECC电路用作根据ISO26262标准的汽车安全完整性等级(ASIL)安全度量的安全机制。
28.如权利要求23所述的汽车系统,所述ECC电路还用于:
响应于确定所述代码中的错误是不可校正的,指示所述代码中的错误是不可校正的。
CN201811149658.3A 2017-09-29 2018-09-29 防范在汽车系统中实现的纠错码(ecc)中的错误 Active CN109582484B (zh)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201762566067P 2017-09-29 2017-09-29
US62/566,067 2017-09-29
US16/137,002 US10908995B2 (en) 2017-09-29 2018-09-20 Securing against errors in an error correcting code (ECC) implemented in an automotive system
US16/137,002 2018-09-20

Publications (2)

Publication Number Publication Date
CN109582484A CN109582484A (zh) 2019-04-05
CN109582484B true CN109582484B (zh) 2022-02-08

Family

ID=65728207

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811149658.3A Active CN109582484B (zh) 2017-09-29 2018-09-29 防范在汽车系统中实现的纠错码(ecc)中的错误

Country Status (2)

Country Link
CN (1) CN109582484B (zh)
DE (1) DE102018123761A1 (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110688249B (zh) * 2019-09-20 2023-04-07 上海励驰半导体有限公司 一种纠错码电路的注错检测电路
US11592828B2 (en) * 2020-01-16 2023-02-28 Nvidia Corporation Using neural networks to perform fault detection in autonomous driving applications
DE112021007536T5 (de) * 2021-12-13 2024-03-07 Intel Corporation Systeminterne abschwächung unkorrigierbarer fehler basierend auf vertrauensfaktoren, basierend auf einer fehlerbewussten analyse
DE102022111126A1 (de) 2022-05-05 2023-11-09 Infineon Technologies Ag Datenverarbeitungsvorrichtung und verfahren zum prüfen der integrität eines speichers
CN117113435A (zh) * 2023-09-22 2023-11-24 国网江苏省电力有限公司扬州供电分公司 基于系统页表访问控制的细粒度完整性度量模型及方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101211667A (zh) * 2006-12-29 2008-07-02 三星电子株式会社 降低误纠概率的纠错电路和方法和包括该电路的存储设备
TW200910087A (en) * 2007-08-28 2009-03-01 Samsung Electronics Co Ltd Multi-channel memory system including error correction decoder architecture with efficient area utilization
CN102567134A (zh) * 2012-01-06 2012-07-11 威盛电子股份有限公司 存储器模块的错误检查与校正系统以及方法
TW201416849A (zh) * 2012-10-30 2014-05-01 Jmicron Technology Corp 錯誤檢查及校正方法以及相關錯誤檢查及校正電路
CN105308575A (zh) * 2013-08-06 2016-02-03 桑迪士克科技股份有限公司 用于错误校正码(ecc)错误处理的方法和装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102193682B1 (ko) * 2014-08-01 2020-12-21 삼성전자주식회사 선택적 ecc 기능을 갖는 반도체 메모리 장치

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101211667A (zh) * 2006-12-29 2008-07-02 三星电子株式会社 降低误纠概率的纠错电路和方法和包括该电路的存储设备
TW200910087A (en) * 2007-08-28 2009-03-01 Samsung Electronics Co Ltd Multi-channel memory system including error correction decoder architecture with efficient area utilization
CN102567134A (zh) * 2012-01-06 2012-07-11 威盛电子股份有限公司 存储器模块的错误检查与校正系统以及方法
TW201329697A (zh) * 2012-01-06 2013-07-16 Via Tech Inc 記憶體模組之錯誤檢查與校正系統以及方法
TW201416849A (zh) * 2012-10-30 2014-05-01 Jmicron Technology Corp 錯誤檢查及校正方法以及相關錯誤檢查及校正電路
CN105308575A (zh) * 2013-08-06 2016-02-03 桑迪士克科技股份有限公司 用于错误校正码(ecc)错误处理的方法和装置

Also Published As

Publication number Publication date
DE102018123761A1 (de) 2019-04-04
CN109582484A (zh) 2019-04-05

Similar Documents

Publication Publication Date Title
US11494265B2 (en) Securing against errors in an error correcting code (ECC) implemented in an automotive system
CN109582484B (zh) 防范在汽车系统中实现的纠错码(ecc)中的错误
US11188442B2 (en) Determining diagnostic coverage for memory using redundant execution
US11836597B2 (en) Detecting visual artifacts in image sequences using a neural network model
US11409597B2 (en) System and methods for hardware-software cooperative pipeline error detection
US11496773B2 (en) Using residual video data resulting from a compression of original video data to improve a decompression of the original video data
US11961001B2 (en) Parallel forward and backward propagation
US11379420B2 (en) Decompression techniques for processing compressed data suitable for artificial neural networks
US11494879B2 (en) Convolutional blind-spot architectures and bayesian image restoration
US20200210805A1 (en) Neural Network Generator
US20220269558A1 (en) System and methods for hardware-software cooperative pipeline error detection
CN110569019A (zh) 数值的随机修约
CN115202922A (zh) 用于压缩数据保护的打包的纠错码(ecc)
CN111191784A (zh) 转置的稀疏矩阵乘以稠密矩阵用于神经网络训练
US10979176B1 (en) Codebook to reduce error growth arising from channel errors
CN115039076A (zh) 无障碍和无围栏共享存储器同步
US11372548B2 (en) Techniques for accessing and utilizing compressed data and its state information
CN113822975A (zh) 用于对图像进行有效采样的技术
CN113808183A (zh) 使用扭曲的复合估计乘积积分
CN111221498A (zh) 动态方向舍入
US20240184670A1 (en) Alias-free tagged error correcting codes for machine memory operations
US11968040B2 (en) Graph neural network for channel decoding
US12008475B2 (en) Transposed sparse matrix multiply by dense matrix for neural network training

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