CN113094099A - 矩阵数据广播架构 - Google Patents

矩阵数据广播架构 Download PDF

Info

Publication number
CN113094099A
CN113094099A CN201911336627.3A CN201911336627A CN113094099A CN 113094099 A CN113094099 A CN 113094099A CN 201911336627 A CN201911336627 A CN 201911336627A CN 113094099 A CN113094099 A CN 113094099A
Authority
CN
China
Prior art keywords
data
shared data
access request
units
computing
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
CN201911336627.3A
Other languages
English (en)
Inventor
彭莉
杨建�
汤迟
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.)
Advanced Micro Devices Shanghai Co Ltd
Original Assignee
Advanced Micro Devices Shanghai Co Ltd
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 Advanced Micro Devices Shanghai Co Ltd filed Critical Advanced Micro Devices Shanghai Co Ltd
Priority to CN201911336627.3A priority Critical patent/CN113094099A/zh
Priority to US16/729,811 priority patent/US11609785B2/en
Publication of CN113094099A publication Critical patent/CN113094099A/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/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
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30047Prefetch instructions; cache control instructions
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/321Program or instruction counter, e.g. incrementing
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • 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/468Specific access rights for resources, e.g. using capability register
    • 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/542Event management; Broadcasting; Multicasting; Notifications

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Multi Processors (AREA)

Abstract

本发明涉及计算机领域,更具体涉及矩阵数据广播架构。公开了用于通过减少存储器访问的数量来有效并行执行处理器中的多个工作单元的***、装置和方法。计算***包括具有并行数据架构的处理器核。处理器核用矩阵运算执行软件应用程序。处理器核支持将共享数据广播到处理器核的多个计算单元。编译器或其他代码基于检测到计算单元之间的共享数据,将线程组分配给计算单元。处理器核生成单个访问请求,而不是将多个读取访问发送到存储器子***以获取共享数据。单个访问请求包括标识多个计算单元的信息,以在通过处理器核广播时接收共享数据。

Description

矩阵数据广播架构
技术领域
本发明涉及计算机领域,具体地,涉及矩阵数据广播架构。
背景技术
任务的并行化用于增加计算***的吞吐量。为此,编译器从程序代码中提取并行化的任务,以在***硬件上并行执行。处理器核(core)包括配置为执行多线程的深管线。为了进一步增加硬件上的并行执行,多核架构包括多个处理器核。计算***将特定任务转移到专用硬件上,从而克服了常规通用核的性能限制。一些类型的专用硬件包括单指令多数据(SIMD)并行架构,其他类型包括现场可编程门阵列(FPGA),而另外的其他类型则包括其他专用类型的处理核。当架构包含不同类型的多个核时,其被称为异构多核架构。对于诸如图形渲染、神经网络训练、密码学等特定任务,异构多核架构提供的指令吞吐量比同构多核架构更高。
设计人员使用多种类型的并行计算平台和应用程序编程接口(API)模型之一来开发用于异构计算的软件应用程序。这些平台中的函数调用称为“计算内核(kernel)”,或简称为“内核”。诸如操作***调度程序之类的软件将这些软件内核与一个或多个数据记录(例如数据项)进行匹配,以产生一个或多个计算工作单元。一般而言,执行此类数据并行工作负载时,SIMD架构可提供良好的计算性能和成本效率。但是,当存储带宽受到限制并且应用程序具有很高的数据重用性时,性能会降低,从而导致对同一数据的多次存储器访问。
鉴于上述情况,期望有通过减少存储器访问的数量来并行执行处理器中的多个工作单元的有效***和装置。
发明内容
在一个方面,一种计算***可以包括:处理器,其包括多个计算单元,每个计算单元被配置为处理指令;控制块;并且,其中所述控制块被配置为响应于检测来自所述多个计算单元中的一个的针对所述共享数据的第一访问请求以及确定满足合格条件,传送针对由所述多数个计算单元中的多个计算单元请求的共享数据的单个访问请求,以及响应于接收到所述共享数据,将所述共享数据广播到所述多个计算单元。
在一实施方案中,所述单个访问请求可以被传送到第一高速缓存控制器,并且从第二高速缓存控制器接收所述共享数据。
在一实施方案中,所述合格条件可以是针对所述共享数据的访问请求的计数等于需要所述共享数据的计算单元的数量。
在一实施方案中,所述控制块可以被配置为响应于检测到针对所述共享数据的访问请求而增加访问请求的计数。
在一实施方案中,所述控制块可以被配置为存储包括以下项中的一项或多项的用于所述共享数据的广播特性:广播标识符,其标识所述共享数据;和基地址,所述基地址指定存储所述共享数据的开头的存储位置。
在一实施方案中,所述控制块可以被配置为在所述广播特性中存储等于所述给定计算单元和所述一个或多个其他计算单元之和的数量。
在一实施方案中,所述控制块可以被配置为在所述单个访问请求中***以下一项或多项:广播标识符;和标识所述给定计算单元和所述一个或多个其他计算单元的掩码。
在一实施方案中,所述第一高速缓存控制器可以被配置为:通过接收所述单个访问请求中的所述掩码来确定所述掩码;以及通过转换所述单个访问请求中的所述广播标识符来确定所述掩码。
在一实施方案中,所述第一高速缓存控制器可以被配置为:存储所述掩码;以及在将所述共享数据广播到所述多个计算单元的过程中,将所述掩码传送到所述第二处理器。
在一实施方案中,所述第二处理器利用所述掩码来选择用于接收所述共享数据的所述多个计算单元。
在另一方面,一种方法可以包括:响应于检测来自所述多个计算单元中的一个的针对所述共享数据的第一访问请求以及确定满足合格条件,由处理器的控制块向第一高速缓存控制器传送针对共享数据的单个访问请求,该共享数据由所述处理器的多数个计算单元中的多个计算单元共享;以及通过所述第一高速缓存控制器从所述第二高速缓存控制器将所述共享数据广播到所述多个计算单元。
在一实施方案中,所述多个计算单元中没有计算单元接收来自所述多个计算单元中的任何一个的共享所述共享数据的指示。
在一实施方案中,所述方法还可以包括:通过所述控制块接收来自所述第二处理器的访问请求;通过所述控制块,针对从所述第二处理器接收的针对共享数据的每个访问请求,增加访问请求的计数;以及响应于确定所述计数等于所述给定计算单元和所述一个或多个其他计算单元之和,由所述控制块确定满足所述合格条件。
在一实施方案中,所述方法还可以包括通过所述控制块存储包括以下项中的一项或多项的用于所述共享数据的广播特性:广播标识符,其标识所述共享数据;和基地址,所述基地址指定存储所述共享数据的开头的存储位置。
在一实施方案中,所述方法还可以包括通过所述控制块在所述单个访问请求中***以下一项或多项:所述广播标识符;以及标识所述给定计算单元和所述一个或多个其他计算单元的掩码。
在一实施方案中,所述方法还可以包括:通过所述第一高速缓存控制器确定通过接收所述单个访问请求中的所述掩码来确定所述掩码;以及通过所述第一高速缓存控制器,经由转换所述单个访问请求中的所述广播标识符来确定所述掩码。
在另一方面,一种装置可以包括:第一接口,其被配置为与包括多个计算单元的处理器进行通信,每个计算单元被配置为处理指令;第二接口,其被配置为与第一高速缓存控制器通信;以及电路;并且其中,所述第一接口被配置为接收由执行多个计算内核的所述多数个计算单元生成的访问请求;其中,所述电路被配置为响应于经由所述第一接口,接收来自所述多个计算单元中的一个的针对所述共享数据的第一访问请求以及确定满足合格条件,将针对由所述多数个计算单元中的多个计算单元请求的共享数据的单个访问请求传送给所述第一高速缓存控制器。
在一实施方案中,所述多个计算单元中没有计算单元接收来自所述多个计算单元中的任何一个的共享所述共享数据的指示。
在一实施方案中,所述电路可以被配置为:对于从所述处理器接收的、针对所述共享数据的每个访问请求,增加访问请求的计数;以及响应于确定所述计数等于所述给定计算单元与所述一个或多个其他计算单元之和,确定满足所述合格条件。
在一实施方案中,所述电路可以被配置为存储所述共享数据的广播特性,所述广播特性包括以下一项或多项:广播标识符,其中所述广播标识符为标识所述共享数据的唯一标识符;以及基地址,所述基地址指定存储所述共享数据的开头的存储位置。
附图说明
通过结合附图参考以下描述,可以更好地理解本文所述的方法和机制的优点,其中:
图1是矩阵的一个实施方式的框图。
图2是矩阵的一个实施方式的框图。
图3是矩阵的一个实施方式的框图。
图4是矩阵的一个实施方式的框图。
图5是用于支持矩阵的共享数据的广播的表的一个实施方式的框图。
图6是用于支持矩阵共享数据的广播的计算机程序代码的一个实施方式的框图。
图7是支持广播矩阵共享数据的计算***的一个实施方式的框图。
图8是支持广播矩阵共享数据的计算***的一个实施方案的框图。
图9是用于通过减少存储器访问的数量来有效并行执行处理器中的多个工作单元的方法的一个实施方式的流程图。
尽管本发明易于进行各种修改和替代形式,但是在附图中通过示例的方式示出了具体的实施方式,并且在此对其进行详细描述。然而,应当理解,附图及其详细描述并非旨在将本发明限制为所公开的特定形式,相反,本发明将覆盖落入如所附权利要求所定义的本发明范围内的所有修改、等同和替代形式。
具体实施方式
在以下描述中,阐述了许多具体细节以提供对本文提出的方法和机制的透彻理解。然而,本领域普通技术人员应该认识到,可以在没有这些具体细节的情况下实践各种实施方式。在某些情况下,没有详细示出公知的结构、组件、信号、计算机程序指令和技术,以避免模糊本文所述的方法。应当理解,为了图示的简单和清楚起见,附图中所示的元件未必按比例绘制。例如,一些元件的尺寸可能相对于其他元件被放大。
公开了用于通过减少存储器访问的数量来有效并行执行处理器中的多个工作单元的各种***、装置、方法和计算机可读介质。在各种实施方式中,计算***包括用于存储操作***的内存、由设计人员开发的软件应用程序以及软件应用程序的用户数据和结果数据。该计算***还包括处理单元,该处理单元访问内存并执行操作***和应用程序的指令。该处理单元包括一个或多个具有单指令多数据(SIMD)并行架构的处理器核。在一个实施方式中,主板上的加速处理单元除了通用处理器之外还包括SIMD处理器核。在另一个实施方式中,视频图形卡包括SIMD处理器核。一个或多个软件应用程序包括用于指导SIMD核执行通用矩阵与矩阵乘法(GEMM)操作的指令,例如将两个输入矩阵相乘在一起以生成第三输出矩阵。
在一个实施方式中,GEMM操作用于神经网络应用程序。例如,该应用程序包括用于训练深度神经网络的算法。另一个软件应用程序是图形着色器程序,该程序指导SIMD处理器核如何渲染像素以控制照明和阴影效果。此外,该应用程序包括用于几何变换的像素插值算法。像素插值从现有数据提取任意坐标处的新像素值。其他软件应用程序还包括用于指导SIMD核执行GEMM操作以用于其他科学和商业用途的指令。软件应用程序指令在行和列的数量在几百到几千范围内的矩阵上运行,这导致数百万到几百亿范围内的数量的浮点运算(FLOP)。
在一些实施方式中,设计者使用并行计算平台和相应的应用程序编程接口(API)模型来使用GEMM操作来开发软件应用程序。并行计算平台的一个示例是
Figure BDA0002331105550000061
(开放计算语言)框架。OpenCL框架(在本文中通常称为“OpenCL”)包括类C语言。对于视频图形应用程序,该语言的一个示例是GLSL(OpenGL阴影语言)。类C语言的函数调用称为OpenCL内核、软件内核、计算内核或简称为“内核”。在一些实施方式中,不是使用操作***的调度器,而是编译器或其他软件代码包括可由处理器执行的指令,以将执行GEMM操作的软件应用程序的多个计算内核分配给SIMD处理器核的多个计算单元。在一些实施方式中,软件应用程序包括代码段,这些代码段包括用于支持共享数据广播协议的指令,其中共享数据被广播到多个计算单元。在共享数据广播协议中,需要共享数据的多个计算单元生成对数据的请求,但是仅生成一次数据提取。当提取的数据(例如从高速缓存、内存等)返回时,其被广播到请求数据的所述计算单元。这样,多个提取请求不会不必要地消耗内存总线带宽。在各种实施方式中,在SIMD处理器核的计算单元上执行的计算内核不就共享数据彼此通信,并且不从任何其他计算内核接收指定共享数据与任何其他计算单元共享的指示。
在多种实施方案中,SIMD处理器核包括用于支持共享数据广播协议的硬件,诸如电路。SIMD处理器核存储共享数据的广播特性。所述特性包括广播标识符和基地址,该广播标识符是识别共享数据的唯一标识,该基址指定存储共享数据的开头的存储位置。在一些实施方式中,所述特性还包括使用共享数据的计算单元的总数的总和。当SIMD处理器核检测到针对共享数据的读取访问请求时,SIMD处理器核会增加发送针对特定共享数据的读取访问请求的计算单元的数量。当计算单元的针对共享数据的数量等于存储的总和时,SIMD处理器核将发出针对共享数据的单个访问请求。
在其他实施方式中,SIMD处理器核监视线程组中请求多个计算单元之间的共享数据的线程计数。该总和是来自多个计算单元的线程总和。在一个实施方式中,SIMD处理器核在计数等于来自四个计算单元中的每一个的32个线程的总和时生成单个访问请求。尽管在一个实施方式中,SIMD处理器核中的计算单元中的每一个包括用于执行64个线程的64个并行通道,但是在四个计算单元中的每一个生成用于向64个通道的32个通道提供数据的一个或多个读取访问请求之后,SIMD处理器核生成单个读取访问请求。用于确定何时产生单个读取访问请求的另一数量的总并行通道和总数量中的其他部分的通道是可能的,并且是可预期的。在其他实施方式中,SIMD处理器核监视由来自多个计算单元的多个读取访问请求所请求的共享数据的数量,而不是计算单元的数量或计算单元中的并行通道的数量。
在一个实施方式中,SIMD处理器核在单个访问请求中***使用共享数据来标识计算单元的掩码。在另一个实施方式中,SIMD处理器核基于广播标识符生成掩码。在这样的实施方式中,单个访问请求包括广播标识符,但是不包括掩码。在其他实施方式中,单个访问请求包括掩码,但不包括广播标识符。当SIMD处理器核确定存储器子***返回共享数据时,SIMD处理器核会将共享数据广播到由掩码标识的计算单元。因此,由于单个访问请求和检索到的共享数据的广播,减少了基于存储器子***带宽限制的性能下降影响。
参照图1,示出了在操作中使用的矩阵100的一个实施方式。如图所示,矩阵A 110和矩阵B 120被输入到矩阵运算130,矩阵运算130产生矩阵C150。矩阵运算130和矩阵110、120和150用于神经网络的训练、视频图形渲染期间的像素插值或其他多种科学和商业应用程序之一。在各种实施方式中,矩阵运算130是通用矩阵与矩阵乘法(GEMM)运算。例如,在一些实施方式中,矩阵运算130是用于确定两个输入矩阵的两个值的点积的乘法和累加(MAC)运算。在其他实施方式中,矩阵运算130是用于从两个输入矩阵(诸如矩阵A 110和矩阵B120)生成第三矩阵(诸如矩阵C 150)的另一数学运算。还示出了利用单指令多数据(SIMD)并行架构来将矩阵110和120的输入数据值分配140到处理器核的计算单元。在一个实施方式中,SIMD处理器包括16个计算单元,每个计算单元具有64个执行通道。在其他实施方式中,SIMD处理器核包括另一数量的计算单元和每一计算单元的另一数量的通道。
矩阵A 110被示为包括16个标记为A32至A47的块。在一个实施方式中,这16个块中的每一个包括K个数据项,其中K是正的非零整数。在这样的实施方式中,矩阵A 110具有等于16乘以K的数据项的数量。类似地,矩阵B 120被示出为包括标记为B32的1个块。该单个块具有数量等于1乘以K的数据项或K个数据项。值K可以是任何数字,因此矩阵110和120可以非常大。例如,数据项的数量K可以在几十到几百甚至几千的范围内。当范围达到几千时,矩阵运算130的运算数达到几百万至数十亿的范围。在其他实施方式中,值K表示数据的量,所述数据包括多个数据项。例如,如果值K表示64个字节,并且数据项的大小为32位(4个字节),则值K表示(64/4)个数据项或16个数据项。
矩阵C 150被示为包括标记为(A32,B32)至(A47,B32)的16x1块。矩阵C 150的每个块包括通过矩阵运算130执行的矩阵A 110的块与矩阵B 120的块B32的组合。因此,矩阵110和120中的数据项通过矩阵运算130以矩阵C 150中通过块标签所示的顺序进行组合。在一些实施方式中,SIMD处理器核以并发和并行的方式执行矩阵运算130的步骤。在各种实施方式中,计算***包括用于存储由软件开发者编写的软件应用程序以及软件应用程序的用户数据和结果数据的存储器。在此,用户数据是矩阵A 110和矩阵B 120的数据项,而结果数据是矩阵C 150的数据项。
在一个实施方式中,SIMD处理器核包括如分配140中所示的16个计算单元(CU),但在其他实施方式中,SIMD处理器核包括另一数量的计算单元。使用分配140,SIMD处理器核的计算单元0(CU0)使用矩阵运算130的步骤将矩阵A 110的块A32中的数据与矩阵B 120的块B32中的数据进行组合。由软件开发者所写的软件应用程序包括矩阵运算130的步骤。例如,软件应用程序使用具有在特定库中定义的定义的函数调用。软件开发者使用多种类型的并行计算平台和应用程序编程接口(API)模型中的一个来开发软件应用程序。这些平台中的函数调用称为“计算内核”,或简称为“内核”。
在各个实施方式中,存储器还存储操作***的指令。在一些实施方式中,操作***的指令由计算***中的通用处理器核执行。在一实施方式中,应用程序或固件将这些软件内核与一个或多个数据记录(例如数据项)匹配,以产生一个或多个计算工作单元。工作单元被划分为多个工作组,这些工作组也称为“线程组”。每个线程组都有一个分配的唯一标识符(ID)。不是由调度程序将线程组分配给计算单元,而是由SIMD处理器核管理分配。例如,当计算单元具有64个并行执行通道时,应用程序或固件将工作单元划分为64个组,并且SIMD处理器核将64个工作单元的线程组分配给特定的计算单元。SIMD处理器核执行计算单元分配140(或分配140)中所示的分配。
以类似的方式,SIMD处理器核的计算单元1(CU1)被分配为使用矩阵运算130的步骤将矩阵A 110的块A33中的数据与矩阵B 120的块B32中的数据进行组合。同样地,SIMD处理器核的计算单元15(CU15)使用矩阵运算130的步骤将矩阵A 110的块A47中的数据与矩阵B 120的块B32中的数据进行组合,以及对于CU1和CU 15之间的计算单元,依此类推。基于分配140,矩阵110和120的数据根据需要多次加载到SIMD处理器核的计算单元0-15中。例如,如果K表示256个数据项,每个数据项的大小为4个字节,并且每个计算单元具有64个执行通道,每个通道支持对4字节数据项的操作,则SIMD处理器核使用(256/64)加载,或4次加载,以用来自块A32和块B32的数据填充64个并行执行通道。
一般来说,当执行并行数据工作负载时,SIMD架构提供了良好的计算性能和成本效率。但是,当存储带宽受到限制并且应用程序具有很高的数据重用性时,性能会降低,从而导致对同一数据的多次存储器访问。如分配140中所示,数据重用在GEMM计算中是典型的。例如,每个计算单元CU0-CU15加载并使用矩阵B 120的块B32中的相同的数据。
在不修改软件应用程序的执行的情况下,在示出的实施方式中,SIMD处理器核生成32个数据提取,其中每个计算单元具有2个数据提取。例如,计算单元0(CU0)对块A32和块B32中的数据使用两次数据提取。类似地,计算单元8(CU8)对块A40和相同的块B32中的数据使用两次数据提取。但是,如果将SIMD处理器核修改为包括重用数据的广播支持,则SIMD处理器核将生成17次数据提取,而不是32次数据提取。例如,如果软件应用程序包括在块B32中仅支持一次提取数据并且将获取的数据广播到计算单元0-15的指令,则SIMD处理器核为块A32-A47中的数据生成16次数据提取和为块B32中的数据生成单次数据提取。数据提取的数量从32次数据提取减少到17次数据提取。
在一个示例中,存储器子***中的一个或多个总线小于矩阵B 120的块B32中的数据量。因此,对于块B32中的数据的“单次”数据提取,发生了多次数据提取,而在块B32中传输数据时,总线被多次使用。例如,当到存储在块B32中的数据的存储器的总线的宽度为64字节,但是块B32中的数据量为512字节时,对块B32的数据提取将使用总线上的八个单独的数据传输。当多次提取块B32中的数据时,例如在一个实施方式中对十六个计算单元中的每一个提取16次时,则存储器子***的资源被大量加载并且延迟增加。使用上面的示例,在没有广播支持的情况下,对于块B32的512字节有(16x8)或128次数据提取。随着延迟的增加,性能会下降。但是,如果SIMD处理器核支持在块B32中广播数据,并且仅提取一次该数据,而不是针对十六个计算单元中的每一个提取,则相较于128次数据提取,对于块B32的512字节有8次数据提取。因此,不像以前那样加载存储器子***,延迟减少,性能提高。
现在转向图2,示出了在操作中使用的矩阵200的一个实施方式。前文描述的控制逻辑被相同编号。如图所示,矩阵A 210和矩阵B 220被输入到矩阵运算130,矩阵运算130产生矩阵C250。类似于矩阵100,矩阵运算130和矩阵210、220和250用于神经网络的训练、视频图形渲染过程中的像素插值或其他多种科学和商业应用程序之一。在各种实施方式中,矩阵运算130是通用矩阵与矩阵乘法(GEMM)运算。还示出了矩阵210和220的输入数据值到SIMD处理器核的计算单元的分配240。
矩阵A 210被示为包括标记为A32至A39的8个块。在一个实施方式中,这8个块中的每一个包括K个数据项。在这样的实施方式中,矩阵A 210具有数量等于K的8倍的数据项。类似地,矩阵B 220被示为包括标记为B32和B33的2个块。矩阵B 220具有数量等于K的2倍的数据项。如前所述,K是一个正的非零整数。值K可以是任何数,因此矩阵210和220能够非常大。在其他实施方式中,值K表示数据的量,所述数据包括多个数据项。例如,如果值K表示512字节,并且一个数据项的大小为64位(8字节),则值K表示(512/8)个数据项或64个数据项。
示出的矩阵C 250包括标记为(A32,B32)和(A32,B33)至(A39,B32)和(A39,B33)的8x 2的块。矩阵C 250的每个块包括通过矩阵运算130执行的矩阵A 210的块与矩阵B 220的块的组合。因此,矩阵210和220中的数据项通过矩阵运算130以矩阵C 250中通过块标检显示的顺序进行组合。在一些实施方式中,SIMD处理器核以并发和并行的方式执行矩阵运算130的步骤。
在一个实施方式中,SIMD处理器核包括16个计算单元(CU),如计算单元分配240(或分配240)中所示,尽管在其他实施方式中,SIMD处理器核包括另一数量的计算单元。使用分配240,SIMD处理器核的计算单元0(CU0)使用矩阵运算130的步骤将矩阵A 210的块A32中的数据与矩阵B 220的块B32中的数据进行组合。SIMD处理器核的计算单元1(CU1)被分配为使用矩阵运算130的步骤将矩阵A 210的块A33中的数据与矩阵B 220的块B32中的数据进行组合。类似地,计算单元15(SIMD处理器核的CU15)使用矩阵运算130的步骤将矩阵A 210的块A39中的数据与矩阵B 220的块B33中的数据进行组合,以及对于CU1和CU 15之间的计算单元,依此类推。
在一些实施方式中,基于分配240,将矩阵210和220的数据按需要多次加载到SIMD处理器核的计算单元0-15中。例如,如果K代表64个数据项,每个数据项具有8个字节的大小,并且每个计算单元具有32个执行通道,每个通道支持对8字节数据项的操作,则SIMD处理器核使用(64/32)加载,或2次加载,用来自块A32和块B32的数据来填充32个并行执行通道。如分配240中所示,在GEMM计算中数据重用是典型的。例如,每个计算单元CU0-CU7加载并使用矩阵B 220的块B32中的相同的数据。类似地,每个计算单元CU8-CU15加载并使用矩阵B 220的块B33中的相同的数据。
在不对执行矩阵运算130的SIMD处理器核进行修改的情况下,在所示实施方式中,SIMD处理器核生成32次数据提取,其中针对16个计算单元的每一个生成2次数据提取。例如,计算单元0(CU0)对块A32和块B32中的数据使用2次数据提取。类似地,计算单元7(CU7)对块A39和相同的块B32中的数据使用2次数据提取。但是,如果将软件应用程序修改为对共享数据广播协议的支持,则软件应用程序将生成18次数据提取,而不是32次数据提取。例如,如果在块B32中的SIMD处理器核仅提取一次数据并将所提取的数据广播到计算单元0-7的指令,则对于矩阵C 250的最左列,SIMD处理器核针对块A32-A39中的数据生成8次数据提取,并且针对块B32中的数据生成单次数据提取。矩阵C 250最左边一列的数据提取次数从16次数据提取减少到9次数据提取。
如果SIMD处理器核在框B33中仅提取一次数据并将所提取的数据广播到计算单元8-15,则对于矩阵C 250的最右列,SIMD处理器核对于块A32-A39中的数据生成8次数据提取,并且针对块B33中的数据生成单次数据提取。矩阵C 250最右边一列的数据提取次数从16次数据提取减少到9次数据提取。数据提取的总次数从(16+16)次数据提取或32次数据提取减少到(9+9)次数据提取或18次数据提取。如果SIMD处理器核仅一次提取矩阵A 210的块A32-A39中的共享数据并将所提取的共享数据广播到计算单元0-15,则SIMD处理器核针对块A32-A39中的数据生成8次数据提取,针对块B32中的数据和块B33中的数据进行单次数据提取,从而提供(8+1+1)次数据提取,或10次数据提取。如先前针对矩阵100所述的,当SIMD处理器核支持数据广播时,数据仅提取一次,存储器子***不像以前那样在没有广播支持的情况下加载,从而降低了延迟,并提高了性能。
现在转到图3,示出了在操作中使用的矩阵300的一个实施方式。前面描述的控制逻辑被相同编号。如图所示,矩阵A 310和矩阵B 320被输入到矩阵运算130,矩阵运算130产生矩阵C350。类似于矩阵100和200,矩阵运算130和矩阵310、320和350用于神经网络训练、视频图形渲染期间的像素插值、或多种其他科学和商业应用程序之一。在各种实施方式中,矩阵运算130是GEMM运算。还示出了矩阵310和320的输入数据值到SIMD处理器核的计算单元的分配340。
矩阵A 310被示为包括标记为A32至A35的4个块。在一个实施方式中,四个块中的每个包括K个数据项。在这样的实施方式中,矩阵A 310具有数量等于K的4倍的数据项。类似地,矩阵B 320被示出为包括标记为B32至B35的4个块。矩阵B 320具有数量等于K的4倍的数据项。如前所述,K是正的非零整数。值K可以是任何数量,因此矩阵310和320能够非常大。在其他实施方式中,值K表示数据的量,所述数据包括多个数据项。
矩阵C 350被示为包括4x4的块。矩阵C 350的顶行包括标记为(A32,B32),(A32,B33),(A32,B34)和(A32,B35)的块。矩阵C 250的每个块包括通过矩阵运算130执行的矩阵A310的块与矩阵B 320的块的组合。因此,矩阵310和320中的数据项通过矩阵运算130以矩阵C 350中的通过块标签示出的顺序进行组合。在一些实施方式中,SIMD处理器核以并发和并行的方式执行矩阵运算130的步骤。
在一个实施方式中,SIMD处理器核包括16个计算单元(CU),如计算单元分配340(或分配340)中所示的,但在其他实施方式中,SIMD处理器核包括另一数量的计算单元。如分配340中所示的,在GEMM计算中数据重用是典型的。例如,每个计算单元CU0-CU3加载并使用矩阵B 320的块B32中的相同的数据。类似地,每个计算单元CU4-CU7加载并使用矩阵B320的块B33中的相同的数据,并且以此类推。
在不对执行矩阵运算130的SIMD处理器核进行修改的情况下,在所示的实施方式中,SIMD处理器核生成32次数据提取,每个计算单元具有2次数据提取。例如,计算单元0(CU0)对块A32和块B32中的数据使用两次数据提取。类似地,计算单元3(CU3)对块A35和相同的块B32中的数据使用两次数据提取。但是,如果将SIMD处理器核修改为在矩阵B 320中包括重用数据(共享数据)的广播支持,则在一个实施方式中,SIMD处理器核生成20次数据提取,而不是32次数据提取。例如,如果SIMD处理器核在块B32中仅提取一次共享数据并将所提取的共享数据广播到计算单元0-3,则对于矩阵C 350的最左列,软件应用程序对于块A32-A35中的数据生成4次数据提取,并且对于块B32中的数据生成单次数据提取。对于矩阵C 250的最左列的数据提取次数从8次数据提取减少到5次数据提取。
如果SIMD处理器核仅一次提取块B33中的共享数据并将所提取的数据广播到计算单元4-7的指令,则对于矩阵C 350的第二最左列,SIMD处理器核针对块A32-A35中的数据和块B33中的数据生成总共5次的数据提取。如果SIMD处理器核以与提取和广播块B32和B33中的共享数据类似的方式提取和广播块B34和B35中的共享数据,则总的提取次数为(4x5),或20次数据提取,而不是32次数据提取。如果SIMD处理器核另外仅一次提取矩阵A 310的块A32-A35中的共享数据并将所提取的数据广播到计算单元0-15,则SIMD处理器核将针对块A32-A35中的数据生成4次数据提取,针对块B32中的数据生成单次数据提取,以及针对块B33中的数据生成单次数据提取,这将为矩阵C 350的最左的两列提供(4+1+1)次数据提取或6次数据提取。
对于矩阵C 350的最右边的两列,执行两次附加的数据提取以提取块B34和B35中的数据。因此,当软件应用程序包括支持广播矩阵A 310和矩阵B 320中的数据的指令时,数据提取的总次数从6次数据提取增加到8次数据提取,以便从矩阵310和320生成矩阵C 350。如果该SIMD处理器核支持仅广播矩阵B 320中的数据,那么,当从矩阵310和320生成矩阵C350时,数据提取的次数从32次数据提取减少到20次数据提取。不管何种情况,如之前对于矩阵100和200所述的,当SIMD处理器核支持数据广播时,存储器子***在没有广播支持的情况下不会像以前那样加载,从而延迟会降低,并且性能会提高。
现在转到图4,示出了在操作中使用的矩阵400的一个实施方式。前面描述的控制逻辑和数据值被相同编号。再次示出了结果矩阵C 350以及输入矩阵310和320。为了减少存储器访问的次数,矩阵B 320的列中的数据与广播标识符(ID)相关联。在一个实施方式中,软件应用程序的指令将广播标识符(ID)0分配给矩阵B 320的最左列中的数据,该最左列是块B32。分配给块B32中的数据的线程组(TG)也分配给广播标识符0。因此,如广播分配460所示,线程组0-3(TG 0-3)被分配给广播标识符0。
线程组0-3使用矩阵B 320的块B32中的数据生成矩阵C 350的最左列。对广播标识符0的分配指示对块B32中的数据进行的数据提取应该发生一次,而不是四次。例如,针对块B32中的特定数据项的数据应该提取一次,而不是四个计算单元0-3(CU 0-3)中的四次逻辑中的每个逻辑都生成对此特定数据项的读取访问请求。在执行GEMM软件应用程序的指令时,四个CU 0-3中的每个对于块B32中的相同数据仍生成读取访问请求,但是直到四个读取访问请求中的每个读取访问请求都已生成,才发送读取访问请求到存储器子***。在另一示例中,每个计算单元CU8-CU11针对块B34中的相同的数据生成一个读取访问请求。但是,直到四个读取访问请求中的每一个都已生成,才发送一个读取访问请求到存储器子***。
一旦四个读取访问请求中的每一个已生成,就生成一个单独的读取访问请求并将其发送到存储器子***。该单个读取访问请求包括指示,该指示指定该读取访问请求与所请求的数据的广播相关联。在一个实施方式中,该指示是存储断言值以指示所请求的数据的广播的位。单个读取访问请求还包括在广播期间哪些计算单元接收所请求的数据的指示。在一些实施方式中,单个读取访问请求包括位掩码,该位掩码指定哪些计算单元在广播期间接收所请求的数据。在其他实施方式中,单个读取访问请求包括广播标识符,该广播标识符随后被翻译或解码以确定哪些计算单元在广播期间接收所请求的数据。因此,当从存储器子***一次检索到块B32的数据时,该数据被同时提供给计算单元CU0-CU3。类似地,当从存储器子***一次检索到块B34的数据时,该数据被同时提供给计算单元CU8-CU11。
尽管仅示出了矩阵B 320的广播标识符,但是要注意,在其他实施方式中,存在矩阵A 310的块A32-A35的广播标识符。在一个实施方式中,被分配给块A32中的数据以及计算单元CU0、CU4、CU8和CU12的线程组(TG)0、4、8和12也被分配给广播标识符4(未示出)。以类似的方式,被分配给块A33中的数据以及计算单元CU1、CU5、CU9和CU13的线程组(TG)1、5、9和13也被分配给广播标识符5(未示出)。在这样的实施方式中,SIMD处理器核在执行任何一个线程组之前提取每个线程组的数据。例如,当广播标识符同时用于矩阵310和320时,计算单元CU0生成针对块A 32和块B32两者的读取访问请求。然而,直到生成了来自计算单元C1-C3的读取访问请求,才使用广播标识符0生成针对块B32的单个访问请求。类似地,直到生成了来自计算单元C4、C8和C12的读取访问请求,才生成使用广播标识符4(未示出)的对块A32的单个访问请求。
现在转向图5,示出了用于支持用于矩阵运算的数据广播的表500的一个实施方式。在一些实施方式中,诸如GEMM软件应用程序之类的软件应用程序的指令包括用于设置表500的由SIMD处理器核执行的指令。在一个实施方式中,特定的计算内核包括所述指令。在另一个实施方式中,该应用程序在用于使用GEMM操作定义计算内核的函数调用之前包括表设置指令。表500包括字段512-524,其用于存储在诸如GEMM操作之类的矩阵运算期间在共享数据的广播期间使用的信息。表500存储在成组的寄存器、随机存取存储器、内容可寻址存储器或其他中。在一些实施方式中,如所示设置表500,其中每个条目分配给要广播的特定共享数据。在其他实施方式中,每个条目是单独的表。表500提供线程组到计算单元的映射(分配)。
字段512存储共享数据的广播标识符。如先前在图4中所示,矩阵B 320的每个块B32-B35具有唯一的广播标识符,其将特定块(例如,B32)的共享数据与另一个块(例如,B35)的共享数据区分开。字段514存储对访问由相应的广播标识符标识的共享数据的线程组的数量的指示。在针对矩阵B 320示出的较早的示例中,十六个计算单元中的四个共享每个块B32-B35的数据。例如,计算单元CU0-CU3共享块B32的数据,计算单元CU4-CU7共享块B33的数据,依此类推。字段516存储迭代大小的指示,该指示用于确定要提取的共享数据的量。对于共享数据的每单个数据提取,都会提取或检索特定数量的共享数据。共享数据的量的指示被指定为共享数据总量的一部分、数据项的数量、数据的绝对量或其他。在一些实施方式中,要提取的共享数据的量是在针对共享数据的原始读取访问请求中指定的。
字段518存储用于诸如矩阵B 320的块B32之类的特定块的共享数据的基地址。该基地址指定存储共享数据的开头的存储器位置。如图所示,与广播标识符0相对应的共享数据的基地址为0x04DE_8F10。此处,符号“0x”表示十六进制值。基地址也是参考地址。为了获得共享数据中其他数据的绝对地址,将特定的位移(或偏移)值添加到基地址。当第一读取访问请求以共享数据的第一个四分之一为目标时,在第一读取访问请求中使用基地址和指示共享数据的四分之一的大小值。当第二读取访问请求以共享数据的第二个四分之一为目标时,共享数据的四分之一的大小作为对基地址的位移而添加以提供目标地址。另外,在第二读取访问请求中使用指示共享数据的四分之一的大小值。
在一个实施方式中,在处理器核上执行的软件应用程序的指令还将读取访问请求的目标地址与字段518中的基地址进行比较。当目标地址在字段518中的基地址的范围内时,相应的读取访问请求以共享数据为目标,并且该读取访问请求应被转换为支持共享数据的广播的单个读取访问请求。字段520存储针对相应的共享数据的未完成的读取访问请求的数量的计数。如前所述,字段514存储对访问由相应的广播标识符标识的共享数据的线程组的数量的指示。
每当软件应用程序的指令使处理器核中的逻辑检测到针对特定共享数据的未完成的读取访问请求时,字段520中的对应计数就被更新。在一个实施方式中,更新存储在字段520中的值包括增加该值。在这样的实施方式中,字段520中存储的初始值为零。在其他实施方式中,初始值等于字段514中存储的值,并且更新字段520中存储的值包括减小该值。当存储在字段520中的值不等于阈值时,软件应用程序的指令使处理器核中的逻辑防止发送针对共享数据的读取访问请求。当更新存储在字段520中的值包括增加该值时,阈值是存储在字段514中的值。当更新存储在字段520中的值包括减少该值时,该阈值是零。
在某些实施方式中,当存储在字段520中的值等于阈值时,软件应用程序的指令使处理器核中的逻辑生成用于广播共享数据的单个读取访问请求。在其他实施方式中,处理器核中的电路确定存储在字段520中的值等于阈值,并且在不执行指示电路这样做的特定指令的情况下生成单个读取访问请求。如前所述,在一个实施方式中,该单个读取访问请求包括存储断言值以指示所请求的数据的广播的位。该单个读取访问请求还包括在广播期间哪些计算单元接收所请求的数据的指示。在一些实施方式中,该单个读取访问请求包括存储在字段512中的广播标识符,该广播标识符随后被转换或解码以确定哪些计算单元在广播期间接收所请求的数据。在其他实施方式中,该单个读取访问请求包括位掩码,该位掩码指定哪些计算单元在广播期间接收所请求的数据。
字段522存储指定在广播期间哪些计算单元接收所请求的数据的位掩码。如图所示,与广播标识符0相对应的共享数据包括位掩码0xF000,其指定计算单元CU0-CU3使用该共享数据。对应于广播标识符1的共享数据包括位掩码0x0F00,它指定计算单元CU4-CU7使用共享数据,依此类推。在稍后对广播标识符进行解码以生成位掩码的实施方式中,表500中不使用字段522。在一些实施方式中,表500包括字段524,其存储共享数据的大小。在此示例中,共享数据的大小为2千字节(KB)。在另一个实施方式中,字段524包括共享数据的结束地址,因此字段518和524中的地址提供了共享数据的地址范围。在其他实施方式中,逻辑使用字段516中的迭代大小和字段518中的基地址来确定共享数据的地址范围和/或大小。
现在转到图6,示出了利用共享数据的广播支持的源代码600的一个实施方式。在各种实施方式中,计算***包括用于存储操作***、由设计者开发的软件应用程序以及软件应用程序的用户数据和结果数据的***存储器。该计算***还包括处理单元,该处理单元访问***存储器,将信息存储在高速缓存存储器子***中,并执行操作***和应用程序的指令。该处理单元包括一个或多个具有单指令多数据(SIMD)并行架构的处理器核。在一个实施方式中,主板上的加速处理单元除了通用处理器之外还包括SIMD处理器核。在另一个实施方式中,视频图形卡包括SIMD处理器核。代码600代表存储在***存储器中的软件应用程序的一个示例。在一些实施方式中,代码600的部分也是存储在除***存储器或高速缓存存储器子***之外的存储器(例如可擦除只读存储器或其他随机存取存储器)中的固件的指令。代码600包括用于指导SIMD处理器核或其他电路以执行GEMM操作的指令。代码600还包括用于支持共享数据的广播的代码段610、620和630。
在一些实施方式中,软件开发者使用并行计算平台和相应的应用程序编程接口(API)模型来使用GEMM操作来开发软件应用程序。并行计算平台的一个示例是
Figure BDA0002331105550000211
(开放计算语言)框架。OpenCL框架提高了游戏、娱乐、科学和医疗领域中使用的各种数据并行应用程序的计算性能。OpenCL框架(在本文中通常称为“OpenCL”)包括类C语言。对于视频图形应用程序,该语言的一个示例是GLSL(OpenGL阴影语言)。类C语言的函数调用称为OpenCL内核、软件内核、计算内核或简称为“内核”。
在实施方式中,代码600与数据项匹配以形成工作单元和线程组,所述数据项被分配给SIMD处理器核的计算单元。如先前所示,在一个实施方式中,通过创建表500(图5)来执行分配。代码段610、620和630包括用于支持向多个计算单元广播共享数据的指令。但是,在SIMD处理器核的计算单元上执行的计算内核没有从任何其他计算内核接收到指示共享数据与任何其他计算单元共享的指示。在各种实施方式中,代码600是包括计算内核和内部函数的集合的计算机程序。软件开发者通常定义计算内核,而内部函数通常在库中定义。
在一些实施方式中,代码600在矩阵(例如,先前的矩阵B 320)的特定列上操作。矩阵B 320的列是特定的块,例如,块B32,B33等。每个计算单元(例如先前示例中的CU 0-15)执行代码600的指令,但对不同的数据项进行操作。针对矩阵100、200、300和400示出的较早的示例说明了当共享数据时计算单元被不同地分组。共享基于输入矩阵。代码段610生成线程组到计算单元的映射。例如,代码段610通过构建类似于表500(图5的表)的表来构建一个或多个表以支持共享数据的广播,该表也将线程组分配给特定的计算单元。在一些实施方式中,代码段610被放置在外部循环中,该外部循环包括该循环内的代码600。在一个实施方式中,代码600中的“for loop”的每次迭代在诸如矩阵B 350之类的矩阵的分区或列的子集上进行操作。例如,每次迭代对矩阵B350的块B32中的数据的四分之一进行操作。在一些实施方式中,表500的字段516指定迭代大小。
在各个实施方式中,当代码段620检测到对共享数据的读取访问请求的生成时,代码段620生成广播开始消息。在一些实施方式中,代码600包括来自静态编译器的提示,该提示指示哪些读取访问请求以共享数据为目标,并且另外哪个广播标识符对应于共享数据。例如,静态编译器将读取访问请求的目标地址与共享数据的地址范围进行比较。因此,代码段620检测编译器提示。在其他实施方式中,不使用编译器提示,并且代码段620执行读取访问请求的目标地址与共享数据的地址范围的比较。该消息包括指定广播数据的开始的指示、相应的广播标识符和目标地址。
在一个实施方式中,代码段620与代码段630之间的代码600的指令获取另一矩阵(例如,先前示例的矩阵A 310或另一矩阵A)的数据。这些指令还将获取的数据存储在相应计算单元的本地数据存储(LDS)中。指令针对每个数据项分别执行获取和存储。代码段630检测矩阵B的广播消息的开始,并更新诸如针对相同共享数据的读取访问请求的数量的计数之类的计数。代码段630还将该计数与共享该共享数据的线程组的总数进行比较。此阈值与表500的字段514中存储的阈值相同。当计数等于阈值时,代码段630生成单独的单个读取访问请求,并将其发送到存储器子***以提取请求的数据。在各种实施方案中,SIMD处理器核的硬件执行代码段630,其生成开始信号。然后,硬件执行以下步骤:检测广播消息的开始,更新计数,与阈值进行比较并生成单个读取访问请求。这些和其他实施方案是可能的并且是可预期的。
所生成的单个读取访问请求包括指定读取访问请求与所请求的数据的广播相关联的指示。在一个实施方式中,该指示是存储断言值以指示所请求的数据的广播的位。单个读取访问请求还包括在随后的广播期间哪些计算单元接收所请求的数据的指示。在一些实施方式中,单个读取访问请求包括指定在广播期间哪些计算单元接收所请求的数据的位掩码,例如表500的字段522中的位掩码。在其他实施方式中,单个读取访问请求包括广播标识符,之后对其进行翻译或解码,以确定哪些计算单元在广播期间接收请求的数据。因此,当存储器子***基于单个存储器访问提供请求的共享数据时,该数据会同时提供给指定计算单元的本地数据存储。代码段630之后的代码从本地数据存储中读取数据,并使用该数据执行矩阵运算,例如GEMM运算。根据需要重复代码600的“for loop”。
现在参考图7,示出了支持用于矩阵的共享数据的广播的计算***700的一个实施方式。处理节点710包括一个或多个处理单元,例如单元715和单元730。单元715包括一个或多个处理器核712和相关联的高速缓存存储器子***714。单元730包括一个或多个处理器核732和数据存储缓冲器734。处理节点710还包括存储器控制器720以及接口740a和740b。存储器控制器720包括用于服务于存储器请求和存储器响应以及基于特定通信协议与存储器750通信的逻辑和队列。接口740a-740b也包括用于服务请求和响应以及用于基于适当的通信协议与特定设备进行通信的逻辑和队列。在一个实施方式中,接口740b与视频处理单元760通信。在一个实施方式中,至少处理节点710的所示功能被结合在单个集成电路上。在一些实施方式中,计算***700的功能被结合在片上***(SoC)上。在其他实施方式中,视频处理单元760的功能被结合在***主板中的视频图形卡上,该主板还包括处理节点710并连接到存储器750。
为了易于说明,未示出诸如锁相环(PLL)和其他时钟生成电路的其他组件、电源管理单元、共享的高速缓存存储器子***等。在一个实施方式中,处理器核712利用通用微架构。处理器核732不是处理器核712的镜像硅图像。相反,处理器核732具有与处理器核712使用的微架构不同的微架构。在一个实施方式中,处理器核732具有为计算密集型任务提供高指令吞吐量的微结构,诸如并行数据架构。在一个实施方式中,处理器核732具有单指令多数据(SIMD)核。SIMD核的示例包括图形处理单元(GPU)、数字信号处理(DSP)核或其他。以类似的方式,视频处理单元760的处理器核762也具有SIMD架构。每个处理器核732和762包括多个计算单元770,每个计算单元具有多个并行的执行通道772。在一实施方式中,处理器核762具有16个计算单元,每个计算单元具有64个并行执行通道。在其他实施方式中,使用另一数量的计算单元和并行执行通道。
通常,处理器核712分别针对数据和指令访问高速缓存存储器子***714。如果在高速缓存存储器子***714中未找到所请求的块,则处理器核712生成读取访问请求,并将其经由存储器控制器720发送至存储器750。以类似的方式,当在缓冲器734中找不到所请求的数据时,处理器核732生成存储器访问以将其发送至存储器750。在一个实施方式中,高速缓冲存储器子***714和缓冲器734中的一个或多个包括配置为存储数据块的高速的高速缓冲存储器,并且被实现为高速缓存的层次结构。高速缓存存储器子***714和缓冲器734都包括高速缓存阵列存储器和相应的高速缓存控制器。
通常,包处理逻辑716响应于在处理节点710所耦合的链路上接收到的控制包,以响应于处理器核712和/或高速缓存存储器子***714而生成控制包,以生成探测命令和响应于由存储器控制器720选择的用于服务的事务的响应包,并通过接口逻辑740a将所述包(针对这样的包,节点710为中间节点)路由到其他节点。
在一些实施方式中,处理器核762在大量对象(顶点或像素)上执行图形密集型应用,例如顶点着色器或像素着色器。由于每个对象都独立于其他对象进行处理,但是使用相同的操作序列,因此使用计算单元770和通道772的SIMD架构可显著提高性能。在一些实施方式中,处理器核732执行针对神经网络训练的应用程序,其也独立于其他对象处理对象,但是使用相同的操作序列。因此,这些类型的应用程序也受益于使用计算单元770和通道772的SIMD架构。
在各种实施方式中,存储器750包括硬盘驱动器、固态磁盘、其他类型的闪存、便携式固态驱动器、磁带驱动器等中的一个或多个。存储器750存储操作***752、应用程序754和数据756。尽管示出了单个操作***和单个应用程序,但是在其他实施方式中,另一数量的这些软件组件被存储在存储器750中。操作***752包括用于启动处理节点710的启动、将任务分配给硬件电路、管理计算***700的资源以及托管一个或多个虚拟环境的指令。
在一些实施方式中,通用处理器核712执行操作***752的指令。在一些实施方式中,应用程序754将GEMM操作用于神经网络训练、图形渲染期间的像素插值或其他。在一个实施方式中,应用程序754将其软件内核与一个或多个数据记录(例如数据756中的数据项)进行匹配,以产生一个或多个计算工作单元。工作单元被划分为多个线程组,每个线程组都有其自己的分配的唯一标识符(ID)。应用程序754还包括用于支持共享数据的广播的代码,例如广播支持代码755。在一个实施方式中,代码755类似于代码600(图6)的代码段610、620和630。当执行应用程序754和代码755时,处理器核732和762中的一个或多个包括用于支持共享数据的广播的电路。
编译器、代码755和固件中的一个或多个根据正在处理的应用程序将线程组分配给SIMD处理器核732和SIMD处理器核762中的一个或多个中的计算单元770。在一个实施方式中,通过创建表500(图5)来执行分配。在一些实施方案中,处理器核732和762中的一个产生表。例如,在一个实施方式中,应用程序754将用于像素插值的线程组分配给视频处理单元760的SIMD处理器核762,并且应用程序754将用于神经网络训练的多个线程组分配给单元730的SIMD处理器核732。针对这些和其他应用程序的其他类型的分配是可能的并且可以预期。当软件应用程序754包括用于支持共享数据的广播的由处理器核732和762中的一个或多个执行的代码755时,共享数据仅被提取一次。当共享数据仅提取一次时,没有广播支持的情况下不加载存储器子***,延迟会减少,并且***性能提高。
参照图8,示出了支持共享数据广播协议的计算***800的一个实施方案。前面描述的控制逻辑和电路编号相同。计算***800包括处理节点710、存储器750和视频处理单元860(或单元860)。在一个实施方案中,计算***800的所示功能被结合在单个集成电路上。在一些实施方案中,计算***800的功能被结合在片上***(SoC)上。在其他实施方案中,视频处理单元860的功能被结合在***母板上的视频图形卡上,该母板也包括处理节点710并连接到存储器750。
单元860包括着色器引擎870a-870b、控制器块880a-880b、矩阵数据存储装置882a-882b、高速缓存884和存储器控制器890。其他部件(例如PLL、任何电源管理逻辑、总线或架构等等)为了便于说明,未示出。单元860的接口892包括用于服务请求和响应以及用于基于适当的通信协议与处理节点710进行通信的逻辑和队列。类似地,存储器控制器890包括用于服务于存储器请求和存储器响应以及基于特定通信协议与存储器750通信的逻辑和队列。在一实施方案中,高速缓存884是高速缓存存储器子***中的二级(L2)高速缓存。然而,在其他实施方案中,高速缓存884是高速缓存存储器子***中的另一级。在一些实施方案中,矩阵数据存储装置882a-882b仅存储用于矩阵运算的数据,并且一级(L1)高速缓存(未示出)存储用于其他运算的数据。因此,在一些实施方案中,矩阵数据存储器882a-882b包括L1高速缓存控制器的等效物,并且高速缓存884包括L2高速缓存控制器。
命令处理器(未示出)基于状态信息将接收到的命令组调度到诸如着色引擎870a-870b之类的计算资源上。状态信息的示例是进程标识符(ID)、受保护/不受保护的模式/状态、工作的计算或图形类型等等。着色器引擎870a-870b中的每一个包括多个计算单元770,每个计算单元具有多个并行执行通道872和本地数据存储区874。本地数据存储区874由寄存器、随机存取存储器或其他实现。为了便于说明,现在示出了着色器引擎870a-870b的寄存器文件、其他缓冲器和管线控制逻辑。在一个实施方案中,单元860具有4个着色器引擎,每个着色器引擎具有16个计算单元,并且每个计算单元具有64个并行执行通道。在其他实施方案中,使用了其他数量的着色器引擎、计算单元和并行执行通道。
单元860还包括控制器块880a-880b,其由硬件,诸如电路,软件,诸如固件,或硬件与软件的组合来实现。在一些实施方案中,控制器块880a-880b(或控制块880a-880b)阶段化并组织将着色器输入数据加载到着色器引擎870a-870b,并且管理用于执行着色器程序的资源。在一些实施方式中,控制器块880a-880b创建表500(图5),从着色器引擎870a-870b的计算单元接收读取访问请求,维护针对特定共享数据的读取访问请求的计数,生成针对共享数据的单个访问请求,并通过矩阵数据存储装置882a-882b向高速缓存884发出单个访问请求。
在一实施方案中,矩阵数据存储装置882a-882b存储接收到的单个访问请求,并基于仲裁逻辑将它们发布到高速缓存884。仲裁逻辑基于优先级、年龄、服务质量参数、源标识符等中的一个或多个来选择要发布到高速缓存884的访问请求。单个访问请求包括如前所述的广播标识符和位掩码中的一个或多个。在一实施方案中,矩阵数据存储装置882a-882b通过从控制器块880a-880b接收位掩码来确定用于标识用于接收共享数据的计算单元的位掩码。在另一实施方案中,矩阵数据存储通过882a-882b通过转换单个访问请求中的广播标识符来确定位掩码。当矩阵数据存储装置882a-882b接收到请求的数据时,矩阵数据存储装置882a-882b将请求的数据发送到多个计算单元,而不是单个计算单元。矩阵数据存储装置882a-882b中的逻辑基于位掩码选择多个计算单元。着色器引擎870a-870b中的选择逻辑(诸如多路复用器或其他)使用位掩码来确定哪些计算单元接收到广播的响应数据。在其他实施方案中,响应数据从矩阵数据存储装置882a-882b被串行地供给而不是同时地提供给计算单元。但是,矩阵数据存储装置882a-882b仍将响应数据提供给多个计算单元,并且响应数据是由单个读取访问请求从高速缓存884访问的,而不是由多个读取访问请求访问的。
现在参考图9,示出了用于支持共享数据广播协议的方法900的一实施方案。为了讨论的目的,该实施方案中的步骤以顺序示出。然而,应注意,在所描述的方法的各种实施方案中,所描述的一个或多个元件同时执行,以与所示出的顺序不同的顺序执行,或者被完全省略。还可以根据需要执行其他附加元件。本文描述的各种***或装置中的任何一种都被配置为实现方法900。
软件开发人员设计具有GEMM操作的应用程序。在一个实施方案中,并行数据处理器核(或处理器核)的逻辑和电路执行应用程序的指令以执行GEMM操作。在一实施方式中,该应用程序包括类似于(图6的)代码600的代码。该应用程序生成多个计算内核。处理器核将共享相同数据的计算内核分配给处理器核的计算单元。处理器核通过将广播的特性加载到表中来支持共享数据的广播(框902)。该应用程序的计算内核与一个或多个数据记录(例如数据项)匹配,以产生一个或多个计算工作单元。工作单元被划分为线程组,每个线程组都有其自己被分配的唯一标识符(ID)。处理器核将这些线程组分配给处理器核中的计算单元。在一实施方案中,通过利用在字段512-524中的一个或多个中的信息创建(图5的)表500来执行分配。
在一些实施方案中,该应用程序包括来自静态编译器的提示,该提示指示哪些读取访问请求针对共享数据,并且另外,哪个广播标识符对应于共享数据。例如,静态编译器将读取访问请求的目标地址与共享数据的地址范围进行比较。在应用程序的执行期间,如果处理器核未检测到对目标共享数据的存储器访问(条件框904的“否”分支),则应用程序处理计算内核的其他指令(框906)。如果到达计算内核的末尾(条件框908的“是”分支),则方法900完成(框910)。但是,如果未达到计算内核的末尾(条件框908的“否”分支),则方法900的控制流程返回到条件框904,在此处理器核确定是否发生了对共享数据的内存访问。
如果处理器核检测到存储器访问检测到共享数据,例如处理器核检测到编译器提示(条件框904的“是”分支),则当执行应用程序或固件的指令时,处理器核的电路增加来自针对相同共享数据的线程组的读取请求的数量的计数(框912)。在一实施方案中,应用程序更新表500的字段520。如果尚未达到来自线程组的读取请求的阈值数量(条件框914的“否”分支),则处理器核防止提取共享数据(框916)。处理器核不会向存储子***发出读取访问请求。
在一实施方案中,处理器核将表500的字段520中的更新值与表500的字段514中的阈值进行比较。如果达到了来自线程组的读取请求的阈值数目(条件框914的“是”分支),然后处理器核重置计数(框918)。处理器核利用单个读取访问请求来提取共享数据(框920)。例如,处理器核将先前用广播标识符和位掩码中的一个或多个描述的单个读取访问请求发送给存储器子***。当从存储器子***返回共享数据时,处理器核基于诸如掩码之类的广播特性将共享数据广播至对应的计算单元(框922)。之后,方法900的控制流程返回到条件框904,在此处理器核确定是否发生了对共享数据的存储器访问。
在各个实施方式中,软件应用程序的程序指令用于实现先前描述的方法和/或机制。程序指令以高级编程语言(例如C语言)描述硬件的行为。或者,使用硬件设计语言(HDL),例如Verilog。程序指令存储在非暂时性计算机可读存储介质上。可以使用多种类型的存储介质。在使用期间,计算***可访问该存储介质,以将程序指令和附带的数据提供给计算***以执行程序。该计算***包括至少一个或多个存储器以及执行程序指令的一个或多个处理器。
应该强调的是,上述实施方式仅是实现方式的非限制性示例。一旦完全理解上述公开,许多变化和修改对于本领域技术人员将变得显而易见。目的是将以下权利要求解释为包含所有这样的变化和修改。

Claims (20)

1.一种计算***,其包括:
处理器,其包括多个计算单元,每个计算单元被配置为处理指令;
控制块;以及
其中所述控制块被配置为:
响应于:
检测来自所述多个计算单元中的一个的针对所述共享数据的第一访问请求;以及
确定满足合格条件;
传送针对由所述多数个计算单元中的多个计算单元请求的共享数据的单个访问请求,以及
响应于接收到所述共享数据,将所述共享数据广播到所述多个计算单元。
2.根据权利要求1所述的计算***,其中,所述单个访问请求被传送到第一高速缓存控制器,并且从第二高速缓存控制器接收所述共享数据。
3.根据权利要求1所述的计算***,其中,所述合格条件是针对所述共享数据的访问请求的计数等于需要所述共享数据的计算单元的数量。
4.根据权利要求3所述的计算***,其中,所述控制块被配置为响应于检测到针对所述共享数据的访问请求而增加访问请求的计数。
5.根据权利要求1所述的计算***,其中,所述控制块被配置为存储包括以下项中的一项或多项的用于所述共享数据的广播特性:
广播标识符,其标识所述共享数据;和
基地址,所述基地址指定存储所述共享数据的开头的存储位置。
6.根据权利要求5所述的计算***,其中,所述控制块被配置为在所述广播特性中存储等于所述给定计算单元和所述一个或多个其他计算单元之和的数量。
7.根据权利要求5所述的计算***,其中,所述控制块被配置为在所述单个访问请求中***以下一项或多项:
广播标识符;和
标识所述给定计算单元和所述一个或多个其他计算单元的掩码。
8.根据权利要求7所述的计算***,其中,所述第一高速缓存控制器被配置为:
通过接收所述单个访问请求中的所述掩码来确定所述掩码;以及
通过转换所述单个访问请求中的所述广播标识符来确定所述掩码。
9.根据权利要求8所述的计算***,其中,所述第一高速缓存控制器被配置为:
存储所述掩码;以及
在将所述共享数据广播到所述多个计算单元的过程中,将所述掩码传送到所述第二处理器。
10.根据权利要求9所述的计算***,其中,所述第二处理器利用所述掩码来选择用于接收所述共享数据的所述多个计算单元。
11.一种方法,其包括:
响应于:
检测来自所述多个计算单元中的一个的针对所述共享数据的第一访问请求;以及
确定满足合格条件;由处理器的控制块向第一高速缓存控制器传送针对共享数据的单个访问请求,该共享数据由所述处理器的多数个计算单元中的多个计算单元共享;以及
通过所述第一高速缓存控制器从所述第二高速缓存控制器将所述共享数据广播到所述多个计算单元。
12.根据权利要求11所述的方法,其中,所述多个计算单元中没有计算单元接收来自所述多个计算单元中的任何一个的共享所述共享数据的指示。
13.根据权利要求11所述的方法,其还包括:
通过所述控制块接收来自所述第二处理器的访问请求;
通过所述控制块,针对从所述第二处理器接收的针对共享数据的每个访问请求,增加访问请求的计数;以及
响应于确定所述计数等于所述给定计算单元和所述一个或多个其他计算单元之和,由所述控制块确定满足所述合格条件。
14.根据权利要求11所述的方法,其还包括通过所述控制块存储包括以下项中的一项或多项的用于所述共享数据的广播特性:
广播标识符,其标识所述共享数据;和
基地址,所述基地址指定存储所述共享数据的开头的存储位置。
15.根据权利要求14所述的方法,其还包括通过所述控制块在所述单个访问请求中***以下一项或多项:
所述广播标识符;以及
标识所述给定计算单元和所述一个或多个其他计算单元的掩码。
16.根据权利要求15所述的方法,其还包括:
通过所述第一高速缓存控制器确定通过接收所述单个访问请求中的所述掩码来确定所述掩码;以及
通过所述第一高速缓存控制器,经由转换所述单个访问请求中的所述广播标识符来确定所述掩码。
17.一种装置,其包括:
第一接口,其被配置为与包括多个计算单元的处理器进行通信,每个计算单元被配置为处理指令;
第二接口,其被配置为与第一高速缓存控制器通信;以及
电路;并且
其中,所述第一接口被配置为接收由执行多个计算内核的所述多数个计算单元生成的访问请求;
其中,所述电路被配置为响应于:
经由所述第一接口,接收来自所述多个计算单元中的一个的针对所述共享数据的第一访问请求;以及
确定满足合格条件,将针对由所述多数个计算单元中的多个计算单元请求的共享数据的单个访问请求传送给所述第一高速缓存控制器。
18.根据权利要求17所述的装置,其中,所述多个计算单元中没有计算单元接收来自所述多个计算单元中的任何一个的共享所述共享数据的指示。
19.根据权利要求17所述的装置,其中,所述电路被配置为:
对于从所述处理器接收的、针对所述共享数据的每个访问请求,增加访问请求的计数;以及
响应于确定所述计数等于所述给定计算单元与所述一个或多个其他计算单元之和,确定满足所述合格条件。
20.根据权利要求17所述的装置,其中所述电路被配置为存储所述共享数据的广播特性,所述广播特性包括以下一项或多项:
广播标识符,其中所述广播标识符为标识所述共享数据的唯一标识符;以及
基地址,所述基地址指定存储所述共享数据的开头的存储位置。
CN201911336627.3A 2019-12-23 2019-12-23 矩阵数据广播架构 Pending CN113094099A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201911336627.3A CN113094099A (zh) 2019-12-23 2019-12-23 矩阵数据广播架构
US16/729,811 US11609785B2 (en) 2019-12-23 2019-12-30 Matrix data broadcast architecture

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911336627.3A CN113094099A (zh) 2019-12-23 2019-12-23 矩阵数据广播架构

Publications (1)

Publication Number Publication Date
CN113094099A true CN113094099A (zh) 2021-07-09

Family

ID=76437449

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911336627.3A Pending CN113094099A (zh) 2019-12-23 2019-12-23 矩阵数据广播架构

Country Status (2)

Country Link
US (1) US11609785B2 (zh)
CN (1) CN113094099A (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2621195A (en) * 2022-08-01 2024-02-07 Advanced Risc Mach Ltd Complex rendering using tile buffers

Family Cites Families (60)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4727537A (en) 1985-12-24 1988-02-23 American Telephone And Telegraph Company Flow control arrangement for the transmission of data packets to a communication network
US5043979A (en) 1986-09-16 1991-08-27 Hitachi, Ltd. Time-division channel arrangement
US5379297A (en) 1992-04-09 1995-01-03 Network Equipment Technologies, Inc. Concurrent multi-channel segmentation and reassembly processors for asynchronous transfer mode
JPH06318951A (ja) 1993-01-07 1994-11-15 Toshiba Corp セル転送方法およびセル転送システム
JP2644185B2 (ja) 1994-06-27 1997-08-25 甲府日本電気株式会社 データ処理装置
US5655100A (en) 1995-03-31 1997-08-05 Sun Microsystems, Inc. Transaction activation processor for controlling memory transaction execution in a packet switched cache coherent multiprocessor system
US6604190B1 (en) * 1995-06-07 2003-08-05 Advanced Micro Devices, Inc. Data address prediction structure and a method for operating the same
AU6501096A (en) 1995-07-19 1997-02-18 Ascom Nexion Inc. Prioritized access to shared buffers
SE9504231L (sv) 1995-11-27 1997-05-28 Ericsson Telefon Ab L M Kösystem för överföring av informatonspaket
US6542502B1 (en) 1996-01-26 2003-04-01 International Business Machines Corporation Multicasting using a wormhole routing switching element
US5892766A (en) 1996-02-22 1999-04-06 Fujitsu, Ltd. Method and apparatus for coordinating access to an output of a routing device in a packet switching network
US5784003A (en) 1996-03-25 1998-07-21 I-Cube, Inc. Network switch with broadcast support
US5898687A (en) 1996-07-24 1999-04-27 Cisco Systems, Inc. Arbitration mechanism for a multicast logic engine of a switching fabric circuit
US5901147A (en) 1996-08-30 1999-05-04 Mmc Networks, Inc. Apparatus and methods to change thresholds to control congestion in ATM switches
US5970229A (en) 1996-09-12 1999-10-19 Cabletron Systems, Inc. Apparatus and method for performing look-ahead scheduling of DMA transfers of data from a host memory to a transmit buffer memory
US6188690B1 (en) 1996-12-12 2001-02-13 Pmc-Sierra, Inc. Method and apparatus for high speed, scalable communication system
US5915104A (en) 1997-01-09 1999-06-22 Silicon Graphics, Inc. High bandwidth PCI to packet switched router bridge having minimized memory latency
US6094435A (en) 1997-06-30 2000-07-25 Sun Microsystems, Inc. System and method for a quality of service in a multi-layer network element
US5918074A (en) 1997-07-25 1999-06-29 Neonet Llc System architecture for and method of dual path data processing and management of packets and/or cells and the like
CA2282441C (en) 1997-12-25 2004-07-27 Kabushiki Kaisha Toshiba Atm relay device and network including same
US6417944B1 (en) 1998-05-28 2002-07-09 3Com Corporation Asynchronous transfer mode switch utilizing optical wave division multiplexing
US6912637B1 (en) 1998-07-08 2005-06-28 Broadcom Corporation Apparatus and method for managing memory in a network switch
US6611519B1 (en) 1998-08-19 2003-08-26 Swxtch The Rules, Llc Layer one switching in a packet, cell, or frame-based network
JP3866425B2 (ja) 1998-11-12 2007-01-10 株式会社日立コミュニケーションテクノロジー パケットスイッチ
US6661774B1 (en) 1999-02-16 2003-12-09 Efficient Networks, Inc. System and method for traffic shaping packet-based signals
US6996099B1 (en) 1999-03-17 2006-02-07 Broadcom Corporation Network switch having a programmable counter
US6952401B1 (en) 1999-03-17 2005-10-04 Broadcom Corporation Method for load balancing in a network switch
US6519225B1 (en) 1999-05-14 2003-02-11 Nortel Networks Limited Backpressure mechanism for a network device
US6654346B1 (en) 1999-07-19 2003-11-25 Dunti Corporation Communication network across which packets of data are transmitted according to a priority scheme
US6556571B1 (en) 1999-05-25 2003-04-29 Nec Usa, Inc. Fast round robin priority port scheduler for high capacity ATM switches
US6768717B1 (en) 1999-05-28 2004-07-27 Network Equipment Technologies, Inc. Apparatus and method for traffic shaping in a network switch
CA2310909C (en) 1999-06-12 2005-05-24 Jinoo Joung Packet switching apparatus and method in data network
US6804239B1 (en) 1999-08-17 2004-10-12 Mindspeed Technologies, Inc. Integrated circuit that processes communication packets with co-processor circuitry to correlate a packet stream with context information
US6751698B1 (en) 1999-09-29 2004-06-15 Silicon Graphics, Inc. Multiprocessor node controller circuit and method
US6553446B1 (en) 1999-09-29 2003-04-22 Silicon Graphics Inc. Modular input/output controller capable of routing packets over busses operating at different speeds
US6687247B1 (en) 1999-10-27 2004-02-03 Cisco Technology, Inc. Architecture for high speed class of service enabled linecard
US6674754B1 (en) 1999-11-09 2004-01-06 Synchrodyne Networks, Inc. Wavelength division multiplexing combined with time division multiplexing using a common time reference
US6484224B1 (en) 1999-11-29 2002-11-19 Cisco Technology Inc. Multi-interface symmetric multiprocessor
US6754211B1 (en) 1999-12-01 2004-06-22 Mosaid Technologies, Inc. Method and apparatus for wire speed IP multicast forwarding
ATE331369T1 (de) 2000-03-06 2006-07-15 Ibm Schaltvorrichtung und verfahren
US6629147B1 (en) 2000-03-31 2003-09-30 Intel Corporation Segmentation and reassembly of data frames
US7088713B2 (en) 2000-06-19 2006-08-08 Broadcom Corporation Switch fabric with memory management unit for improved flow control
US6745277B1 (en) 2000-10-04 2004-06-01 Force10 Networks, Inc. Intelligent interleaving scheme for multibank memory
US6975638B1 (en) 2000-10-13 2005-12-13 Force10 Networks, Inc. Interleaved weighted fair queuing mechanism and system
US7002926B1 (en) 2000-11-30 2006-02-21 Western Digital Ventures, Inc. Isochronous switched fabric network
US6959002B2 (en) 2001-05-01 2005-10-25 Integrated Device Technology, Inc. Traffic manager for network switch port
US20030035371A1 (en) 2001-07-31 2003-02-20 Coke Reed Means and apparatus for a scaleable congestion free switching system with intelligent control
US6950394B1 (en) 2001-09-07 2005-09-27 Agilent Technologies, Inc. Methods and systems to transfer information using an alternative routing associated with a communication network
US7274692B1 (en) 2001-10-01 2007-09-25 Advanced Micro Devices, Inc. Method and apparatus for routing packets that have multiple destinations
GB2417105B (en) 2004-08-13 2008-04-09 Clearspeed Technology Plc Processor memory system
US9015448B2 (en) 2010-06-17 2015-04-21 Advanced Micro Devices, Inc. Message broadcast with router bypassing
US9201828B2 (en) * 2012-10-23 2015-12-01 Analog Devices, Inc. Memory interconnect network architecture for vector processor
US9479425B2 (en) 2013-05-10 2016-10-25 Arista Networks, Inc. System and method for broadcasting data to multiple hardware forwarding engines
US10671391B2 (en) * 2014-02-25 2020-06-02 MIPS Tech, LLC Modeless instruction execution with 64/32-bit addressing
US10459859B2 (en) 2016-11-28 2019-10-29 Oracle International Corporation Multicast copy ring for database direct memory access filtering engine
CN110337635B (zh) * 2017-03-20 2023-09-19 英特尔公司 用于点积操作的***、方法和装置
US10572568B2 (en) * 2018-03-28 2020-02-25 Intel Corporation Accelerator for sparse-dense matrix multiplication
US11275632B2 (en) 2018-09-14 2022-03-15 Advanced Micro Devices, Inc. Broadcast command and response
US11593105B2 (en) * 2018-12-29 2023-02-28 Intel Corporation Vector logical operation and test instructions with result negation
US20190227750A1 (en) * 2019-03-29 2019-07-25 Intel Corporation Technologies for performing tensor operations in memory

Also Published As

Publication number Publication date
US11609785B2 (en) 2023-03-21
US20210191761A1 (en) 2021-06-24

Similar Documents

Publication Publication Date Title
US7925860B1 (en) Maximized memory throughput using cooperative thread arrays
US10067768B2 (en) Execution of divergent threads using a convergence barrier
US9928034B2 (en) Work-efficient, load-balanced, merge-based parallelized consumption of sequences of sequences
US8619087B2 (en) Inter-shader attribute buffer optimization
US8751771B2 (en) Efficient implementation of arrays of structures on SIMT and SIMD architectures
US10007527B2 (en) Uniform load processing for parallel thread sub-sets
US20130298133A1 (en) Technique for computational nested parallelism
US9069664B2 (en) Unified streaming multiprocessor memory
US8786618B2 (en) Shader program headers
GB2493607A (en) Eliminating redundant instruction processing in an SIMT processor
CN103197916A (zh) 用于源操作数收集器高速缓存的方法和装置
WO2006038664A1 (en) Dynamic loading and unloading for processing unit
US9626216B2 (en) Graphics processing unit sharing between many applications
EP3726382A1 (en) Deep learning thread communication
US11983560B2 (en) Method for matrix data broadcast in parallel processing
US20180275991A1 (en) Compiler-assisted inter-simd-group register sharing
CN114579929A (zh) 加速器执行的方法和电子设备
US10430915B2 (en) Multi-GPU frame rendering
US9286114B2 (en) System and method for launching data parallel and task parallel application threads and graphics processing unit incorporating the same
US10114755B2 (en) System, method, and computer program product for warming a cache for a task launch
CN114153500A (zh) 指令调度方法、指令调度装置、处理器及存储介质
US9442759B2 (en) Concurrent execution of independent streams in multi-channel time slice groups
US11132760B2 (en) Graphics instruction operands alias
US11609785B2 (en) Matrix data broadcast architecture
CN111240745A (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