用于通用计算的纹理单元的制作方法

文档序号:6338933阅读:302来源:国知局
专利名称:用于通用计算的纹理单元的制作方法
技术领域
一般来说,本发明涉及图形处理,具体来说,涉及图形处理器的纹理单元。
背景技术
图形处理器是一般用于处理与图像显示相关联的处理任务的专用处理器。图形处 理器可包括多个专门的功能单元,包括纹理单元。纹理单元执行纹理操作,包括纹理解压缩 和各向异性过滤。纹理采样器是用于优化纹理过滤并比通用处理器更快速地执行纹理过滤的特殊 类型的纹理单元。纹理单元可利用线性内插单元进行过滤。另外,包括双线性和三线性内插单元的 其它内插单元也可用。

发明内容
本发明涉及一种方法,包括利用纹理单元中的可编程线性内插器计算点积。本发明涉及一种设备,包括处理实体;耦合到所述处理实体的存储器;以及耦合到所述处理实体、用于计算点积的可编程线性内插器。本发明涉及一种存储指令的计算机可读介质,所述指令使得计算机能够确定由纹理单元确定的点积系数为负数;以及将所述系数的符号变为正值。


图1是根据一个实施例的纹理单元的示意图;图2是本发明一个实施例的示意图;图3是根据一个实施例的纹理单元的描绘,该纹理单元包括多个用于执行点积的 可编程线性内插单元;图4是本发明一个实施例的流程图;图5示出根据一个实施例的卷积的实例;图6是根据一个实施例的硬件有限状态机;图7是根据一个实施例的序列状态机的时序图;以及图8是根据一个实施例用于生成和处理负系数的流程图。
具体实施例方式根据一些实施例,可以利用诸如纹理采样器的纹理单元来执行数学计算,具体来说,在一些实施例中,执行点积计算。否则当图形处理单元的纹理单元(纹理采样器)没有 使用时,可从中央处理单元卸载这些任务。因此,在一些实施例中,可提高处理效率。另外, 在一些情况下,点积和卷积的计算可以利用以线性内插、双线性内插和三线性内插过滤单 元形式的现有纹理单元的可用能力来进行。纹理映射是由图形处理器中的专用硬件执行的计算加强型任务。即使纹理单元保 持闲置,通常仍必须利用通用处理单元来完成多种通用计算任务,例如确定二维卷积用于 图像处理、矩阵-矩阵相乘以及用于财务应用的二维点阵计算。但是,纹理单元可适于执行 在纹理单元闲置时从中央处理单元卸载的点积计算。参考图1,内插单元14的纹理单元核40经由纹理控制块42接收纹理请求。纹理 控制块42可包括指向纹理表面的指针、纹理表面的宽度和高度、将要进行纹理处理的η个 像素的纹理坐标(u,V)、将要执行的过滤操作的类型(例如线性、双线性或三线性)以及纹 理过滤器结果。地址生成级44计算由给定过滤操作使用的所有纹理元素(texel)的地址。以介 于0. 0与1. 0之间的归一化形式传递相关像素的坐标u和V。通过将它们乘以表面尺寸而 使它们非归一化。例如,u变成i.bu,其中i是整数,bu是分数。整数部分用于产生最近邻 居。在双线性内插的情况下,有四个邻居(i,j)、(i+1,j)、(i,j+1)、(i+1,j+Ι)。在三线 性过滤操作的情况下,有八个邻居。分数部分可用于计算可在混合相邻像素时使用的权。数据访问级(Stage)46访问所有必需的相邻像素。这个级可具有相对较长等待时 间的先进先出缓冲器以容许较长的等待时间。过滤级48利用有限状态机(FSM)定序器执行相邻像素的线性、双线性或三线性内 插。该过滤级在具有三个可能的系数输入的线性内插过滤器树中实现。该过滤单元可包含 以树方式连接以执行双线性和三线性过滤的多个线性内插器。双线性过滤涉及两个级上的三个线性内插。三线性过滤涉及三个级上的七个线性 内插。对于双线性过滤,对于第一级只允许一个系数(bu),对于第二级使用第二系数(bd)。 在三线性过滤的情况下,对于前两级使用与双线性操作相同的系数,并且对于第三级使用 第三系数(bw)。通用或中央处理单元可耦合到纹理采样器或直接耦合到内插单元。参考图2,一个 系统10示出耦合到专用内插单元14的通用或中央处理单元12。举例来说,通用处理单元可以是具有一个或多个核的中央处理单元、控制器或数 字信号处理器。在一个实施例中,内插单元可以是图形处理单元的诸如纹理采样器的纹理 单元。专用内插单元是设计成利用线性内插法进行内插的硬件或软件。中央处理单元12 和内插单元14均可耦合到存储器16。中央处理单元的输出可包括诸如点积的一般处理结^ ο否则当中央处理单元12被占用、而内插单元14可用时,内插单元14可利用它的 线性内插能力来执行从中央处理单元12卸载到内插单元14的点积操作。因此,一般专用 于诸如过滤和内插的图形功能的内插单元14可利用它的可用线性内插能力来为中央处理 单元执行点积计算。参考图4,起初,如方框沈所示,中央处理单元12设置每个像素的(u,ν)对。接 着,如方框观所示,中央处理单元触发纹理操作。在内插单元14中执行纹理操作30。然后,如方框32所示,中央处理单元从内插单元收集结果,并且如方框34所示,对输出进行缩 放。为了便于编程,可以利用库函数或应用程序接口(API)来简化纹理单元 (TXS)的编程以执行通用处理。与双输入向量A和B的一般点积计算(S卩,A dot B = A0*B0+A1*B1+. . . +An*Bn)有关的两个函数为TXS-DP (int m, int n, Datatype_t_t*A, Type*w, Mask_t_t*Mask, Type氺result)其中,m和η是点积(DP)的维度,A是待相乘的向量之一,W指向从输入向量B归 一化的系数的向量。掩码是如本文所说明用于处理负或退化系数的类型Mask t的位阵列。 在结果中返回点积操作的结果。向量A、向量B和结果可以是由Datatypej数据类型表示 的不同类型的向量,包括字符、整数或浮点数。尽管点积操作的一些部分可在纹理单元中执 行,但一些部分也可在中央处理单元上执行。作为计算的一部分,可将向量B归一化。可利用高级函数或API来便于编程TXS_LerpCoefTransform(int m, int η, float*B, float*ff, Mask_t_+*mask)其中B是输入向量,W是在调用纹理单元中所用的归一化向量。该函数也可生成 用于处理负的或生成的系数的掩码,该掩码是纹理单元调用的另一个输入。利用线性内插能力确定点积的一个实例是二维点积。但是,本发明不限于此。可 利用线性内插能力执行点积计算的方法如下。简单的2元点积Q-element dot-product)具有以下形式
1Pmw = ^Pi XWi
;=0其中,P是通道值,w是系数。如果对于点积(DP)扩展该等式,则DP = P0*w0+Pl*wl =(wO+wl) *lerp (w0/ (wO+wl), P0, PI)(式 1)。这可容易地映射到由纹理采样器提供的线性过滤器。处理器核需要提供(u,ν)坐 标以正确生成W0/(w0+wl)系数。通过(wO+wl)因子进行的缩放可发生在处理器核上或发 生在内插单元或纹理采样器上,前提条件是它们支持这样的缩放操作。类似地,可将4元和8元点积映射到双线性和三线性过滤器操作。这种映射的两 个实施例如下,但有很多方式来进行这样的映射。在第一个实施例中,可利用双线性过滤如 下表示4元点积DPOqch11 = w00*P00+w01*P01+wl0*P10+wll*Pll= s*BF(u,ν, POO, P01, P10, Pll)+d*P10,其中,u = w01/(w01+w00),ν = wlO/ (w00+wl0),s = ((wOO+wOl) * (wOO+wlO)) / (wOO),并且d = (w00*wll_w01*wl0)/((w00+w01)*(w00+wl0))。在第二个实施例中,按以下方式通过对每对点积(第1级lerp)、然后对所得和 (第二级lerp)递归地运用式1来将4元点积映射到2级线性内插器(Ierp)树DPOqch11 = w00*P00+w01*P01+wl0*P10+wll*Pll =(w00+w01) *lerp (w00/ (wOO+wOl), P00, POl) +
(wlO+wll)*lerp (wlO/(wlO+wll), ΡΙΟ, Pll)=(wOO+wOl+wlO+wll)*Ierp ((wOO+wOl)/ (wOO+wOl+wlO+wll),IerpwOO/ (wOO+wOl),POO, POl),Ierp (wlO/(wlO+wll),ΡΙΟ, Pll))对于较大的点积,有几种方法来进行映射。利用更高阶内插单元,例如三线性或甚
至四线性,上述两个实施例均可更紧密地重写以利用这些单元来进行8元或甚至16元点 积。例如,可通过递归地运用式1来将2X4象限的8元点积表示为3级Ierp树。在可在硬件中执行的乘积的大小小于所需点积操作的大小的情况下,整个点积可 分为多个较小点积之和,以便利用中央处理单元12或纹理采样器来在硬件上(例如,利用 上述两个优选实施例之一)进行每个这样的点积以将它们全部加在一起。例如,以下图表示出当只有进行4元点积的双线性单元可用时如何利用以上进行 4元点积的实施例计算16元点积POO POl P02 P03PlO Pll P12 P13P20 P21 P22 P23P30 P31 P32 P33数学上,16元点积可表示为sl*BFl+s2*BF2+s3*BF3+s4*BF4+s5*BF5+s6*Pll,其 中,参考图5,BFl是左上象限(P00,P01, ΡΙΟ, Pll)的双线性过滤操作,BF2是左下象限 (P20,P21,P30,P31)的双线性过滤操作,BF3是右上象限(P02,P03,P12,P13)的双线性过滤 操作,BF4是右下象限(P22,P23,P32,P33)的双线性过滤操作,并且BF5是中心象限(Pl 1, P12, P21, P32)。将一般N元点积映射到线性内插器树的一般过程如下所述。给定N个点积权(Win) 或系数的列表,过程生成所有级的Ierp的对应Ierp权(Wout)。如果过滤单元具有有限精 度,则它还可选地截断输出权的位。void Genffeights(float*ffin, float*ffout, int N){int MaxLevel = i log2 (N);for (int level = 1 ;level <= MaxLevel ;level++)for (int s = 0 ;s < Length ;s+ = (1 << level 1)){int beg = s, end = s+(l << level)_1 ;int halfway = beg+ (end-beg) -1 ;Wout [level, beg, end] = Sum (Win, beg, halfway) /Sum (Win, beg, end);if (limited_precision == true)truncatebits(ffout[level, beg, end]);}
}不希望的是处理未定义或负的线性内插系数。例如,假设1X2点积为P0-P1。在 这种情况下,由于除以零,所以未定义线性内插系数。另一个实例是点积P0_2*P1。在这种 情况下,系数为负(1/(-1))。由于线性内插单元只预期正系数的事实,所以将负系数传递给 线性内插单元可能不起作用。为了避免这两种约束条件,无论点积系数何时为负,都可改变其符号。为了进行补 偿,在过滤操作期间可反转对应P或通道值的符号。为了补偿符号改变,对于具有负系数的 每个纹理元素将控制掩码传递给纹理控制块。在一个实施例中,掩码为0表示对应系数为 正。在一个实施例中,掩码为1表示对应系数为负并且向设备发送反转纹理元素数据的符 号的信号。但是,最重要的是,用于正系数和负系数的掩码值可加以区分。例如,在P0-2*P1 的情况下,将(-2)变为2以得到P0+2*P1。这导致线性内插计算:3*lerp(l/3,P0,-Pl),其 中Ierp是线性内插。翻转Pl的符号以补偿其系数的符号改变。参考图8,在方框70和步骤1中,接收 系数wO和wl,并确定系数wl小于0或为负。在步骤2中,如左边和右边的方框72和74所 示,将wl设置成等于wl ’。在步骤3中,在左边,在方框76中加载PO和Pl,并在右边在方 框78中进行同样的事情。然后,在步骤4中,在左边在方框80中将Pl设置成等于P1’,并 在右边在方框82中将负Pl设置成等于ΡΓ。接着,在步骤5中,如方框84所示,将Ierp尺 度(scale)定义为s = (w0+wl')。如方框86所示,将Ierp系数定义为c = w0/(w0+wl)。 最后,在步骤7中,如方框88所示,将P0*w0+Pl*wl设置成等于c*lerp (c, P0, Pl)。上述序列可在软件或硬件中实现。在软件实施例中,它可通过存储在例如存储器 16中并由图2中的中央处理单元12执行的计算机可执行指令来实现。因此,计算机可读介 质可以是存储器16,并且计算机可通过中央处理单元12来实现。因此,将2、4和8元点积映射到最大为三级的线性内插中是可能的。对于涉及纹理单元内核的诸如η元点积的任何应用,可利用线性内插调用的可用 库来将它重写。主要代码仍在通用处理器核上执行,并且库函数部分地在局部核上执行,并且部 分地在纹理单元上执行。在处理器核上执行的库函数部分涉及(1)在核与纹理单元之间 建立通信;(2)启动该通信;以及(3)将中间结果累加以用于最终输出。这些基本上是与纹理单元方案有关的三种主要开销。来自该算法的性能增益可由 这些偏移抵消。如果利用纹理样本的专用硬件来实现这三个步骤,则在一些实施例中,这些 开销可减少并可实现更高的性能。一些实施例的一个应用是确定二维卷积。这是图像处理和许多科学应用中的常见 操作。二维卷积可利用两个纹理单元(TXQ函数来实现,包括用于将卷积过滤器系数变换 为所需的归一化过滤器值的变换以及执行实际卷积的函数。对于大小为NXN的输入图像 和kXk过滤器,二维内核如下输入大小为Nhputlmage[i] [j]过滤器大小为kXk的过滤器[m] [η]TXS_LerpCoeffTransform(k, k, &Filter

,&Filter_Lerp

,&mask

);
for(i = 0 ;i < N ;i++)for(j = 0 ;j < N ;j++) {TXS_DP(k, k, &Filter_Lerp
, &lnputlmage[i][j], &mask
, &result);OutputImage[i][j] = result ;}对变换的调用采用原始过滤器系数,并将它们转换为线性内插系数形式。对于每 个图像像素,即输入图像[i] [j],利用变换后的filterjerp执行卷积。因为点积卸载到纹理单元,处理器核现在可随意执行其它操作。注意,设置系数TXSJerpCoeffTransform以将卷积过滤器系数变换为归一化的 过滤器值的调用引入了一定开销。但是,这种开销分摊在这些值的多次使用上,这对于点积 是必定的。还可能的是,可以有不利用这些系数的变换的更一般的过滤,在此情况下,将不 调用TXSJerpCoeffTransform,并且因此没有进一步的开销。另一个实例是矩阵相乘。同样地,利用两个图形纹理单元函数,包括用于将一个矩 阵的行变换为纹理单元所需的系数格式的变换函数以及对另一个矩阵的列执行点积的函 数。以下代码可执行计算C = A*B,其中矩阵A、B和C是维度为N的方矩阵。这些矩阵可 以是任何类型,包括字符型、短整型、整数型或浮点数。for (row = 0 ;row < N ;row++) {TXS_LerpCoeffTransform(l, N, A [row], RowAlerp, mask);for (column = 0 ;column < N ;column+ = 4) {TXS_DP(1, N, RowAlerp, &B
[column],mask, &result);for(c = 0 ;c < 4 ;c++)C[row][column+c] = result [c]}}可将矩阵A的每个行变换为线性内插系数的向量RowALerp。然后,利用RowALerp 来与矩阵B的每个列B[*] [column]执行点积。对点积函数的单次调用的结果是C的四个元 素。对点积函数的每次调用计算C的四个连续元素C[row] [column] ,C[row] [column+1]、 C[row][column+2]、C[row][column+3]。又一个实例是确定二维二叉树点阵。这可在计算财务中用于数字求解描述随时间 的市场动态的偏微分方程。二维点阵示出其值取决于两个随机变量的价格的可交易元素的 值,例如其值取决于按外汇利率的债券价值的外汇债券。在每个时间步长,可以通过利用四 个相邻小区计算下一个时间步长中的预期价格来利用2X2窗口遍历二维点阵bCurr[ji] [j2] = Pl^vPrev [j 1+1] [j2+l] +P2*vPrev[jl+l] [j2] +P3*vPrev[jl] [j2+l] +P4*vPrev[jl] [j2]。典型的问题从2000X2000点阵开始。对于该点阵,有1999X 1999个2X2窗口。 1999X1999结果集合形成下一次迭代的点阵。计算可继续,直到点阵中只剩下一个项。
在所有迭代中,PI、P2、P3和P4恒定,并且可提前计算。对于所有实际问题参数, 它们为正并为非零。利用2X2窗口的基本操作减少为与纹理采样器上的线性内插计算完 好匹配的恒定系数的加权总和计算。在一些实施例中,执行点积的操作可在软件或固件中实现。在这些情况下,计算机 可由存储在诸如半导体存储器的计算机可读介质上的计算机可执行指令进行控制。在其它 实施例中,操作可完全在硬件中实现,并且在其它情况下,以利用硬件和软件的组合。参考图3,在一些实施例中,可将独立输入提供给线性内插器树中的每个线性内插 器(Lerp)20以便利用可用线性内插函数有效地计算2、4或8元点积,而无需任何溢出计 算。在一些情况下,额外存储需要可能较小,例如总计32字节的8个32位位置。另外,可 利用32位乘法器22。可编程系数存储设备18可存储线性内插器所需的系数,并通过复用 器M将它们提供给每个线性内插器20。此外,可将缩放因子提供给乘法器22的一个输入。在一些实施例中,可通过编程器直接编程线性内插器系数18。利用式1的递归应 用推导8元点积的系数18。为了节省空间,下文只示出最终结果,其中系数18来自以下 Ierp的系数w0*P0+wl*Pl+w2*P2+w3*P3+w4*P4+w5*P5+w6*P6+w7*P7 =(w0+wl+w2+w3+w4+w5+w6+w7)Ierp((wO+w 1+w2+w3)/(w0+wl+w2+w3+w4+w5+w6+w7)Ierp ((wO+wl) / (w0+wl+w2+w3),Ierp (wO/(wO+wl), PO, PI),1 erp (w2/(w2+w3), P2, P3)),Ierp ((w4+w5) / (w4+w5+w6+w7),1 erp (w4/ (w4+w5),P4,P5),1 erp (w6/ (w6+w7), P6,P7)))可在纹理采样器中增加有限状态机定序器以使得纹理采样器能够处理以下形式
的任何mXη元点积
权利要求
1.一种方法,包括利用纹理单元中的可编程线性内插器计算点积。
2.如权利要求1所述的方法,包括利用有限状态机定序器处理任何大小的点积。
3.如权利要求2所述的方法,其中所述状态机将较大的点积计算分解为多于一个较小 的计算。
4.如权利要求3所述的方法,包括将点积计算的序列分解为多个子块;以及将每个子 块变换为线性内插系数。
5.如权利要求2所述的方法,包括利用软件定序器有限状态机。
6.如权利要求2所述的方法,包括利用硬件定序器有限状态机。
7.如权利要求1所述的方法,包括确定由所述纹理单元确定的点积系数为负数,以及 将所述系数的符号变为正值。
8.如权利要求7所述的方法,包括通过在过滤操作期间反转对应通道值的符号来补偿 所述点积系数的符号改变。
9.如权利要求7所述的方法,包括通过将具有负系数的每个纹理元素的控制掩码传 递给纹理控制来补偿所述符号改变;以及确定所述掩码中的一个值表示对应系数为正数, 而所述掩码中的另一个值表示对应系数为负数。
10.如权利要求1所述的方法,包括将一般的N元点积映射到线性内插器树。
11.一种设备,包括 处理实体;耦合到所述处理实体的存储器;以及耦合到所述处理实体、用于计算点积的可编程线性内插器。
12.如权利要求11所述的设备,包括用于处理任何大小的点积的有限状态机定序器。
13.如权利要求12所述的设备,其中所述定序器将点积分解为多个较小点积操作的组合。
14.如权利要求13所述的设备,其中所述定序器循环通过所述点积操作并累加最终结果。
15.如权利要求13所述的设备,其中所述定序器将奇数大小的点积拉长到下一个偶数 大小的点积。
16.如权利要求15所述的设备,其中所述处理实体执行设置和累加操作,所述设置操 作将系数分解为多个子块。
17.如权利要求14所述的设备,所述处理器通过利用从所述设置步骤变换的系数执行 卷积来实现累加步骤。
18.如权利要求17所述的设备,其中所述定序器有限状态机包括过滤单元,所述有限 状态机对每个子点积计算生成纹理请求并将它们馈送给纹理管线。
19.如权利要求15所述的设备,包括通过缩放因子执行最终结果的相乘的缩放单元。
20.如权利要求13所述的设备,其中所述有限状态机定序器对每个子点积计算生成内 插器请求并将它们馈送给所述内插器。
21.如权利要求11所述的设备,所述纹理单元确定由所述纹理单元确定的所述点积系 数为负数,并将所述系数的符号变为正值。
22.如权利要求11所述的设备,包括线性内插器树,一般的N元点积映射到所述线性内 插器树。
23.一种存储指令的计算机可读介质,所述指令使得计算机能够 确定由纹理单元确定的点积系数为负数;以及将所述系数的符号变为正值。
24.如权利要求23所述的介质,还存储用于执行以下步骤的指令通过在过滤操作期 间反转对应通道值的符号来补偿所述点积系数的符号改变。
25.如权利要求23所述的介质,还存储用于执行以下步骤的指令通过将具有负系数 的每个纹理元素的控制掩码传递给纹理控制来补偿所述符号改变;以及确定具有一个值的 掩码表示对应系数为正数,而具有另一个值的所述掩码表示对应系数为负数。
全文摘要
可利用纹理单元来执行诸如点积的通用数学计算。这使得能够将一些通用计算和操作从中央处理单元卸载到纹理单元。纹理单元可利用线性内插器来执行点积计算。
文档编号G06T1/20GK102087740SQ20101059219
公开日2011年6月8日 申请日期2010年12月8日 优先权日2009年12月8日
发明者C·金, G·S·达西卡, J·冈萨雷斯, J·加戈, J·楚加尼, M·斯梅尔延斯基, S·加兰, V·M·D·巴里奥, V·W·李, Y-k·陈 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1