CN101192301A - 对处理图像的指令进行处理的方法、控制器和系统 - Google Patents
对处理图像的指令进行处理的方法、控制器和系统 Download PDFInfo
- Publication number
- CN101192301A CN101192301A CNA2007101680252A CN200710168025A CN101192301A CN 101192301 A CN101192301 A CN 101192301A CN A2007101680252 A CNA2007101680252 A CN A2007101680252A CN 200710168025 A CN200710168025 A CN 200710168025A CN 101192301 A CN101192301 A CN 101192301A
- Authority
- CN
- China
- Prior art keywords
- instruction
- register
- mux
- content
- swizzle
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims description 34
- 238000012545 processing Methods 0.000 title abstract description 66
- 239000013598 vector Substances 0.000 claims abstract description 199
- 230000015654 memory Effects 0.000 claims description 15
- 230000005540 biological transmission Effects 0.000 claims description 10
- 238000012546 transfer Methods 0.000 claims description 8
- 230000008878 coupling Effects 0.000 claims description 6
- 238000010168 coupling process Methods 0.000 claims description 6
- 238000005859 coupling reaction Methods 0.000 claims description 6
- 230000002411 adverse Effects 0.000 abstract 1
- 230000008707 rearrangement Effects 0.000 abstract 1
- 230000008569 process Effects 0.000 description 13
- 230000008859 change Effects 0.000 description 12
- 230000008901 benefit Effects 0.000 description 6
- 238000010606 normalization Methods 0.000 description 6
- 238000004891 communication Methods 0.000 description 5
- 230000003111 delayed effect Effects 0.000 description 4
- 238000003384 imaging method Methods 0.000 description 4
- 230000006399 behavior Effects 0.000 description 3
- 230000015572 biosynthetic process Effects 0.000 description 2
- 239000003086 colorant Substances 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 208000034630 Calculi Diseases 0.000 description 1
- 102100031083 Uteroglobin Human genes 0.000 description 1
- 108090000203 Uteroglobin Proteins 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000000712 assembly Effects 0.000 description 1
- 238000000429 assembly Methods 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 239000011521 glass Substances 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000002045 lasting effect Effects 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- 208000008281 urolithiasis Diseases 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
Landscapes
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Advance Control (AREA)
Abstract
本发明一般涉及图像处理领域,且具体涉及用于处理图像的指令集合。矢量处理可以包括在执行矢量运算之前将一个或者多个源寄存器中的矢量操作数重新设置。通常,通过发出多个序列改变指令来在多个源寄存器中执行操作数的重新设置,该序列改变指令需要临时寄存器的过度使用。此外,序列改变指令可以导致在管线中所执行指令之间的依赖性,由此不利地影响性能。本发明的实施方式在寄存器文件和矢量单元之间提供一定级别的多路选择,这允许在向矢量单元提供操作数之前在源寄存器中重新设置矢量操作数,由此避免对于序列改变指令的需要。
Description
技术领域
本发明通常涉及图像处理领域,且更具体地,涉及用于处理图像的指令集合。
背景技术
从三维场景来呈现二维图像的处理通常称作图像处理。图像呈现的一个特殊目的是使二维仿真或者三维场景的呈现尽可能逼真。这种为了使得场景呈现更为逼真的需求导致了越来越高的图像复杂性以及用于处理复杂图像的创新方法。
通常在监视器或者某种类型的显示屏上显示表示三维场景的二维图像。现代监视器通过使用像素来显示图像。像素是在监视器上示出的最小空间区域。多数现代计算机监视器使用数十万或者数百万的像素组合来构成整个显示或者呈现的场景。单独的像素以栅格形式设置并且共同覆盖监视器的整个观察区域。可以示出每个单独的像素以呈现用于观察的最终画面。
一种方法称为光栅化,用于使用像素在二维监视器上呈现真实世界的三维场景。光栅化是如下过程:采用以矢量格式(场景之内几何物体的数学表示)表示的二维图像,并且将该图像转换成为用于在监视器上显示的独立像素。在快速呈现图形以及使用相对较低数量的计算能力方面,光栅化是有效的;然而,光栅化受到某些负面影响。例如,因为光栅化并不是基于光的物理属性而是基于在投影到二维平面之上的场景中的三维几何物体的形状,所以光栅化通常受到缺少真实性的影响。此外,由光栅化呈现场景所需的计算能力直接随着待呈现场景中物体复杂性的增加而按比例变化。随着图像处理变得更为真实,呈现的场景也变得更加复杂。因而,因为光栅化直接随复杂性而按比例变化,使得光栅化随着图像处理的发展受到影响。
另一种方法称作射线跟踪,其用于使用像素将真实世界的三维场景呈现在二维监视器之上。射线跟踪技术跟踪将要在计算机屏幕上呈现的三维场景之中的其行为类似于光线的假想射线的传播。射线源于坐在计算机屏幕后的观察者的眼睛,并且穿过构成计算机屏幕的像素而通过,朝向三维场景。每个跟踪的射线行进到场景之中并且可以与场景以内的物体相交。如果射线与场景以内的物体相交,则使用该物体的属性以及多个其他起作用的因素,例如光源的影响,来计算射线暴露处的颜色和光的量、或者其中的缺乏。然后,使用这些计算来确定跟踪的射线所通过的像素的最终颜色。
对单一场景多次执行射线跟踪过程。例如,可以为显示器中的每个像素跟踪单一射线。一旦为了确定构成计算机屏幕的二维显示的所有像素的颜色已经跟踪了足够数量的射线,则可以在计算机屏幕上向观察者显示三维场景的二维合成。
通常,射线跟踪比光栅化更为真实地呈现现实世界的三维场景。这部分地是由于射线跟踪模拟了真实世界环境中光的传播和行为,而不像光栅化所执行的那样,将三维形状简单地投影到二维平面之上。因而,使用射线跟踪呈现的图形在监视器上更精确地描述了我们的眼睛所习惯看到的真实世界中的景物。
此外,相对于光栅化,射线跟踪还可以处理越来越复杂的场景。射线跟踪随场景复杂性而成对数比例变化。这是由于以下事实,即使场景变得更为复杂,也只有相同数量的射线投射到场景之中。因而,与光栅化不同的是,随着场景变得更为复杂,在计算机能力需求方面射线跟踪并未受到影响。
然而,射线跟踪的一个主要缺点是大量浮点计算,并且由此增加的呈现场景所需的处理能力。当需要快速呈现时导致出现问题,例如,当图像处理系统例如在游戏控制台中针对动画目的而呈现图形的时候。由于对于射线跟踪所增加的计算需求,难以快速呈现看起来足够真实的动画(真实的动画大约是每秒二十至二十四帧)。
使用例如射线跟踪的图像处理可以包括执行矢量和标量数学运算两者。因而,用于图像处理的硬件支持可以包括配置为执行多种计算的矢量和标量单元。矢量和标量运算例如可以是跟踪通过场景的光的路径、或者移动三维场景以内的物体。矢量单元可以对场景中关于物体的矢量执行例如点乘、叉乘的运算。标量单元可以对标量值执行算术运算,例如加、减、乘、除等。
可以将矢量和标量单元管线化(pipeline)以改进性能。然而,执行矢量运算可以包括执行相互依赖的多个指令的多个迭代。指令之间的这种依赖可以降低管线化单元的效率。例如,为了在执行第二指令之前完成第一指令,可能不曾使用多个管线化阶段。
此外,每个矢量单元可以与寄存器文件耦合,所述寄存器文件包括由矢量单元处理的矢量数据。矢量数据可以包含在一个或者多个寄存器中的一个或者多个位置中。因而,可以发布一个或者多个指令来将所述矢量数据在目标寄存器之内的期望位置中重新设置。重新设置矢量数据的多个指令可能通过消耗发布带宽的重要部分而限制矢量处理的效率。另外,重新设置矢量数据的一个或者多个指令可能彼此依赖,由此引入了进一步限制效率的进一步的管线化迟延(stall)和未使用的管线化阶段。
此外,重新设置矢量数据可能要求使用多个临时寄存器。因为需要构造大的寄存器文件,这消耗宝贵的空间并且根据寄存器的可用性而限制了矢量数据的处理,因而大量临时寄存器的使用又引入了另外一种效率低下。
由此,针对处理矢量数据需要更为有效的方法、系统和产品。
发明内容
本发明一般涉及图像处理领域,并且尤其涉及用于处理图像的指令集合。
本发明的一个实施方式提供了一种执行指令的方法。该方法一般包括:设置与寄存器文件和矢量单元耦合的一个或者多个多路选择器的控制,其中多路选择器控制的设置配置为确定对矢量单元提供输入的一个或者多个寄存器中内容的设置。所述方法进一步包括发布算术指令,其中根据多路选择器控制的设置,在从寄存器文件向矢量单元传送期间,由一个或者多个多路选择器重新设置与算术指令相关联的寄存器的内容。
本发明的另一实施方式提供了一种控制器,所述控制器一般配置为接收一般包括swizzle指令(顺序调整指令)和算术指令的指令。每个swizzle指令可以与一个算术指令相关联,其中如果指令是swizzle指令,则控制器配置为设置与寄存器文件和矢量单元耦合的一个或者多个多路选择器的控制,其中该多路选择器控制的设置配置为确定对矢量单元提供输入的一个或者多个寄存器中的内容的设置。如果指令是算术指令,则控制器配置为允许向矢量单元传送与算术指令相关联的寄存器的内容,其中根据多路选择器控制的设置,在从寄存器文件向矢量单元传送内容期间,由一个或者多个多路选择器重新设置内容。
本发明的又一个实施方式提供了一种系统,所述系统一般包括彼此通信地耦合的多个处理器,其中每个处理器一般包括:寄存器文件,所述寄存器文件包括多个寄存器;至少一个矢量单元,用于执行算术指令;一个或者多个多路选择器,其与寄存器文件和至少一个矢量单元耦合,其中多路选择器配置为将寄存器文件中的一个或者多个寄存器的内容传送到至少一个矢量单元;以及控制器配置为接收swizzle指令和算术指令。每个swizzle指令可以与算术指令相关联,其中如果指令是swizzle指令,则控制器配置为设置一个或者多个多路选择器的控制,其中所述多路选择器控制的设置配置为确定对矢量单元提供输入的一个或者多个寄存器中的内容的设置。如果指令是算术指令,则控制器配置为允许向矢量单元传送与算术指令相关联的寄存器的内容,其中根据多路选择器控制的设置,在从寄存器文件向矢量单元传送内容期间,由一个或者多个多路选择器重新设置内容。
附图说明
由此,通过参考在附图中示出的本发明的实施方式,可以获得并且详细理解本发明的上述特征、优点和目的的方式以及上文简要概括的本发明的更多特定描述。
然而,应该注意,附图仅示出了本发明的典型实施方式,并且由此不应认为是对本发明范围的限制,本发明还包括其他等效的实施方式。
图1示出了根据本发明一个实施方式的多核处理元件,
图2示出了根据本发明的实施方式的多核处理元件网络,
图3是根据本发明一个实施方式的由图像处理系统呈现的示例性三维场景,
图4示出了根据本发明一个实施方式的在屏幕上呈现的物体的详细视图,
图5示出了叉乘运算,
图6示出了根据本发明的实施方式的寄存器,
图7示出了根据本发明的实施方式的矢量单元和存储器文件,
图8示出了根据本发明的实施方式的矢量单元的详细视图,
图9根据本发明的实施方式,示出了用于执行叉乘运算的示例性指令,
图10根据本发明的的实施方式,示出了在图9中的指令的管线化的执行,
图11A示出了根据本发明的实施方式的示例性系统,
图11B示出了根据本发明的实施方式的潜在的操作数重新设置,
图12示出了根据本发明的实施方式的swizzle指令,
图13根据本发明的的实施方式,示出了用于执行叉乘运算的另一指令流的管线化的执行,
图14是根据本发明的实施方式的由swizzle控制器所执行的示例性运算的流程图,该运算用以重新设置寄存器中的操作数。
具体实施方式
本发明通常涉及图像处理领域,并且更具体地涉及用于处理图像的指令集合。矢量处理可以包括在执行矢量运算之前将一个或者多个源寄存器中的矢量操作数进行重新设置。典型地,通过发布多个序列改变指令来执行源寄存器中操作数的重新设置,这需要使用额外的临时寄存器。此外,序列改变指令可以导致在管线中执行的指令之间的差异,由此不利地影响性能。本发明的实施方式在寄存器文件和矢量单元之间造成某程度的多路选择,这允许在向矢量单元提供操作数之前重新设置源寄存器中的矢量操作数,由此,消除对序列改变指令的需要。
在下文中,对本发明的实施方式进行参考。然而应该理解,本发明并不局限于特定描述的实施方式。而是,无论是否涉及不同的实施方式,认为下文的特征和元素的任意结合执行并且实践本发明。此外,在各种实施方式中,本发明提供了优于现有技术的多个优点。然而,尽管本发明的实施方式可以实现优于其他可能解决方案和/或优于现有技术的优点,给定实施方式是否实现特定优点并不限制本发明。由此,下文的方面、特征、实施方式和优点仅是示意性的,而并不认为是所附权利要求书的限制或者元素,除非在一个或多个权利要求中明确阐明。同样,“本发明”的引用并不认为是在此公开的任何发明性主题的概括,也不认为是所附权利要求书的限制或者元素,除非在一个或多个权利要求中明确阐明。
示例性处理器布局和通信网络
图1示出了其中可以实现本发明实施方式的示例性多核处理元件100。多核处理元件100包括多个基本吞吐引擎105(BTE)。BTE105可以包含多个处理线程和核心高速缓冲存储器(例如,L1高速缓冲存储器)。定位在每个BTE之中的处理线程可以访问共享多核处理元件高速缓冲存储器110(例如,L2高速缓冲存储器)。
BTE 105还可以访问多个收件箱115。收件箱115可以是存储器映射的地址空间。收件箱115可以映射到定位在每个BTE 105以内的处理线程。定位在BTE以内的每个线程具有存储器映射的收件箱并且访问所有其他存储器映射的收件箱115。收件箱115构成由BTE105所使用的低等待时间和高带宽的通信网络。
BTE可以使用收件箱115作为彼此相互通信的网络,并且在BTE之中重新分配数据处理工作。对于某些实施方式,在通信网络中可以使用分开的发件箱,例如,由BTE 105接收处理结果。对于其他实施方式,收件箱115还可以用作发件箱,例如,由一个BTE 105,其将处理功能结果直接写入将要使用该结果的另一BTE 105的收件箱中。
图像处理系统的集合性能依赖于BTE划分和重新分配工作的好坏。收件箱115的网络可用以收集并将工作分配给其他BTE,而不必由不具有帧对帧一致性的BTE通信数据分组来中断共享的多核处理元件高速缓冲存储器110。每帧能够呈现数百万个三角形的成像处理系统可以包括以此方式连接的许多BTE 105。
在本发明的一个实施方式中,可以向工作量管理器指定一个BTE 105的线程。图像处理系统可以使用各种软件和硬件组件来从三维场景呈现二维图像。根据本发明的一个实施方式,图像处理系统可以使用工作量管理器来由图像处理系统所发出的射线来遍历空间索引。空间索引可以实现为树型数据结构,用以将相对较大的三维场景划分成为较小的包围体积。使用用于成像处理的射线跟踪方法的成像处理系统可以使用空间索引来快速确定射线包围体积相交。在本发明的一个实施方式中,工作量管理器可通过使用空间索引来执行射线包围体积相交测试。
在本发明的一个实施方式中,多核处理元件100上的多核处理元件BTE 105的其他线程可以是矢量吞吐引擎。在工作量管理器确定射线包围体积相交之后,工作量管理器可以经由收件箱115向多个矢量吞吐引擎之一发出(发送)射线。然后,矢量吞吐引擎可以确定射线与包围体积以内包含的图元(primitive)是否相交。矢量吞吐引擎还可以执行相关运算,用以确定射线穿过经过的像素的颜色。
图2示出了根据本发明一个实施方式的多核处理元件200的网络。图2还示出了本发明的一个实施方式,其中多核处理元件100的BTE之一的线程是工作量管理器205。根据本发明的一个实施方式,在多核处理元件200的网络中的每个多核处理元件2201-N可以包含一个工作量管理器2051-N。根据本发明的一个实施方式,多核处理元件200的网络中的每个处理器220还可以包含多个矢量吞吐引擎210。
根据本发明的一个实施方式,工作量管理器2201-N可以使用高速总线225来与其他工作量管理器2201-N和/或其他多核处理单元220的矢量吞吐引擎210进行通信。矢量吞吐引擎210的每个可以使用高速总线225来与其他矢量吞吐引擎210或者工作量管理器205进行通信。工作量管理器处理器205可以使用高速总线225,以便收集并向其他工作量管理器处理器205分配图像处理相关的任务,和/或向其他矢量吞吐引擎210分配任务。高速总线225的使用可以允许工作量管理器2051-N进行通信,而不会影响具有关于工作量管理器205通信的数据分组的高速缓冲存储器230。
示例性三维场景
图3是将要由图像处理系统呈现的示例性三维场景305。在三维场景305以内存在物体320。图3中的物体320是不同的几何形状。尽管在图3中仅示出了四个物体320,通常在三维场景中物体的数目可以更多或者更少。通常,三维场景具有比图3中示出更多的物体。
如图3中可见,物体具有各种几何形状和大小。例如,在图3中的一个物体是金字塔320A。图3中的其他物体是盒体320B-D。在许多现代图像处理系统中,物体通常分开成为较小的几何形状(例如,正方形、圆形、三角形等)。较大的物体则由许多较小的简单几何形状来表示。这些较小几何形状通常称作图元。
在场景305中还示出了光源325A-B。光源将在场景305中定位的物体320照亮。此外,根据场景305以内的光源325和物体320的位置,光源可以产生投射到场景305以内的物体之上的阴影。
图像处理系统可以将三维场景305呈现至二维画面。图像处理系统还可以使二维画面显示在监视器310上。监视器310可以使用不同颜色的许多像素330来呈现最终的二维画面。
一种由图像处理系统使用的方法称作射线跟踪,该方法用以将三维场景320呈现至二维画面。由从观察者315的将射线“发出”或者“射出”进入三维场景320的图形处理系统来实现射线跟踪。射线具有与光线类似的属性和行为。
在图3中可见,从观察者315的位置发出一条射线340并且经过三维场景305而通过。随着射线340从观察者315穿过直到三维场景305,射线340通过一个平面,将由图像处理系统在该平面处呈现最终二维画面。在图3中,由监视器310表示该平面。由像素335来表示射线340通过平面或者监视器310的点。
如先前概括描述,大多数图像处理系统使用数千像素(如果不是百万的话)的栅格330来在监视器310上呈现最终的场景。每个独立的像素可以显示不同的颜色,以便在监视器310上呈现最终构成的二维画面。图像处理系统使用射线跟踪图像处理方法论来从三维场景呈现二维画面,该图像处理系统计算发出的一条或者多条射线在三维场景中相遇处的颜色。然后,图像处理场景将对射线相遇的像素指定颜色,射线通过该像素而在从观察者去往三维场景的通路上传递。
每个像素所发出射线的数目可以是变化的。针对将要呈现的特殊场景,某些像素可以发出许多射线。在此情况下,由来自针对该像素发出的所有射线的每个颜色的贡献来确定像素的最终颜色。其他像素可以仅发出单一的射线,用以确定二维画面中像素的结果颜色。某些像素可能不具有图像处理系统发出的任何射线,在此情况下这些像素的颜色是由图像处理系统以内的算法来确定的、近似的或者赋值的。
为了在二维画面中确定像素335的最终颜色,图像处理系统必须确定射线340是否与场景以内的物体相交。在场景以内,如果射线没有与物体相交,则可以将其指定为默认的背景颜色(例如,表示白天或者夜晚天空的蓝色或者黑色)。相反,由于射线340通过三维场景,射线340可能会到达物体。当射线到达场景以内的物体时,物体的颜色可以由射线通过的像素来赋值。然而,必须在其对像素赋值之前确定物体的颜色。
许多因素会对由原始射线340到达的物体的颜色有所贡献。例如,三维场景以内的光源可以照亮物体。此外,物体的物理属性对物体的颜色有所贡献。例如,如果物体是反射性的或者透明的,则其他非光源物体可能对物体的颜色有所贡献。
为了确定来自三维场景以内其他物体的影响,可以从原始射线340与物体相交的点发出二级射线。例如,一种类型的二级射线是阴影射线。阴影射线可用以确定原始射线340与物体相交的点处的光的贡献。另一种类型的二级射线是透射射线。透射射线可用以确定通过物体的体透射的颜色或者光。此外,第三种类型的二级射线是反射射线。反射射线可用以确定在物体上反射的颜色或者光。
如上所述,一种类型的二级射线是阴影射线。从原始射线与物体的相交点到三维场景305以内的光源,可以跟踪每条阴影射线。如果射线到达光源,而且在射线到达光源之前没有遇到另一物体,则在原始射线到达物体的点的位置,光源将照亮由原始射线到达的物体。
例如,从原始射线340与物体320A相交的点的位置可以发出阴影射线341A,并且阴影射线341A沿朝向光源325A的方向通过。阴影射线341A到达光源325A而没有遇到场景305以内的任何其他物体320。由此,光源325A将在原始射线340与物体320A相交的点的位置照亮物体320A。
其他阴影射线使得由三维场景以内的另一物体阻挡它们的路径,所述路径位于到达物体的原始射线和光源之间。如果对原始射线到达的物体以及光源上的点之间的路径进行阻碍的物体是不透明的,则光源不会照亮原始射线到达物体的点的位置处的物体。由此,光源对原始射线的颜色没有贡献,并且因而对在二维画面中呈现的像素的颜色也没有贡献。然而,如果该物体是半透明或者透明的,则光源在原始射线到达物体的点的位置可以照亮物体。
例如,可以从原始射线340与物体320A相交的点的位置发出阴影射线341B,并且所述阴影射线341B可以沿朝向光源325B的方向穿过。在此例子中,由物体320D阻断阴影射线341B的路径。如果物体320D是不透明的,则在原始射线340与物体320A相交的点的位置,光源325B将不会照亮物体320A。然而,如果物体320D的阴影射线是半透明或者透明的,则光源325B在原始射线340与物体320A相交的点的位置可以照亮物体320A。
另一种类型的二级射线是透射的射线。如果与原始射线相交的物体具有透明或者半透明属性(例如,玻璃),则可以由图像处理系统发出透射的射线。透射的射线以与原始射线到达物体的角度相关的角度穿过物体。例如,可以看到,透射的射线344通过与原始射线340相交的物体320A而穿过。
另一种类型的二级射线是反射射线。如果与原始射线相交的物体具有反射属性(例如,金属抛光),则将由图像处理系统发出反射的射线以确定由该物体所反射的颜色或者光。反射的射线以与原始射线与该物体相交的角度相关的角度远离该物体而传送。例如,可以由图像处理系统所发出的反射的射线343来确定与原始射线340相交的物体320A所反射的颜色或者光。
所有二级射线(例如,阴影射线、透射的射线、反射的射线等)的颜色和光的总体贡献将导致原始射线所通过的像素的最终颜色。
矢量运算
处理图像可以包括执行一个或者多个矢量运算以确定例如射线与物体的相交、阴影射线的生成、反射的射线等。在成像处理期间执行的一个普通运算是在两个矢量之间的叉乘运算。可以执行叉乘运算以确定来自表面的法向矢量,例如,在三维场景中物体的图元的表面。法向矢量可以指示该物体的表面对于观察者是否可见。
如前所述,场景中的每个物体可以表示为彼此连接以形成物体形状的多个图元。例如,在一个实施方式中,每个物体可以包括多个互联的三角形。图4示出了包括多个三角形410的一个示例性物体400。物体400可以是由图4中的多个三角形410形成的球形物体。为了示出的目的而显示了粗糙的球形物体。本领域技术人员应该认识到,可以由更多个更小的三角形构成物体400的表面,从而更近似于曲面物体。
在本发明的一个实施方式中,针对每个三角形410计算表面法线,以便确定该三角形的表面对于观察者450是否可见。为了确定每个三角形的表面法线,可以在表示三角形的两条边的两个矢量之间执行叉乘运算。例如,可以通过在矢量411a和411b之间执行叉乘来计算三角形410a的表面法线413。
法线矢量可以确定表面(例如,图元的表面)是否面向观察者,参考图4,法线矢量413指向观察者450的方向。因而,可以向用户显示三角形410。另一方面,三角形410b的法线矢量415指向远离观察者450的方向。因而,不必向观察者显示三角形410b。
图5示出了在两个矢量A和B之间的叉乘运算。如所示出,矢量A可以表示为坐标[xa,ya,za],而矢量B可以表示为坐标[xb,yb,zb]。叉乘A×B生成了矢量N,该矢量N与包含矢量A和矢量B的平面垂直(法向)。如所示出,法线矢量的坐标是[(yazb-ybza),(xbza-xazb),(xayb-xbya)]。本领域技术人员应该认识到,矢量A可以对应于图4中的矢量411a,且矢量B可以对应于矢量411b,而矢量N可以对应于法线矢量413。
在图像处理期间所执行的另一普通矢量运算是点乘运算。可以执行点乘运算以便确定场景中物体的旋转、运动、位置等。点乘运算产生标量值,该值独立于坐标系统并且表示欧几里德空间中的内积。下文的等式描述了在先前所述的矢量A和矢量B之间执行的点乘运算:
A·B=xa·xb+ya·yb+za·zb
对于执行矢量运算的硬件支持
如前所述,例如图2中的VTE 210的矢量吞吐引擎(VTE)可以执行运算以确定射线与图元是否相交,并且确定射线所通过的像素的颜色。执行的运算可以包括多个矢量运算和标量运算。因而,VTE 210可以配置为向用于执行矢量运算的矢量单元发出指令。
矢量处理可以包括发出一个或者多个矢量指令。矢量指令可以配置为执行运算,该运算包含在一个或者多个寄存器中的一个或者多个操作数。一个或者多个寄存器可以是与矢量单元相关联的寄存器文件的一部分。图6示出了包括一个或者多个操作数的示例性寄存器600。如图6中所示,寄存器文件中的每个寄存器可以包括多个部分,其中每个部分包含一个操作数。
在图6示出的实施方式中,寄存器600示出为128位寄存器。寄存器600可以划分成为四个32位字的部分:示出了字0、字1、字2和字3。如所示出,字0可以包括位0-31,字1可以包括位32-63,字2可以包括位64-97,而字3可以包括位98-127。然而,本领域技术人员应认识到,寄存器600可以是任意合理长度、并且可以包括任意数目的任意合理长度的部分。
寄存器600中的每个部分可以包括用于矢量运算的操作数。例如,寄存器600可以包括对于矢量(例如,图5的矢量A)的坐标和数据。因而,字0可以包括坐标xa,字1可以包括坐标ya,而字2可以包括坐标za。字3可以包括关于与该矢量相关联的图元的数据,例如,颜色、透明度等。在一个实施方式中,图3可以用以存储标量值。标量值与字0-2中包含的矢量坐标相关、或者不相关。
图7示出了示例性矢量单元700以及相关联的寄存器文件710。矢量单元700可以配置为执行单指令多数据(SIMD)指令。换言之,矢量单元700可以针对一个或者多个矢量运算以产生单一的标量或者矢量结果。例如,矢量单元700可以在数据元素之上执行并行运算,该数据元素包括一个或者多个矢量以产生标量或者矢量结果。
在寄存器文件710中可以存储由矢量单元运算的多个矢量。例如,在图7中,矢量文件710提供32个128位寄存器711(R0-R31)。可以以类似图6的寄存器600的方式来组织寄存器711中的每个。因而,每个寄存器711可以包括矢量数据,例如,矢量坐标、像素数据、透明度等。使用装载和存储指令,可以在寄存器文件710和例如高速缓冲存储器存储器的存储器之间交换数据。因而,寄存器文件710与存储器设备可通信地耦合,所述存储器设备例如动态随机访问存储器(DRAM)设备或者高速缓冲存储器(SRAM)设备。
多个线路(lane)720可以将寄存器文件710连接到矢量单元700。每个线路可配置为从寄存器文件向矢量单元提供输入。例如,在图7中,三个128位的线路将寄存器文件连接到矢量单元700。以此方式,可以同时向矢量单元提供来自寄存器文件710的任意三个寄存器的内容。
由矢量单元执行的运算的结果可以写回到寄存器文件710。例如,128位线路721提供了写回路径,用以将由矢量单元700所计算的结果写回到寄存器文件710的寄存器711的任意一个。
图8示出了矢量单元800的详细视图。矢量单元800是在图7中所述的矢量单元700的一个实施方式。如在图8中所示,矢量单元800可以包括多个处理线路。例如,在图8中示出了三个处理线路810、820和830。每个处理线路配置为与一个或者多个其他处理线路并行地执行运算。例如,每个处理线路可以将一对操作数相乘以便执行叉乘运算或者点乘运算。通过将矢量单元的不同处理线路中的不同操作数对进行相乘,可以更快、更有效地执行矢量运算。
在本发明的一个实施方式中,矢量单元800的一个或者多个处理线路配置为执行标量运算。由此,矢量单元800配置为执行标量和矢量运算两者。例如在一个实施方式中,矢量单元800可以包括四个处理线路,其中三个处理线路配置为执行矢量运算,且另一个处理线路配置为执行标量运算。
将每个处理线路管线化以进一步改进性能。因而,每个处理线路可以包括多个管线化阶段,其中每个阶段对操作数执行一个或者多个运算。例如,每个矢量线路可以包括乘法器851,用于将一对操作数A和操作数C相乘。可以从将寄存器文件与矢量单元进行耦合的线路之一,例如图7中的线路720,来获取操作数A和操作数C。在本发明的一个实施方式中,可以在图8所示的管线的第一阶段中执行操作数的相乘。
每个处理线路还可以包括校准器,用于校准由乘法器851计算的乘积。例如,在每个处理线路中可以提供校准器852。校准器852配置为在结果中将由乘法器851计算的乘积的十进制小数点调整至期望位置。例如,校准器852可以配置为将由乘法器851计算的乘积的位偏移一个或者多个位置,由此使乘积成为期望的格式。在图8中,尽管校准示出为独立的管线阶段,本领域技术人员应该认识到,可以在相同的管线阶段中执行乘法和校准。
每个处理线路还可以包括用于将两个或者多个操作数进行相加的加法器853。在一个实施方式中(在图8中所示),每个加法器853配置为接收由乘法器计算的乘积,并且将该乘积与另一操作数B相加。与操作数A和操作数C类似,可以从将寄存器文件连接到矢量单元的线路之一获取操作数B。由此,每个处理线路可以配置为执行多加法指令。本领域技术人员应该认识到,在矢量运算中频繁执行多加法指令。由此,通过在并行线路中执行多个多加法指令,可以显著改进矢量处理的效率。
如图8中所示,每个矢量处理线路还可以包括归一化阶段和四舍五入阶段。因而,可以将归一化器854设置在每个处理线路中。归一化器854配置为以传统指数格式表示计算的值。例如,归一化器接收作为运算结果的值0.0000063。归一化器854可以将该值转换成为更适合的指数格式,例如,6.3×10-6。四舍五入阶段包括将计算的值四舍五入成为期望的十进制小数点位数。例如,如果在结果中仅期望保留三个十进制位,则10.5682349的计算的值可以四舍五入成为10.568。在本发明的一个实施方式中,四舍五入器可以将特定精度浮点数字的最不显著的位四舍五入,其中四舍五入器设计以与该特定精度的浮点数字协同工作。
本领域技术人员应该认识到,本发明的实施方式并不限制于在上文和图8中所述的特殊的管线阶段、组件、以及组件的排列。例如,在某些实施方式中,校准器852可以配置为校准操作数B、由乘法器计算的乘积、或者两者。此外,本发明的实施方式并不局限于在图8中所描述的特定组件。在每个处理线路中可以包括示出组件以及附加组件的任意结合,该组件以及附加组件包括但不限于诸如前导零加法器(leading zero adder)、除法器等。
在本发明的一个实施方式中,一个或者多个矢量单元可以与寄存器文件耦合。例如,在一个实施方式中,两个矢量单元可以与寄存器文件耦合。每个矢量单元可以配置为独立、同步地处理矢量和标量指令。在一个实施方式中,可以与第二矢量单元共享第一矢量单元中的一个或者多个资源,以便处理例如叉乘指令的指令。
由单一矢量单元执行叉乘
使用矢量单元执行叉乘运算,例如矢量单元800可以包括乘法指令。例如,返回参考图5,叉乘运算需要六个乘法运算和三个减法运算。因为矢量单元800包括具有三个乘法器的三个矢量处理线路,所以执行叉乘运算可以包括乘法指令。
图9示出了示例性指令,用于通过向矢量单元发出乘法指令来执行叉乘运算。执行叉乘运算可以包括发出多个序列改变指令901。该序列改变指令配置为将用于执行叉乘运算的操作数转换成为寄存器文件的期望寄存器中的期望位置。例如,序列改变运算可以将数据从第一寄存器转移至第二寄存器。序列改变指令还可以选择特殊位置,例如特殊的字的位置(参见图6),用于将数据从一个寄存器转移到另一寄存器。在一个实施方式中,序列改变指令可以在相同寄存器以内重新设置数据元素的位置。
一旦操作数处于期望寄存器中的期望位置,则可以发出第一指令902来执行第一组乘法运算。第一组乘法运算可以执行用以执行叉乘运算所需的6个乘法运算的一个或者多个。例如,在一个实施方式中,第一组乘法运算可以执行六个乘法运算中的三个。可以在矢量单元的三个处理线路中的每个中执行乘法运算。可以将第一组乘法运算的结果存回寄存器文件的一个或者多个寄存器中。
接着,可以发出第二指令903以执行第二组乘法运算。第二组乘法运算可以执行在第一组乘法运算中未执行的叉乘的其余(三个)乘法运算。在一个实施方式中,第二指令可以包括执行用于完成叉乘运算的第二组乘法运算和减法运算两者。
例如,返回参考图8,操作数A和操作数C可以与用于执行第二组乘法运算的操作数相关联。可以从第一组乘法运算的结果减去第二组乘法运算的结果,反之亦然。例如,可以经由图8的操作数B,作为用于执行减法运算的加法器853的输入来提供第一组乘法运算的结果。
如前所述,可以将由矢量单元执行的指令管线化。因为在序列改变指令901、第一乘法指令902、以及第二乘法指令903之间存在依赖,所以一个或者多个管线化阶段可能会被迟延。例如,可能不会执行第一乘法指令,直到将操作数移入适当寄存器中的适当位置。由此,可能不执行第一乘法指令,直到序列改变指令完成,由此需要管线化迟延。类似地,因为第二乘法指令可以使用来自第一乘法指令的结果,第二乘法指令可能不会执行,直到第一乘法指令的完成,由此在第一乘法指令和第二乘法指令之间需要管线化迟延。
图10示出了在管线中指令901、指令902和指令903的执行。为了示出目的,假定每个指令的执行是4个时钟周期的长度。然而,本领域技术人员应该认识到,指令的执行可以占用任意数目的时钟周期。此外,用于执行的时钟周期的数目在指令之间有所不同。
如图10所示,第一序列改变指令901a的执行在第一时钟周期(CC1)中开始,并且在CC4中结束。类似地,指令901b的执行在CC2中开始并在CC5中结束,指令901c的执行在CC3中开始并在CC6中结束,且指令901d的执行在CC4中开始并在CC7中结束。
指令902的执行在CC6而不是CC5中开始,这是因为指令902依赖于指令901b。例如序列改变指令901b访问寄存器v3,指令902也访问该寄存器v3。由此,在CC5中迟延指令902的执行,以便允许完成执行指令901b。本领域技术人员应该认识到,指令902依赖于序列改变指令901a-901d的任一项。在开始执行指令902之前所需的迟延的数目依赖于指令902所依赖的特定指令。例如,如果指令902依赖于指令901d,则在从CC5至CC7迟延指令902的执行。
由此,如图10中所示,在最好情况下,叉乘运算的执行在CC6中开始,这是因为需要序列改变指令来在寄存器中的适当位置中设置操作数,并且需要迟延管线,以便解决指令之间的依赖性。在最差情况下,叉乘运算的执行在CC8中开始。
图10还示出了在第一乘法指令902和第二乘法指令903之间的管线化的迟延。在第一乘法指令和第二乘法指令之间可以执行管线化的迟延,以便允许第一乘法指令的结果对于第二乘法指令是可用的。由此,如图10中所示,第二乘法指令不会进入管线直到完成执行第一乘法指令902。
重新设置操作数的swizzle指令
在本发明的某些实施方式中,可以在寄存器文件和矢量单元之间提供一定级别的多路选择,以便重新设置源寄存器的内容。操作数多路选择器(mux)可以将其中向矢量单元的特定线路提供寄存器的操作数的顺序进行重新设置,由此避免对序列改变指令的需求。可以提供swizzle指令,用以在从寄存器文件向矢量单元转移寄存器内容之前来设置多路选择器控制。
图11A示出了一个其中可以实现使用swizzle指令的本发明的实施方式的示例性系统1100。如所示出,系统1100可以包括寄存器文件710、矢量单元800、多个多路选择器(mux)1110、swizzle控制器1130以及发布逻辑1140。发布逻辑1140可以控制向矢量单元800发出指令。多个多路选择器1110与每个线路720相关联,所述线路720将寄存器内容从寄存器文件710转移到矢量单元800(参见图7)。多路选择器1110配置为在将寄存器内容转移到矢量单元800之前重新设置寄存器中操作数的顺序。
例如,如图11A中所示,可以向每个相关联的多路选择器1110提供来自寄存器1120的每个操作数。每个多路选择器1110可以选择从寄存器1120接收的操作数之一,并且将所选择的操作数传送至矢量管线,由此,允许在寄存器1120中重新设置操作数。例如,寄存器1120具有操作数X、Y、Z、W的初始顺序。可以向每个多路选择器1110提供操作数X、Y、Z和W中的每个。每个多路选择器1110可以选择操作数之一,由此将操作数重新设置为不同的期望顺序X′、Y′、Z′、W′。操作数X′、Y′、Z′和W′的每个可以是操作数X、Y、Z和W的任一项。图11B示出了操作数X、Y、W和Z的示例性组合,其可以表示发送到矢量单元的操作数X′、Y′、Z′和W′。swizz1e控制器1130配置为选择在图11B中示出的操作数X、Y、Z和W的组合的任一项。然而,本领域技术人员应该认识到,操作数的组合并不局限于在图11B中公开的那些。在某些实施方式中,swizzle控制器1130可以选择操作数X、Y、Z和W的一个来表示一个或者多个操作数X′、Y′、W′和Z′。例如,在图11B中的一个可能的组合是X、X、X、Y。
在向矢量单元传送寄存器内容之前,可以提供swizzle指令来设置控制多路选择的锁存器(在swizzle控制器1130中)。图12示出了根据本发明实施方式的示例性swizzle指令1200。如图12中所示,swizzle指令1200可以包括一个或者多个操作码字段1210。例如,在swizzle指令1200中示出了两个操作码字段:主操作码和次操作码。操作码字段1210配置为将指令标识为swizzle指令。
swizzle指令1200还可以包括一个或者多个操作数选择字段。例如,示出了三个操作数选择字段1231-1233。每个操作数选择字段可以与图11A的多路选择器1110相关联,并且设置锁存器以确定由多路选择器1110选择的操作数。例如,在一个实施方式中,操作数选择字段1231-1233的每个可以包括4位。这4位的每个可以与输入寄存器的操作数相关联。例如,第一位可以与寄存器1120的字0位置中的操作数相关联,第二位可以与寄存器1120的字1位置相关联,第三位可以与寄存器1120的字2位置相关联,且第四位可以与寄存器1120的字3位置相关联。
在操作数选择字段中允许四个位之一,这可以设置控制多路选择器1110的锁存器,以便允许选择与该位相关联的操作数。可以选择一个位,例如,通过将该位设置为逻辑“1”。然而,本领域技术人员应该认识到,还可以通过将该位设置为逻辑“0”来实现位允许。例如,在一个实施方式中,在操作数选择字段1231中,可以允许第二位,由此选择寄存器1120的字1位置中的操作数。由此,多路选择器可以向矢量单元传送输入寄存器1120的字1位置中的操作数。swizzle指令的操作数选择字段1231-1233可以针对每个多路选择器1110来设置控制,从而可以在寄存器中实现所期望的操作数的重新设置,例如,从X、Y、Z和W到X′、Y′、Z′和W′。
在本发明的另一实施方式中,每个操作数选择字段可以包括两个位。这两个位可以确定选择了寄存器1120中的哪个字的位置。例如在寄存器1120中,“00”表示选择字0的位置,“01”表示选择字1的位置,“10”表示选择字2的位置,而“11”表示选择字3的位置。在一个实施方式中,操作数选择字段1231-1233的每个可以是8位宽度。对于将寄存器文件710连接到矢量单元800的特定线路720,每个操作数选择字段1231-1233可以确定矢量操作数的重新设置。每个操作数选择字段1231-1233可以包括四个2位字段,用于在寄存器中选择四个操作数的一个。例如,参考图12,操作数选择字段1231包括四个2位字段,AX′、Ay′、Az′和Aw′。例如,Ax′字段可以确定操作数X′,Ay′可以确定操作数Y′,Az′可以确定操作数Z′,且Aw′可以确定操作数W′,其中操作数X′、Y′、Z′和W′是针对特定线路720而从寄存器传送至矢量单元的。
本领域技术人员应该认识到,本发明的实施方式并不局限于在此所述的字选择方案。更一般地,可以使用用于在寄存器1120中选择位置的任何合理的方式。此外,所选择的位置并不局限于字的位置。例如,还可以考虑选择半字和字节位置。
在本发明的一个实施方式中,swizzle指令可以占用与其他指令(例如,矢量指令和标量指令)相同数量的指令存储器。因而,swizzle指令可以是在指令高速缓冲存储、缓冲、依赖性迟延、发布等期间的归一化指令。
在一个实施方式中,swizzle指令可以设置控制多路选择器1110的锁存器,但是不能继续沿矢量管线下行或者占有管线阶段,由此在swizzle指令和随后的矢量或者标量指令之间避免了任何潜在的依赖性。由此,可以总是在紧跟着与发布swizzle指令相关联的时钟周期的时钟周期中发布矢量和标量指令。
返回参考图11A,可以提供swizzle控制器1130来控制锁存器的设置和清除,所述锁存器根据swizzle指令的操作数选择字段来确定由多路选择器1110选择的操作数。例如,在一个实施方式中,swizzle指令可以位于需要重新设置寄存器操作数的每个矢量指令之前。因而,发布逻辑1140可以配置为在发出相关联的矢量或者标量指令之前发出swizzle指令。swizzle控制器1130可以从发布逻辑1140接收指令,并且根据在所接收的swizzle指令中的操作数选择位来设置控制多路选择器的锁存器,以便实现期望的寄存器操作数的重新设置。
在发出相关联的swizzle指令之后,发布逻辑1140可以发出矢量或者标量指令。例如,在一个实施方式中,在跟随swizzle指令的时钟周期中,发布逻辑1140可以发出矢量或者标量指令。在一个实施方式中,在紧跟着发出相关联的swizzle指令的时钟周期的时钟周期中,发布逻辑1140可以发出矢量或者标量指令。
在每个矢量和标量指令之前,不必发出swizzle指令。例如,期望的是按照正常顺序(例如,X、Y、Z、W)向矢量单元传送寄存器内容。如果在发出矢量或者标量指令之前没有发出swizzle指令,则多路选择器1110可以配置为按照正常顺序传送寄存器内容。在一个实施方式中,swizzle控制器1130可以配置为在发出矢量或者标量指令之后清除控制多路选择器的锁存器。清除锁存器可以设置每个多路选择器以从寄存器中选择默认操作数。例如,在一个实施方式中,默认选择可以在寄存器中选择正常顺序的操作数(X、Y、Z、W)。
在本发明的一个实施方式中,swizzle控制器1130可以配置为在出现管线清空(flush)时清除控制多路选择器选择的锁存器。由于异步地中断或者任何其他原因,例如遇到分支和跳转指令,而出现管线的清空。在一个实施方式中,中断处理器可以处理中断,并且将处理返回遇到中断之前正在执行的代码。在此实例中,发布逻辑1140可以在swizzle指令处、或者在swizzle指令之前开始执行,其中在中断出现的时候正在执行所述swizzle指令。这确保了在执行相关联的矢量或者标量指令之前总是执行swizzle指令,由此避免了算术指令的错误执行。
图13根据本发明的实施方式,示出了在管线中执行点乘运算的指令的执行。指令可以包括例如在图9和图10中示出的指令902和指令903。如图13中所示,执行点乘运算可以包括在CC1中发出第一swizzle指令1302。swizzle指令1302可以与指令902相关联,并且设置多路选择器控制,用于将与指令902相关联的寄存器内容进行重新设置。例如,在一个实施方式中,swizzle指令1302可以设置多路选择器控制以重新设置与指令902相关联的寄存器v1和v2的内容。
接着在CC2中,可以发出指令902,并且可以执行持续四个时钟周期(CC2-CC5)。在发出指令902时,swizzle控制器1130允许根据由swizzle指令1302设置的多路选择器控制来将寄存器内容传送至矢量管线。在传送寄存器内容之后,多路选择器控制器1130可以清除控制多路选择器选择的锁存器。
swizzle指令1303可以与指令903相关联,并且如图13中所示可以在CC3中发出。swizzle指令1303可以设置锁存器,用于重新设置与指令903相关联的寄存器,例如,寄存器v5、v9和v7。因为指令903依赖于指令902,然而,指令903的执行在CC6之前不会开始。
与图10和图13相比,执行swizzle指令的益处变得清楚明了。如上所述,swizzle指令避免了发出序列改变指令的需要,由此避免了在指令管线中执行序列改变指令,并且降低了指令之间的潜在依赖性。例如,参考图10,在最好情况下,在CC6中开始执行指令902,且在CC10中开始执行指令903。然而,在图13中,在CC2中开始执行指令902,并且在CC6中开始执行指令903。由此,通过降低向矢量管线发出的指令的数目、并且降低指令之间的依赖性,执行swizzle指令显著改进了性能。
此外,如在图9中由序列改变指令901所指示,使用序列改变指令可以包括使用临时寄存器。通过避免序列改变指令,可以降低在寄存器文件中的寄存器过度使用,由此使得寄存器对其他运算可用和/或降低寄存器文件的大小。
图14是由swizzle控制器所执行的示例性运算的流程图,所述运算用以设置并清除控制多路选择器1110的锁存器。通过从发布逻辑1140接收指令而在步骤1401中开始运算。在步骤1402中,swizzle控制器1130可以确定指令是否是swizzle指令。如果确定指令是swizzle指令,则在步骤1403中,swizzle控制器1130可以根据例如在swizzle指令中包含的操作数选择位1231-1233来设置控制多路选择器1110的锁存器。
然而,如果确定指令不是swizzle指令,则swizzle控制器可以允许从寄存器文件710向矢量单元800传送数据。swizzle控制器可以根据由swizzle指令先前发出的多路选择器控制设置来允许通过多路选择器传送数据。在发出指令之后,在步骤1405中,swizzle控制器1405可以清除控制多路选择器的锁存器,由此设置该锁存器以自然顺序从寄存器传送数据。
结论
通过允许发出swizzle指令来设置多路选择器控制,本发明的实施方式避免了对于序列改变指令的需要,其中所述多路选择器控制用于重新设置寄存器中操作数的顺序。此外,因为不再需要序列改变指令,这还显著降低了在寄存器文件中寄存器的过度使用以及指令之间的依赖性。因而增强了性能。
尽管上文阐明了本发明的实施方式,然而在不偏离本发明的基本范围的情况下,还可以做出本发明的其他以及进一步的实施方式,并且由以下的权利要求书来确定本发明的范围。
Claims (21)
1.一种执行指令的方法,包括:
对耦合到寄存器文件和矢量单元的一个或者多个多路选择器的控制进行设置,其中所述多路选择器控制的设置配置为确定对所述矢量单元提供输入的一个或者多个寄存器中的内容的设置;以及
发出算术指令,其中根据所述多路选择器控制的设置,在从所述寄存器文件向所述矢量单元传送期间,由所述一个或者多个多路选择器来重新设置与所述算术指令相关联的寄存器的内容。
2.根据权利要求1所述的方法,其中设置所述一个或者多个多路选择器的控制包括发出swizzle指令,所述swizzle指令配置为设置所述多路选择器的所述控制。
3.根据权利要求2所述的方法,其中所述swizzle指令包括多个内容选择字段,其中每个内容选择字段与所述多路选择器的一个相关联、并且确定用于向所述矢量单元传送的由所述多路选择器所选择的寄存器的内容。
4.根据权利要求2所述的方法,进一步包括:
如果需要重新设置与所述算术指令相关联的所述寄存器的内容,则在发出所述算术指令之前发出所述swizzle指令;以及
如果不需要重新设置与所述算术指令相关联的所述寄存器的内容,则发出所述算术指令而不发出所述swizzle指令。
5.根据权利要求1所述的方法,其中所述swizzle指令没有沿与所述矢量单元相关联的执行管线下行。
6.根据权利要求2所述的方法,其中所述swizzle指令与所述算术指令占有相同数量的指令存储器。
7.根据权利要求1所述的方法,其中所述算术指令包括矢量指令和标量指令。
8.一种控制器,配置为接收包括swizzle指令和算术指令的指令,每个swizzle指令与一个算术指令相关联,其中:
如果所述指令是swizzle指令,则所述控制器配置为设置与寄存器文件和矢量单元耦合的一个或者多个多路选择器的控制,其中所述多路选择器控制的设置配置为确定对所述矢量单元提供输入的一个或者多个寄存器中内容的设置;以及
如果所述指令是算术指令,则所述控制器配置为允许向所述矢量单元传送与所述算术指令相关联的寄存器的内容,其中根据所述多路选择器控制的设置,在从所述寄存器文件向所述矢量单元传送所述内容期间,由所述一个或者多个多路选择器来重新设置所述内容。
9.根据权利要求8所述的控制器,其中所述控制器进一步配置为在向所述矢量单元传送与所述算术指令相关联的所述寄存器的内容之后,清除所述多路选择器控制的设置,其中清除所述设置包括:按照在所述寄存器中设置所述内容的顺序来设置所述一个或者多个多路选择器,以便从所述寄存器文件向所述矢量单元传送寄存器的内容。
10.根据权利要求8所述的控制器,其中所述swizzle指令包括多个内容选择字段,其中每个内容选择字段与所述多路选择器的一个相关联、并且确定用于向所述矢量单元传送的由所述多路选择器所选择的寄存器的所述内容。
11.根据权利要求8所述的控制器,其中由所述控制器在执行相关联的算术指令之前执行所述swizzle指令。
12.根据权利要求8所述的控制器,其中所述swizzle指令与所述算术指令占有相同数量的指令寄存器。
13.根据权利要求8所述的控制器,其中所述算术指令包括矢量指令和标量指令。
14.一种系统,包括彼此通信地耦合的多个处理器,其中每个处理器包括:
寄存器文件,包括多个寄存器;
至少一个矢量单元,用于执行算术指令;
一个或者多个多路选择器,与所述寄存器文件和所述至少一个矢量单元耦合,其中所述多路选择器配置为将所述寄存器文件中的一个或者多个寄存器的内容传送至所述至少一个矢量单元;以及
控制器,配置为接收swizzle指令和算术指令,每个swizzle指令与算术指令相关联,其中:
如果所述指令是swizzle指令,则所述控制器配置为设置所述一个或者多个多路选择器的控制,其中所述多路选择器控制的设置配置为确定对所述矢量单元提供输入的一个或者多个寄存器中的内容的设置;以及
如果所述指令是算术指令,则所述控制器配置为允许向所述矢量单元传送与所述算术指令相关联的寄存器的内容,其中根据所述多路选择器控制的设置,在从所述寄存器文件向所述矢量单元传送所述内容期间,由所述一个或者多个多路选择器重新设置所述内容。
15.根据权利要求14所述的系统,其中所述控制器进一步配置为在向所述矢量单元传送与所述算术指令相关联的所述寄存器的内容之后,清除所述多路选择器控制的所述设置,其中清除所述设置包括:按照在所述寄存器中设置所述内容的顺序来设置所述一个或者多个多路选择器,以便从所述寄存器文件向所述矢量单元传送寄存器的内容。
16.根据权利要求14所述的系统,其中所述swizzle指令包括多个内容选择字段,其中每个内容选择字段与所述多路选择器的一个相关联、并且确定用于向所述矢量单元传送的由所述多路选择器所选择的寄存器的所述内容。
17.根据权利要求14所述的系统,其中由所述控制器在执行相关联的算术指令之前执行所述swizzle指令。
18.根据权利要求14所述的系统,进一步包括发布逻辑,用于向所述处理器发出所述swizzle指令和所述算术指令,其中:
如果需要重新设置与所述算术指令相关联的所述寄存器的内容,则在发出所述算术指令之前发出所述swizzle指令;以及
如果不需要重新设置与所述算术指令相关联的所述寄存器的内容,则发出所述算术指令而不必发出所述swizzle指令。
19.根据权利要求18所述的系统,其中所述发布逻辑进一步配置为如果与所述处理器相关联的管线被清空,则在swizzle指令处或者在swizzle指令之前启动指令的执行,所述swizzle指令与将由处理器执行的第一算术指令相关联。
20.根据权利要求14所述的系统,其中所述swizzle指令与所述算术指令占有相同数量的指令存储器。
21.根据权利要求14所述的系统,其中所述算术指令包括矢量指令和标量指令。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/564,072 | 2006-11-28 | ||
US11/564,072 US7868894B2 (en) | 2006-11-28 | 2006-11-28 | Operand multiplexor control modifier instruction in a fine grain multithreaded vector microprocessor |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101192301A true CN101192301A (zh) | 2008-06-04 |
CN100573578C CN100573578C (zh) | 2009-12-23 |
Family
ID=39463211
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2007101680252A Expired - Fee Related CN100573578C (zh) | 2006-11-28 | 2007-11-02 | 对处理图像的指令进行处理的方法、控制器和系统 |
Country Status (2)
Country | Link |
---|---|
US (2) | US7868894B2 (zh) |
CN (1) | CN100573578C (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110413948A (zh) * | 2019-07-30 | 2019-11-05 | 广东三维家信息科技有限公司 | 方位矩阵计算方法及装置 |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8495602B2 (en) * | 2007-09-28 | 2013-07-23 | Qualcomm Incorporated | Shader compile system and method |
GB2456775B (en) * | 2008-01-22 | 2012-10-31 | Advanced Risc Mach Ltd | Apparatus and method for performing permutation operations on data |
KR101918464B1 (ko) * | 2011-09-14 | 2018-11-15 | 삼성전자 주식회사 | 스위즐드 버추얼 레지스터 기반의 프로세서 및 스위즐 패턴 제공 장치 |
US11061673B1 (en) * | 2018-04-03 | 2021-07-13 | Xilinx, Inc. | Data selection network for a data processing engine in an integrated circuit |
US12118353B2 (en) * | 2021-08-02 | 2024-10-15 | Nvidia Corporation | Performing load and permute with a single instruction in a system on a chip |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6009516A (en) * | 1996-10-21 | 1999-12-28 | Texas Instruments Incorporated | Pipelined microprocessor with efficient self-modifying code detection and handling |
US5909572A (en) * | 1996-12-02 | 1999-06-01 | Compaq Computer Corp. | System and method for conditionally moving an operand from a source register to a destination register |
JP2001216743A (ja) * | 2000-01-31 | 2001-08-10 | Toshiba Corp | 同期信号検出装置、同検出装置を備えた情報記憶装置、及び同期信号検出方法 |
US20080172643A1 (en) * | 2007-01-17 | 2008-07-17 | International Business Machines Corporation | High-Speed Leaf Clock Frequency-Divider/Splitter |
-
2006
- 2006-11-28 US US11/564,072 patent/US7868894B2/en not_active Expired - Fee Related
-
2007
- 2007-10-26 US US11/925,278 patent/US20080126745A1/en not_active Abandoned
- 2007-11-02 CN CNB2007101680252A patent/CN100573578C/zh not_active Expired - Fee Related
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110413948A (zh) * | 2019-07-30 | 2019-11-05 | 广东三维家信息科技有限公司 | 方位矩阵计算方法及装置 |
CN110413948B (zh) * | 2019-07-30 | 2023-08-11 | 广东三维家信息科技有限公司 | 方位矩阵计算方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
US7868894B2 (en) | 2011-01-11 |
US20080126745A1 (en) | 2008-05-29 |
CN100573578C (zh) | 2009-12-23 |
US20080122854A1 (en) | 2008-05-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7783860B2 (en) | Load misaligned vector with permute and mask insert | |
US7728841B1 (en) | Coherent shader output for multiple targets | |
US8074224B1 (en) | Managing state information for a multi-threaded processor | |
US8332452B2 (en) | Single precision vector dot product with “word” vector write mask | |
US7926009B2 (en) | Dual independent and shared resource vector execution units with shared register file | |
US7477260B1 (en) | On-the-fly reordering of multi-cycle data transfers | |
CN109978751A (zh) | 多gpu帧渲染 | |
US9495724B2 (en) | Single precision vector permute immediate with “word” vector write mask | |
US8169439B2 (en) | Scalar precision float implementation on the “W” lane of vector unit | |
US10217183B2 (en) | System, method, and computer program product for simultaneous execution of compute and graphics workloads | |
US20090150648A1 (en) | Vector Permute and Vector Register File Write Mask Instruction Variant State Extension for RISC Length Vector Instructions | |
US20080082784A1 (en) | Area Optimized Full Vector Width Vector Cross Product | |
US7747842B1 (en) | Configurable output buffer ganging for a parallel processor | |
US9612836B2 (en) | System, method, and computer program product for implementing software-based scoreboarding | |
US20090106526A1 (en) | Scalar Float Register Overlay on Vector Register File for Efficient Register Allocation and Scalar Float and Vector Register Sharing | |
CN110807827B (zh) | 系统生成稳定的重心坐标和直接平面方程访问 | |
US10068366B2 (en) | Stereo multi-projection implemented using a graphics processing pipeline | |
CN103886634A (zh) | 利用每像素着色器线程的高效超级采样 | |
US9471307B2 (en) | System and processor that include an implementation of decoupled pipelines | |
CN100573578C (zh) | 对处理图像的指令进行处理的方法、控制器和系统 | |
CN103810743A (zh) | 在上游着色器中设置下游渲染状态 | |
CN112749120B (zh) | 将数据有效地传输至处理器的技术 | |
US7484076B1 (en) | Executing an SIMD instruction requiring P operations on an execution unit that performs Q operations at a time (Q<P) | |
US8161271B2 (en) | Store misaligned vector with permute | |
US20090063608A1 (en) | Full Vector Width Cross Product Using Recirculation for Area Optimization |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20091223 Termination date: 20111102 |