CN112783554A - 用于程序间数据交换的持久便签内存 - Google Patents

用于程序间数据交换的持久便签内存 Download PDF

Info

Publication number
CN112783554A
CN112783554A CN202010322855.1A CN202010322855A CN112783554A CN 112783554 A CN112783554 A CN 112783554A CN 202010322855 A CN202010322855 A CN 202010322855A CN 112783554 A CN112783554 A CN 112783554A
Authority
CN
China
Prior art keywords
note
core
data
memory
processing unit
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
CN202010322855.1A
Other languages
English (en)
Inventor
R·达什
J·H·肖凯特
M·L·米尔顿
S·琼斯
C·F·兰姆
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 CN112783554A publication Critical patent/CN112783554A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/22Microcontrol or microprogram arrangements
    • G06F9/24Loading of the microprogram
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/167Interprocessor communication using a common memory, e.g. mailbox
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5022Mechanisms to release resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/543Local

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本发明公开了一种用于程序间数据交换的持久便签内存。公开了用于共享在具有多个处理单元的系统上执行的内核(每个指令集)之间的数据交换的技术。在一个实施例中,每个处理单元包括片上便签内存,其可由在处理单元上执行的内核访问。例如,可以分配和配置所有或部分便签内存,以便便签内存可以被多个内核并行地、一个或更多个内核串行地或两者的组合访问。

Description

用于程序间数据交换的持久便签内存
技术领域
本公开涉及在程序之间共享内存,更具体地,涉及用于程序间数据交换的持久便签(scratchpad)内存。
背景技术
通常,片上便签内存(例如,16KB、32KB或64KB大小)的数量从便签内存池中分配(allocate),并指派(assign)给一组一个或更多个执行上下文(“SEC”)(例如,执行上下文是线程或进程),这些执行上下文以串行和/或并行方式执行内核,其中内核是指令集,诸如程序。在一个示例中,一组一个或更多个执行上下文是协作线程阵列(CTA)。分配给SEC的便签内存是SEC私有的,并且一旦SEC完成内核执行,存储在便签内存中的数据就不是持久的。此外,便签内存没有自动备份内存。因此,在常规系统中,存储在便签内存中的数据通过让执行一个内核的每个SEC显式地(explicitly)将数据从其分配的便签复制到全局内存以及执行另一内核的每个SEC显式地从全局内存中检索数据,在不同的内核之间进行交换。
要到达全局内存(例如DRAM或高速缓存),通常要遍历高速缓存的内存层次结构(例如L1、L2等),以便通过一个或更多个级别的高速缓存传输数据。与访问便签内存的延迟相比,通过全局内存交换数据的速度至少慢一个数量级。此外,由于便签内存是每个SEC私有的,因此执行同一内核的不同SEC还必须通过全局内存交换数据。因此,存在相比传统方法允许SEC和/或内核更快地交换数据的需求。
发明内容
快速片上内存(例如,便签)可以由一个或更多个线程或进程在同一处理单元上执行的不同内核之间共享,其中每个处理单元都有自己的私有便签内存池。在以下说明书的上下文中,线程(例如执行线程)是要执行的指令集的实例化。内核可由一个或更多个SEC执行。快速片上内存也可以在同一处理单元上执行同一内核的不同SEC之间共享。与通过包含一个或更多个级别的高速缓存的内存层次结构将数据传输到全局内存相比,共享便签内存可减少在内核之间或不同SEC之间传输数据的延迟。与通过内存层次结构进行同步相比,共享便签内存还可以减少不同SEC和不同内核之间同步操作的延迟。
本发明公开了用于多个处理单元的方法和系统,多个处理单元包括第一处理单元,第一处理单元包括第一便签和第一寄存器文件,其中第一处理单元能够执行第一内核和第二内核。多个处理单元还包括第二处理单元,第二处理单元包括第二便签和第二寄存器文件,其中第二处理单元能够执行第三内核。调度器逻辑耦合到多个处理单元,其中调度器电路指派要由多个处理单元执行的内核,以及内存耦合到多个处理单元。配置并行处理系统以便将第一数据存储到第一便签或第二便签以使第一数据不会存储在内存中,其中第一便签配置为允许这种第一内核将第二数据存储到第一便签,以允许这种第二内核从第一便签加载第二数据,并禁止这种第三内核从第一便签存储或加载第二数据。第二便签配置为允许这种第三内核将第三数据存储到第二便签,并禁止这种第一内核和第二内核从第二便签加载第三数据。
附图说明
图1A是根据一个实施例的说明执行内核A、B和C的空间管线的概念图。
图1B是根据一个实施例的说明执行内核A、B和C的时间管线的概念图。
图2示出了根据一个实施例的多个内核通过共享内存和持久内存交换数据的方法的流程图。
图3示出了根据一个实施例的并行处理单元。
图4A示出了根据一个实施例的图3的并行处理单元中的通用处理集群。
图4B示出了根据一个实施例的图3的并行处理单元的内存分区单元。
图5A示出了根据一个实施例的图4A的流式多处理器。
图5B是根据一个实施例的示出了执行内核A、B和C的处理管线的概念图。
图5C示出了根据一个实施例的用于配置处理单元中的共享便签内存池,以使SEC能够通过共享内存和持久内存交换数据的方法的流程图。
图6A是根据一个实施例的使用图3的PPU实现的处理系统的概念图。
图6B示出了可以实现前面各种实施例的各种体系架构和/或功能的示例性系统。
具体实施方式
高度并行处理器(诸如图形处理单元(GPU))是一种能够并行执行非常大量线程的计算设备。在以下说明书的上下文中,线程是进程或执行上下文。在一个实施例中,高度并行处理器作为主中央处理单元(CPU)或主机的协处理器操作:换句话说,在主机上运行的应用程序的数据并行、计算密集型部分被卸载到协处理器设备上。
更准确地说,多次执行但独立于不同数据的一部分应用程序可以隔离到内核函数中,该内核函数在高度并行处理器上执行以作为许多不同的线程。为此,这样的函数被编译成并行线程执行(PTX)指令集,并在安装时将得到的内核转化成目标高度并行处理器指令集。
执行内核的各批线程被组织成SEC网格(例如,CTA)。在一个实施例中,SEC实现
Figure BDA0002462096590000031
(计算统一设备体系架构)线程块,其中
Figure BDA0002462096590000032
是并行计算平台和编程模型。PTX编程模型是显式并行的:PTX程序指定并行线程阵列的给定线程的执行。
SEC中的线程同时执行同一内核,并可以相互通信。为了协调SEC内线程的通信,同步点被指定为线程等待的地方,直到SEC中的所有线程已到达特定指令。每个线程在SEC中都有唯一的线程标识符。程序使用数据并行分解来跨SEC的线程对输入、工作和结果进行分区。
每个SEC线程都使用其线程标识符来确定其指派的角色、指派特定的输入和输出位置、计算地址以及选择要执行的工作。在一个实施例中,线程标识符是三元素向量tid(包含元素tid.x、tid.y和tid.z),其指定线程在一维、二维或三维SEC中的位置。在一个实施例中,每个线程标识符组件的范围从零到相应SEC维度中的线程ID数目。在一个实施例中,每个SEC都有由三元素向量ntid(元素ntid.x、ntid.y和ntid.z)指定的一维、二维或三维形状。在一个实施例中,向量ntid指定每个SEC维度中的线程数。
SEC中的线程以SIMT(单指令、多线程)方式在称为线程束(warp)的组中执行。线程束是单个SEC中的线程的最大子集,因此线程同时执行相同的指令。线程束内的线程按顺序编号。线程束大小是依赖于机器的常量。在一个实施例中,线程束有32个线程。某些应用程序能够通过了解线程束大小来最大化性能,因此PTX包括运行时立即常量、WARP_SZ,其可用于允许立即操作数的任何指令。
存在SEC可以包含的最大线程数,其受处理器逻辑的限制。但是,执行同一内核的SEC可以一起被分批为独立执行的SEC网格,以便在单个内核调用中启动的总线程数非常大。但是,在传统的高度并行处理器中,将SEC组织为网格是以线程通信和同步减少为代价的,因为不同SEC中的线程无法相互通信和同步。多个SEC可以并发和并行执行,也可以按顺序(连续)执行,这取决于平台。
每个SEC在SEC网格中都有唯一的SEC标识符(ctaid)。每个SEC网格都具有由参数nctaid指定的一维、二维或三维形状。每个网格还具有唯一的时间网格标识符(gridid)。在一个实施例中,线程可以通过预定义的只读特殊寄存器%tid、%ntid、%ctaid、%nctaid和%gridid读取和使用标识符和参数值。
主机向高度并行的处理设备发出一系列内核调用。每个内核都作为组织为SEC网格的一批线程执行。在由高度并行处理器执行期间,基于管线的编程模型使得能够控制不同内核之间的并发和依赖。在一个实施例中,高度并行处理器包括多个处理单元,其中每个处理单元都有专用的私有便签内存池。基于管线的编程模型允许由单个处理单元(串行或并行)正在执行的不同内核共享从单个处理单元的私有便签内存池分配的便签内存。
图1A是根据一个实施例的说明执行内核A、B和C的空间管线100的概念图。高度并行处理器105包括多个处理单元110,其中只有一个在图1A中示出。高度并行处理器105通过包含一个或更多个内存地址映射、转换和/或高速缓存单元(未示出)的内存层次结构耦合至全局内存120。与通过内存层次结构从/向全局内存120加载和存储数据不同,将数据传输到处理单元110中的共享便签内存115和/或从其传输是快速的,无需在不同级别的内存层次结构之间复制或移动数据,提供了低延迟数据传输。单个共享便签内存115从处理单元110中的私有便签内存池分配。
基于管线的编程模型指定内核A、B和C并发执行,当内核A、B和C被执行时,通过单个共享便签内存115交换数据。每个内核基于内核所需的处理资源由一个或更多个SEC指派。例如,内核A产生数据并将其存储到共享便签内存115,该数据从共享便签内存115加载并由内核B和/或内核C消耗。在一个实施例中,在内核B和/或内核C加载由内核A产生和存储的数据之前,内核B和/或内核C的执行与内核A同步。
内核B可以处理由内核A产生的数据,这些数据从共享便签内存115加载,并将经处理的数据存储回共享便签内存115。然后,内核C和/或内核A可以从共享便签内存115加载经处理的数据,以便进一步处理。最后,由内核C存储在共享便签内存115的进一步处理的数据可由内核A和/或内核B从共享便签内存115加载。可以指定空间管线100的示例应用程序包括用于联网的高度并行数据包处理。当内核A、B和C的执行完成时,可以解除共享便签内存115的分配,并重新指派一个或更多个SEC。
除了支持不同内核之间的低延迟数据交换外,共享便签内存115还支持针对在每个处理单元110中执行的SEC,指派给同一内核的不同SEC之间的低延迟数据交换。示例应用程序通过同一处理单元110中的SEC之间的低延迟数据交换可以提高性能,其包括神经网络的池化操作和/或规约操作。
现在将阐述有关可根据用户的需求实现上述框架的各种可选体系架构和特征的更多说明性信息。应当特别注意,下列信息是为说明目的而阐述的,不应被解释为以任何方式进行限制。以下任何特征都可以可选地合并或不排除所描述的其他特征。
图1B是根据一个实施例的说明执行内核A、B和C的时间管线130的概念图。与图1A相比,处理单元110中的共享便签内存115替换为共享持久便签内存125。与共享便签内存115一样,共享持久便签内存125还提供内核之间和/或SEC之间的低延迟数据传输,而无需在不同级别的内存层次结构之间复制或移动数据。单个共享持久便签内存125从处理单元110中的私有便签内存池分配。
基于管线的编程模型指定内核A、B和C串行执行,当内核A、B和C被执行时,通过单个共享持久便签内存125交换数据。基于内核所需的处理资源,每个内核被指派给一个或更多个SEC。例如,内核A产生数据并将其存储到共享持久便签内存125。然后,从共享持久便签内存125加载数据,并由内核B消耗。内核A存储在共享持久便签内存125中的数据,即使在内核A的执行完成后仍保留,因为内核B和C尚未完成执行。因此,共享内存不仅共享而且是持久的。内核A的执行完成后,指派给内核A的一个或更多个SEC可以重新指派。
在处理单元110上执行的任何SEC都可以访问共享持久便签内存125。但是,在一个实施例中,在高度并行处理器105内的第二处理单元110上执行的SEC无法访问处理单元110中的共享持久便签内存125。
内核A的执行完成后,内核B处理内核A产生的数据,并将经处理的数据存储到共享持久便签内存125。内核B存储在共享持久便签内存125中的数据,即使在内核B的执行完成后仍保留,因为内核C尚未完成执行。但是,当内核B的执行完成后,指派给内核B的一个或更更多个SEC可以重新指派。
由内核B存储的经处理的数据可以由内核C从共享持久便签内存125加载,以便进一步处理。完成内核C的执行后,可以解除共享持久便签内存125的分配,并且指派给内核C的一个或更多个SEC可以重新指派。可以指定时间管线130的示例应用程序包括深度学习推理,其包括按顺序执行的多个高度并行操作。
图2示出了根据一个实施例的多个内核通过共享持久内存交换数据的方法200的流程图。在一个实施例中,方法200可用于分别通过共享便签内存115和共享持久便签内存125交换数据,如图1A和图1B所示。
在步骤205,处理单元110接收多个内核,以便根据空间管线(诸如空间管线100)执行。在一个实施例中,空间管线100可以使用基于图表的定义来表示,以指示并发执行约束和依赖关系。这种基于图表的定义可以转换为包括空间和/或时间管线的一个或更多个内核。
在步骤210,处理单元确定为每个内核指定的处理资源。处理资源可包括一个或更多个函数或操作、寄存器、每线程私有内存和大量共享内存。在常规处理单元中,指派给同一SEC的任何内核的处理资源相等。相反,处理单元110可以配置为将不同数量的处理资源分配给指派给同一SEC的不同内核。
在步骤215,为每个内核分配处理资源,并且指派SEC以满足空间和/或时间管线定义的数据交换约束。在一个实施例中,处理单元110获得为每个内核指定的共享内存资源的大小。在一个实施例中,分配给一个或更多个内核的共享便签内存115的大小等于为一个或更多个内核指定的最大共享内存资源。在一个实施例中,分配给一个或更多个内核的共享便签内存115的大小等于为一个或更多个内核指定的共享内存资源的总和。在步骤220中,启动指派给内核的SEC。
在步骤225时,处理单元110确定内核的执行已完成,然后在步骤230中解除处理资源的分配,并且SEC可以被指派给其他内核。在一个实施例中,在共享便签内存115的所有内核的执行完成时分配给一个或更多个内核的共享便签内存115被解除分配。
处理单元110可以并发处理的SEC的数量取决于每个线程所需的寄存器数以及给定内核所需的每SEC共享便签内存大小,因为处理单元110中的处理资源(例如,寄存器和私有便签内存池)在指派给内核的所有线程之间拆分。如果每个处理单元110没有足够的寄存器和/或共享内存可用以处理至少一个SEC,内核将无法启动。在一个实施例中,便签内存可被分配各种大小(例如,16KB、32KB、64KB等)。
尽管方法200在处理器的上下文中描述,但方法200也可以由程序、自定义逻辑或电路执行,也可以由自定义电路和程序的组合执行。例如,方法200可由GPU或CPU或任何能够提供共享便签内存的逻辑设备或处理器执行。此外,本领域普通技术人员将了解,执行方法200的任何系统都落入本公开实施例的范围和精神内。
除了共享便签内存115和/或共享持久便签内存125外,每个线程还具有私有本地内存。通常,单个SEC中包含的线程共享从处理单元110中的私有便签内存池分配的部分内存。通常,从私有便签内存池分配的部分内存在SEC完成执行时解除分配。重要的是,该部分内存对其他SEC中的线程不可见,并且由于该部分内存不是持久性的,因此无法在按顺序执行的不同SEC之间共享。因此,在常规内存层次结构中,不同SEC中的线程使用高延迟路径通过存储和加载操作提供的全局内存120交换数据。
在一个实施例中,所有线程都可以访问额外的内存空间:常量、纹理和表面内存空间。常量内存和纹理内存是只读的;但是,表面内存是可读的和可写入的。全局内存120、常量内存、纹理内存和表面内存空间针对不同的内存使用情况进行了优化。例如,纹理内存提供不同的寻址模式以及特定数据格式的数据过滤。需要注意的是,纹理内存和表面内存是高速缓存,并且在同一内核调用中,高速缓存与全局内存写入和表面内存写入并不保持一致,因此,在同一内核调用中对经由全局写入或表面写入已经写入的地址的任何纹理提取或表面读取都返回未定义的数据。换句话说,线程只有在内存位置已由以前的内核调用或内存复制更新时,才能安全地读取某些纹理内存位置或表面内存位置,但如果内存位置之前已经由来自同一内核调用的同一线程或另一个线程更新,则不能安全地读取。
共享便签内存115和共享持久便签内存125不是高速缓存的。存储在共享便签内存115和共享持久便签内存125中的数据并不移动或复制到后备存储。从线程的角度来看,访问共享便签内存115和共享持久便签内存125类似于访问全局内存120,但速度要快得多。
在一个实施例中,高度并行处理器105的体系架构围绕可扩展的处理单元110阵列构建,其中每个处理单元110是多线程流式多处理器(SM)。当主机程序调用内核网格时,网格的SEC被枚举(enumerate)并分发到具有可用执行容量的处理单元110。SEC的线程在一个处理单元110上并发执行。当SEC终止时,将在空出的处理单元110上启动新的块。
处理单元110包括多个标量处理器(SP)核心、多线程指令单元和片上私有便签内存池。处理单元110在硬件中创建、管理和执行并发线程,并且没有调度开销。它实现了单指令障碍(barrier)同步。快速障碍同步以及轻量级线程创建和零开销线程调度可有效地支持非常细粒度的并行性,例如,通过为每个数据元素(如图像中的像素、体中的体素、基于网格的计算中的单元)指派一个线程,允许对问题进行低粒度分解。
为了管理运行若干不同程序的数百个线程,处理单元110使用称为SIMT(单指令、多线程)的体系架构。处理单元110将每个线程映射到一个标量处理器核心,每个标量线程使用自己的指令地址和寄存器状态独立执行。多处理器调度单元创建、管理、调度和执行被称为线程束(此术语源自编织(weaving),这是第一并行线程技术)的并行线程组中的线程。组成SIMT线程束的各个线程在同一程序地址处一起启动,但除此之外可以自由分支和独立执行。
当向特定处理单元110给定一个或更多个线程块以执行时,处理单元110将线程块拆分为由调度器单元调度的线程束。线程块拆分为线程束的方式始终相同;每个线程束包含连续的线程,线程ID递增,第一线程束包含线程0。
在每个指令发出时间,调度器单元选择准备好执行的线程束,并发出下一个指令给线程束的活动线程。线程束一次执行一个公共指令,因此当线程束的所有线程都同意它们的执行路径时,可实现完全效率。如果线程束的线程经由依赖于数据的条件分支发散,则线程束将串行执行所获取的每个分支路径,并禁用不在该路径上的线程,当所有路径都完成时,线程将收敛回到相同的执行路径。分支发散仅在线程束内发生;无论线程束是执行公共代码路径还是执行不相交的代码路径,都独立执行不同的线程束。
SIMT架构类似于SIMD(单指令、多数据)向量组织,因为单个指令控制多个处理元素。关键区别是SIMD向量组织向软件公开SIMD宽度,而SIMT指令指定单个线程的执行和分支行为。与SIMD向量机相比,SIMT使程序员能够为独立的标量线程编写线程级并行代码,以及为协调线程编写数据并行代码。为了正确的目的,程序员基本上可以忽略SIMT行为;但是,注意到代码很少需要线程束中的线程发散,可以实现性能的大幅提升。实际上,这类似于传统代码中高速缓存行的作用:在设计正确性时可以安全地忽略高速缓存行大小,但在设计最佳性能时必须考虑代码结构。另一方面,向量体系架构要求软件将负载合并到向量中并手动管理发散。SIMT架构的实施例将在下面详细介绍。
并行处理架构
图3示出了根据一个实施例的并行处理单元(PPU)300。在一个实施例中,PPU 300是在一个或更多个集成电路器件上实现的多线程处理器。在一个实施例中,高度并行处理器105是PPU 300。PPU 300是延迟隐藏体系架构,其被设计为并行处理许多线程。在一个实施例中,PPU 300是图形处理单元(GPU),配置为实现图形渲染管线,以用于处理三维(3D)图形数据,以便生成二维(2D)图像数据以在诸如液晶显示器(LCD)设备之类的显示设备上显示。在其他实施例中,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。在一个实施例中,本地内存304是全局内存120。在一个实施例中,本地内存可包括多个动态随机存取存储器(DRAM)器件。DRAM器件可以配置为高带宽内存(HBM)子系统,每个设备中堆叠多个DRAM管芯。
NVLink 310互连使系统能够扩展并包括与一个或更多个CPU相结合的一个或更多个PPU 300,支持PPU 300、CPU以及CPU主控之间的高速缓存一致性。数据和/或命令可由NVLink 310通过集线器330发送到PPU 300的其他单元或从其发送,如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。NVLink 310结合图5B详细描述。
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通信。XBar 370是将PPU300的许多单元耦合到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个相关线程。
图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提取与顶点相关联的顶点属性。相反,与分派单元515相关联的数据包可以被发送到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个内存设备304,诸如高带宽内存堆叠或图形双数据速率版本5的同步动态随机存取内存或其他类型的持久存储器。
在一个实施例中,内存接口470实现HBMx内存接口以及Y等于U的一半。在一个实施例中,内存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的一部分。然后可以在GPC350内的各个单元中实现较低级别的高速缓存。例如,每个SM 440可以实现一级(L1)高速缓存。L1高速缓存是专用于特定SM 440的私有内存。特定SM 440内的L1高速缓存可以由在SM440上执行的任一SEC访问。来自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跟踪从不同GPC350接收到的数据包并且确定由ROP单元450生成的结果通过Xbar 370被路由到哪个GPC350。尽管在图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、便签内存池525和L1高速缓存570。共享便签内存115和/或共享持久便签内存125从便签内存525分配。
如上所述,工作分配单元325分派任务以用于在PPU 300的GPC 350上执行。任务被分配给GPC 350内的特定DPC 420,如果任务与分派单元515或内核相关联,则任务可以分配给SM 440。调度器单元510从工作分配单元325接收任务,并管理被指派给SM 440的一个或更多个线程块的指令调度。调度器单元510调度包括在SEC中的线程块,作为并行线程的线程束执行,其中每个线程块被分配至少一个线程束。在一个实施例中,每个线程束执行32个线程。调度器单元510可以管理多个不同的线程块,并将线程束分配给不同的线程块,然后在每个时钟周期期间将指令从多个不同的SEC分派到各个功能单元(例如,核心550、SFU552和LSU 554)。
SEC提供编程模型来组织通信线程组,其允许开发人员表达线程通信的粒度,从而使表达更丰富、并行分解更高效。协作启动API支持线程块之间的同步,以便执行并行算法。常规的编程模型为同步协作线程提供了单个简单构造:跨线程块的所有线程的障碍(例如,syncthreads()函数)。但是,程序员通常希望以小于线程块粒度的粒度定义线程组,并在定义的组中进行同步,以便以集体组范围函数接口的形式实现更高的性能、设计灵活性和软件重用。
SEC使程序员能够以子块(例如,小到单个线程)粒度和多块粒度显式地定义线程组,以及在协作组中的线程上执行集体操作(诸如同步)。编程模型支持跨软件边界的干净组合,以便库和实用程序函数可以在其本地上下文中安全地同步,而无需对收敛做出假设。SEC基元支持协作并行性的新模式,包括生产者-消费者并行性、机会并行性以及整个SEC网格上的全局同步。
当对内核进行注释以指示不同内核之间的并发或不同内核之间的依赖关系时,为被指派为执行内核的SEC相应地分配共享便签内存115或共享持久便签内存125。类似地,当对单个内核进行注释以指示并发性和/或依赖关系被指派给多个SEC时,为被指派为执行内核的多个SEC相应地分配共享便签内存115或共享持久便签内存125。
当交换数据的两个内核被指派两个或更多个处理单元110中的多个SEC时,则第一处理单元110中的SEC无法通过第一或第二处理单元110中的共享便签内存与第二处理单元110的SEC交换数据。因此,内核可以以切片方式指派给SEC,以便指派给交换数据的不同内核的线程在同一处理单元110中执行。例如,假设四个SEC在每个处理单元110中执行,则在第一处理单元110执行的第一对SEC被指派给第一内核,而在第一处理单元110中执行的剩余的第二对SEC则被指派给第二内核。执行第一内核的第一对SEC能够与执行第二内核的第二对SEC交换数据。
分派单元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个张量核心。
张量核心被配置为执行矩阵运算,在一个实施例中,一个或更多个张量核心被包括在核心550中。特别是,张量核心被配置为执行深度学习矩阵算术,例如用于神经网络训练和推理的卷积运算。在一个实施例中,每个张量核心在4x4矩阵上运算,并执行矩阵乘法和累加运算D=A×B+C,其中A、B、C和D为4x4矩阵。
在一个实施例中,矩阵乘法输入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,其实现至/来自便签内存525和L1高速缓存570和寄存器文件520的加载和存储操作。每个SM 440包括将每个功能单元连接到寄存器文件520以及将LSU 554连接到寄存器文件520、便签内存525和L1高速缓存570的互连网络580。在一个实施例中,互连网络580是交叉开关,其可以被配置为将任何功能单元连接到寄存器文件520中的任何寄存器,以及将LSU 554连接到寄存器文件和便签内存525和/或L1高速缓存570中的内存位置。
L1高速缓存570是片上内存的单独阵列,其允许数据存储和SM 440与图元引擎435之间的通信。在一个实施例中,L1高速缓存570包括128KB的存储容量并且在从SM 440到内存分区单元380的路径中。L1高速缓存570可以用于高速缓存读取和写入。L1高速缓存570、L2高速缓存460和内存304中的一个或更多个是多级内存层次结构中的后备存储。
在一个实施例中,片上内存的单个阵列被配置为提供单独的分配,以实现便签内存525和L1高速缓存570。将数据高速缓存和便签内存功能组合成单个内存块为两种类型的内存访问提供最佳的总体性能。该容量可由内核用作不使用共享内存的高速缓存。例如,如果将共享内存配置为使用一半容量,则纹理和加载/存储操作可以使用剩余容量。将便签内存525和L1高速缓存570相组合使便签内存525起到用于交换数据的高吞吐量管道的作用,而L1高速缓存570同时提供对存储在内存304中的频繁重用数据的高带宽和低延迟的访问。
当被配置用于通用并行计算时,与图形处理相比,可以使用更简单的配置。具体地,图3所示的固定功能图形处理单元被绕过,创建了更简单的编程模型。在通用并行计算配置中,工作分配单元325将线程块直接指派并分配给DPC 420。块中的线程执行相同的程序,使用计算中的唯一线程ID来确保每个线程生成唯一结果,使用SM 440执行程序并执行计算,使用便签内存525在线程之间通信,以及使用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)或并行处理器。
共享持久便签内存
图5B是根据一个实施例的说明了执行内核A、B和C的处理管线的概念图。内核A被注释以指示内核A应与内核B和C并发执行。内核B和C被注释指示内核C应在内核B之后执行,内核C将消耗内核A产生的数据,其中内核A产生的数据至少部分基于从内核B接收的数据产生。因此,内核A、B和C被指派给同一处理单元440中的SEC,以及分配共享持久便签内存526和527以执行SEC。
具体来说,SEC1被指派给内核A,SEC2被指派给内核B,SEC3被指派给内核C。共享持久便签内存526被分配给SEC1和SEC2并由它们共享。共享持久便签内存527被分配给SEC1和SEC3并由它们共享。由SEC2存储在共享持久便签内存526的数据是持久性的,即使在SEC2完成内核B的执行之后也是如此。因此,SEC1可以基于SEC2产生的数据与执行SEC3并发地加载和产生数据。重要的是,SEC3无法访问共享持久便签内存526并覆写SEC2存储的数据。此外,所分配的来自处理单元110中的私有便签内存池的内存量不一定相等,该内存量用于提供共享持久便签内存526和527。请注意,SEC(诸如SEC1)可以访问多个共享持久便签内存。
与共享便签内存115一样,共享持久便签内存125还提供在处理单元440上执行的内核之间和/或SEC之间的低延迟数据传输,而无需在不同级别的内存层次结构之间复制或移动数据。此外,可以为多个内核分配一个或更多个共享持久便签内存,每个内核具有不同的处理资源要求,用于在彼此之间和/或指派给两个或更多个SEC的内核内传输数据。
一旦内核A和内核B启动,两个内核的执行完成之前他们能自由交换数据。由于内核B存储在共享持久便签内存526的数据即使在内核B的执行完成后也会保留,因此内核启动开销会减少。在时间管线(例如,如图5B所示,C在B后)中,当一个内核由于执行而产生数据时,数据可以通过内存系统传递给接下来的内核。为了传输数据,产生者(B)执行“写入”操作。在消耗者(C)启动期间,“写入”操作后跟“读取”操作。在常规系统中,写入然后读取将经历整个内存系统层次结构的延迟,而不是持久便签内存526的快速延迟。但是,当持久便签内存526可用时,产生者可以将数据保留在持久便签内存526中,并且消耗者只需在启动时在持久便签内存526中找到数据。持久便签内存526的持久特征可降低B的关机开销以及C的启动开销。
图5C示出了根据一个实施例的用于配置处理单元440中的共享内存池,以使SEC能够通过共享持久便签内存交换数据的方法500的流程图。在一个实施例中,方法500可用于通过共享持久便签内存125、526和/或527交换数据。
在步骤510中,处理单元440接收用于执行的内核。处理单元110可配置为在两种便签内存模式之一下运行。在私有便签内存模式下运行时,便签内存525的单独部分被分配以仅由被指派为执行处理单元440内的内核的每个个体SEC访问。换句话说,私有便签内存模式与每SEC便签内存的常规操作兼容。在共享便签模式下运行时,便签内存525的一部分被分配以由被指派给同一个内核并在处理单元440中执行的一个或更多个SEC访问,和/或由被指派给不同的内核并在处理单元440中执行的SEC访问。
在步骤530中,调度器单元510确定与内核相关联的注释是否指示内核在共享便签内存模式或私有便签内存模式下运行。如果内核指定的模式等于处理单元440中便签内存525的当前操作模式,则调度器单元510前进到步骤210。否则,便签内存525的操作模式无法满足为内核指定的数据交换约束,在步骤535中,调度器单元530等待处理单元440变为空闲,然后更改便签内存模式。步骤210、步骤215、步骤220、步骤225和步骤230完成,如前面结合图2所述。
在一个实施例中,在处理单元440内执行的不同内核可对便签内存525的不同部分使用不同的操作模式,以便操作模式针对便签内存525的每个分配部分进行定义,并由调度器单元530跟踪。当调度器单元530支持每分配部分操作模式时,可省略步骤530和步骤535。
在共享模式下配置便签内存525时,以前可用于在单个处理单元440上执行单个内核的单个SEC的便签内存525的一部分现在可以在执行相同或不同的内核的多个SEC之间共享,其中SEC可并行或串行地执行内核。与通过内存304交换数据相比,通过便签内存525进行数据交换的延迟减少了。线程的同步可以跨共享便签内存525的相同部分的多个SEC执行,从而减少同步延迟。在一个实施例中,提供同步逻辑以在处理单元440内传输同步信号,同时通过便签内存525交换数据。在一个实施例中,提供同步逻辑,用于在处理单元440之间传输同步信号,同时通过全局内存120交换数据。
此外,当用共享模式配置便签内存525时,存储在便签内存525中的数据(其以前仅在单个内核的执行期间可用)可以在同一处理单元440中串行执行的相同或不同内核的执行之间保留。因此,内核启动开销会减少,因为数据可以在串行执行的不同内核之间交换,也可以在由多个SEC执行的单个内核中交换。
示例性计算系统
随着开发人员在诸如人工智能计算之类的应用中暴露和利用更多的并行性,具有多个GPU和CPU的系统被用于各种行业。在数据中心、研究设施和超级计算机中部署了具有数万到更多个计算节点的高性能GPU加速系统,以解决更大的问题。随着高性能系统中处理设备数量的增加,通信和数据传输机制需要扩展以支持增加的带宽。
图6A是根据一个实施例的使用图3的PPU 300实现的处理系统600的概念图。示例性处理系统600可以被配置为实现图2中所示的方法200和/或图5C中所示的方法500。处理系统600包括CPU 630、交换机610和多个PPU 300以及相应的内存304。NVLink 310提供每个PPU 300之间的高速通信链路。尽管图6A中示出了特定数量的NVLink 310和互连302连接,但是到每个PPU 300和CPU 630的连接的数量可以改变。交换机610在互连302和CPU 630之间接口。PPU 300、内存304和NVLink 310可以位于单个半导体平台上以形成并行处理模块625。在一个实施例中,交换机610支持两个或更多个在各种不同连接和/或链路之间接口的协议。
在另一个实施例(未示出)中,NVLink 310在每个PPU 300和CPU 630之间提供一个或更多个高速通信链路,并且交换机610在互连302和每个PPU 300之间进行接口。PPU 300、内存304和互连302可以位于单个半导体平台上以形成并行处理模块625。在又一个实施例(未示出)中,互连302在每个PPU 300和CPU 630之间提供一个或更多个通信链路,并且交换机610使用NVLink 310在每个PPU 300之间进行接口,以在PPU 300之间提供一个或更多个高速通信链路。在另一个实施例(未示出)中,NVLink 310在PPU 300和CPU 630之间通过交换机610提供一个或更多个高速通信链路。在又一个实施例(未示出)中,互连302在每个PPU300之间直接地提供一个或更多个通信链路。可以使用与NVLink 310相同的协议将一个或更多个NVLink 310高速通信链路实现为物理NVLink互连或者片上或管芯上互连。
在本说明书的上下文中,单个半导体平台可以指在管芯或芯片上制造的唯一的单一的基于半导体的集成电路。应该注意的是,术语单个半导体平台也可以指具有增加的连接的多芯片模块,其模拟片上操作并通过利用常规总线实现方式进行实质性改进。当然,根据用户的需要,各种电路或器件还可以分开放置或以半导体平台的各种组合来放置。替代地,并行处理模块625可以被实现为电路板衬底,并且PPU 300和/或内存304中的每一个可以是封装器件。在一个实施例中,CPU 630、交换机610和并行处理模块625位于单个半导体平台上。
在一个实施例中,每个NVLink 310的信令速率是20到25千兆位/秒,并且每个PPU300包括六个NVLink 310接口(如图5B所示,每个PPU 300包括五个NVLink 310接口)。每个NVLink 310在每个方向上提供25千兆字节/秒的数据传输速率,其中六条链路提供300千兆字节/秒。当CPU 630还包括一个或更多个NVLink 310接口时,NVLink 310可专门用于如图5B所示的PPU到PPU通信,或者PPU到PPU以及PPU到CPU的某种组合。
在一个实施例中,NVLink 310允许从CPU 630到每个PPU 300的内存304的直接加载/存储/原子访问。在一个实施例中,NVLink 310支持一致性操作,允许从内存304读取的数据被存储在CPU 630的高速缓存层次结构中,减少了CPU 630的高速缓存访问延迟。在一个实施例中,NVLink 310包括对地址转换服务(ATS)的支持,允许PPU 300直接访问CPU 630内的页表。一个或更多个NVLink 310还可以被配置为以低功率模式操作。
图6B示出了示例性系统665,其中可以实现各种先前实施例的各种体系架构和/或功能。示例性系统665可以被配置为实现图2中所示的方法200和/或图5C中所示的方法500。如图所示,提供系统665,其包括连接到通信总线575的至少一个中央处理单元630。通信总线575可以使用任何合适的协议来实现,诸如PCI(外围组件互连)、PCI-Express、AGP(加速图形端口)、超传输或任何其他总线或一个或更多个点对点通信协议。系统665还包括主内存640。控制逻辑(软件)和数据被存储在主内存640中,主内存640可以采取随机存取存储器(RAM)的形式。
系统665还包括输入设备660、并行处理系统625和显示设备645,例如常规CRT(阴极射线管)、LCD(液晶显示器)、LED(发光二极管)、等离子显示器等。可以从输入设备660(例如键盘、鼠标、触摸板、麦克风等)接收用户输入。前述模块和/或设备中的每一个甚至可以位于单个半导体平台上以形成系统665。替代地,根据用户的需要,各个模块还可以分开放置或以半导体平台的各种组合来放置。
此外,系统665可以出于通信目的通过网络接口635耦合到网络(例如,电信网络、局域网(LAN)、无线网络、广域网(WAN)(诸如因特网)、对等网络、电缆网络等)。
系统665还可以包括辅助存储(未示出)。辅助存储610包括例如硬盘驱动器和/或可移除存储驱动器、代表软盘驱动器、磁带驱动器、光盘驱动器、数字多功能盘(DVD)驱动器、记录设备、通用串行总线(USB)闪存。可移除存储驱动器以众所周知的方式从可移除存储单元读取和/或写入可移除存储单元。
计算机程序或计算机控制逻辑算法可以存储在主内存640和/或辅助存储中。这些计算机程序在被执行时使得系统665能够执行各种功能。内存640、存储和/或任何其他存储是计算机可读介质的可能示例。
各种先前附图的体系架构和/或功能可以在通用计算机系统、电路板系统、专用于娱乐目的的游戏控制台系统、专用系统和/或任何其他所需的系统的上下文中实现。例如,系统665可以采取台式计算机、膝上型计算机、平板电脑、服务器、超级计算机、智能电话(例如,无线、手持设备)、个人数字助理(PDA)、数字相机、车辆、头戴式显示器、手持式电子设备、移动电话设备、电视机、工作站、游戏控制台、嵌入式系统和/或任何其他类型的逻辑的形式。
虽然上面已经描述了各种实施例,但是应该理解,它们仅以示例的方式呈现,而不是限制。因此,优选实施例的宽度和范围不应受任何上述示例性实施例的限制,而应仅根据所附权利要求及其等同物来限定。
机器学习
在处理器(诸如PPU 300)上开发的深度神经网络(DNN)已经用于各种使用情况:从自驾车到更快药物开发,从在线图像数据库中的自动图像字幕到视频聊天应用中的智能实时语言翻译。深度学习是一种技术,它建模人类大脑的神经学习过程,不断学习,不断变得更聪明,并且随着时间的推移更快地传送更准确的结果。一个孩子最初是由成人教导,以正确识别和分类各种形状,最终能够在没有任何辅导的情况下识别形状。同样,深度学习或神经学习系统需要在对象识别和分类方面进行训练,以便在识别基本对象、遮挡对象等同时还有为对象分配上下文时变得更加智能和高效。
在最简单的层面上,人类大脑中的神经元查看接收到的各种输入,将重要性级别分配给这些输入中的每一个,并且将输出传递给其他神经元以进行处理。人工神经元或感知器是神经网络的最基本模型。在一个示例中,感知器可以接收一个或更多个输入,其表示感知器正被训练为识别和分类的对象的各种特征,并且在定义对象形状时,这些特征中的每一个基于该特征的重要性赋予一定的权重。
深度神经网络(DNN)模型包括许多连接节点(例如,感知器、玻尔兹曼机器、径向基函数、卷积层等)的多个层,其可以用大量输入数据来训练以快速高精度地解决复杂问题。在一个示例中,DNN模型的第一层将汽车的输入图像分解为各个部分,并查找基本图案(诸如线条和角)。第二层组装线条以寻找更高级别的图案,诸如轮子、挡风玻璃和镜子。下一层识别车辆类型,最后几层为输入图像生成标签,识别特定汽车品牌的型号。
一旦DNN经过训练,DNN就可以被部署并用于在被称为推理(inference)的过程中识别和分类对象或图案。推理的示例(DNN从给定输入中提取有用信息的过程)包括识别存入ATM机中的支票存款上的手写数字,识别照片中朋友的图像,向超过五千万用户提供电影推荐,在无人驾驶汽车中识别和分类不同类型的汽车、行人和道路危险,或实时翻译人类语言。
在训练期间,数据在前向传播阶段流过DNN,直到产生预测为止,其指示对应于输入的标签。如果神经网络没有正确标记输入,则分析正确标签和预测标签之间的误差,并且在反向传播阶段期间针对每个特征调整权重,直到DNN正确标记该输入和训练数据集中的其他输入为止。训练复杂的神经网络需要大量的并行计算性能,包括由PPU 300支持的浮点乘法和加法。推理的计算密集程度比训练更低,是一个延迟敏感过程,其中经训练的神经网络应用于它以前没有见过的新的输入,以进行图像分类、翻译语音以及通常推理出新的信息。
神经网络严重依赖于矩阵数学运算,并且复杂的多层网络需要大量的浮点性能和带宽来提高效率和速度。采用数千个处理核心,针对矩阵数学运算进行了优化,并传送数十到数百TFLOPS的性能,PPU 300是能够传送基于深度神经网络的人工智能和机器学习应用所需性能的计算平台。
需要注意的是,本文所述技术可体现在存储在计算机可读介质中的可执行指令中,供基于处理器的指令执行机、系统、装置或设备使用或与其结合使用。本领域技术人员应理解,对于某些实施例,可以包括各种类型的计算机可读介质来存储数据。如本文所用,“计算机可读介质”包括用于存储计算机程序的可执行指令的一个或更多个任何合适的介质,以便指令执行机、系统、装置或设备可以从计算机可读介质中读取(或获取)指令并执行该指令,以用于实施所描述的实施例。合适的存储格式包括一种或更多种电、磁、光和电磁格式。常规的示例性计算机可读介质的非穷尽列举包括:便携式计算机磁盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM)、闪存设备和光学存储设备,包括便携式光盘(CD)、便携式数字视频盘(DVD)等。
应当理解,所述附图中所示的组件的布置是出于说明目的,其他布置是可能的。例如,本文描述的一个或更多个元素可以全部或部分地实现为电子硬件组件。其他元素可以以软件、硬件或软件和硬件的组合实现。此外,在实现本文描述的功能的同时,部分或所有这些其他元素可以组合在一起,有些元素可以完全省略,并且可以添加其他组件。因此,本文所述的主题可以体现在许多不同的变型中,并且所有此类变型都被认为落入权利要求的范围。
为了便于理解本文中描述的主题,许多方面都用动作的序列来描述。本领域技术人员应当认识到,各种操作可由专用线路或电路执行,以及由一个或更多个处理器执行的程序指令执行,或者由两者的组合执行。本文对任何动作的序列的描述并不意图暗示必须遵循为执行该序列而描述的特定顺序。本文描述的所有方法均可以任何适当的顺序执行,除非此处另有说明或上下文明确矛盾。
在描述主题的上下文(特别是在所附权利要求的上下文)中使用术语“一”和“一个”和类似引用,应解释为包括单数和复数,除非本文另有说明或明显与上下文相矛盾。使用术语“至少一个”后跟一个或更多个项目的列表(例如,“A和B中的至少一个”),应解释为意思是从所列项目中选择的一个项目(A或B),或两个或更多个所列项目的任何组合(A和B),除非本文另有说明或上下文明确矛盾。此外,上述描述只是出于说明的目的,而不是为了限制,因为所寻求求的保护范围是由所述的权利要求及其任何同等物所限定的。使用本文提供的任何以及所有示例或示例性语言(例如,“例如”)只是意图更好地说明主题,除非另有声明,否则不会对主题的范围造成限制。在权利要求书和说明书中使用“基于”一词和其他类似短语来表示产生结果的条件,并不意图排除产生该结果的任何其他条件。说明书中的任何语言都不应被解释为表明任何非要求保护的元素对所要求保护的发明实践是必需的。

Claims (20)

1.一种并行处理系统,包括:
多个处理单元,包括:
第一处理单元,包括第一便签和第一寄存器文件,其中所述第一处理单元能够执行第一内核和第二内核,以及
第二处理单元,包括第二便签和第二寄存器文件,其中所述第二处理单元能够执行第三内核;
调度器逻辑,耦合到所述多个处理单元,其中所述调度器电路将内核指派给所述多个处理单元中的特定处理单元以执行;以及
内存,耦合到所述多个处理单元,
其中所述并行处理系统被配置为使得将第一数据存储到所述第一便签或所述第二便签而不会使得所述第一数据被存储在所述内存中;
其中,所述第一便签被配置为允许这种第一内核将第二数据存储到所述第一便签,以允许这种第二内核从所述第一便签加载所述第二数据,以及不允许这种第三内核从所述第一便签存储或加载所述第二数据,以及
其中,所述第二便签被配置为允许这种第三内核将第三数据存储到所述第二便签,以及不允许这种第一内核和第二内核从所述第二便签加载所述第三数据。
2.根据权利要求1所述的并行处理系统,其中所述第一内核与一个或更多个线程相关联。
3.根据权利要求1所述的并行处理系统,其中这种第一内核和第二内核在所述第一处理单元上并发地执行至少一个时间段。
4.根据权利要求3所述的并行处理系统,其中在第一时间段期间,通过所述第一便签同步执行所述第一内核和所述第二内核。
5.根据权利要求1所述的并行处理系统,其中这种第一内核和第二内核在所述第一处理单元上连续地执行。
6.根据权利要求1所述的并行处理系统,其中所述第一处理单元包括第三便签,所述第三便签被配置为由这种第一内核和在所述第一处理单元上执行的第四内核访问,其中所述第三便签被配置为允许这种第一内核将第五数据存储到所述第三便签,以允许这种第四内核从所述第三便签加载所述第五数据,以及不允许这种第二内核和第三内核从所述第三便签存储或加载所述第五数据。
7.根据权利要求1所述的并行处理系统,其中所述并行处理系统从所述第一处理单元中包括的便签内存池分配所述第一便签。
8.根据权利要求7所述的并行处理系统,其中所述并行处理系统在执行这种第一内核和第二内核后解除分配所述第一便签,从而将所述第一便签返回到所述便签内存池。
9.根据权利要求8所述的并行处理系统,其中所述并行处理系统获得所述第一便签的大小,并使所述第一便签具有针对所获得的大小的足够的存储位置。
10.根据权利要求9所述的并行处理系统,其中所述大小为4KB、8KB、16KB、32KB、64KB或128KB。
11.根据权利要求1所述的并行处理系统,其中所述第一处理单元被配置为在第一模式和第二模式下执行,其中在所述第一模式期间,只有单个内核能够访问所述第一便签,以及其中在所述第二模式期间,并行或串行执行的多个内核能够访问所述第一便签。
12.根据权利要求11所述的并行处理系统,其中所述并行处理系统使所述单个内核在所述第二模式下操作之前在所述第一模式下完成执行。
13.根据权利要求11所述的并行处理系统,其中所述第一模式是私有模式以及所述第二模式是共享模式。
14.根据权利要求1所述的并行处理系统,还包括第三处理单元,所述第三处理单元包括第三便签和第三寄存器文件,其中所述第三处理单元能够执行所述第一内核和所述第二内核,以及所述调度器逻辑:
指派第一组一个或更多个执行上下文,以在所述第三处理单元上执行所述第一内核;以及
指派第二组一个或更多个执行上下文,以在所述第三处理单元上执行所述第二内核,其中所述第一组一个或更多个执行上下文通过所述第三便签与所述第二组一个或更多个执行上下文交换数据并完成执行而无需访问所述第一便签。
15.根据权利要求1所述的并行处理系统,其中在加载所述第二数据之前,所述第一内核和所述第二内核的执行通过所述第一便签同步。
16.一种计算机实现的方法,包括:
指派由与内存耦合的多个处理单元中的第一处理单元执行的第一内核和第二内核,所述第一处理单元包括第一便签和第一寄存器文件,其中所述第一处理单元能够执行所述第一内核和所述第二内核;
指派由所述多个处理单元中的第二处理单元执行的第三内核,所述第二处理单元包括第二便签和第二寄存器文件,其中所述第二处理单元能够执行所述第三内核,其中将第一数据存储到所述第一便签或所述第二便签不会使得所述第一数据存储在所述内存中;
配置所述第一便签以允许这种第一内核将第二数据存储到所述第一便签,以允许这种第二内核从所述第一便签加载所述第二数据,以及不允许这种第三内核从所述第一便签存储或加载所述第二数据;以及
配置所述第二便签以允许这种第三内核将第三数据存储到所述第二便签,以及不允许这种第一内核和第二内核从所述第二便签加载所述第三数据。
17.根据权利要求16所述的计算机实现的方法,其中这种第一内核和第二内核在所述第一处理单元上并发地执行至少一个时间段。
18.根据权利要求16所述的计算机实现的方法,其中这种第一内核和第二内核在所述第一处理单元上连续地执行。
19.根据权利要求18所述的计算机实现的方法,所述并行处理系统使所述单个内核在所述第二模式下操作之前在所述第一模式下完成执行。
20.一种存储计算机指令的非暂时性计算机可读介质,所述计算机指令在由一个或更多个处理器执行时,使得所述一个或更多个处理器执行以下步骤:
指派由与内存耦合的多个处理单元中的第一处理单元执行的第一内核和第二内核,所述第一处理单元包括第一便签和第一寄存器文件,其中所述第一处理单元能够执行所述第一内核和所述第二内核;
指派由所述多个处理单元中的第二处理单元执行的第三内核,所述第二处理单元包括第二便签和第二寄存器文件,其中所述第二处理单元能够执行所述第三内核,其中将第一数据存储到所述第一便签或所述第二便签不会使得所述第一数据存储在所述内存中;
配置所述第一便签以允许这种第一内核将第二数据存储到所述第一便签,以允许这种第二内核从所述第一便签加载所述第二数据,以及不允许这种第三内核从所述第一便签存储或加载所述第二数据;以及
配置所述第二便签以允许这种第三内核将第三数据存储到所述第二便签,以及不允许这种第一内核和第二内核从所述第二便签加载所述第三数据。
CN202010322855.1A 2019-11-07 2020-04-22 用于程序间数据交换的持久便签内存 Pending CN112783554A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/677,503 US10725837B1 (en) 2019-11-07 2019-11-07 Persistent scratchpad memory for data exchange between programs
US16/677,503 2019-11-07

Publications (1)

Publication Number Publication Date
CN112783554A true CN112783554A (zh) 2021-05-11

Family

ID=71783409

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010322855.1A Pending CN112783554A (zh) 2019-11-07 2020-04-22 用于程序间数据交换的持久便签内存

Country Status (3)

Country Link
US (1) US10725837B1 (zh)
CN (1) CN112783554A (zh)
DE (1) DE102020121601A1 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116302504A (zh) * 2023-02-23 2023-06-23 海光信息技术股份有限公司 线程块的处理系统、方法及相关设备
CN117311988A (zh) * 2023-11-27 2023-12-29 沐曦集成电路(南京)有限公司 一种带掩码的规约操作优化方法、装置、设备及介质

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11429524B2 (en) * 2020-02-10 2022-08-30 International Business Machines Corporation Optimized hierarchical scratchpads for enhanced artificial intelligence accelerator core utilization
KR20220033329A (ko) * 2020-09-09 2022-03-16 삼성전자주식회사 뉴럴 네트워크를 위한 컴파일링 방법 및 장치
CN113256171B (zh) * 2021-06-29 2021-09-24 湖北亿咖通科技有限公司 一种业务计划生成方法和系统
CN117707625B (zh) * 2024-02-05 2024-05-10 上海登临科技有限公司 支持指令多发的计算单元、方法及相应图形处理器

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030140179A1 (en) * 2002-01-04 2003-07-24 Microsoft Corporation Methods and system for managing computational resources of a coprocessor in a computing system
JP2015122099A (ja) * 2015-02-09 2015-07-02 インテル・コーポレーション プロセッサ、プログラム、システム及び方法
US20180101483A1 (en) * 2016-10-06 2018-04-12 Imec Vzw Memory Structure Comprising Scratchpad Memory
US20190102087A1 (en) * 2017-09-29 2019-04-04 Oracle International Corporation Remote one-sided persistent writes

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10649914B1 (en) * 2016-07-01 2020-05-12 The Board Of Trustees Of The University Of Illinois Scratchpad-based operating system for multi-core embedded systems

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030140179A1 (en) * 2002-01-04 2003-07-24 Microsoft Corporation Methods and system for managing computational resources of a coprocessor in a computing system
JP2015122099A (ja) * 2015-02-09 2015-07-02 インテル・コーポレーション プロセッサ、プログラム、システム及び方法
US20180101483A1 (en) * 2016-10-06 2018-04-12 Imec Vzw Memory Structure Comprising Scratchpad Memory
US20190102087A1 (en) * 2017-09-29 2019-04-04 Oracle International Corporation Remote one-sided persistent writes

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
刘彩霞;石峰;薛立成;宋红: "层次化共享多通道便签存储器的嵌入式多核体系", 《计算机辅助设计与图形学学报》, 15 August 2010 (2010-08-15), pages 1390 - 1398 *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116302504A (zh) * 2023-02-23 2023-06-23 海光信息技术股份有限公司 线程块的处理系统、方法及相关设备
CN117311988A (zh) * 2023-11-27 2023-12-29 沐曦集成电路(南京)有限公司 一种带掩码的规约操作优化方法、装置、设备及介质
CN117311988B (zh) * 2023-11-27 2024-03-12 沐曦集成电路(南京)有限公司 一种带掩码的规约操作优化方法、装置、设备及介质

Also Published As

Publication number Publication date
DE102020121601A1 (de) 2021-05-12
US10725837B1 (en) 2020-07-28

Similar Documents

Publication Publication Date Title
US11715251B2 (en) Neural network model trained using generated synthetic images
US11106261B2 (en) Optimal operating point estimator for hardware operating under a shared power/thermal constraint
US10909033B1 (en) Techniques for efficiently partitioning memory
US10614613B2 (en) Reducing noise during rendering by performing parallel path space filtering utilizing hashing
US10725837B1 (en) Persistent scratchpad memory for data exchange between programs
US12008475B2 (en) Transposed sparse matrix multiply by dense matrix for neural network training
US20190188569A1 (en) Parallel Forward and Backward Propagation
US20200160112A1 (en) Distributed batch normalization using partial populations
US10684824B2 (en) Stochastic rounding of numerical values
EP3678037A1 (en) Neural network generator
US20230368501A1 (en) Few-shot training of a neural network
US20200089611A1 (en) Coherent Caching of Data for High Bandwidth Scaling
CN113822975B (zh) 用于对图像进行有效采样的技术
US11476852B2 (en) Glitch-free multiplexer
US11620169B2 (en) Barrierless and fenceless shared memory synchronization with write flag toggling
US11372548B2 (en) Techniques for accessing and utilizing compressed data and its state information
US20230145783A1 (en) Parallel processing for combinatorial optimization
US20210232366A1 (en) Dynamic directional rounding
US20230297643A1 (en) Non-rectangular matrix computations and data pattern processing using tensor cores
US20230394647A1 (en) Determining contour edges for an image

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