图形纹理映射设备及其操作方法以及存储介质与流程

文档序号:17292647发布日期:2019-04-03 04:05阅读:156来源:国知局
图形纹理映射设备及其操作方法以及存储介质与流程

本发明涉及用于在图形纹理映射单元(graphicstexturemappingunit)中执行卷积运算(convolutionoperation)的方法和设备。



背景技术:

在数据处理单元(例如,处理器)中通常执行卷积运算。卷积运算例如可以用于执行图像后处理,诸如模糊、锐化、浮雕、边缘检测、图像比例放大等。卷积运算还可以在实施人工神经网络(卷积神经网络)例如以执行图像识别和分类时使用。

卷积运算通常包括向用于输入数据值的阵列(诸如未处理图像)的特定卷积位置的数据值的对应集合或“窗口”应用权重值的集合或“核”。然后通常对已加权的数据值的集合求和,以提供用于讨论中的特定卷积位置的输出数据值。然后通常关于被卷积以产生数据值的输出阵列(诸如已处理图像)的输入数据值的整个阵列的各卷积位置重复该处理。

当在图形处理单元(例如,图形处理器)中执行卷积运算时,可以由图形处理单元的可编程处理电路(例如,可编程着色器单元)执行卷积运算。在这些布置中,可编程处理电路通常将执行程序,该程序执行两个加载操作,一个是从存储器加载权重值的核,并且另一个是从存储器加载要对其执行卷积运算的(输入)数据值,该程序然后使用权重值的核计算所需加权和,来对(输入)数据值执行一系列算术运算。

卷积运算可能需要执行大量加载和算术运算。虽然图形处理单元可以良好地适于执行大量运算(例如,并行),但卷积运算仍然可能消耗大量的图形处理单元的处理资源。例如,可能需要图形处理单元执行“加载”指令(加载权重值和输入数据值),执行“算术”指令(对输入数据值加权并且求和),并且执行“存储”指令(存储卷积运算的结果)多次。

申请人相信存在针对执行诸如图形处理系统这样的数据处理系统中的卷积运算的改进的范围。



技术实现要素:

根据本发明的方面,提供了一种操作计算机图形纹理映射设备的方法,该方法包括以下步骤:

向图形纹理映射设备提供执行卷积运算的指令,该指令表示要用于卷积运算的权重值的集合和要对其执行卷积运算的输入数据值的集合;

该方法还包括以下步骤:

纹理映射设备响应于接收到执行卷积运算的指令进行如下操作:

接收要用于卷积运算的所表示的权重值的集合,并且从存储器提取要对其执行卷积运算的所表示的输入数据值集合;以及

使用在指令中表示的权重值的集合,对在指令中表示的输入数据值的集合执行卷积运算。

根据本发明的另一个方面,提供了一种图形处理单元,该图形处理单元包括:

纹理映射设备;和

数据处理电路,该数据处理电路可操作为向纹理映射设备提供执行卷积运算的指令,该指令表示要用于卷积运算的权重值的集合和要对其执行卷积运算的输入数据值的集合;

其中,纹理映射设备包括:

纹理提取电路,该纹理提取电路可操作为从存储器提取要对其执行卷积运算的输入数据值的集合;和

纹理滤波电路,该纹理滤波电路可操作为使用在由纹理映射设备接收的卷积运算指令中所表示的权重值的集合,对由纹理提取电路提取的输入数据值的集合执行卷积运算。

本发明还扩展到纹理映射设备的操作和纹理映射设备本身。

由此,根据本发明的另一个方面,提供了一种操作图形纹理映射设备的方法,该方法包括,由纹理映射设备进行如下操作:

接收用于要执行的卷积运算的权重值的集合,并且从存储器提取要对其执行卷积运算的输入数据值的集合;以及

使用所接收的权重值的集合对所提取的输入数据值的集合执行卷积运算。

根据本发明的另一个方面,提供了一种图形纹理映射设备,该纹理映射设备包括:

纹理提取电路,该纹理提取电路可操作为接收用于要执行的卷积运算的权重值的集合,并且从存储器提取要对其执行卷积运算的输入数据值的集合;和

纹理滤波电路,该纹理滤波电路可操作为使用由纹理提取电路接收的权重值的集合来对由纹理提取电路提取的输入数据值的集合执行卷积运算。

申请人已经识别,在(例如,2d)卷积运算与图形纹理映射操作之间可以存在大量相似性,例如,在卷积运算中,向输入数据值的阵列的数据值的各集合或“窗口”应用权重值的集合或“核”,例如,在图形纹理映射操作中,从存储器提取纹理数据值(纹素)的集合,并且该集合使用由纹理映射设备在内部计算的插值权重值经受纹理滤波。

鉴于此,申请人还已经识别,纹理映射设备可以被再利用为例如以高效方式执行卷积运算。具体地,申请人已经识别,纹理映射设备的纹理提取电路可以被操作为接收(例如,设置有或从存储器提取)用于期望卷积运算的权重值的集合或核(而不是例如纹理映射设备如通常在纹理映射操作中的情况下在内部计算插值权重值的集合)。纹理映射设备的纹理提取电路还可以被操作为从存储器提取要对其执行期望卷积运算的输入数据值的集合或窗口(例如,以与从存储器提取用于纹理映射操作的纹理数据值(纹素)的类似方式)。

纹理映射设备的纹理滤波电路然后可以被操作为,使用所接收的权重值的集合或核来对所提取的输入数据值的集合或窗口执行期望卷积运算(而不是例如如通常在纹理映射操作中的情况下在内部计算并且然后使用插值权重值的集合)。如以下将更详细讨论的,这然后允许使用更少的数据传送和/或使用更少的指令例如以高效方式由纹理映射设备执行卷积运算。这然后还可以使图形处理单元(图形处理器)的其他处理资源(诸如可编程处理电路(例如,着色器))可用于执行其他数据(例如,图形)处理操作,从而提高图形处理单元的灵活性和能力。

此外,纹理映射设备仍然可以可操作为并且可以在需要时执行一个或更多个纹理映射操作。由此,在一些实施方式中,纹理映射设备还可以执行一个或更多个(并且通常为多个)纹理映射操作。由此,实施方式还可以包括:纹理提取电路从存储器提取执行纹理映射操作所用的纹理数据值(纹素)的集合。实施方式还可以包括:纹理滤波电路(例如,内部地)计算用于纹理映射操作的插值权重值的集合。实施方式还可以包括:纹理滤波电路使用所计算的插值权重值的集合和所提取的纹理数据值的集合执行纹理映射操作。

在实施方式中,纹理提取电路可以可操作为并且可以接收执行纹理映射操作的指令。用于纹理映射操作的指令可以采取任意期望且合适的形式。例如,指令可以表示执行纹理映射操作应用的纹理数据值的一个或更多个阵列或“表面”(例如,纹理或“贴图细化”)。纹理数据值的阵列可以采取任意期望且合适的形式。用于纹理映射操作的指令例如可以(例如,使用坐标的集合)表示执行纹理映射操作应关于的采样位置。

类似地,在实施方式中,纹理提取电路可以可操作为并且可以接收执行卷积运算的指令。用于卷积运算的指令再次可以采取任意期望且合适的形式。例如,用于卷积运算的指令可以表示应对其执行卷积运算的输入数据值的一个或更多个阵列或“表面”(例如,图像、纹理或数据的其他阵列)。输入数据值的阵列可以采取任意期望且合适的形式,诸如图像或图形数据的阵列(例如,用于图像或图形后处理、图像识别、图像分类等)或非图像或非图形数据的阵列(例如,用于非图像或非图形数据处理)。指令可以(例如,使用索引)表示关于输入数据值的阵列内的应执行卷积运算的卷积位置。这些实施方式可以允许纹理映射设备被表示为以与纹理映射操作大致类似的方式执行卷积运算,由此,降低或避免为了执行卷积运算而对纹理映射设备的显性指令(例如,可以不需要显性“加载”、“算术”以及“存储指令”)和/或广泛重新构造(例如,另外硬件元件)的需要。

如以上所讨论的,在实施方式中,用于卷积运算的指令还可以表示要用于卷积运算的权重值的集合或核。在一些实施方式中,执行卷积运算的指令还可以表示包括要用于卷积运算的权重值的集合或核的、权重值的多个集合或核的更大阵列或“图谱”。指令例如可以(例如,使用索引)表示要用于卷积运算的权重值的集合或核在图谱内的位置。

指令还可以表示要用于卷积运算的权重值的集合或核的尺寸。这可以通过在核中的元素(权重)的数量和/或配置方面表示要用于卷积运算的权重值的集合或核的尺寸来进行。例如,指令可以表示要使用3*3(或5*5等)核。其他布置(诸如在位或字节方面表示核尺寸)也将是可行的(如果期望)。

这然后允许代替用于多个不同卷积运算的权重值的集合或核的多个更小数据结构使用单个更大数据结构(核或权重“图谱”)。这进而可以降低存储用于多个不同卷积运算的权重值的集合或核所需的开销(例如,用于数据结构的报头的数量),由此减小存储空间。

由此,在实施方式中,执行卷积运算和/或纹理映射操作的指令可以表示一个或更多个输入参数。输入参数可以使用一个或更多个描述符来表示。一个或更多个描述符可以包含在指令中,和/或可以存储在存储器中。用于存储一个或更多个描述符的存储器可以为存储权重值和/或输入数据值的同一存储器或可以为不同存储器。纹理提取电路可以可操作为并且可以响应于执行卷积运算和/或纹理映射操作的指令例如从存储器提取执行卷积运算和/或纹理映射操作所需的描述符和/或输入参数。

描述符可以采取任意期望且合适的形式。在纹理映射操作的情况下,描述符可以包括“纹理描述符”(txd)。纹理描述符可以表示用于纹理映射操作的一个或更多个“表面描述符”(sfd)。表面描述符可以表示和/或描述执行纹理映射操作应凭借的纹理数据值的阵列或表面。类似地,在卷积运算的情况下,描述符可以包括纹理描述符(txd)。纹理描述符可以表示用于卷积运算的一个或更多个表面描述符(sfd)。表面描述符可以再次表示和/或描述应对其执行卷积运算的输入数据值的阵列或表面。

在纹理映射操作的情况下,描述符还可以包括采样器描述符(smd)。采样器描述符可以表示要用于纹理映射操作的滤波方法(例如,双线性的、三线性的等)和/或其他参数。在卷积运算的情况下,采样器描述符相反可以表示用于卷积运算的(例如,单个)表面描述符(sfd)。在这种情况下,表面描述符例如可以表示和/或描述要用于卷积运算的、权重值的集合或核,或包括权重值的集合或核的图谱。

再次,这些实施方式可以允许纹理映射设备致力于以与纹理映射操作大致类似的方式执行卷积运算,由此,降低或避免为了执行卷积运算而对纹理映射设备的显性指令和/或广泛重新构造(例如,另外硬件元件)的需要。

权重值的集合或核可以以任意期望且合适的方式由纹理映射设备等接收。

例如,纹理映射设备可以可操作为并且可以例如作为执行卷积运算的指令的一部分,和/或凭借该指令例如从数据处理电路直接接收用于卷积运算的权重值的集合或核。

在特别优选的实施方式中,纹理映射设备可操作为并且通过从储存器(诸如且优选地为从纹理映射设备是其一部分的整个数据处理系统的存储器)提取权重值的集合或核来接收权重值的集合或核。因此,在这种情况下,纹理映射设备(例如,纹理映射设备的纹理提取电路)可操作为并且用于从储存器(存储器)提取用于卷积运算的权重值的集合或核。该储存器(存储器)可以为与存储要对其执行卷积运算的输入数据值的集合的存储器(储存器)相同或不同的存储器(储存器)。

在这种情况下,卷积运算指令优选地表示为了卷积运算而提取的权重值的集合或核,并且纹理映射设备(例如,纹理映射设备的纹理提取电路)优选地可操作为响应于指令从储存器(存储器)提取所表示的权重值的集合或核。

这例如具有以下优点:本发明因此可以用于凭借之前已经(例如,“离线”)计算的大量(例如,数千)权重执行卷积运算,诸如例如神经网络可以是这种情况。由此,本发明的操作可以允许“离线”计算并且存储大量(例如,数千)权重,然后这些权重由纹理映射设备灵活地用于执行卷积运算。

对应地,在优选实施方式中,本发明包括例如且优选地以压缩形式存储多个权重(例如,权重或核图谱),以便由纹理映射设备用于执行卷积运算。

其他布置当然会是可行的。

在实施方式中,纹理映射设备可以可操作为并且可以例如为了数据值的整个输入阵列的卷积而执行一个或更多个(并且通常为多个)卷积运算。卷积可以采取卷积可以采取的任意期望且合适的形式。例如,卷积运算可以被执行为图像后处理操作(诸如(高斯(gaussian)或方框)模糊、锐化、浮雕、边缘检测、(高质量)图像比例放大等)的一部分。卷积运算可以改为被执行为人工(例如,卷积)神经网络处理运算的一部分,例如在执行图像识别和/或图像分类时。卷积运算可以改为被执行为包括要执行的一个或更多个卷积运算的非图像数据处理操作的一部分。

纹理映射操作也可以采取:纹理映射操作可以采取的任意期望且合适的形式。例如,纹理映射操作可以包括双线性插值、三线性插值或更高阶(“n”线性)插值或各向异性滤波等。

纹理映射操作也可以以任意期望且合适的方式来执行。在实施方式中,纹理滤波电路可以可操作为并且可以对于一个或更多个采样位置分别执行纹理(例如,双线性、三线性等)映射操作。如以上所讨论的,用于纹理映射操作的采样位置可以用执行纹理映射操作的指令来表示。一遍纹理处理可以由纹理滤波电路执行为,用于采样位置的(例如,内部地)计算的插值权重值的集合向纹理数据值的对应集合的应用(乘法)以及插值结果的累积(例如,求和)。用于处于纹理数据值的阵列的边缘处或附近的采样位置的纹理映射操作可以以任意期望且合适的方式来处理,例如,通过用阵列边缘处的纹理数据值扩展该边缘,通过从相对边缘取纹理数据值包裹阵列,通过监测边缘处的纹理数据值,通过剪裁产生的输出阵列等。

卷积运算也可以以任意期望且合适的方式(例如,以与纹理映射操作类似的方式)来执行。例如,在实施方式中,纹理滤波电路可以可操作为并且可以例如为了数据值的整个输入阵列的卷积而对于输入数据值的阵列内的一个或更多个(并且通常为多个)卷积位置分别执行卷积运算。如以上所讨论的,卷积位置可以用执行卷积运算的指令来表示。卷积运算可以被执行为,所接收的权重值的集合或核向用于卷积位置的所提取输入数据值的对应集合或窗口的应用(乘法)、以及加权结果的累积(例如,求和)。再次,用于处于输入数据值的阵列的边缘处或附近的卷积位置的卷积运算可以以任意期望且合适的方式来处理,例如,通过用阵列边缘处的输入数据值扩展该边缘,通过从相对边缘取输入数据值包裹阵列,通过监测边缘处的输入数据值,通过剪裁产生的输出阵列等。再次,这些实施方式可以允许纹理映射设备以与纹理映射操作大致类似的方式执行卷积运算,由此,降低或避免为了执行卷积运算而对纹理映射设备的显性指令和/或广泛重新构造的需要。

纹理映射操作可以被执行为一遍或更多遍纹理处理(例如,多遍双线性滤波)。例如,包括双线性插值的纹理映射操作可以被执行为单遍双线性滤波,包括三线性插值的纹理映射操作可以被执行为两遍双线性滤波,包括更高阶(“n”线性)插值或各向异性滤波的纹理映射操作可以被执行为2^(n-2)遍双线性滤波等。各遍纹理处理可以包括特定数量(例如,2*2)的所计算的插值权重值和特定数量(例如,2*2)的对应纹理数据值的应用(乘法)以及插值结果的累积(求和)。如果纹理映射操作包括三线性或更高阶纹理映射操作,则可以合适地组合(例如,插值)用于多遍纹理处理的求和插值结果,以给出用于讨论中的整个三线性或更高阶纹理映射操作的输出结果。

再次,可以针对卷积运算提供类似处理。由此,纹理滤波电路可以可操作为并且可以将用于卷积位置的卷积运算执行为多遍卷积处理。一遍卷积处理例如可以包括:权重值的集合或核向用于卷积位置的输入数据值的集合的对应子集的应用(乘法)、以及加权结果的累积(求和)。例如,以与一遍纹理处理类似的方式,一遍卷积可以包括:特定数量(例如,2*2或其倍数,诸如4*2或2*4)的所接收的权重值和特定数量(例如,2*2或其倍数,诸如4*2或2*4)的输入数据值的阵列的对应输入数据值的应用(乘法),以及例如然后进行的权重值的累积(求和)。再次,这些实施方式可以允许纹理映射设备以与纹理映射操作大致类似的方式来执行卷积运算,由此,降低或避免为了执行卷积运算而对纹理映射设备的显性指令和/或广泛重新构造的需要。然后可以合适地组合(例如,累积(求和))用于卷积运算的多遍卷积处理的已累积(已求和)加权值,以给出用于讨论中的卷积位置的卷积运算的已组合(例如,已累积(已求和))结果。可以(例如,由纹理映射设备或数据处理电路)合适地组合用于多个卷积运算(例如,用于各卷积位置)的结果,以给出对输入数据值的整个阵列执行的整个卷积的输出阵列。

在实施方式中,纹理映射设备(纹理提取电路)可以可操作为并且可以生成或者“产生(spawn)”用于所计算的插值权重值将应用于的纹理数据值的集合的索引。用于纹理数据值的索引的生成或“产生”,可以遵循与讨论中的阵列的纹理数据值有关的“产生图案”。产生图案可以遵循与纹理数据值有关的任意期望且合适(空间填充)曲线。在一个实施方式中,产生图案遵循与纹理数据值有关的莫顿(morton)或z阶曲线。纹理映射设备(纹理提取电路)可以可操作为并且可以通过使与采样位置对应的索引偏移(向索引应用一个或更多个偏移),来计算将向对应纹理数据值应用已插值权重值的索引。这可以促进用于一遍纹理处理的索引的生成或“产生”,因为在每次使用特定产生图案时,偏移的预定集合可以按预定顺序用于生成或“产生”用于该产生图案的索引。

类似地,在实施方式中,纹理映射设备(纹理提取电路)可以可操作为并且可以生成或者“产生”用于所接收的权重值将应用于的输入数据值的集合或子集的索引。用于输入数据值的索引的生成或“产生”再次可以遵循与讨论中的阵列的输入数据值有关的“产生图案”。产生图案再次可以遵循与输入数据值有关的任意期望且合适(空间填充)曲线。在一个实施方式中,产生图案大致类似于用于纹理映射操作的产生图案。在一个实施方式中,产生图案再次遵循与输入数据值有关的莫顿或z阶曲线。纹理映射设备(纹理提取电路)可以可操作为并且可以通过使与卷积位置对应的索引偏移(向索引应用一个或更多个偏移)来计算将向对应输入数据值应用所接收的权重值的索引。再次,这可以促进用于一遍卷积处理的索引的生成或“产生”,因为在每次将特定产生图案中的一个或更多个用于例如一个或更多个卷积运算时,偏移的预定集合可以用于生成或“产生”用于产生图案的的索引。再次,这些实施方式也可以允许纹理映射设备以与纹理映射操作大致类似的方式来执行卷积运算,由此,降低或避免为了执行卷积运算而对纹理映射设备的显性指令和/或广泛重新构造的需要。

纹理数据值(例如,被给定产生图案覆盖的纹理数据值)的集合可以包括任意期望且合适数量的纹理数据值。纹理数据值的集合可以包括纹理数据值阵列内的纹理数据值的(连续)块。纹理数据值的集合可以具有在输入数据值方面的任意期望且合适的形状,诸如矩形(包括正方形)。在一个实施方式中,纹理数据值的集合在形状上为矩形,并且优选地为正方形。例如,纹理数据值的集合可以包括2*2个纹理数据值。在实施方式中,用于纹理映射操作的插值权重值的集合还可以采取任意期望且合适的形式。例如,插值权重值的集合可以包括2*2个插值权重值(例如,与2*2个纹理数据值对应)。

类似地,输入数据值(例如,被给定产生图案覆盖的输入数据值)的集合和子集可以包括:任意期望且合适数量的输入数据值。输入数据值的集合或子集可以包括:输入数据值阵列内的输入数据值的(连续)块。输入数据值的集合或子集可以具有在输入数据值方面的任意期望且合适的形状,诸如矩形(包括正方形)。

在一个实施方式中,输入数据值的集合在形状上为矩形,并且优选地为正方形。例如,输入数据值的集合可以包括多达16*16个输入数据值(例如,3*3、5*5、11*11等个输入数据值)的正方形阵列。诸如5*3或3*5的输入值的矩形阵列也将是可行的(如果期望)。输入数据值的集合通常在尺寸和形状上与将用于卷积运算的权重值的集合或核对应。例如,权重值的集合或“核”可以包括多达16*16个权重值(例如,3*3、5*5、11*11等或5*3或3*5等个权重值)。如以上所表示的,权重值的集合或核可以形成在存储器中存储的权重值的更大集合或图谱的一部分。权重值的集合或核可以设置在权重值的更大集合或图谱中的相应(例如,16*16)块内。

在一个实施方式中,输入数据值的子集在形状上为矩形,并且优选地为椭圆形。在一个实施方式中,输入数据值的子集可以包括与纹理数据值集合中的数据值的数量相同或是其倍数(例如,两倍)的数量。这可以允许用于纹理映射操作(例如,用于一遍纹理处理)的大致同一产生机制(例如,多次,诸如两次)用于产生用于卷积运算(例如,用于一遍卷积处理)的索引。例如,如以上所讨论的,纹理数据值的集合可以包括2*2个纹理数据值,和/或输入数据值的子集可以包括2*2个输入数据值或其倍数,诸如2*4个输入数据值或4*2个输入数据值。类似地,在实施方式中,用于卷积运算的权重值的集合的子集中的值的数量,可以与用于纹理映射操作的插值权重值的集合中的值的数量大致相同或是其倍数。例如,如以上所讨论的,权重值的集合的子集可以包括2*2个权重值或其倍数,诸如2*4个权重值或4*2个权重值。再次,这些实施方式可以允许纹理映射设备以与纹理映射操作大致类似的方式执行卷积运算,由此,降低或避免为了执行卷积运算而对纹理映射设备的广泛重新构造的需要。

在一个实施方式中,在对于卷积运算执行多遍卷积时,可以处理输入数据值的垂直定向和水平定向(椭圆形)的子集(块)的组合。如以下将更详细讨论的,这可以在向输入数据值的特定集合或窗口应用权重值的特定集合或核时提供更高效的处理。例如,4*2个数据值的6个垂直定向(椭圆形)的子集可以被5*5核覆盖,由此,对于该5*5核在卷积运算中的单个应用可以需要6个产生图案(和6个运算周期)。然而,相反可以仅数据值的4个垂直定向(椭圆形)的子集和输入数据值的1个水平定向(椭圆形)的子集(由此总共为数据值的5个子集)可以覆盖5*5核,由此,对于该5*5核在卷积运算中的单个应用可以仅需要5个产生图案(和5个运算周期)。

纹理提取电路可以包括可操作为执行此处所描述的功能的任意期望且合适的处理电路。该处理电路可以为适当配置的一个或更多个专用硬件元件的形式,或者它可以包括已经被适当编程的可编程处理电路。

纹理提取电路还可以包括本地存储单元,该本地存储单元可操作为将输入数据值和/或权重值本地地存储到纹理映射设备。本地存储单元可以包括可操作为存储输入数据值和/或权重值的多个可寻址存储区域。纹理提取电路可以可操作为并且可以存储要在对于本地存储单元的单个可寻址存储区域内的卷积位置执行一遍卷积处理时使用的输入数据值的集合的(例如,整个)子集。这可以通过帮助避免对要对于给定的一遍卷积处理(例如,对于给定的产生图案)从多于一个可寻址存储区域读取的输入数据值的子集的需要来改善执行。

例如,本地存储单元可以包括本地缓存。本地缓存例如可以包括为多个缓存行形式的多个可寻址存储区域。缓存和/或其缓存行可以可操作为并且可以存储任意期望且合适数量的数据。在一个实施方式中,缓存行可以存储16*8个数据值。在一个实施方式中,缓存行可以存储128字节数据(16*8个数据值*1个字节(8位)每个数据值)。在实施方式中,纹理提取电路可以可操作为并且可以使用于多遍卷积处理(例如,产生图案)的输入数据值的子集的数据与缓存行对齐,使得用于一遍卷积处理(例如,产生图案)的输入数据值的子集(或各子集)不跨越两个或更多个缓存行。由此,在实施方式中,纹理提取电路可以可操作为并且可以存储要在对于单个缓存行内的卷积位置执行一遍卷积处理时使用的输入数据值的集合的(例如,整个)子集。本地缓存可以存储所提取的纹理或输入数据值和/或所提取的权重值。本地缓存可以包括用于存储所提取的纹理或输入数据值的一个或更多个缓存行和/或用于存储所提取的权重值的一个或更多个缓存行。然而,在其他实施方式中,为了简化操作(读取调度),本地缓存可以存储所提取的纹理或输入数据值,但不存储所提取的权重值。

本地存储单元(不管是缓存的形式还是作为某一其他存储形式)可以包括本地ram。本地ram例如可以包括为多个ram组形式的多个可寻址存储区域。ram和/或其ram组可以可操作为并且可以存储任意期望且合适数量的数据。在一个实施方式中,ram组存储用于8*4个数据值的数据值。在一个实施方式中,ram组可以存储32字节数据(8*4个数据值*1个字节(8位)每个数据值)。在实施方式中,纹理提取电路可以可操作为并且可以使用于多遍卷积处理(例如,产生图案)的输入数据值的子集的数据与ram组对齐,使得用于一遍卷积处理(例如,产生图案)的输入数据值的子集(或各子集)不跨越两个或更多个ram组。由此,在实施方式中,纹理提取电路可以可操作为并且可以存储要在对于单个ram组内的卷积位置执行一遍卷积处理时使用的输入数据值的集合的(例如,整个)子集。本地ram可以存储所提取的纹理或输入数据值和/或所提取的权重值。本地ram可以包括用于存储所提取的纹理或输入数据值的一个或更多个ram组和/或用于存储所提取的权重值的一个或更多个ram组。

纹理提取电路可以还可操作为响应于将输入数据值和/或权重值用于操作的指令首先确定是否已经本地地存储(已经从存储器提取)这些数据值和/或权重值,例如这些数据值和/或权重值是否已经处于本地缓存中。在尚未本地地存储(之前尚未从存储器提取,例如未缓存)这些数据值和/或权重值时,纹理提取电路然后可以从存储器提取这些数据值和/或权重值。所提取的数据值和/或权重值然后可以由数据提取单元存储在本地缓存中(例如,以便由纹理滤波电路将来再使用)和/或其他本地储存器中(例如,以便由纹理滤波电路立即使用)。然而,在已经本地地存储(已经从存储器提取,例如缓存)这些数据值和/或权重值时,纹理提取电路然后无法从存储器提取这些数据值和/或权重值。

纹理提取电路可以可操作为并且可以(例如,从相应“贴图”)并行提取纹理数据值的两个或更多个集合,例如以执行三线性插值。实施方式可以通过将纹理提取电路操作为并行提取输入数据值的(例如,2*4或4*2)子集的两个或更多个(例如,2*2)部分,来采用纹理提取电路的该特征。再次,这些实施方式可以允许纹理映射设备以与纹理映射操作大致类似的方式来执行卷积运算,由此,降低或避免为了执行卷积运算而对纹理映射设备的广泛重新构造的需要。

纹理提取电路还可以包括停驻缓冲器。停驻缓冲器可以包括要执行(例如,对要从存储器提取的数据可以仍然等待)的一个或更多个尚未完成的卷积运算和/或纹理映射操作(例如,用于运算和/或操作的多遍处理)的记录。在卷积运算和/或纹理映射操作(例如,用于运算和/或操作的一遍或更多遍处理)被确定为准备执行时,纹理滤波电路可以读取并且然后将所提取的数据用于操作(用于该操作的一遍或更多遍)。

纹理滤波电路也可以包括可操作为执行此处所描述的功能的任意期望且合适的处理电路。该处理电路可以为适当配置的一个或更多个专用硬件元件的形式,或者它可以包括已经被适当编程的可编程处理电路。在一个实施方式中,使用专用硬件纹理映射设备,由此使用专用纹理滤波电路(硬件)。

纹理滤波电路可以包括如下电路,该电路可操作为读取被本地地存储到纹理映射设备(例如,存储在本地储存器中)的输入或纹理数据值,然后将这些数据值用于执行卷积运算或纹理映射操作。纹理滤波电路还可以包括如下电路,该电路可操作为在卷积运算的情况下读取被本地地存储到纹理映射设备的权重值,并且将这些所读取的权重值用于执行卷积运算。纹理滤波电路还可以包括如下电路,该电路可操作为在纹理映射操作的情况下(例如,内部地)计算要用于纹理映射操作中的插值权重值,并且将这些所计算的插值权重值用于执行纹理映射操作。

在实施方式中,输入数据值的阵列可以采取任意期望且合适的形式。例如,纹理或输入数据值可以由8位来表示(由此可以取0至255之间的整数值)。如以上所讨论的,在实施方式中,要对其执行卷积运算或纹理映射操作的数据值的一个或更多个阵列也可以采取任意期望或合适的形式。在纹理映射操作的情况下,一个或更多个阵列可以包括图像或图形数据值(例如,用于图像或纹理)。在卷积运算的情况下,一个或更多个阵列可以包括图像或图形数据值(例如,用于图像或纹理)或非图像/非图形数据值。纹理或输入数据值可以被提供为数据元素阵列的数据元素的一部分。例如,数据元素可以包括三个数据值(例如,rgb或yuv)或四个数据值(例如,rgbα或yuvα)。数据元素的数据值可以由纹理映射设备并行处理。

在实施方式中,所计算的插值权重值或所接收的权重值也可以采取任意期望且合适的形式。例如,在纹理映射操作的情况下,所计算的插值权重值可以包括定点值(例如,在0.0至1.0之间)。所计算的插值权重值可以由9个位来表示。然而,在卷积运算的情况下,所接收的权重值可以包括整数值(例如,在0至255之间或在-128至127之间)。所接收的权重值可以由8个位(无符号)或9个位(有符号)来表示。例如,权重值可以使用8个位(有符号或无符号)在外部(在存储器中)表示,并且使用9个位(有符号)在内部表示。由此,纹理映射设备可以可操作为并且可以使用定点权重值和整数权重值这两者。此外,在纹理映射操作的情况下,所用的插值权重值的集合可以加和(sum)为归一化值(例如,可以为了维持亮度而加和为1)。然而,在卷积运算的情况下,所用的权重值的集合或核可以加和为特定值(例如,可以为了边缘检测而加和为0)或可以不加和为特定值。由此,如以下将更详细讨论的,纹理映射设备可以可操作为并且可以输出将被认为对于纹理映射操作在“范围之外”的卷积运算的结果。纹理映射设备因此可以可操作为处理这种“范围之外”的输出值。

在实施方式中,可以对在存储器中存储的数据值和/或权重值进行编码。由此,实施方式可以包括:纹理映射设备在使用所提取的数据值和/或所提取的权重值之前解码这些值。这些实施方式可以利用纹理映射设备的现有解码功能。纹理映射设备例如可以使用同一电路来解码数据值和权重值这两者,由此降低或避免对解码权重值的另外电路的需要。解码可以采取任意期望且合适的形式,诸如解密和/或解压缩。用于对值编码的编码方案例如可以例如在不需要解码讨论中的整个阵列的情况下允许到阵列的随机存取。用于对值编码的编码方案例如可以包括基于块的编码方案。用于对值编码的编码方案例如可以包括图像或图形(纹理)压缩方案。用于对值编码的编码方案例如可以包括自适应可伸缩纹理压缩(astc)或arm帧缓冲压缩(afbc)。

如以上所讨论的,卷积运算或纹理映射操作可以包括生成卷积或采样位置的输出结果(值)。输出结果(值)可以采取任意期望且合适的形式。如以上所讨论的,在纹理映射操作的情况下,所用的权重值的集合可以加和为特定值(例如,可以为了维持亮度而加和为1)。由此,纹理映射操作的输出结果通常将落在特定范围(例如,输入数据值阵列(纹理)中的数据值可以具有的数据值的范围)内。然而,如以上同样讨论的,在卷积运算的情况下,所用的权重值的集合可以不加和为特定值。由此,在实施方式中,纹理滤波电路可以能够生成并且输出在较大范围(例如,大于输入数据值阵列中的数据值可以具有的数据值的范围)内的卷积运算的结果。

纹理映射设备可以以任意期望且合适的方式以本发明的方式来控制并且操作。如以上所讨论的,在特别优选的实施方式中,向纹理映射设备提供适当的卷积运算指令,响应于该指令,纹理映射设备将执行卷积运算。

如以上所讨论的,卷积运算指令优选地表示要执行卷积运算、要对其执行卷积运算的输入数据值的集合、以及要应用于用于卷积运算的输入数据值的权重值的集合或核。在优选实施方式中,卷积运算指令表示用于卷积运算的输入数据值,且优选地还有权重值的集合或核存储在哪里,纹理映射设备(例如,纹理映射设备的适当纹理提取电路)然后从它们响应于指令存储在的位置提取输入数据值且优选地以及权重值的集合或核。纹理映射设备优选地还使用所表示(例如且优选地为所提取)的权重值的集合或核,对所表示的输入数据值的集合(例如且优选地,由纹理映射设备的纹理滤波电路)执行卷积运算。

由此,在特别优选的实施方式中,纹理映射设备包括数据处理电路,该数据处理电路可操作为接收卷积运算指令,并且响应于接收到卷积运算指令,控制纹理映射设备的纹理提取电路提取要对其执行卷积运算的输入数据值,并且优选地提取用于卷积运算的权重值的集合或核,并且使得纹理映射设备的纹理滤波电路使用所表示(并且优选地为所提取)的权重值的集合或核,对输入所提取的数据值的集合执行卷积运算。

卷积运算指令可以以任意合适且期望的方式提供给纹理映射设备。例如,纹理映射设备关联的(例如,是纹理映射设备关联的图形处理单元和/或cpu的一部分的)另一个处理器和/或数据处理电路可以向纹理映射设备提供指令。

例如,适当的卷积运算指令可以被包括在要由图形处理单元的可编程着色器核心执行的着色器程序中,并且由可编程着色器核心识别为卷积运算指令,着色器核心然后操作为向纹理映射设备发送适当的指令,以执行卷积运算(并且向着色器核心返回卷积运算的结果,以便进一步处理和/或其他用途)。

由此,在实施方式中,适当的卷积运算指令可以被包括(并且被包括)在要由纹理映射设备关联的、例如处理器(诸如图形处理单元或cpu)的可编程执行单元(诸如可编程片段着色器)的可编程数据处理电路执行的程序中,并且可以由可编程处理电路识别为卷积运算指令,可编程处理电路然后操作为向纹理映射设备发送适当的指令,以执行卷积运算(并且向可编程处理电路返回卷积运算的结果,以便进一步处理和其他用途)。

向纹理映射设备发送卷积运算指令可以以任意合适且期望的方式来触发并且引起。例如,整个数据处理系统操作例如可以通过将用于卷积运算的适当程序表达包括在应用程序中,来允许应用编程器明确指定要执行卷积运算,该应用程序要由纹理映射设备是其一部分的数据或图形处理系统的可编程处理电路(诸如图形处理单元着色器)来执行。

这例如且优选地可以通过提供包括用于卷积运算的一个或更多个特定程序表达的api扩展来实现(使得应用程序在期望卷积运算时可以包括特定程序表达)。在这种情况下,适当的可编程处理单元(例如,着色器核心)编译器应可操作为识别特定卷积运算程序表达,并且将这些表达编译为用于可编程处理电路的二进制指令,以便使得使用与本发明一致的纹理映射设备执行卷积运算(例如,而不是由可编程处理电路自己执行)。

在其他布置中,卷积运算可以不直接暴露到应用编程器,而是例如用于可编程处理电路的编译器可以可操作为,识别用于使得可编程处理电路执行卷积运算的程序表达,然后用指令代替这些程序表达,该指令使得相反以本发明的方式使用纹理映射设备执行卷积运算。

在这种布置中,用于可编程处理电路的编译器可以根据期望来操作,例如,作为用于可编程处理电路(和纹理映射设备)是其一部分或与其关联的数据处理单元(例如,图形处理单元)的驱动器的一部分。对应地,编译器可以诸如从用于卷积运算的应用程序表达、中间(部分编译的)指令、和/或已编译(二进制)指令识别编译处理的任意期望阶段的卷积运算的存在。

其他布置当然会是可行的。

期望的卷积运算可以单独使用纹理映射设备来执行,或者还可以使用纹理映射设备来与整个数据或图形处理系统的(能够执行卷积运算的)其他适当处理元件或单元并行执行卷积运算。例如,在图形处理单元的情况下,卷积运算可以使用纹理映射设备和可编程着色器核心这两者并行执行(并且在优选实施方式中进行这一点)。这然后实际上将允许图形处理单元(例如)的多个功能单元(元件)并行执行卷积运算,从而促进由图形处理单元(例如)进行的改进卷积运算执行。

本发明所用的图形纹理映射设备可以并且通常会是整个图形和/或数据处理系统的一部分。由此,本发明还扩展到具有如此处所描述的纹理映射设备的数据或图形处理系统。

数据或图形处理系统可以包括:可以在纹理映射设备之外的、此处所提及的存储器。如以上所讨论的,存储器可以可操作为并且可以存储要用于卷积运算的输入数据值的集合或阵列和/或要用于卷积运算的权重值的集合或核。存储器还可以可操作为并且可以存储要用于纹理映射操作中的纹理数据值的集合或阵列。

纹理映射设备在普通数据处理系统中(例如,在基于cpu的系统中)可以以“独立的”形式来设置,例如且优选地,可以被设置为协同处理器。

纹理映射设备还或相反可以设置为是例如且优选地图形处理系统(或整个数据处理系统)中的图形处理单元(gpu)的一部分的纹理映射设备。

在优选实施方式中,纹理映射设备是纹理映射设备所属的整个图形处理单元的一部分。因此,本发明还扩展到包括如此处所描述的纹理映射设备的图形处理单元。

在纹理映射器是图形处理单元的一部分的情况下,图形处理单元(图形处理器)可以可操作为将图形处理流水线实施并且执行为执行图形或其他数据处理。图形处理单元(处理流水线)可以包括图形处理器(处理流水线)通常可以包括的处理阶段中的任意一个或更多个或全部。由此,例如,图形处理单元可以包括图元设置阶段、栅格化器和/或渲染器。在实施方式中,渲染器可以为可编程片段着色器(着色器核心)的形式或包括它。

图形处理器(处理流水线)还可以包括一个或更多个可编程着色阶段,诸如顶点着色阶段、外壳着色器、镶嵌阶段(例如,其中,通过执行着色器程序来执行镶嵌)、域(评估)着色阶段(着色器)、几何结构着色阶段(着色器)以及片段着色器中的一个或更多个或全部。

图形处理器(处理流水线)还可以包含图形处理流水线可以包含的任意其他合适且期望的处理阶段,诸如深度(或深度与模板)测试器、混合器、块缓冲器、写输出单元等。

本发明可以用于任意合适且期望的图形处理系统和处理器中并与其一起使用。本发明特别适于与成块渲染器(基于块的图形处理系统)一起使用。由此,在一个实施方式中,图形处理器(处理流水线)是基于块的图形处理器(处理流水线)。

由此,如将理解的,实施方式可以在数据处理系统中实施,该数据处理系统包括存储器和包括如此处所描述的纹理映射设备的图形处理单元(gpu)(图形处理器)。在实施方式中,数据处理系统还可以包括执行应用的主处理器,这些应用可能需要图形处理单元的数据或图形处理,并且因此表示图形处理单元(例如,经由用于图形处理单元的驱动器)。系统还可以包括适当的储存器(例如,存储器)、缓存等。

对应地,实施方式可以在包括存储器和主处理器(cpu)的数据处理系统和如此处所描述的纹理映射设备中实施。纹理映射设备将被设置为数据处理器系统的协同处理器并且充当协同处理器(用于主处理器(cpu))。系统还可以包括适当的储存器(例如,在存储器中)、缓存等。

数据或图形处理系统和/或图形处理单元和/或纹理映射设备还可以包括一个或更多个存储器和/或存储装置,和/或与该存储器和/或存储装置通信,该存储器和/或存储装置存储这里描述的数据,和/或存储用于执行这里描述的处理的软件。数据或图形处理系统和/或图形处理单元和/或纹理映射设备还可以与主微处理器、和/或与用于基于所生成的数据显示图像的显示器通信。

本发明可以用于图形纹理映射器以及图形或数据处理单元和系统可以用于生成的任意形式的输出。在一个实施方式中,本发明可以在图形处理单元用于生成用于显示的图像时使用,但它可以用于图形处理单元可以根据期望产生的任意其他形式的图形或数据处理输出,诸如渲染到纹理操作中的(例如,已后处理的)图形纹理等。本发明还可以在纹理映射器或图形处理单元等用于生成其他(例如,非图像或非图形)输出(诸如一个或更多个中间(卷积层)输出(阵列)或来自人工神经网络的最终输出(值或阵列))时使用。

在一个实施方式中,本发明的各种功能在单个数据或图形处理平台上执行,该平台生成并且输出所需数据,诸如是例如写到用于显示装置的帧缓冲器的已处理图像数据。

本发明可以在任意合适的系统中实施,诸如基于可合适操作的微处理器的系统。在一些实施方式中,本发明实施在计算机和/或基于微处理器的系统中。

本发明的各种功能可以以任意期望且合适的方式执行。例如,本发明的功能可以实施在硬件或软件中(根据期望)。由此,例如,本发明的各种功能元件、阶段、单元以及“装置”可以包括合适的处理器、控制器、功能单元、电路、处理逻辑、微处理器结构等,它们可操作以进行各种功能等,诸如适当专用硬件元件(处理电路)和/或可以被编程为以期望方式操作的可编程硬件元件(处理电路)。

这里还应当注意的是,本发明的各种功能等可以在给定处理器上重复和/或并行执行。等同地,各种处理阶段可以共享处理电路等(如果期望)。

此外,本发明的处理阶段或单元中的任意一个或更多个或所有可以被具体实施为处理阶段或单元电路,该处理阶段或单元电路例如为一个或更多个固定功能单元(硬件)的形式(处理电路)、和/或可以被编程为执行期望操作的可编程处理电路的形式。相等地,本发明的处理阶段或单元以及处理阶段或单元电路中的任意一个或更多个可以作为单独的电路元件提供给其他处理阶段或单元或处理阶段或单元电路中的任意一个或更多个,和/或处理阶段或单元以及处理阶段或单元电路中的任意一个或更多个或所有可以至少部分由共享处理电路来形成。

本领域技术人员还将理解,本发明的所有描述的实施方式可以酌情包括这里描述的可选特征中的任意一个或更多个或所有。

根据本发明的方法至少部分地可以使用软件(例如,计算机程序)实施。由此,本发明的另外实施方式包括:计算机软件,该计算机软件当安装在数据处理装置上时专门适用于执行这里描述的方法;计算机程序元件,该计算机程序元件包括计算机软件代码部,用于在程序元件在数据处理装置上运行时执行这里描述的方法;以及计算机程序,该计算机程序包括代码部,当程序在数据处理系统上运行时该代码部适用于执行这里描述的方法的所有步骤。数据处理系统可以是微处理器、可编程fpga(现场可编程门阵列)等。

本发明还扩展到计算机软件载体,该计算机软件载体包括这种软件,这种软件当用于操作图形处理器、渲染器或包括数据处理装置的其他系统时与所述数据处理装置结合使所述处理器、渲染器或系统执行本发明的方法的步骤。这种计算机软件载体可以是物理存储介质,诸如rom芯片、cdrom、ram、闪存或盘,或可以是信号,诸如电线上的电信号、光信号或无线电信号,诸如卫星等。

还将理解,不是本发明的方法的所有步骤都需要由计算机软件执行,并且由此本发明的另外实施方式包括计算机软件并且这种软件安装在计算机软件载体上,用于执行这里阐述的方法的步骤中的至少一个。

本发明可以因此适当地具体实施为用于与计算机系统一起使用的计算机程序产品。这种实现可以包括一系列计算机可读指令,该一系列计算机可读指令固定在有形、永久介质上,诸如计算机可读介质,例如,磁盘、cdrom、rom、ram、闪存或硬盘。还可以包括一系列计算机可读指令,在有形介质(包括但不限于,光学或模拟通信线)上,或无形地使用无线技术(包括但不限于,微波、红外或其他传输技术),这些指令经由调制解调器或其他接口装置可发送到计算机系统。该系列计算机可读指令具体实施这里之前描述的功能的所有或一部分。

本领域技术人员将理解,这种计算机可读指令可以以多种编程语言来写,用于与许多计算机架构或操作系统一起使用。进一步地,这种指令可以使用任意存储技术来存储(存储技术现在或将来包括但不限于半导体、磁或光),或使用任意通信技术来发送(通信技术现在或将来包括但不限于光学、红外或微波)。预期的是,这种计算机程序产品可以作为可去除介质来分发,附有已打印的文档或电子文档,例如,现成软件;例如在系统rom或固定盘上预加载有计算机系统;或在网络(例如,因特网或万维网)上从服务器或电子公告栏分发。

附图说明

现在将仅以示例的方式并且参照附图来描述本发明的实施方式,附图中:

图1示意性示出了具有根据本发明的实施方式的纹理映射设备的图形处理单元;

图2示意性并且更详细地示出了根据本发明的实施方式的纹理映射设备;

图3示出了操作根据本发明的实施方式的纹理映射设备的方法;

图4示出了根据本发明的实施方式的用于纹理映射操作和卷积运算的描述符;

图5示出了根据本发明的实施方式的、输入数据值、缓存行、ram组、权重值的核以及输入数据值索引产生图案之间的关系;

图6示出了根据本发明的实施方式的、在产生输入数据索引时与卷积位置的偏移的使用;以及

图7示出了根据本发明的另一个实施方式的、在产生输入数据索引时与卷积位置的偏移的使用。

同样的附图标记在附图中用于同样的特征(在适当的情况下)。

具体实施方式

如以上所讨论的,本发明涉及一种例如用于图形处理单元的图形纹理映射设备。纹理映射设备包括纹理提取电路,该纹理提取电路接收用于卷积运算的权重值的集合,并且从存储器提取要对其执行卷积运算的输入数据值的集合。纹理映射设备还包括纹理滤波电路,该纹理滤波电路使用所接收的权重值的集合和所提取的输入数据值的集合执行卷积运算。纹理映射设备可以允许例如图形处理单元以高效方式执行各种卷积运算。

现在将主要参照对图像或图形数据执行的卷积运算描述本发明的实施方式。然而,在其他实施方式中,卷积运算可以由纹理映射设备对其他类型的数据(非图像或图形数据)执行。

图1示意性示出了与本实施方式的操作相关的、图形处理单元(gpu)100的元件。如本领域技术人员将理解的,可以具有图1未例示的gpu100的其他元件。在本实施方式中,gpu100是基于块的图形处理器。然而,其他布置是可行的。

如图1所示,gpu100包括实施图形处理流水线的数据处理电路。流水线尤其包括:栅格化器102,和为可编程着色器核心104形式的渲染器。流水线将缓冲器106(例如,在外部存储器108中)用于存储输出阵列(例如,要显示的帧或图像)。gpu100与外部存储器108通信,但外部存储器108不形成gpu100的一部分,相反形成整个主数据处理系统的一部分,该主数据处理系统尤其包括gpu100和存储器108。

存储器108将尤其存储要在执行纹理映射操作时由gpu100使用的图形纹理。在该实施方式中,存储器108还将存储要在执行卷积运算时使用的权重值和输入数据值的阵列(例如,纹理或图像)。存储器108例如可以为:gpu100位于的主系统可访问的磁盘驱动器,或其他存储介质(例如,硬盘、硬盘或固态盘的raid阵列),并且可以为主系统的内部存储介质、或外部或可移动存储介质。

gpu100还包括纹理映射设备110。如图1所示,纹理映射设备110包括纹理提取电路112,该纹理提取电路112在该实施方式中包括输入参数提取单元114、坐标计算单元116、纹理缓存查找单元118以及数据提取单元120。纹理映射设备110还包括纹理滤波电路122,该纹理滤波电路122在该实施方式中包括纹理滤波单元124。

图1中的箭头表示数据在gpu100的各种部件与存储器108之间流动的主路。还可以有未表示的其他通信路线或方向。

栅格化器102可以接收要用于生成渲染输出(诸如要显示的帧)的图元(例如,三角形),作为其输入,并且将这些图元栅格化为用于处理的独立图形片段。为了这样做,栅格化器102将图元栅格化为表示渲染输出的采样点,并且生成代表用于渲染图元的适当采样位置的图形片段。由栅格化器102生成的片段然后向前发送到着色器核心(渲染器)104,以便着色。

在该实施方式中,着色器核心14可以为了渲染(着色)片段而执行用于由栅格化器102发布的片段的着色器程序。着色器程序可以没有、具有一个或更多个需要由纹理映射设备110执行的纹理映射操作的纹理化指令。

在着色器核心104经受纹理化指令时,从着色器核心104向纹理映射设备110发送纹理化指令,该指令请求纹理映射设备110执行纹理化操作。在纹理映射设备110已经完成其纹理处理(执行纹理化指令)之后,最终结果在响应消息中发回到着色器核心104,以便在对讨论中的片段着色时使用。

纹理映射设备110包括遵循纹理化指令的合适处理电路。该处理电路可以为适当配置的一个或更多个专用硬件元件的形式,或者它可以包括已经被适当编程的可编程处理电路。在该实施方式中,使用专用硬件纹理映射设备110。

在由着色器核心104表示执行纹理映射操作时,纹理映射设备110从存储器108读取纹理(按需),执行纹理映射操作,并且将从纹理采样的(例如,rgb)颜色返回到着色器核心104。

作为该处理的一部分,输入参数提取单元114从着色器核心104接收表示要使用的纹理的纹理化指令消息(例如,可以提供包括纹理描述符(txd)的纹理字段)、要执行的纹理映射操作的特定类型(例如,双线性、三线性等)(例如,可以提供包括采样器描述符(smd)的采样器字段)、以及执行样本映射操作的采样位置坐标(例如,在规范化坐标系中给出,在该坐标系中,(0.0,0.0)是纹理的左上角,并且(1.0,1.0)是纹理的右下角)。

坐标计算单元116然后从采样位置坐标确定要从数据提取单元120查找的纹理中的纹素索引。

纹理缓存查找单元118然后检查所需的纹理数据是否已经存储在数据提取单元120的缓存中,如果不存在,则将纹理数据提取到纹理映射设备110中。对于典型的双线性查找,从存储器108中的纹理的2*2纹素区域读提取自四个纹素的纹理数据。对于典型的三线性查找,从存储器108中的各纹理“贴图”的2*2纹素区域读提取自四个纹素的两个集合的纹理数据。

纹理滤波电路124然后读入各双线性查找的四个纹素,确定插值权重值,并且从用于讨论中的采样位置的纹理数据值计算插值结果。在三线性插值的情况下,将两个双线性查找的结果组合成用于讨论中的采样位置的结果。结果然后输出到(返回到)着色器核心104。

然后存储来自着色器核心104的“已着色”片段,作为缓冲器106(例如,存储器108)中的输出渲染目标的一部分,例如以便随后后处理或显示。

在该实施方式中,着色器核心104还可以执行程序,这些程序不包括、包括一个或更多个用于要执行的卷积的卷积指令(卷积运算)。在优选实施方式中,这些程序例如可以实施图像后处理。然而,在其他实施方式中,这些程序可以实施人工(卷积)神经网络的一个或更多个卷积层。

在着色器核心104经受卷积指令时,从着色器核心104向纹理映射设备110发送卷积指令消息,该指令消息请求纹理映射设备110执行卷积运算。在纹理映射设备110已经完成其卷积运算(执行卷积指令)之后,结果在响应消息中发回到着色器核心104。

纹理映射设备110再次包括遵循卷积指令的合适处理电路。该处理电路可以为适当配置的一个或更多个专用硬件元件的形式,或者它可以包括已经被适当编程的可编程处理电路。如以上所讨论的,在该实施方式中,使用专用硬件纹理映射设备110。

在由着色器核心104指令以执行卷积运算时,纹理映射设备110从存储器108读取输入数据值的阵列(例如,图像、纹理或其他数据阵列)的元素和权重值的集合或“核”(按需),执行卷积运算,并且将结果返回到着色器核心104。在该实施方式中,着色器核心104将来自多个卷积运算的结果组合成输出阵列(例如,已处理图像、纹理或其他数据阵列)。

作为该处理的一部分,输入参数提取单元114从着色器核心104接收卷积指令消息。在该实施方式中,卷积指令表示要处理的输入数据值的阵列、执行卷积运算的卷积位置(例如,被给出为0,0是输入数据值的阵列的左上角的索引)、要使用的核图谱、用于核图谱内的核的位置(例如,被给出为0,0是图谱的左上角的索引)以及核尺寸。

卷积指令例如可以采取tex_convolve的形式(texture、sampler、tex_coord、kernel_position、kernel_size),其中:texture(纹理)字段表示纹理描述符(txd),该txd表示卷积运算将应用于的输入数据值的阵列(纹理字段可以包括描述符本身或描述符存储到的指针或到指针表中的索引);sampler(采样器)字段还包括采样器描述符(smd),该smd表示包含要用于卷积运算的权重值的特定核的核图谱(采样器字段可以再次包括描述符本身、描述符存储到的指针、或到指针表中的索引等);tex_coord字段例如用索引表示将执行卷积运算的输入数据值的阵列内的卷积位置;kernel_position字段表示要用于卷积运算的权重值的特定核的核图谱内的位置;并且kernel_size字段表示要用于卷积运算的权重值的特定核的尺寸和形状(例如,5*5、3*3、5*3或3*5等)。

在该实施方式中,kernel_position字段包括用于两个正交阵列方向中的每个的16位值。由此,核图谱在尺寸上可以多达65536*65536(64k*64k)个权重值。在该实施方式中,kernel_size字段包括用于两个正交阵列维数中的每个的4位值。由此,核在尺寸上可以多达16*16个权重值。

坐标计算单元116然后确定要从数据提取单元120查找的输入数据值阵列中的索引。

纹理缓存查找单元118然后检查所需的输入数据值和权重值是否已经存储在数据提取单元120的缓存中,如果不存在,则将这些值提取到纹理映射设备110中。在其他实施方式中,着色器核心104可以向纹理映射设备110提供要使用的权重值的集合,而不是纹理映射设备110从存储器108提取权重值的集合。

纹理滤波单元124然后读入输入数据值的阵列和权重值的核的元素,并且计算用于讨论中的卷积位置的输入数据的加权和。这然后输出到(返回到)着色器核心104。着色器核心104然后将用于卷积位置的输出,组合为用于输入数据值阵列的整个卷积的输出阵列。

然后将来自着色器核心104的输出阵列存储在缓冲器106(例如,存储器108)中,例如以便随后输出(例如,显示)。

用于图形处理单元和系统的其他布置当然会是可行的。

因此,图1示出了包括根据本发明的实施方式的纹理映射设备110的gpu100的概观。然而,应注意,图1仅是示意性的,并且为了清楚起见,已经从附图省略各种部件和连接。

图2进一步详细地示出了纹理映射设备110。如图2所示,纹理映射设备110的输入参数提取单元114包括指令消息输入单元202,该指令消息输入单元从着色器核心104接收纹理化指令或卷积指令二者之一。输入参数提取单元114还包括描述符提取单元204,该描述符提取单元204从存储器108检索用于卷积运算或纹理映射操作的输入参数。以下参照图4更详细地描述描述符。

然后将输入参数传递到生成用于数据值的实际索引的坐标计算单元116。以下参照图3更详细地描述生成或“产生(spawning)”用于处理数据值的索引的处理。

同样如图2所示,纹理缓存查找单元118包括缓存测试器206,该缓存测试器206确定是否已经本地缓存了所需数据。如果未本地缓存所需数据,则对从存储器108提取所需数据进行请求。用于执行卷积运算或纹理映射操作的多遍处理然后停驻在纹理缓存查找单元118的停驻缓冲器208中,以等待处理(例如,搁置从存储器108提取的所需数据)。

如图2所示,数据提取单元120包括纹理缓存210。纹理缓存210包括可单独寻址的缓存行,这些缓存行可以将输入数据值(在卷积运算的情况下)或纹理数据值(在纹理映射操作的情况下)本地存储到纹理映射设备110。数据提取单元120还包括纹理ram212,该纹理ram212包括可单独寻址的ram组,这些ram组可以将输入数据值(在卷积运算的情况下)或纹理数据值(在纹理映射操作的情况下)本地存储到纹理映射设备110。数据提取单元120还包括为权重ram214形式的另外内部储存器,该内部储存器可以将权重值本地存储到纹理映射设备110。

如图2所示,纹理滤波单元124包括纹理读取单元216,该纹理读取单元216从停驻缓冲器208接收用于卷积运算或纹理映射操作的一遍处理(processingpass),并且从纹理ram212读取用于该遍处理的所需数据。纹理滤波单元124还包括组合权重读取/计算单元218,该组合权重读取/计算单元也从停驻缓冲器208接收用于卷积运算或纹理映射操作的一遍处理,并且从权重ram214读取权重值(在卷积运算的情况下)或计算插值权重值(在纹理映射操作的情况下)。纹理滤波单元124还包括滤波单元220,该滤波单元220使各数据值与它们相应的权重值相乘,并且组合乘法的结果,以提供用于讨论中的一遍处理的输出值。

在该实施方式中,滤波单元220可以每个操作周期并行执行两遍双线性滤波(例如,对于两个双线性处理操作或单个三线性处理操作)或一遍卷积处理。在任何一种情况下,每个操作周期向8个输入数据值应用8个权重值。

因此,图2示出了根据本发明的实施方式的纹理映射设备110的概观。然而,应再次注意,图2仅是示意性的,并且为了清楚起见,已经从附图省略各种部件和连接。

图3示出了使用根据实施方式的纹理映射设备110执行卷积运算的方法300。

在步骤302中,纹理映射设备110解码由着色器核心104提供的指令。然后在步骤304中,纹理映射设备110从存储器108提取在指令中表示的输入参数。然后在步骤306中,纹理映射设备110开始产生机制,在该产生机制中,生成用于讨论中的卷积位置的所需数据值的阵列索引。

如图3所示,步骤306包括:生成索引的第一步骤308,和确定是否已经生成用于最后一遍卷积处理的索引的第二步骤310。在该实施方式中,这包括使用纹理映射设备110的偏移特征。以下将参照图6和图7更详细地描述偏移特征。如果尚未生成用于最后一遍卷积处理的索引,则方法返回到生成下一索引的步骤308。然而,如果已经生成用于最后一遍处理的索引,那么产生机制结束。

然后在步骤312中,纹理映射设备110对于要用于卷积运算的数据值和权重执行缓存查找。如图3所示,步骤312包括确定所需数据是否已经本地地可用于纹理映射设备110(即,是存在缓存错失还是存在缓存命中)的第一步骤314。如果存在缓存错失,那么在步骤316中,从存储器108提取所需数据。然而,如果存在缓存命中,那么不需要从存储器108提取该数据。

然后,在步骤318中,纹理映射设备110等待用于要存储在缓存中的所需数据的权重。然后,在步骤320中,纹理映射设备110确定所需数据是否存储在缓存中。如果所需数据未存储在缓存中,那么方法返回到等待要提取到缓存中的数据的步骤318。然而,如果所需数据存储在缓存中,那么在步骤322中,从缓存读取所需数据。

然后,执行步骤324,在该步骤中,执行多遍卷积运算。如图3所示,步骤324包括:执行一遍卷积的第一步骤326,和确定是否已经执行用于卷积运算的最后一遍卷积处理的然后的第二步骤328。如果尚未执行最后一遍卷积处理,那么方法返回到执行下一遍卷积处理的步骤326。然而,如果已经执行最后一遍卷积处理,那么执行卷积运算的方法完成。

图4更详细地示出了用于本发明的实施方式中的描述符400或输入参数。图4所示的第一类型的描述符,是纹理描述符(txd)402,该描述符在请求执行纹理映射操作或卷积运算二者之一时使用。txd402表示如下一个或更多个表面描述符(sfd)404,其用于要用于卷积运算或纹理映射操作中的一个或更多个输入阵列或表面(纹理、图像或其他阵列)。各sfd404表示用于要用于卷积运算或纹理映射操作中的数据阵列406的参数。

图4所示的第二类型的描述符是采样器描述符(smd)408,该描述符再次在请求纹理映射操作或卷积运算二者之一时使用。在纹理映射操作的情况下,smd408将表示要用于纹理映射操作的滤波方法(例如,双线性的、三线性的等)和其他参数。然而,在卷积运算的情况下,smd408表示用于核图谱的单个表面描述符(sfd)410,该核图谱包括要用于卷积运算中的核。sfd410表示用于包括要用于卷积运算中的核的核图谱412的参数。

图5示出了根据本发明的实施方式的、用于处理输入数据值的子集的输入数据值、缓存行、ram组、权重值的核以及数据阵列索引产生图案之间的关系。

图5示出了要对其执行多个卷积运算(核的多个应用)的输入数据值的阵列500的16*16个元素。图5所示的各小正方形代表阵列500的元素502。在该实施方式中,各元素包括在存储器中由8位无符号整数代表的数据值,由此包括1字节数据。由此,16*16阵列500包括256字节数据。在其他实施方式中,各元素可以包括各在存储器中由8位无符号整数代表的三个数据值(例如,rgb)或四个数据值(例如,rgbα),由此可以包括3或4字节数据。

在该实施方式中,各缓存行可以存储128字节数据。由此,阵列500的16*8个数据值的上集合可以并且存储在一个缓存行中,并且阵列500的16*8个数据值的下集合可以并且存储在另一个缓存行中。此外,在该实施方式中,各ram组可以存储32字节数据。由此,阵列500的8*4个数据值的块可以并且存储在单个ram组中。

在该实施方式中,可以执行产生用于处理8个输入数据值的子集的索引的产生机制。如图5所示,产生图案504遵循莫顿或z阶,在输入数据值的各子集的左上角中开始。图5所示的产生图案504用于4*2个数据值的水平定向的子集。然而,如以下将更详细讨论的,还可以使用用于2*4个数据值的垂直定向子集的产生图案。这通过用控制位指定要水平定向还是垂直定向产生图案来实现。纹理映射设备110可以可操作为,确定用于要应用的给定核的产生图案的数量、产生开始位置以及控制位。

在该实施方式中,用于卷积运算中的核可以包括3*3权重值的核或5*5权重值的核。图5示出了3*3核与ram组、缓存行以及产生图案之间的关系。

如图5所示,3*3核需要两个产生图案(spawningpattern)(参见例如3*3核506)。同样如图5所示,3*3核在输入数据值阵列的整个卷积中的某一点将跨越两个ram组的输入数据值(参见例如跨越8*4个数据值的两个块的3*3核508)。然而,如图5所示,为了提高存取用于产生图案的数据值的效率,产生图案总是与ram组对齐(不跨越ram组),即,4*2或2*4个数据值的各给定子集存储在单个ram组内。

同样如图5所示,3*3核在输入数据值阵列的整个卷积中的某一点将跨越两个缓存行的数据值(参见例如跨越16*8个数据值的两个缓存行的3*3核510)。然而,如图5所示,为了提高存取用于产生图案的数据值的效率,产生图案也总是与缓存行对齐(不跨越缓存行),即,4*2或2*4个数据值的给定子集存储在单个缓存行内。

图5还示出了5*5核与ram组、缓存行以及产生图案之间的关系。如图5所示,5*5核需要六个产生图案(参见例如5*5核512)。(然而,如以下将更详细讨论的,这可以通过使用4*2个数据值的四个水平定向子集和2*4个数据值的一个垂直定向子集的组合,从六个产生图案减为五个产生图案)。

同样如图5所示,5*5核在输入数据值阵列的整个卷积中的某一点将跨越两个ram组和两个缓存行的输入数据值(参见例如5*5核512)。然而,如图5所示,为了提高存取用于产生图案的数据值的效率,产生图案再次总是与ram组或缓存行对齐(不跨越ram组或缓存行),即,4*2或2*4个数据值的各给定子集存储在单个ram组和/或缓存行内。

图6示出了在执行产生机制时与卷积位置的偏移的使用。偏移可以为正或负。

在图6中,向输入数据值的阵列600应用5*5核。如图6中用“x”所示,可以向卷积运算的核的中心提供绝对位置2,2处的单个卷积位置602。然而,可以根据偏移轴604向该卷积位置给予相对位置0,0。

第一产生机制然后在与卷积位置的偏移-2,-2(用“o”606示出)处开始,并且进行(如虚线路径608所示)为处理阵列600的输入数据值的4*2子集。然后,第二产生机制可以在与卷积位置的偏移+2,-2处开始,并且进行为处理阵列600的输入数据值的4*2子集。然后,第三产生机制可以在与卷积位置的偏移-2,0处开始,并且进行为处理阵列600的输入数据值的4*2子集。然后,第四产生机制可以在与卷积位置的偏移+2,0处开始,并且进行为处理阵列600的输入数据值的4*2子集。然后,第五产生机制可以在与卷积位置的偏移-2,+2处开始,并且进行为处理阵列600的输入数据值的4*2子集。最后,第六产生机制可以在与卷积位置的偏移+2,+2处开始,并且进行为处理阵列600的输入数据值的4*2子集。

然后可以对于新卷积位置(例如,在绝对位置3,2处)重复上述处理,但根据偏移轴向新卷积位置给予相对位置0,0。这允许偏移的同一集合用于在每次对于卷积运算应用核时产生多遍卷积处理。

图6所示的处理需要使用六个周期的产生图案。如以上所讨论的,这可以通过使用数据值的四个水平定向的4*2子集和输入数据值的一个垂直定向的2*4子集的组合来减为五个周期的产生图案。图7中例示了这一点。

与图6相同,图7示出了在执行产生机制时与卷积位置的偏移的使用。在图7中,再次向输入数据值的阵列700应用5*5核。如图7中用“x”所示,可以再次向卷积运算的核的中心提供绝对位置2,2处的单个卷积位置702。然而,可以根据偏移轴704再次向该卷积位置给予相对位置0,0。

第一产生机制然后在与卷积位置的偏移-2,-2(用“o”706示出)处开始,并且进行(如虚线路径708所示)为处理阵列700的输入数据值的4*2子集。然后,第二产生机制可以在与卷积位置的偏移+2,-2处开始,并且进行为处理阵列700的输入数据值的垂直定向2*4(而不是水平定向的4*2)子集。然后,第三产生机制可以在与卷积位置的偏移-2,0处开始,并且进行为处理阵列700的输入数据值的4*2子集。然后,第四产生机制可以在与卷积位置的偏移-2,+2处开始,并且进行为处理阵列700的输入数据值的4*2子集。最后,第五产生机制可以在与卷积位置的偏移+2,+2处开始,并且进行为处理阵列700的输入数据值的4*2子集。

再次可以对于新卷积位置(例如,在绝对位置3,2处)重复上述处理,但根据偏移轴向新卷积位置给予相对位置0,0。这再次允许偏移的同一集合用于在每次对于卷积运算应用核时产生多遍卷积处理。

从上述内容可以看到,本发明的实施方式可以允许图形纹理映射单元以高效方式执行各种卷积运算。这在本发明的实施方式中通过提供纹理映射设备来实现,该纹理映射设备包括纹理提取电路,该纹理提取电路可操作为接收用于卷积运算的权重值的集合,并且从存储器提取要对其执行卷积运算的输入数据值的集合。纹理映射设备还包括纹理滤波电路,该纹理滤波电路可操作为使用所接收的权重值的集合和所提取的输入数据值的集合执行卷积运算。

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