线内数据检查以进行工作量简化的制作方法

文档序号:17048441发布日期:2019-03-05 19:47阅读:233来源:国知局
线内数据检查以进行工作量简化的制作方法

本发明涉及数据检查,并且更具体地,涉及程序指令执行期间的数据检查。



背景技术:

对于深度学习应用程序,卷积核通常对稀疏的数据进行操作,这意味着数据中的许多值等于零。稀疏性可以在激活中或在权重中。激活中的稀疏性源自神经网络的前一层中的修正线性单元(relu)激活函数。当修剪神经网络以提高精确度或减小模型尺寸时,出现权重中的稀疏性。对具有零值的元素执行算术运算在处理时间和性能方面是浪费的,因为算术运算对输出没有贡献。需要解决与现有技术相关的这些问题和/或其他问题。



技术实现要素:

公开了一种用于线内(inline)数据检查的方法、计算机可读介质和系统。该方法包括以下步骤:由加载/存储单元接收加载指令,并由耦合到加载/存储单元的检查电路获得由加载指令指定的数据。附加步骤包括确定数据等于零并将数据和谓词(predicate)信号发送到加载/存储单元,其中谓词信号指示数据等于零。可选的附加步骤包括基于数据和阈值之间的比较来计算谓词值,以及将数据和谓词值发送到加载/存储单元,其中当数据小于阈值时断言谓词值并且当数据不小于阈值时否定谓词值。

附图说明

图1a示出了根据一个实施例的用于线内数据检查的方法的流程图;

图1b示出了根据一个实施例的线内数据检查逻辑的框图;

图1c示出了根据一个实施例的用于线内数据检查的方法的另一流程图;

图2a示出了根据一个实施例的图1b中所示的检查电路的框图;

图2b示出了根据一个实施例的发起线内数据检查的指令的字段;

图2c示出了根据一个实施例的用于数据瓦片(atileofdata)的算术运算的概念图;

图2d示出了根据一个实施例的包括发起线内数据检查的指令的伪代码;

图3示出了根据一个实施例的并行处理单元;

图4a示出了根据一个实施例的图3的并行处理单元中的通用处理集群;

图4b示出了根据一个实施例的图3的并行处理单元的存储器分区单元;

图5示出了根据一个实施例的图4a的流式多处理器;

图6示出了示例性系统,其中可以实现各种先前实施例的各种体系架构和/或功能。

具体实施方式

避免对具有零值的操作数(即,元素)执行算术运算的一种解决方案是检查已从存储器加载并将用作算术运算的操作数的数据。然而,这种方法需要额外的指令来比较值并减少一些操作数上的比较结果。可用于存储指令的指令发布时隙(issueslots)的数量通常也限制了内核执行的性能,尤其是数学密集型内核。因此,如果执行算术运算,则额外指令可能损害内核的性能,并且如果不执行运算,则可实现的性能改进可能受到取指延迟的限制。

当输入数据等于零时,线内数据检查技术消除了算术运算(诸如乘法)的执行。因此,与现有技术相反,零检测指令不包括在程序中。在一个实施例中,当输入数据小于阈值时,线内数据检查技术消除了运算的执行。因此,与现有技术相比,比较指令不包括在程序中。如前所述,由于处理单元内的指令的存储是有限的,所以减少指令序列的指令占用(instructionfootprint)是重要的。不需要额外的指令来执行零检测或输入数据的比较。

图1a示出了根据一个实施例的用于线内数据检查的方法的流程图100。尽管在处理单元的上下文中描述了方法100,但是方法100也可以由程序、定制电路或定制电路和程序的组合来执行。例如,方法100可以由gpu(图形处理单元)、cpu(中央处理单元)、深度学习加速器(dla)或能够执行程序指令的任何处理器执行。此外,本领域普通技术人员将理解,执行方法100的任何系统都在本发明的实施例的范围和精神内。

在步骤110,加载/存储单元接收加载指令。线内数据检查可以通过各种指令实现,包括存储器加载(将数据从存储器移动到高速缓存或寄存器文件)。指令集中的每个指令不必都支持线内数据检查。在一个实施例中,通过指令启用和禁用每个指令的线内数据检查。例如,指令中的字段可以包括指示是否启用线内数据检查的至少一位。在一个实施例中,该字段可以指示在执行时是否启用、禁用或确定线内数据检查。

在步骤120,耦合到加载/存储单元的检查电路获得由加载指令指定的数据。在一个实施例中,高速缓存或存储器接口内的存储和/或传输电路可以被配置为检查数据。在步骤130,确定数据等于零。在一个实施例中,检查电路包括零检测电路,当没有任何位被断言时,该零检测电路确定数据等于零。在一个实施例中,检查电路将数据与零进行比较以确定数据是否等于零。

在步骤140,将数据和谓词信号被发送到加载/存储单元,其中谓词信号指示数据等于零。在一个实施例中,数据被存储在目的地寄存器中,并且根据谓词信号设置或清除与目的地寄存器相关联的谓词值。在另一实施例中,加载/存储单元存储谓词值并通过不将数据存储在目的地寄存器中而丢弃数据。数据可以包括用于后续指令的一个或更多个操作数。

实现数学内核的指令序列可以包括用于计算谓词值的加载指令,并且可以将谓词值作为操作数提供给后续分支指令,以控制分支指令的执行。当执行分支指令时,谓词值可以引起采用(take)分支,从而避免执行数学内核指令。换句话说,谓词信号可以用于在执行算术运算的程序指令集上分支,以便不执行该程序指令集。在一个实施例中,当至少一个操作数(例如,乘数或被乘数)等于零时,不执行乘法运算。

现在将根据用户的期望,阐述关于可以实现或不可以实现前述框架的各种可选体系架构和特征的更多说明性信息。应该特别注意的是,以下信息是出于说明性目的提出的,并且不应该被解释为以任何方式进行限制。以下特征中的任何一个可以选择性地合并或不排除所描述的其他特征。

线内数据检查技术的示例性应用程序是用于输入数据修剪,特别是对于具有稀疏数据的深度学习应用程序。用于输入数据修剪的传统方案需要包括用于检测输入数据具有等于零或小于阈值的值的指令。与传统方案相比,当采用线内数据检查技术时,当响应于加载指令的执行接收到输入数据时并且在输入数据被存储在寄存器中以完成加载指令的执行之前,自动执行对零和小于阈值的检测。重要的是,执行数据检查的程序中不包括附加指令,特别是显式零检测和比较指令。

图1b示出了根据一个实施例的包括线内数据检查逻辑的并行处理单元135的框图。并行处理单元135包括指令高速缓存105、加载/存储单元154、寄存器文件115和检查电路170。指令高速缓存105被配置为提取和缓冲程序指令,从而减少从存储器读取指令所引起的延迟。在一个实施例中,加载指令从指令高速缓存105输出到加载/存储单元154。加载指令由加载/存储单元154解码,并且信息被提供给数据存储器190以读取数据。在一个实施例中,该信息包括读地址、数据宽度和启用掩码中的一个或更多个。数据资源190可以是高速缓存、寄存器文件、可寻址存储器、随机存取存储器(ram)、缓冲区等,其接收至少一个操作数的地址并输出至少一个操作数的数据。

检查电路170耦合在加载/存储单元154和数据存储器190之间。在一个实施例中,检查电路170包括在数据存储器190内。检查电路170从数据存储器190接收至少一个操作数的数据并计算谓词值。数据可以以浮点格式、整数格式、定点格式等表示。数据可以包括单个操作数值或多个操作数值。例如,数据可以包括表示4个单独的32位值的128位,并且在4个单独的32位值之间共享针对数据计算的谓词。

在一个实施例中,当数据等于零时断言谓词值,并且当谓词值不等于零时否定(negate)谓词值。在另一实施例中,当数据小于阈值时断言谓词值,当数据不小于阈值时(即,当数据大于或等于阈值时)否定谓词值。在又一个实施例中,当数据小于或等于阈值时断言谓词值,当数据大于阈值时否定谓词值。在一个实施例中,数据以浮点格式编码,并且检查电路170比较数据的一个或更多个指数以确定数据是否小于阈值。在一个实施例中,检查电路170计算与相对于阈值的数据分布相关联的统计数据并存储统计数据。然后可以使用统计数据来计算和/或更新阈值。

检查电路170经由谓词信号将谓词值返回到加载/存储单元154。检查电路170还返回数据。功能单元250接收至少一个操作数的数据,并且在一个实施例中,将数据存储在寄存器文件115中由加载指令指定的位置(例如,目的地地址)处。可选地,功能单元250接收至少一个操作数的数据,并丢弃数据而不是将数据存储在寄存器文件115中。加载/存储单元154可以将谓词值存储在加载/存储单元154内或寄存器文件115中。

可以使用两种不同的机制来启用线内数据检查。第一种机制使得能够基于每个指令中的操作码或启用字段对各个程序指令进行线内数据检查。第二种机制通过设置和清除一个或更多个程序指令序列的线内数据检查状态来启用和禁用线内数据检查。在一个实施例中,仅当启用线内数据检查时,检查电路170才输出谓词值。

图1c示出了根据一个实施例的用于线内数据检查的方法150的另一流程图。尽管在处理单元的上下文中描述了方法150,但是方法150还可以由程序、定制电路或定制电路和程序的组合来执行。例如,方法150可以由gpu、cpu、dla或能够执行程序指令的任何处理器执行。此外,本领域普通技术人员应当理解,执行方法150的任何系统都在本发明的实施例的范围和精神内。

如先前结合图1a所描述的那样完成操作110和120。在步骤135,基于数据和阈值之间的比较来计算谓词值。阈值可以是固定值或编程值中的一个。固定值可以通过模拟确定,然后硬连线(hard-wired)到检查电路170中。在一个实施例中,可以向可编程阈值提供每个加载指令。在另一个实施例中,可编程阈值可以存储在配置寄存器中,并且可以由专用程序指令动态地编程。例如,在神经网络的情况下,可以在神经网络的训练阶段期间确定阈值。在神经网络的推断阶段期间,也可以由程序本身计算和/或更新阈值。在一个实施例中,计算阈值以使数据的预定部分小于阈值。例如,可以计算阈值以使10%的数据小于阈值,从而有效地移除10%的数据。在另一实施例中,计算阈值以使数据的预定部分大于阈值。在又一个实施例中,计算阈值以使数据的预定部分以阈值为中心。

在步骤145,将数据和谓词值发送到加载/存储单元154。在一个实施例中,检查电路170包括比较电路,当数据小于阈值时比较电路断言谓词值,并且当数据不小于阈值时比较电路否定谓词值。在一个实施例中,数据存储在寄存器文件115中的目的地寄存器中,并且根据谓词信号设置或清除与目的地寄存器相关联的谓词值。在另一实施例中,加载/存储单元存储谓词值并通过不将数据存储在目的地寄存器中来丢弃数据。

谓词值可以用于控制是否执行程序中的一个或更多个后续指令。因此,输入数据修剪可以由检查电路170自动执行,而不需要包含附加指令,特别是不需要程序中的显式指令来执行零检测或与阈值比较。

图2a示出了根据一个实施例的图1b中所示的检查电路170的框图。检查电路170包括零检测单元210、阈值比较单元和多工器220。零检测单元210接收数据并确定数据是否等于零。如果数据等于零,则断言零谓词,如果数据不等于零,则否定零谓词。

阈值比较单元215将数据与阈值进行比较,并且如果数据小于阈值则断言阈值谓词,并且如果数据不小于阈值则否定阈值谓词。可以从加载/存储单元154接收阈值以及数据。阈值可以是固定的,与加载指令一起被包括,或者可以向阈值提供不同的指令并存储在寄存器中。

在一个实施例中,数据以浮点格式编码,并且阈值比较单元215比较数据的一个或更多个指数以确定数据是否小于阈值并且不考虑一个或更多个尾数。例如,当指数在预定数量的最高有效位位置中具有零时,阈值比较单元215可以确定数据小于阈值。

基于模式,多工器220选择零谓词或阈值谓词用于输出为谓词。在一个实施例中,从加载/存储单元154接收模式以及数据。可以从加载/存储单元154接收模式以及数据。模式可以是固定的,与加载指令一起被包括,或者可以向模式提供不同的指令并存储在寄存器中。

在一个实施例中,检查电路170内的统计单元218计算与相对于阈值的数据分布相关联的统计数据。统计数据可以指示断言阈值谓词所针对的数据的一部分,并且统计数据可以存储在统计单元218中。在一个实施例中,统计数据由指令重置。可以针对神经网络的一层收集统计数据,然后可以基于所收集的统计数据计算后面层的阈值。在一个实施例中,可以针对层的一部分收集统计数据,并且所收集的统计数据可以用于计算该层的剩余部分的阈值。在一个实施例中,基于统计数据,统计单元218可以确定将使数据的预定部分小于阈值的阈值。在另一实施例中,基于统计数据,统计单元218可以确定将使数据的预定部分大于阈值的阈值。在又一个实施例中,基于统计数据,统计单元218可以确定将使数据的预定部分以阈值为中心的阈值。

图2b示出了根据一个实施例的发起线内数据检查的指令230的字段。该指令包括操作码字段235和至少目的地寄存器(dstreg)字段250,以及读地址字段265。读地址字段265指定存储数据的数据存储器中的位置。操作码字段235指定由指令230执行的操作。在一个实施例中,操作是加载操作。目的地寄存器字段250对寄存器文件115中的位置进行编码,其中当执行指令230时所读取的数据将被存储在该位置。在一个实施例中,指令230还包括谓词字段245,使得可以在执行指令230时选择性地启用或禁用线内数据检查。

在一个实施例中,宽度字段240指定数据的宽度(例如,32位、64位、128位等)。在一个实施例中,模式字段260指定线内数据检查是否检测到等于零的数据或者小于阈值的数据。在一个实施例中,当使用阈值启用线内数据检查时,阈值字段255指定阈值。在一个实施例中,启用字段270包括数据的启用掩码,其中掩码中的每个位指示是否可以忽略数据中的一个或更多个字节或者操作数来计算谓词。

在一个实施例中,为“标准(normal)”指令和同一指令的“线内数据检查”版本指定不同的操作码。提供两个不同版本的指令允许编译器或程序员简单地用线内数据检查指令替换各个标准指令以实现线内数据检查。

图2c示出了根据一个实施例的用于数据瓦片的算术运算的概念图。可以执行两个向量a和b(每个包括8个元素)的乘法运算,以计算8×8瓦片的乘积。寄存器p0和p2各存储a的4个元素,寄存器p1和p3各存储b的4个元素。如果断言谓词值,表示存储在p0中的数据等于零或小于阈值,然后可以避免8×8瓦片内的两个4×4部分的乘法运算。类似地,如果断言一个或更多个谓词值,表示存储在p2、p1和/或p3中的数据等于零或小于阈值,然后可以避免8×8瓦片内的两个4×4部分的乘法运算。在一个实施例中,可以针对神经网络层的一个或更多个瓦片收集统计数据,并且可以将神经网络层中的剩余瓦片夹持(clamp)到所计算的阈值。

图2d示出了根据一个实施例的包括发起线内数据检查的指令的伪代码。flop3.and指令初始化存储在寄存器文件115中的寄存器p4和p5中的谓词值。寄存器p4存储具有存储在寄存器p0和p2中的元素的向量a的谓词值。寄存器p4中的值被计算为寄存器p0和p2的谓词值的与运算(and)。寄存器p5存储具有存储在寄存器p1和p3中的元素的向量b的谓词值。寄存器p5中的值被计算为寄存器p1和p3的谓词值的and。

lds.128指令是128位数据的加载指令。当由加载/存储单元154执行时,四个加载指令从数据存储器190读取数据并将数据加载到寄存器文件115中的寄存器p0、p1、p2和p3中。当由检查电路170接收到四个加载指令时,为将要存储在寄存器p0、p1、p2和p3中的数据计算相应的谓词值。flop3.or指令通过对向量a的谓词值(存储在寄存器p4中)和向量b的谓词值(存储在寄存器p5中)进行或(or)运算来计算瓦片谓词值。瓦片谓词值存储在寄存器p4中。

基于存储在寄存器p4中的瓦片谓词值有条件地执行分支(branch)指令。当断言瓦片谓词值时,采用到标签nextk的分支并且不执行指令290。因此,在向量a和b中的至少一个具有被断言的谓词值的情况下,采用分支并且不执行指令290。在一个实施例中,指令290包括在分支指令之后的一个或更多个指令,并且使用向量a和/或b作为输入操作数来执行算术运算。执行线内数据检查以计算操作数的谓词值,使得能够有条件执行指令290。避免执行不必要的算术运算的指令的执行提高了处理性能并降低了功耗。重要的是,程序中不包括用于执行线内数据检查的附加指令,并且没有用于执行线内数据检查的附加指令存储在指令高速缓存105中。

并行处理体系架构

图3示出了根据一个实施例的并行处理单元(ppu)300。ppu300可以被配置为在执行指令时实现线内数据检查。在一个实施例中,ppu300包括一个或更多个检查电路170。

在一个实施例中,ppu300是在一个或更多个集成电路器件上实现的多线程处理器。ppu300是设计用于并行处理许多线程的延迟隐藏体系架构。线程(即,执行线程)是被配置为由ppu300执行的指令集的实例。在一个实施例中,ppu300是图形处理单元(gpu),其被配置为实现用于处理三维(3d)图形数据的图形渲染管线,以便生成用于在显示装置(诸如液晶显示(lcd)设备)上显示的二维(2d)图像数据。在其他实施例中,ppu300可以用于执行通用计算。尽管为了说明的目的本文提供了一个示例性并行处理器,但应特别指出的是,该处理器仅出于说明目的进行阐述,并且可使用任何处理器来补充和/或替代该处理器。

如图3所示,ppu300包括输入/输出(i/o)单元305、主机接口单元310、前端单元315、调度器单元320、工作分配单元325、集线器330、交叉开关(xbar)370、一个或更多个通用处理集群(gpc)350以及一个或更多个分区单元380。ppu300可以经由系统总线302连接到主机处理器或其他外围设备。ppu300还可以连接到包括多个存储器设备304的本地存储器。在一个实施例中,本地存储器可以包括多个动态随机存取存储器(dram)设备。

i/o单元305被配置为通过系统总线302从主机处理器(未示出)发送和接收通信(即命令、数据等)。i/o单元305可以经由系统总线302直接与主机处理器通信或通过一个或更多个中间设备(诸如内存桥)与主机处理器通信。在一个实施例中,i/o单元305实现外围组件互连高速(pcie)接口,用于通过pcie总线进行通信。在替代的实施例中,i/o单元305可以实现其他类型的已知接口,用于与外部设备进行通信。

i/o单元305耦合到主机接口单元310,其对经由系统总线302接收到的分组进行解码。在一个实施例中,分组表示被配置为使ppu300执行各种操作的命令。主机接口单元310按照命令指定将解码的命令发送到ppu300的各种其他单元。例如,一些命令可以被发送到前端单元315。其他命令可以被发送到集线器330或ppu300的其他单元,诸如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。换句话说,主机接口单元310被配置为在ppu300的各种逻辑单元之间和之中路由通信。

在一个实施例中,由主机处理器执行的程序在缓冲器中对命令流进行编码,该缓冲区向ppu300提供用于处理的工作量。工作量可以包括要由那些指令处理的许多指令和数据。缓冲器是存储器中可由主机处理器和ppu300两者访问(即,读/写)的区域。例如,主机接口单元310可被配置为通过由i/o单元305在系统总线302上发送的存储器请求来访问连接到系统总线302的系统存储器中的缓冲器。在一个实施例中,主机处理器将命令流写入缓冲器,然后向ppu300发送指向命令流开始的指针。主机接口单元310向前端单元315提供指向一个或更多个命令流的指针。前端单元315管理一个或更多个流,从流读取命令并将命令转发到ppu300的各个单元。

前端单元315耦合到调度器单元320,其配置各种gpc350以处理由一个或更多个流定义的任务。调度器单元320被配置为跟踪与由调度器单元320管理的各种任务相关的状态信息。状态可以指示任务被指派给哪个gpc350,该任务是活动的还是不活动的,与该任务相关联的优先级等等。调度器单元320管理一个或更多个gpc350上的多个任务的执行。

调度器单元320耦合到工作分配单元325,其被配置为分派任务以在gpc350上执行。工作分配单元325可以跟踪从调度器单元320接收到的多个调度任务。在一个实施例中,工作分配单元325为每个gpc350管理待处理(pending)任务池和活动任务池。待处理任务池可以包括多个时隙(例如,32个时隙),其包含被指派为由特定gpc350处理的任务。活动任务池可以包括多个时隙(例如,4个时隙),用于正在由gpc350主动处理的任务。当gpc350完成任务的执行时,该任务从gpc350的活动任务池中逐出,并且来自待处理任务池的其他任务之一被选择和调度以在gpc350上执行。如果gpc350上的活动任务已经空闲,例如在等待数据依赖性被解决时,那么活动任务可以从gpc350中逐出并返回到待处理任务池,而待处理任务池中的另一个任务被选择并调度以在gpc350上执行。

工作分配单元325经由xbar370与一个或更多个gpc350通信。xbar370是将ppu300的许多单元耦合到ppu300的其他单元的互连网络。例如,xbar370可以被配置为将工作分配单元325耦合到特定的gpc350。虽然没有明确示出,但是ppu300的一个或更多个其他单元被耦合到主机接口单元310。其他单元也可以经由集线器330连接到xbar370。

任务由调度器单元320管理并由工作分配单元325分派给gpc350。gpc350被配置为处理任务并生成结果。结果可以由gpc350内的其他任务消耗,经由xbar370路由到不同的gpc350,或者存储在存储器304中。结果可以经由分区单元380写入存储器304,分区单元380实现用于从存储器304读取数据和向存储器304写入数据的存储器接口。在一个实施例中,ppu300包括数目为u的分区单元380,其等于耦合到ppu300的独立且不同的存储器设备304的数目。下面将结合图4b更详细地描述分区单元380。

在一个实施例中,主机处理器执行实现应用程序编程接口(api)的驱动程序内核,其使得能够在主机处理器上执行一个或更多个应用程序以调度用于在ppu300上执行的操作。应用程序可以生成指令(即api调用),其使得驱动程序内核生成一个或更多个任务以由ppu300执行。驱动程序内核将任务输出到正在由ppu300处理的一个或更多个流。每个任务可以包括一个或更多个相关线程组,本文称为线程束(warp)。线程块可以指包括用于执行任务的指令的多个线程组。同一线程组中的线程可以通过共享存储器交换数据。在一个实施例中,线程组包括32个相关线程。

图4a示出了根据一个实施例的图3的ppu300内的gpc350。如图4a所示,每个gpc350包括用于处理任务的多个硬件单元。在一个实施例中,每个gpc350包括管线管理器410、预光栅操作单元(prop)415、光栅引擎425、工作分配交叉开关(wdx)480、存储器管理单元(mmu)490以及一个或更多个纹理处理集群(tpc)420。应当理解,图4a的gpc350可以包括代替图4a中所示单元的其他硬件单元或除图4a中所示单元之外的其他硬件单元。

在一个实施例中,gpc350的操作由管线管理器410控制。管线管理器410管理用于处理分配给gpc350的任务的一个或更多个tpc420的配置。在一个实施例中,管线管理器410可以配置一个或更多个tpc420中的至少一个来实现图形渲染管线的至少一部分。例如,tpc420可以被配置为在可编程流式多处理器(sm)440上执行顶点着色程序。管线管理器410还可以被配置为将从工作分配单元325接收的分组路由到gpc350中适当的逻辑单元。例如,一些分组可以被路由到prop415和/或光栅引擎425中的固定功能硬件单元,而其他分组可以被路由到tpc420以供图元引擎435或sm440处理。

prop单元415被配置为将由光栅引擎425和tpc420生成的数据路由到分区单元380中的光栅操作(rop)单元,其将在下面更详细地描述。prop单元415还可以被配置为执行颜色混合的优化,组织像素数据,执行地址转换等。

光栅引擎425包括被配置为执行各种光栅操作的多个固定功能硬件单元。在一个实施例中,光栅引擎425包括设置引擎、粗光栅引擎、剔除引擎、裁剪引擎、精细光栅引擎和瓦片聚合引擎。设置引擎接收变换后的顶点并生成与由顶点定义的几何图元关联的平面方程。平面方程被发送到粗光栅引擎以生成图元的覆盖信息(例如,用于瓦片的x、y覆盖掩码)。粗光栅引擎的输出被发送到剔除引擎,其中与未通过z-测试的图元相关联的片段被剔除,并被发送到裁剪引擎,其中位于视锥体之外的片段被裁剪掉。那些经过裁剪和剔除后留下来的片段可以被传递到精细光栅引擎,以基于由设置引擎生成的平面方程生成像素片段的属性。光栅引擎425的输出包括例如要由tpc420内的片段着色器处理的片段。

包括在gpc350中的每个tpc420包括m管道控制器(mpc)430、图元引擎435、一个或更多个sm440以及一个或更多个纹理单元445。mpc430控制tpc420的操作,将从管线管理器410接收到的分组路由到tpc420中的适当单元。例如,与顶点相关联的分组可以被路由到图元引擎435,图元引擎435被配置为从存储器304提取与顶点相关联的顶点属性。相反,与着色程序相关联的分组可以被传输到sm440。

在一个实施例中,纹理单元445被配置为从存储器304加载纹理映射(例如,纹理元素(texel)的2d阵列),并对纹理映射进行采样以产生经采样的纹理值,以用于在由sm440执行的着色程序中使用。纹理单元445实施纹理操作,例如使用mip-map(即,不同细节层次的纹理映射)的滤波操作。纹理单元445还用作sm440到mmu490的加载/存储路径。在一个实施例中,每个tpc420包括两个(2)纹理单元445。

sm440包括被配置为处理由多个线程表示的任务的可编程流式处理器。每个sm440是多线程的并且被配置为同时执行来自特定线程组的多个线程(例如,32个线程)。在一个实施例中,sm440实现simd(单指令、多数据)体系架构,其中线程组(即,warp)中的每个线程被配置为基于相同的指令集来处理不同的数据集。线程组中的所有线程都执行相同的指令。在另一个实施例中,sm440实现simt(单指令、多线程)体系架构,其中线程组中的每个线程被配置为基于相同的指令集处理不同的数据集,但是其中线程组中的各个线程在执行期间被允许发散。换句话说,当针对该线程组的指令被分派用于执行时,该线程组中的一些线程可以是活动的,从而执行该指令,而该线程组中的其他线程可以是不活动的,从而执行空操作(nop)而不是执行指令。下面结合图5更详细地描述sm440。

mmu490提供gpc350和分区单元380之间的接口。mmu490可以提供虚拟地址到物理地址的转换、存储器保护以及存储器请求的仲裁。在一个实施例中,mmu490提供用于执行从虚拟地址到存储器304中的物理地址的转换的一个或更多个转换后备缓冲器(tlb)。

图4b示出了根据一个实施例的图3的ppu300的存储器分区单元380。如图4b所示,存储器分区单元380包括光栅操作(rop)单元450、二级(l2)高速缓存460、存储器接口470和l2交叉开关(xbar)465。存储器接口470耦合到存储器304。存储器接口470可以实现用于高速数据传输的16、32、64、128位数据总线等。在一个实施例中,ppu300合并了u个存储器接口470,每个分区单元380有一个存储器接口470,其中每个分区单元380连接到对应的存储器设备304。例如,ppu300可以连接到多达u个存储器设备304,诸如图形双数据速率版本5的同步动态随机存取存储器(gddr5sdram)。在一个实施例中,存储器接口470实现dram接口并且u等于8。

在一个实施例中,ppu300实现多级存储器分层结构。存储器304位于耦合到ppu300的sdram的片外。来自存储器304的数据可以被提取并存储在l2高速缓存460中,其位于片上并且在各个gpc350之间共享。如图所示,每个分区单元380包括与对应的存储器设备304相关联的l2高速缓存460的一部分。然后可以在gpc350内的各种单元中实现较低级别的高速缓存。例如,每个sm440可以实现一级(l1)高速缓存。l1高速缓存是专用于特定sm440的专用存储器。来自l2高速缓存460的数据可以被提取并存储在每个l1高速缓存中,以在sm440的功能单元中进行处理。l2高速缓存460被耦合到存储器接口470和xbar370。

rop单元450包括rop管理器455、颜色rop(crop)单元452和zrop(zrop)单元454。crop单元452执行与像素颜色相关的光栅操作,诸如颜色压缩、像素混合等。zrop单元454结合光栅引擎425执行深度测试。zrop单元454从光栅引擎425的剔除引擎接收与像素片段相关联的样本位置的深度。zrop单元454测试与片段相关联的样本位置相对深度缓冲区中的对应深度的深度。如果片段通过样本位置的深度测试,则zrop单元454更新深度缓冲区并将深度测试的结果发送给光栅引擎425。rop管理器455控制rop单元450的操作。应该理解,分区单元380的数量可以不同于gpc350的数量,并且因此每个rop单元450可以耦合到gpc350中的每一个。因此,rop管理器455跟踪从不同gpc350接收到的分组并确定由rop单元450生成的结果被路由到哪个gpc350。crop单元452和zrop单元454经由l2xbar465耦合到l2高速缓存460。

图5示出了根据一个实施例的图4a的流式多处理器440。如图5所示,sm440包括指令高速缓存505、一个或更多个调度器单元510、寄存器文件520、一个或更多个处理核心550、一个或更多个特殊功能单元(sfu)552、一个或更多个加载/存储单元(lsu)554、互连网络580、共享存储器/l1高速缓存570。在一个实施例中,图1b中所示的指令高速缓存105、加载/存储单元154和寄存器文件115分别是指令高速缓存505、加载/存储单元(lsu)554和寄存器文件520。

如上所述,工作分配单元325分派用于在ppu300的gpc350上执行的任务。任务被分配给gpc350内的特定tpc420,并且如果任务与着色程序相关联,则该任务可以被分配给sm440。调度器单元510从工作分配单元325接收任务并且管理用于指派给sm440的一个或更多个线程组(即,线程束)的指令调度。调度器单元510调度线程以在并行线程组中执行,其中每个组称为线程束。在一个实施例中,每个线程束包括32个线程。调度器单元510可管理多个不同的线程束,调度线程束以执行,然后在每个时钟周期期间将来自多个不同线程束的指令分派到各个功能单元(即,核心550、sfu552和lsu554)。

每个调度单元515被配置为向一个或更多个功能单元传送指令。在图5所示的实施例中,调度器单元510包括两个调度单元515,其使得能够在每个时钟周期期间调度来自相同线程束的两个不同指令。在替代实施例中,每个调度器单元510可以包括单个调度单元515或附加调度单元515。

每个sm440包括寄存器文件520,其提供用于sm440的功能单元的一组寄存器。在一个实施例中,寄存器文件520在每个功能单元之间被划分,使得每个功能单元被分配寄存器文件520的专用部分。在另一个实施例中,寄存器文件520在由sm440执行的不同的线程束之间被划分。寄存器文件520为连接到功能单元的数据路径的操作数提供临时存储。

每个sm440包括l个处理核心550。在一个实施例中,sm440包括大量(例如128个等)不同的处理核心550。每个核心550可以包括完全管线化的单精度处理单元,其包括浮点算术逻辑单元和整数算术逻辑单元。核心550还可以包括双精度处理单元,其包括浮点算术逻辑单元。在一个实施例中,浮点算术逻辑单元实现用于浮点算术的ieee754-2008标准。每个sm440还包括执行特殊功能(例如,属性估计、倒数平方根等)的m个sfu552,以及在共享存储器/l1高速缓存570和寄存器文件520之间实现加载和存储操作的n个lsu554。在一个实施例中,sm440包括128个核心550、32个sfu552和32个lsu554。

每个sm440包括将每个功能单元连接到寄存器文件520并将lsu554连接到寄存器文件520、共享存储器/l1高速缓存570的互连网络580。在一个实施例中,互连网络580是交叉开关,其可以配置为将任何功能单元连接到寄存器文件520中的任何寄存器,并将lsu554连接到寄存器文件和共享存储器/l1高速缓存570中的存储位置。

共享存储器/l1高速缓存570是片上存储器阵列,其允许sm440与图元引擎435之间以及sm440中的线程之间的数据存储和通信。在一个实施例中,共享存储器/l1高速缓存570包括64kb的存储容量并且处于从sm440到分区单元380的路径中。共享存储器/l1高速缓存570可以用于高速缓存读取和写入。在一个实施例中,共享存储器/l1高速缓存570包括检查电路170以执行用于加载操作的线内数据检查。在一个实施例中,至少一个检查电路170位于共享存储器/l1高速缓存570和lsu554之间。

上述ppu300可以被配置为比传统cpu更快地执行高度并行计算。并行计算在图形处理、数据压缩、神经网络、深度学习、生物识别、流处理算法等方面具有优势。

当被配置用于通用并行计算时,可以使用更简单的配置。在这个模型中,如图3所示,固定功能图形处理单元被绕过,创建了一个更简单的编程模型。在该配置中,工作分配单元325将线程块直接指派并分配给tpc420。块中的线程执行相同的程序,在计算中使用唯一线程id来确保每个线程生成唯一结果,使用sm440执行程序并执行计算,使用共享存储器/l1高速缓存570以在线程之间通信,并且使用lsu554通过分区共享存储器/l1高速缓存570和分区单元380读取和写入全局存储器。当配置用于通用并行计算时,sm440也可以写入调度器单元320可用于在tpc420上启动新工作的命令。

在一个实施例中,ppu300包括深度学习或机器学习处理器。ppu300被配置为接收命令,该命令指定用于建模神经网络并根据神经网络处理数据的程序。

在一个实施例中,ppu300包括图形处理单元(gpu)。ppu300被配置为接收指定着色程序用于处理图形数据的命令。图形数据可以被定义为一组图元,例如点、线、三角形、四边形、三角形条等。典型地,图元包括指定图元的多个顶点(例如,在模型空间坐标系中)以及与图元的每个顶点相关联的属性的数据。ppu300可以被配置为处理图形图元以生成帧缓冲器(即,用于显示器的每个像素的像素数据)。

应用程序将场景的模型数据(即,顶点和属性的集合)写入存储器(诸如系统存储器或存储器304)。模型数据定义可在显示器上可见的每个对象。然后应用程序对驱动程序内核进行api调用,其请求渲染和显示模型数据。驱动程序内核读取模型数据并将命令写入一个或更多个流以执行操作来处理模型数据。这些命令可以引用要在ppu300的sm440上实现的不同着色程序,包括顶点着色器、外壳着色器、域着色器、几何着色器和像素着色器中的一个或更多个。例如,sm440中的一个或更多个可以被配置为执行顶点着色程序,其处理由模型数据定义的多个顶点。在一个实施例中,不同的sm440可以被配置为同时执行不同的着色程序。例如,sm440的第一子集可以被配置为执行顶点着色程序,而sm440的第二子集可以被配置为执行像素着色程序。sm440的第一子集处理顶点数据以产生经处理的顶点数据,并将经处理的顶点数据写入l2高速缓存460和/或存储器304。在经处理的顶点数据被光栅化(即,从三维数据变换成屏幕空间中的二维数据)以产生片段数据之后,sm440的第二子集执行像素着色程序以产生经处理的片段数据,然后将其与其他经处理的片段数据混合并写入存储器304中的帧缓冲区。顶点着色程序和像素着色程序可以同时执行,以管线方式处理来自同一场景的不同数据,直到该场景的所有模型数据已经被渲染到帧缓冲器为止。然后,帧缓冲区的内容被发送到显示控制器用于在显示设备上显示。

ppu300可以包括在台式计算机、膝上型计算机、平板电脑、智能电话(例如无线、手持设备)、个人数字助理(pda)、数码相机、手持式电子装置等中。在一个实施例中,ppu300包含在单个半导体衬底上。在另一个实施例中,ppu300与一个或更多个其他逻辑单元(例如精简指令集计算机(risc)cpu、存储器管理单元(mmu)、数字-模拟转换器(dac)等)一起被包括在片上系统(soc)上。

在一个实施例中,ppu300可以被包括在图形卡上,图形卡包括一个或更多个存储器设备304,诸如gddr5sdram。图形卡可以被配置为与台式计算机(包括例如北桥芯片集和南桥芯片集)的主板上的pcie插槽接口。在又一个实施例中,ppu300可以是包含在主板的芯片集(即,北桥)中的集成图形处理单元(igpu)。

可以在ppu300内执行各种程序,以便实现神经网络的各个层。例如,设备驱动程序可以启动ppu300上的内核以实现一个sm440(或多个sm440)上的神经网络。设备驱动程序(或由ppu300执行的初始内核)也可启动ppu300上的其他内核以执行神经网络的其他层。另外,一些神经网络层可以在ppu300内实现的固定单元硬件上实现。应当理解,在由后续内核在sm440上处理之前,来自一个内核的结果可以由一个或更多个中间固定功能硬件单元处理。

示例性系统

图6示出了示例性系统600,其中可以实现各种先前实施例的各种体系架构和/或功能。示例性系统600可以被配置为支持线内数据检查。

如图所示,提供了系统600,其包括连接到通信总线602的至少一个中央处理器601。通信总线602可以使用任何合适的协议来实现,诸如pci(外围组件互连)、pci-express、agp(加速图形端口)、超级传输(hypertransport)或任何其他总线或一个或更多个点对点通信协议。在一个实施例中,通信总线602是图3中所示的系统总线302。系统600还包括主存储器604。控制逻辑(软件)和数据存储在主存储器604中,主存储器604可以采用随机存取存储器(ram)的形式。

系统600还包括输入设备612、图形处理器606和显示器608(即常规crt(阴极射线管)、lcd(液晶显示器)、led(发光二极管)、等离子显示器等)。用户输入可以从输入设备612接收,例如键盘、鼠标、触摸板、麦克风等。在一个实施例中,图形处理器606可以包括多个着色器模块、光栅化模块等。前述模块中的每一个甚至可以位于单个半导体平台上,以形成图形处理单元(gpu)。

在本说明书中,单个半导体平台可以指唯一的单一的基于半导体的集成电路或芯片。应该指出的是,术语单个半导体平台还可以指具有增加的连接性的多芯片模块,其模拟片上操作,并且相对于利用传统的中央处理单元(cpu)和总线实现而言有明显改进。当然,根据用户的需要,各种模块也可以单独地或以各种组合位于半导体平台。

系统600还可以包括辅助存储器610。辅助存储器610包括例如硬盘驱动器和/或可移除存储驱动器,其代表软盘驱动器、磁带驱动器、光盘驱动器、数字通用盘(dvd)驱动器、记录设备、通用串行总线(usb)闪存。可移除存储驱动器以众所周知的方式从可移除存储单元读取和/或写入可移除存储单元。

计算机程序或计算机控制逻辑算法可以存储在主存储器604和/或辅助存储器610中。这些计算机程序在被执行时使得系统600能够执行各种功能。存储器604、存储器610和/或任何其他存储器是计算机可读介质的可能示例。

在一个实施例中,可以在中央处理器601、图形处理器606、能够实现中央处理器601和图形处理器606两者的能力的至少一部分的集成电路(未示出)、芯片集(即,设计作为用于执行相关功能的单元工作和出售的一组集成电路)和/或用于此的任何其他集成电路的上下文中实现各种在先附图的体系架构和/或功能。

此外,各种先前附图的架构和/或功能可以在通用计算机系统、电路板系统、专用于娱乐目的的游戏控制台系统、专用系统和/或任何其他期望的系统的上下文中实现。例如,系统600可以采用台式计算机、膝上型计算机、服务器、工作站、游戏控制台、嵌入式系统和/或任何其他类型的逻辑的形式。此外,系统600可以采用各种其他设备的形式,包括但不限于个人数字助理(pda)设备、移动电话设备、电视等。

此外,虽然未示出,但系统600可以耦合到网络(例如,电信网络、局域网(lan)、无线网络、诸如因特网的广域网(wan)、对等网络、线缆网络等)用于通信目的。

虽然上文已经描述了各种实施例,但应该理解,它们仅作为示例呈现,而不是限制。因此,优选实施例的宽度和范围不应被任何上述示例性实施例限制,而应仅根据所附权利要求及其等同物来限定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1