CN103092772A - 用于在多线程图像处理流水线中保持状态数据的上下文数据结构的向量寄存器文件高速缓存 - Google Patents
用于在多线程图像处理流水线中保持状态数据的上下文数据结构的向量寄存器文件高速缓存 Download PDFInfo
- Publication number
- CN103092772A CN103092772A CN2012102959080A CN201210295908A CN103092772A CN 103092772 A CN103092772 A CN 103092772A CN 2012102959080 A CN2012102959080 A CN 2012102959080A CN 201210295908 A CN201210295908 A CN 201210295908A CN 103092772 A CN103092772 A CN 103092772A
- Authority
- CN
- China
- Prior art keywords
- context
- status data
- pictorial element
- data
- data structure
- 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
- 238000012545 processing Methods 0.000 title claims abstract description 86
- 230000015654 memory Effects 0.000 claims abstract description 124
- 238000007667 floating Methods 0.000 claims abstract description 24
- 238000000034 method Methods 0.000 claims description 52
- 230000008569 process Effects 0.000 claims description 35
- 230000004044 response Effects 0.000 claims description 19
- 239000000872 buffer Substances 0.000 claims description 18
- 238000005096 rolling process Methods 0.000 claims description 11
- 238000012986 modification Methods 0.000 claims description 8
- 230000004048 modification Effects 0.000 claims description 8
- 238000005286 illumination Methods 0.000 claims description 4
- 239000000203 mixture Substances 0.000 claims description 4
- 238000004891 communication Methods 0.000 description 129
- 230000006870 function Effects 0.000 description 30
- 238000003860 storage Methods 0.000 description 27
- 238000010586 diagram Methods 0.000 description 15
- 238000005516 engineering process Methods 0.000 description 14
- 230000008859 change Effects 0.000 description 11
- 230000005540 biological transmission Effects 0.000 description 9
- 238000006243 chemical reaction Methods 0.000 description 8
- 238000013461 design Methods 0.000 description 7
- 239000007787 solid Substances 0.000 description 7
- 238000004590 computer program Methods 0.000 description 6
- 230000001360 synchronised effect Effects 0.000 description 6
- 230000008901 benefit Effects 0.000 description 4
- 238000007599 discharging Methods 0.000 description 4
- 230000000712 assembly Effects 0.000 description 3
- 238000000429 assembly Methods 0.000 description 3
- 238000007906 compression Methods 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 230000006872 improvement Effects 0.000 description 3
- 230000000977 initiatory effect Effects 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 238000004088 simulation Methods 0.000 description 3
- 241000288673 Chiroptera Species 0.000 description 2
- 238000004040 coloring Methods 0.000 description 2
- 230000006835 compression Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 230000000717 retained effect Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 241001269238 Data Species 0.000 description 1
- 230000004888 barrier function Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 238000011278 co-treatment Methods 0.000 description 1
- 239000003086 colorant Substances 0.000 description 1
- 238000005520 cutting process Methods 0.000 description 1
- 238000013144 data compression Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000008034 disappearance Effects 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 210000003128 head Anatomy 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000000704 physical effect Effects 0.000 description 1
- 238000006116 polymerization reaction Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 230000009183 running Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30138—Extension of register space, e.g. register cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/3013—Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/383—Operand prefetching
-
- 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
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Image Generation (AREA)
- Image Processing (AREA)
Abstract
在多线程图形处理架构中使用的被频繁访问的状态数据被高速缓存在处理单元的向量寄存器文件中,以优化对状态数据的访问并最小化与之关联的存储器总线使用。处理单元可以包括定点执行单元和向量浮点执行单元,且被向量浮点执行单元使用的向量寄存器文件可被用来高速缓存定点执行单元所使用的、并且在需要时被传送到可被定点执行单元访问的通用寄存器的状态数据,由此降低从/向可被定点执行单元访问的L1或更低级高速缓存重复获取/写回状态数据的需求。
Description
技术领域
本发明一般地涉及数据处理,更具体地涉及图形图像处理和呈现(rendering)。
背景技术
呈现来自三维场景的二维图像的过程通常被称为图像处理。随着现代计算机产业的发展,图像处理也在发展。图像处理发展中的一个特殊目标是使得三维场景的二维模拟或呈现尽可能地真实。呈现真实图像的一个限制是是现代监视器通过像素的使用来显示图像。
像素是能在监视器上发光的最小空间区域。大多数现代计算机监视器将使用数十万或数百万像素的组合来构成整个显示或呈现的场景。单独的像素被布置在网格图案中,并共同覆盖监视器的整个观察区域。每个单独的像素可以被照亮以呈现用于观看的最终图片。
将真实世界三维场景呈现到使用像素的二维监视器上的一种技术被称为光栅化。光栅化是获取向量格式表示的二维图像(场景中的几何体的数学表示)、并将图像转化为用于在监视器上显示的单独像素的过程。光栅化能够有效地快速呈现图像并使用较低的计算量;但是,光栅化具有若干个缺点。例如,光栅化常常缺乏真实性,因为它不是基于光的物理性质,相反光栅化是基于投射到二维平面的场景中的三维几何体的形状。此外,用光栅化来呈现场景所需的计算能力直接随着要呈现的场景的复杂度增加而变化。随着图像处理变得越真实,要呈现的场景也变得越复杂。因此,光栅化随着图像处理的发展而受到困扰,因为光栅化直接随着复杂度而变化。
将真实世界三维场景呈现到使用像素的二维监视器的几种其他可选技术是基于更真实的物理建模来开发的。一种这样的物理呈现技术被称为光线跟踪(ray tracing)。光线跟踪技术跟踪假想的光线传播到要在计算机屏幕上呈现的三维场景中,该光线和光的光线表现类似。光线源于坐在计算机屏幕后面的观察者的眼睛,并向着三维场景穿过构成计算机屏幕的像素。每条被跟踪的光线进入到场景并可与场景中的物体相交。如果光线和场景中的物体相交,该物体的属性以及若干个其他影响因素被用来计算光线所暴露于的颜色和光的量或其缺失。这些计算然后被用来确定被跟踪的光线所经过的像素的最终颜色。
光线跟踪的过程针对单个场景会执行很多次。例如,可以针对显示器中的每个像素来跟踪单条光线。一旦有足够数量的光线已被跟踪以确定构成计算机屏幕的二维显示的所有像素的颜色,三维场景的二维合成可以在计算机屏幕上被显示给观察者。
光线跟踪典型地比光栅化更真实地呈现真实世界三维场景。这部分是由于光线跟踪模拟了光在真实世界环境中如何传播和表现,而不是和光栅化那样简单地将三维形状投射到二维平面上。因此,使用光线跟踪来呈现的图形在监视器上更准确地描绘了我们的眼睛在真实世界中习惯看到的东西。
此外,在场景变得更复杂时,光线跟踪也比光栅化更好地处理场景复杂度的增加。光线跟踪随场景复杂度成对数地变化。这是因为即使场景变得更复杂,相同数量的光线被投射到场景中。因此,光线跟踪不会像光栅化那样在场景变得更复杂时受计算能力需求的困扰。
但是,光线跟踪的一个主要缺点是呈现场景所需的大量计算以及相应的处理能力。这在需要快速呈现时,例如,当图像处理系统要实时呈现图形以用于例如游戏机中的动画的时候,会带来问题。由于用于光线跟踪的增加的计算需求,足够快地呈现动画以显得真实是困难的(真实的动画每秒大约二十到二十四帧)。
但是,随着半导体技术在时钟速度方面的持续改进以及并行性的使用增加,光栅化对于更复杂的图像变得可行,并且使用物理呈现技术例如光线跟踪来实时呈现场景成为光栅化的更为可行的替代。在芯片级别,多个处理器内核通常被置于同一芯片上,以与分离的处理器芯片、或者在一定程度上与完全分离的计算机基本相同的方式运行。此外,即使在内核中,通过使用专门用于处理特定类型操作的多个执行单元,并行性也被使用。基于硬件的流水线在很多情况中也被使用,从而可能占用多个时钟周期的某些操作被分解为阶段,使得在较早的操作完成之前其他操作能被启动。多线程也被用来使多指令流被并行处理,使更多总体工作能在任何给定时钟周期内被执行。
无论是执行基于光栅的还是物理的呈现以呈现用于场景的图像数据,并行性使用的增加对在并行的多线程架构中保持一致状态带来了一些挑战。例如,传统的图形软件应用编程接口(API),作为被应用程序调用以控制呈现过程的例程库(例如OpenGLTM和DirectXTM),不是被特别设计来管理多线程环境中的状态数据的。单线程图形代码(从应用程序的角度)假设每个操作的单一一致状态,并且因此,传统的图形软件API典型地期望函数调用执行保持顺序,这转而需要混杂的状态变量函数调用和绘图函数调用保持顺序。
作为例子,单线程应用程序会在绘制基元(primitive)时调用下列函数:
glBegin(GL_TRIANGLES);
glColor(0,255,0,255);//set color to green
glVertex3f(100.0f,100.0f,0.0f);
glColor(0,0,255,255);//set color to blue
glVertex3f(150.0f,100.0f,0.0f);
glColor(255,0,0,255);//set color to red
Vertex3f(125.0f,50.0f,0.0f);
glEnd();
在该代码中,由glVertex3f()函数调用所定义的三角形的每个顶点通过之前的glColor()函数调用被设置为不同的颜色。这样,第一顶点被设置为绿色,第二顶点被设置为蓝色,且第三顶点被设置为红色。
在单线程硬件环境中,前述代码的处理没有一致性问题,因为第一顶点在颜色被设置为绿色之后被定义,且第二顶点将在颜色被改为蓝色(作为之前的glColor()函数调用的结果)之后被定义。状态的改变,即从绿色的顶点颜色变为蓝色的顶点颜色,由代码中的函数调用的串行处理的结果来确保。
但是,在多线程的硬件环境中,可能希望使不同的函数调用在并行的硬件线程中被处理,以增加总体吞吐量,且希望不需要来自应用程序的任何特定线程管理。但是,基于线程工程量,在不同线程中完成的某些函数调用的顺序不能被确保,从而导致潜在的一致性问题。
因此,在前述代码中,并行性的使用可以提供在分别的线程中为基元定义每个顶点的机会,由此缩短定义基元所需的时间。但是,顶点颜色表示共享状态或上下文,因为用glColor()函数调用来设置颜色会设置用于所有后续的函数调用的颜色,直到颜色被另一glColor()函数调用改变。因此必须采取步骤来确保,例如,根据应用程序发出的函数调用,应用到每个顶点的顶点颜色是正确的。否则,例如,将顶点颜色从绿色改为蓝色的第二个glColor()函数调用可能会在第一顶点被第一个glVertex()函数调用定义之前改变顶点颜色,从而导致第一顶点被设置为错误的颜色。
尽管同步可以被用来串行化操作以保持一致的状态,这样做会限制本来作为并行化的结果可以获取的潜在性能增益,特别是如果在某个线程能继续之前需要等待其他线程到达某些点的话。因此本领域存在对多线程图形处理架构中保持一致状态数据的改进方法的需求。
此外,即使关于状态数据的串行化问题被解决了,由于与用多线程来访问状态数据相关的存储器带宽限制,会出现附加的性能问题。特别地,对多线程图形处理架构中使用的被频繁访问的状态数据的读和写会给存储器总线带来显著的负载,并降低可用于其他活动的带宽。因此,对降低与多线程图形处理架构中访问状态数据相关的存储器带宽的方法也存在很大需求。
发明内容
通过将多线程图形处理架构中使用的频繁访问的状态数据高速缓存在处理单元的向量寄存器文件中,以优化对状态数据的访问并最小化与之关联的存储器总线使用,本发明解决了与现有技术相关的这些和其他问题。在根据本发明的实施例中,处理单元可以包括定点执行单元以及向量浮点执行单元,并且被向量浮点执行单元使用的向量寄存器文件可以被用来高速缓存定点执行单元所使用的状态数据,包括非浮点状态数据,从而该状态数据可以在需要时被传送到可被定点执行单元访问的通用寄存器中,由此减少从/向可被定点执行单元访问的L1或更低级别高速缓存重复地获取/写回状态数据的需求。特别是在向量寄存器文件没有被某些任务充分利用的应用中,本来未使用的向量寄存器可以被改变目的以用作临时高速缓存,并显著降低与这样的状态数据相关的存储器开销,此外,在本发明的某些实施例中,通过使用压缩(pack)/解压(unpack)指令以及在通用寄存器和向量寄存器文件之间的快速移动,宝贵的寄存器存储的消耗以及与访问状态数据相关的延迟可以被进一步最小化。
因此,根据本发明的一个方面,处理单元包括定点执行单元和向量浮点单元,其中,定点执行单元包括多个通用寄存器,且向量浮点单元包括向量寄存器文件。处理单元被配置为在向量寄存器文件中高速缓存状态数据,包括定点执行单元所使用的非浮点状态数据,并将非浮点状态数据从向量寄存器文件复制到多个通用寄存器中的至少一个通用寄存器。定点执行单元被配置为对在至少一个通用寄存器中存储的非浮点状态数据进行操作。
表征本发明的这些或其他优势和特征,将在所附权利要求书中阐述并构成其另一部分。但是,为了更好地理解本发明以及通过其使用获得的优势和目标,可以参考附图和相关的描述性内容,其中描述了本发明的示例性实施例。
附图说明
图1是示例性自动计算机器的框图,该自动计算机器包括可在根据本发明的实施例的数据处理中使用的示例性计算机。
图2是在图1的计算机中实现的示例性NOC的框图。
图3是更详细地示出来自图2中的NOC的节点的示例性实现的框图。
图4是示出来自图2中的NOC的IP块的示例性实现的框图。
图5是适于在图2的NOC中实现的线程流水线软件引擎的框图。
图6是适于在图5的线程流水线软件引擎中实现的示例性软件流水线的框图。
图7是包括示例性多线程呈现流水线的处理单元的框图,该多线程呈现流水线包含根据本发明的滚动上下文数据结构,并适于在图5的线程流水线软件引擎中实现。
图8是在图7中引用的呈现上下文表的示例性实现的图。
图9是示出由图7中的处理单元执行的命令处理例程的程序流的流程图。
图10是根据本发明的适于实现状态数据的向量寄存器文件高速缓存的示例性处理单元的框图。
图11是示出用于在图10的处理单元中载入状态数据的示例性操作序列的流程图。
图12是示出用于在图10的处理单元中存储状态数据的示例性操作序列的流程图。
具体实施方式
根据本发明的实施例将在多线程图形处理架构中使用的被频繁访问的状态数据高速缓存在处理单元的向量寄存器文件中,以优化对状态数据的访问并最小化与之关联的存储器总线使用。通过这样做,与获取和/或存储状态数据相关的处理单元和高速缓存及更低级别存储器之间的存储器带宽消耗被显著降低。
在根据本发明的实施例中,在多线程图形处理架构中使用的处理单元包括具有一个或多个通用寄存器的定点执行单元,其耦合到具有向量寄存器文件的向量执行单元例如向量浮点单元。状态数据被高速缓存在向量寄存器文件中的一个或多个向量寄存器中,并在需要时被传送到一个或多个通用寄存器以被定点执行单元使用。这样,从/向L1或更低级别高速缓存的状态数据的传输减少,由此将存储器带宽保留给其他活动,并且最小化访问状态数据的延迟。
在某些实施例中,快速移动操作被用来在向量寄存器文件和通用寄存器之间直接传送状态数据。此外,在某些实施例中,状态数据在向量寄存器文件中可以被压缩,且压缩和解压指令可以被用来将向量寄存器中高速缓存的状态数据压缩和解压。另外,在某些实施例中,通过在将数据返回到存储器例如高速缓存之前确定状态数据是否已经被改变,可以进一步降低存储器带宽消耗。
在本发明的示例性实施例中,向量寄存器文件高速缓存与滚动上下文数据结构结合使用,该数据结构被用于存储与多线程呈现软件流水线中正被处理的不同图像元素关联的多个上下文。每个上下文存储了用于特定图像元素的状态数据,并且当每个图像元素在软件流水线的阶段之间传递时,该图像元素与上下文的关联被保持,由此确保在处理图像元素时软件流水线的不同阶段所使用的状态保持一致,而不管针对软件流水线正处理的其他图像元素进行的状态改变。这样,与一个图像元素关联的一个上下文中的状态数据典型地不会响应于在多线程呈现软件流水线处理另一个图像元素时对与该另一图像元素关联的另一上下文的状态数据进行的改变而变化。
上下文典型地与将被置于被呈现图像中的一个或多个图像元素例如基元、顶点、物体等关联,并被用于在软件流水线的不同阶段对那些图像元素进行操作时保持那些图像元素的一致状态。上下文典型地不会在流水线的阶段之间流式传输(stream),而是保留在可被流水线的不同阶段访问的共享存储器中。通过软件流水线分别处理的图像元素可以共享该上下文,只要所有这些图像元素都共享同一状态;但是,每当特定图像元素在软件流水线中被处理时需要针对该图像元素改变状态、并且该状态改变不适用于该流水线处理的其他图像元素的时候,希望该状态可被复制到新的上下文中,该新的上下文随后被用于该图像元素,而原始上下文保留用于其他图像元素。结果,当图像元素在流水线中被处理时,为不同的图像元素有效地保持了单独的状态,这减少了流水线中的同步和/或上下文争用担心,并且使图像元素能以更为并行和独立的方式来处理。当和高度并行的多线程软件呈现流水线结合时,典型地可以获取图像元素的更高吞吐量。
可被保持在上下文中的状态数据可以包括表示状态或上下文的任何属性或数据,在图像元素或图像元素组在软件呈现流水线的阶段之间传递时,希望为该图像元素或组保持该状态或上下文。例如,在每个上下文中存储的状态数据可以包括属性,例如指向颜色缓冲器的指针、指向球面图的指针、指向纹理图的指针、旋转属性、光照属性、混色属性、屏幕偏移量及其组合。该列表不是穷举的,并且因此本发明不应限于这里描述的特定属性。此外,状态数据可以被用于多线程图形处理架构中的其他操作,因此本发明不限于这里讨论的实施例中使用的特定类型的状态数据。
对于本领域普通技术人员来说,各种改变和调整是明显的。因此,本发明不限于这里讨论的特定实现。
硬件和软件环境
现在转到附图,其中在几个图中,相同的参考标号表示相同的部件,图1示出了包含可用于根据本发明的实施例的数据处理的示例性自动计算机器的示例性计算机10。图1中的计算机10包括至少一个计算机处理器12或“CPU”,以及随机存取存储器14(“RAM”),其通过高速存储器总线16和总线适配器18连接到处理器12并连接到计算机10的其他组件。
在RAM 14中存储了应用程序20,即一种用户级别计算机程序指令的模块,用于实现特定的数据处理任务,例如,字处理、电子数据表、数据库操作、视频游戏、股票市场模拟、原子量子过程模拟或其他用户级别应用。在RAM 14中还存储了操作系统22。可与本发明的实施例关联使用的操作系统包括UNIXTM,LinuxTM,微软视窗XPTM,AIXTM,IBM的i5/OSTM,以及本领域技术人员所知的其他操作系统。图1的例子中的操作系统22和应用20被示出在RAM 14中,但这样的软件的许多组件通常被存储在非易失性存储器例如盘驱动器24上。
如下面将变得很明显的,根据本发明的实施例可以在片上网络(NOC)集成电路布置或芯片中实现,并且这样,示出了计算机10,其包含两个示例性NOC:视频适配器26和协处理器28。NOC视频适配器26,其或者可以被称为图形适配器,是被特别设计用于图形输出到显示设备30例如显示屏幕或计算机监视器的I/O适配器的例子。NOC视频适配器26通过高速视频总线32、总线适配器18和也是高速总线的前端总线34连接到处理器12。NOC协处理器28通过总线适配器18和也是高速总线的前端总线34和36连接到处理器12。图1中的NOC协处理器可以被优化,例如,以在主处理器12的命令下加速特定数据处理任务。
图1中的示例性NOC视频适配器26和NOC协处理器28每个包括NOC,其包含集成处理器(“IP”)块、路由器、存储器通信控制器、以及网络接口控制器,其细节将在下面结合图2-3来更详细地讨论。NOC视频处理器和NOC协处理器每个针对使用并行处理并且还需要对共享存储器的快速随机访问的程序来优化。但是,得益于本公开的本领域普通技术人员可以理解,本发明可以在不同于NOC设备和设备架构的设备和设备架构中实现。本发明因此不限于在NOC设备中的实现。
图1中的计算机10包括盘驱动器适配器38,其通过扩展总线40和总线适配器18耦合到处理器12和计算机10中的其他组件。盘驱动器适配器38以盘驱动器24的形式将非易失性数据存储设备连接到计算机10,并且可以例如使用集成驱动电子设备(“IDE”)适配器、小型计算机系统接口(“SCSI”)适配器以及本领域技术人员能想到的其他适配器来实现。如本领域技人员能想到的,非易失性计算机存储器也可以被实现为光盘驱动器、电可擦除可编程只读存储器(所谓的“EEPROM”或“快闪”存储器)、RAM驱动器等。
计算机10还包括一个或多个输入/输出(“I/O”)适配器42,其通过例如软件驱动器和计算机硬件来实现面向用户的输入/输出,所述软件驱动器和计算机硬件用于控制到显示设备例如计算机显示屏幕的输出,以及来自输入设备44例如键盘和鼠标的用户输入。此外,计算机10包括通信适配器46,其用于与其他计算机48的数据通信和与数据通信网络50的数据通信。这样的数据通信可以通过RS-232连接、通过外部总线例如通用串行总线(“USB”)、通过数据通信网络例如IP数据通信网络以及本领域技术人员能想到的其他方式来串行地实现。通信适配器实现硬件级别的数据通信,由此一台计算机直接或通过数据通信网络将数据通信发送到另一计算机。适于在计算机10中实现的通信适配器的示例包括用于有线拨号通信的调制解调器、用于有线数据通信网络通信的以太网(IEEE 802.3)和用于无线数据通信网络通信的802.11适配器。
为了进一步说明,图2阐述了根据本发明的实施例的示例性NOC 102的功能性框图。图2中的NOC在“芯片”100上(即在集成电路上)实现。NOC 102包括集成处理器(“IP”)块104、路由器110、存储器通信控制器106、以及被分组为互连节点的网络接口控制器108。每个IP块104通过存储器通信控制器106和网络接口控制器108来适配到路由器110。每个存储器通信控制器控制IP块和存储器之间的通信,且每个网络接口控制器108控制通过路由器110的IP块之间的通信。
在NOC 102中,每个IP块表示同步或异步逻辑设计的可重用单元,其用作用于NOC内的数据处理的构造块。术语“IP块”有时被扩展为“知识产权块”,从而将IP块有效地指定为当事人拥有的设计,即当事人的知识产权,其将被特许给半导体电路的其他用户或设计者。但是,在本发明的范围内,不需要IP块隶属于任何特定的所有权,所以在本说明书中该术语总是被扩展为“集成处理器块”。如这里所指定的,IP块是逻辑、单元(cell)或芯片布局设计的可重用单元,其可以是或可以不是知识产权的主题。IP块是逻辑核心,其可以被形成为ASIC芯片设计或FPGA逻辑设计。
通过类比描述IP块的一种方式是,IP块对于NOC设计,相当于库对于计算机编程,或离散集成电路组件对于印刷电路板设计。在根据本发明的实施例的NOC中,IP可以被实现为通用门网表,实现为完全的专用或通用微处理器,或以本领域技术人员能想到的其他方式实现。网表是IP块的逻辑功能的布尔代数表示(门、标准单元),类似于用于高级程序应用的汇编代码列表。NOC例如也可以以可合成的形式来实现,该形式以硬件描述语言例如Verilog或VHDL来描述。除了网表和可合成的实现,NOC还可以以较低级别的物理描述交付。模拟IP块元件例如SERDES、PLL、DAC、ADC等可以在晶体管布局格式例如GDSII中被分发。IP块的数字元件有时也在布局格式中被提供。还可以理解,IP块以及根据本发明实现的其他逻辑电路可以以计算机数据文件例如逻辑定义程序代码的形式来发布,该计算机数据文件在各细节层次上定义了实现这样的逻辑的电路布置的功能和/或布局。因此,尽管本发明具有在用全功能集成电路设备、使用这样的设备的数据处理系统、以及其他有形的物理硬件电路中实现的电路布置,并且以下将在该电路布置的上下文中来描述,得益于本公开的本领域普通技术人员可以理解,本发明还可以在程序产品中实现,并且本发明同样地适用,而不管用来分发计算机程序产品的计算机可读存储介质或计算机可读信号承载介质的特定类型。计算机可读存储介质的例子包括但不限于物理、可记录类型的介质,例如,易失性和非易失性存储设备、软盘、硬盘驱动器、CD-ROM、DVD等。
图2的例子中的每个IP块104通过存储器通信控制器106来适配到路由器110。每个存储器通信控制器是适于在IP块和存储器之间提供数据通信的同步和异步逻辑电路的聚合。IP块和存储器之间的这样的通信的例子包括存储器载入指令和存储器存储指令。下面参考图3更详细地描述了存储器通信控制器106。每个IP块104还通过网络接口控制器108适配到路由器110,该网络接口控制器控制通过路由器110的IP块104之间的通信。IP块之间的通信的例子包括携带数据和指令的消息,所述指令用于在并行应用和流水线应用中处理IP块之间的数据。网络接口控制器108也在下面参考图3更详细地描述。
路由器110以及其之间的相应链路118实现NOC的网络操作。链路118可以是在连接所有路由器的物理并行线路总线上实现的包结构。即,每条链路可以在线路总线上实现,该总线足够宽以同时容纳整个数据交换包,包括所有头部信息和有效载荷数据。如果包结构包括64字节,例如,包括八字节的头部和56字节的有效载荷数据,则包括每条链路的线路总线是64字节宽,512条线。此外,每条链路可以是双向的,这样如果链路包结构包括64字节,线路总线在网络中的每个路由器和其每个邻居之间实际包含1024条线。在这样的实现中,消息可以包括多于一个包,但每个包将精确地与线路总线的宽度配合。或者,链路可以在宽度仅够适应部分包的一部分的线路总线上实现,这样包将被分解为多拍(beat),例如,这样如果链路被实现为宽度16字节,或者128条线,64字节的包将被分解为四拍。可以理解,不同的实现可以基于实际的物理限制和所需的性能特点来使用不同的总线宽度。如果路由器和线路总线的每个部分之间的连接被称为端口,则每个路由器包括五个端口,网络上的四个数据传输方向中的每个一个端口,且第五个端口用于通过存储器通信控制器和网络接口控制器将路由器适配至特定的IP块。
每个存储器通信控制器106控制IP块和存储器之间的通信。存储器可以包括片外主RAM 112、通过存储器通信控制器106直接连接到IP块的存储器114、启用为IP块116的片上存储器、以及片上高速缓存。在NOC102中,片上存储器114、116中的任一个例如可以被实现为片上高速缓存存储器。所有这些形式的存储器可以被置于相同的地址空间、物理地址或虚拟地址中,即使对于直接附着到IP块的存储器也是这样。存储器寻址的消息因此可以相对于IP块是完全双向的,因为这样的存储器可以从位于网络任何地方的任何IP块来寻址。IP块上的存储器116可以从该IP块或NOC中的任何其他IP块来寻址。直接附着到存储器通信控制器的存储器114可以由被该存储器通信控制器适配至网络的IP块来寻址,并且也可以从NOC中任何地方的任何其他IP块来寻址。
NOC 102包括两个存储器管理单元(“MMU”)120、122,示出了根据本发明的实施例的NOC的两种替代存储器架构。MMU 120在IP块中实现,从而允许IP块中的处理器在虚拟存储器中运行,而允许NOC的整个剩余架构在物理存储器地址空间中运行。MMU 122在片外实现,通过数据通信端口124连接到NOC。端口124包括在NOC和MMU之间传导信号所需的引脚和其他互连,以及将消息包从NOC包格式转换为外部MMU 122所需的总线格式的足够的智能。MMU的外部位置是指,NOC的所有IP块中的所有处理器可以在虚拟存储器地址空间中运行,而由片外MMU 122来处理所有到片外存储器的物理空间的转换。
除了使用MMU 120、122示出的两个存储器架构,数据通信端口126示出了可在NOC中使用的第三存储器架构,该NOC能够在本发明的实施例中使用。端口126提供NOC 102的IP块104和片外存储器112之间的直接连接。在处理路径上没有MMU,该架构提供了NOC中所有IP块对物理地址空间的使用。在双向地共享地址空间时,NOC的所有IP块可以通过存储器寻址的消息(包括载入和存储)来访问地址空间中的存储器,所述消息被引导通过直接连接到端口126的IP块。端口126包括在NOC和片外存储器112之间传导信号的引脚和其他互连,以及将消息包从NOC包格式转换为片外存储器112所需的总线格式的足够的智能。
在图2的例子中,IP块中的一个被指定为主机接口处理器128。主机接口处理器128提供NOC和NOC可安装于其中的主计算机(hostcomputer)10之间的接口,并还向NOC中的其他IP块提供数据处理服务,包括,例如,接收并在在NOC的IP块之间分发来自主计算机的数据处理请求。NOC可以,例如,实现如上参考图1所述的位于更大计算机10上的视频图形适配器26或协处理器28。在图2的例子中,主机接口处理器128通过数据通信端口130连接到更大的主计算机。端口130包括在NOC和主计算机之间传导信号所需的引脚和其他互连,以及将来自NOC的消息包转换为主计算机10所需的总线格式的足够的智能。在图1的计算机中的NOC协处理器的例子中,这样的端口将提供NOC协处理器28的链路结构和NOC协处理器与总线适配器18之间的前端总线36所需的协议之间的数据通信格式转换。
图3接下来示出一功能框图,其更详细地示出了在NOC 102中的、在132处被共同示出的IP块104、存储器通信控制器106、网络接口控制器108和路由器110内实现的组件。IP块104包括计算机处理器134和I/O功能136。在该例子中,计算机存储器由IP块104中的随机存取存储器(“RAM”)138的段来表示。如以上参考图2所述的,存储器可以占用物理地址空间的段,其在每个IP块上的内容是可寻址的,并可以从NOC中的任何IP块来访问。每个IP块中的处理器134、I/O功能136和存储器138有效地将IP块实现为通用可编程微计算机。但是,如以上所解释的,在本发明的范围内,IP块一般表示被用作用于NOC内的数据处理的构造块的同步或异步逻辑的可重用单元。因此,将IP块实现为通用可编程微计算机,尽管是可以用于解释目的的一般实施例,但不是对本发明的限制。
在图3的NOC 102中,每个存储器通信控制器106包括多个存储器通信执行引擎140。每个存储器通信执行引擎140能够执行来自IP块104的存储器通信指令,包括网络和IP块104之间的双向存储器通信指令流141、142、144。由存储器通信控制器执行的存储器通信指令不仅可以源于通过特定存储器通信控制器来适配到路由器的IP块,也可以源于NOC 102中任何地方的任何IP块104。即,NOC中的任何IP块可以产生存储器通信指令,并将该存储器通信指令通过NOC的路由器发送到与另一IP块关联的另一存储器通信控制器,以便该存储器通信指令的执行。这样的存储器通信指令可以包括,例如,转换后援缓冲器控制指令、高速缓存控制指令、屏障指令、以及存储器载入和存储指令。
每个存储器通信执行引擎140能够单独并与其他存储器通信执行引擎并行地执行完整的存储器通信指令。存储器通信执行引擎实现了可伸缩的存储器事务处理器,其针对存储器通信指令的并发吞吐量进行了优化。存储器通信控制器106支持多个存储器通信执行引擎140,所有这些引擎并发运行,以用于多个存储器通信指令的同时执行。新的存储器通信指令被存储器通信控制器106分配给存储器通信引擎140,且存储器通信执行引擎140可以同时接收多个响应事件。在该例子中,所有存储器通信执行引擎140都是相同的。因此,通过伸缩存储器通信执行引擎140的数量,实现了伸缩能被存储器通信控制器104同时处理的存储器通信指令的数量。
在图3的NOC 102中,每个网络接口控制器108能够将通信指令从命令格式转换为网络包格式,以通过路由器110在IP块104之间传输。通信指令可以被IP块104或被存储器通信控制器106编制为命令格式,并以命令格式提供给网络接口控制器108。命令格式可以是遵循IP块104和存储器通信控制器106的架构寄存器文件的本地格式。网络包格式典型地是通过网络中的路由器110传输所需的格式。每个这样的消息由一个或多个网络包组成。在网络接口控制器中从命令格式转换为的包格式的这样的通信指令的例子包括IP块和存储器之间的存储器载入指令和存储器存储指令。这样的通信指令还可以包括在IP块之间发送消息的通信指令,所述消息携带数据和用于在并行应用和流水线应用中在IP块之间处理该数据的指令。
在图3的NOC 102中,每个IP块能够将基于存储器地址的通信通过IP块的存储器通信控制器发送到存储器并从存储器发送,然后还通过其网络接口控制器发送到网络。基于存储器地址的通信是存储器存取指令,例如载入指令或存储指令,其由IP块的存储器通信控制器的存储器通信执行引擎来执行。这样的基于存储器地址的通信典型地源于IP块,以命令格式编制,并被传递到存储器通信控制器以便执行。
许多基于存储器地址的通信和消息流一起被执行,因为任何要被存取的存储器可以位于物理存储器地址空间中的任何位置,片上或片外,直接附着到NOC中的任何存储器通信控制器,或最终通过NOC的任何IP块来存取,不管哪个IP块发起了任何特定的基于存储器地址的通信。于是,在NOC 102中,与消息流一起执行的所有基于存储器地址的通信从存储器通信控制器传递到相关的网络接口控制器,以从命令格式转换为包格式并通过网络在消息中传输。在转换为包格式时,网络接口控制器还基于要被基于存储器地址的通信所存取的一个或多个存储器地址,来确定包的网络地址。基于存储器地址的消息使用存储器地址来编址。每个存储器地址被网络接口控制器映射到一网络地址,其典型地是负责物理存储器地址的某个范围的存储器通信控制器的网络位置。存储器通信控制器106的网络位置自然也是该存储器通信控制器所关联的路由器110、网络接口控制器108和IP块104的网络位置。每个网络接口控制器内的指令转换逻辑150能够将存储器地址转换为网络地址,以通过NOC的路由器来发送基于存储器地址的通信。
在从网络的路由器110接收到消息流时,每个网络接口控制器108检查用于存储器指令的每个包。包含存储器指令的每个包被传递到与接收网络接口控制器关联的存储器通信控制器106,其在将包的剩余有效载荷发送到IP块以便进一步处理之前执行该存储器指令。这样,在IP块开始执行来自消息的基于特定存储器内容的指令之前,存储器内容总是被准备好以支持IP块进行数据处理。
在图3的NOC 102中,每个IP块104能够绕过其存储器通信控制器106,并通过IP块的网络接口控制器108将IP块间的网络寻址的通信146直接发送到网络。网络寻址的通信是通过网络地址指向另一IP块的消息。如本领域技术人员所能想到的,这样的消息传送流水线应用中的工作数据、用于SIMD应用中的IP块之间的单程序处理的多数据等。这样的消息与基于存储器地址的通信的不同在于,它们从一开始就是由发起IP块进行网络寻址的,该IP块知道消息通过NOC的路由器被指向的网络地址。这样的网络寻址的通信被IP块通过I/O功能136以命令格式直接传递到IP块的网络接口控制器,然后被网络接口控制器转换为包格式,并通过NOC的路由器发送到另一IP块。这样的网络寻址通信146是双向的,基于其在任何特定应用中的使用,可能到达或源于NOC中的每个IP块。但是,每个网络接口控制器能够发送和接收到和来自关联的路由器的这样的通信,且每个网络接口控制器能够发送和接收直接到和来自关联的IP块的这样的通信,而绕过关联的存储器通信控制器106。
图3的例子中的每个网络接口控制器108也能够在网络上实现虚拟通道,其通过类型来表征网络包。每个网络接口控制器108包括虚拟通道实现逻辑148,其根据类型对每个通信指令进行分类,并在以包形式将指令传递到路由器110以在NOC上传输之前,将指令的类型记录在网络包格式的字段中。通信指令类型的例子包括IP块之间的基于网络地址的消息、请求消息、对请求消息的响应、指向高速缓存的无效消息;存储器载入和存储消息;以及对存储器载入消息的响应等。
图3的例子中的每个路由器110包括路由逻辑152、虚拟通道控制逻辑154、虚拟通道缓冲器156。路由逻辑典型地被实现为同步和异步逻辑的网络,其实现数据通信协议栈,以用于在由路由器110、链路118和路由器之间的总线线路构成的网络中的数据通信。路由逻辑152包括本领域技术人员可能在片外网络中与路由表相联系的功能,在至少某些实施例中路由表被认为在NOC中使用太慢和麻烦。被实现为同步和异步逻辑的网络的路由逻辑可以被配置为使路由决定能有单个时钟周期那么快。本例子中的路由逻辑通过选择用于转发路由器中接收到的每个包的端口,来路由包。每个包包含该包被路由到的网络地址。
在上面描述基于存储器地址的通信时,每个存储器地址被描述为由网络接口控制器映射到一网络地址,即存储器通信控制器的网络位置。存储器通信控制器106的网络位置自然也是该存储器通信控制器相关的路由器110、网络接口控制器108和IP块104的网络位置。因此,在IP块之间或者在基于网络地址的通信中,也是典型地,应用级别的数据处理将网络地址看做IP块在由NOC的路由器、链路和总线线路构成的网络内的位置。图2示出了这样的网络的一种组织是行和列的网状网络(mesh),其中每个网络地址可以被实现为例如用于网状网络中的相关路由器、IP块、存储器通信控制器以及网络接口控制器的每个集合的唯一标识符,或者网状网络中的每个这样的集合的x、y坐标。
在图3的NOC 102中,每个路由器110实现两个或更多个虚拟通信通道,其中,每个虚拟通信通道由通信类型来表征。通信指令类型,且因此虚拟通道类型,包括上面提到的那些:IP块之间的基于网络地址的消息、请求消息、对请求消息的相应、指向高速缓存的无效消息;存储器载入和存储消息;以及对存储器载入消息的响应等。为了支持虚拟通道,图3的例子中的每个路由器110还包括虚拟通道控制逻辑154和虚拟通道缓冲器156。虚拟通道控制逻辑154对接收到的每个包检查其指定的通信类型,并将每个包置于用于该通信类型的外向虚拟通道缓冲器中,以通过端口发送到NOC上的相邻路由器。
每个虚拟通道缓冲器156具有有限的存储空间。当在短时间内收到很多包时,虚拟通道缓冲器会填满,从而不能有更多的包被放入缓冲器中。在其他协议中,到达缓冲器已满的虚拟通道的包会被丢弃。但是,本例子中的每个虚拟通道缓冲器156被启用为具有总线线路的控制信号,来通过虚拟通道控制逻辑建议周围的路由器暂停虚拟通道中的传输,即,暂停特定通信类型的包的传输。当一个虚拟通道被这样暂停时,所有其他虚拟通道不受影响,且可以继续以完全能力运行。控制信号通过每个路由器有线地一路往回传递到每个路由器关联的网络接口控制器108。每个网络接口控制器被配置为,在接收到这样的信号时,拒绝从其关联的存储器通信控制器106或从其关联的IP块104接收针对暂停的虚拟通道的通信指令。这样,虚拟通道的暂停会影响实现该虚拟通道的所有硬件,一路回到发起的IP块。
在虚拟通道中暂停包传输的一个效果是没有包会被丢弃。当路由器遇到在某些不可靠的协议例如网际协议中可能会丢弃包的情形时,图3的例子中的路由器会通过其虚拟通道缓冲器156及其虚拟通道控制逻辑154来暂停虚拟通道中的所有包传输,直到缓冲器空间再次可用,从而消除了丢弃包的需要。因此,图3中的NOC可以用极薄的硬件层实现高度可靠的网络通信协议。
图3中的示例NOC还可以被配置为在片上和片外存储器高速缓存之间保持高速缓存一致性。每个NOC可以支持多个高速缓存,每个高速缓存针对同一底层存储器地址空间来运行。例如,高速缓存可以被IP块、被存储器通信控制器或者被NOC外部的高速缓存控制器控制。图2的例子中的片上存储器114、116中的任一个还可以被实现为片上高速缓存,并且,在本发明的范围内,高速缓存存储器也可以被片外实现。
图3中示出的每个路由器110包括五个端口,四个端口158A-D通过总线线路118连接到其他路由器,且第五端口160通过网络接口控制器108和存储器通信控制器106将每个路由器连接到关联的IP块104。从图2和图3的图示中可以看到,NOC 102的路由器110和链路118形成网状网络,其垂直和水平链路连接每个路由器中的垂直和水平端口。在图3的示例中,例如,端口158A、158C和160被称为垂直端口,且端口158B和158D被称为水平端口。
接下来图4以另一种方式示出了根据本发明的IP块104的一个示例性实现,其被实现为处理元件,该处理元件被分为指令单元(IU)162、执行单元(XU)164和辅助执行单元(AXU)166。在示出的实现中,IU 162包括多个指令缓冲器168,其从L1指令高速缓存(iCACHE)170接收指令。每个指令缓冲器168专用于多个例如四个对称多线程(SMT)硬件线程中的一个。有效到真实转换单元(iERAT)172耦合到iCACHE 170,并被用来将来自多个线程获取定序器174的指令获取请求转换为用于从较低阶存储器获取指令的真实地址。每个线程获取定序器174专用于特定的硬件线程,并被用来确保要被相关线程执行的指令被取到iCACHE中,以分派到适当的执行单元。同时如图4所示,取到指令缓冲器168中的指令还可以被分支预测逻辑176监视,该分支预测逻辑向每个线程获取定序器174提供提示,以最小化由执行线程中的分支引起的指令高速缓存不命中。
IU 162还包括依赖性/发出逻辑块178,其专用于每个硬件线程,并被配置为解决依赖性并控制从指令缓冲器168到XU 164的指令的发出。此外,在示出的实施例中,在AXU 166中提供单独的依赖性/发出逻辑180,由此使得分别的指令能被不同的线程并发地发出到XU 164和AXU 166。在另一实施例中,逻辑180可以被布置在IU 162中,或者可以整个被忽略,从而逻辑178将指令发出到AXU 166。
XU 164被实现为定点执行单元,包括一组耦合到定点逻辑184、分支逻辑186和载入/存储逻辑188的通用寄存器(GPR)182。载入/存储逻辑188耦合到L1数据高速缓存(dCACHE)190,其具有dERAT逻辑192提供的有效到实际转换。XU 164可以被配置为实际实现任何指令集,例如,32b或64b PowerPC指令集的所有或部分。
AXU 166作为辅助执行单元来运行,其包括专用依赖性/发出逻辑180,以及一个或多个执行块194。AXU 166可以包括任何数量的执行块,并可以实际实现任何类型的执行单元,例如,浮点单元,或者一个或多个专门执行单元,例如加密/解密单元、协处理器、向量处理单元、图形处理单元、XML处理单元等。在示出的实施例中,AXU 166包括到XU 164的高速辅助接口,例如以支持AXU架构状态和XU架构状态之间的直接移动。
与IP块104的通信可以以上述结合图2讨论的方式、通过耦合到NOC102的网络接口控制器108来进行管理。可以提供基于地址的通信,例如用来访问L2高速缓存存储器,以及基于消息的通信。例如,每个IP块104可以包括专用的收件箱和/或发件箱,以处理IP块之间的节点间通信。
本发明的实施例还可以在以上结合图1-4所述的硬件和软件环境中实现。但是,得益于本公开的本领域普通技术人员可以理解,本发明可以在很多种不同环境中实现,且可以对上述硬件和软件实施例进行其他修改,而不偏离本发明的精神和范围。因此,本发明不限于这里公开的特定硬件和软件环境。
软件流水线
现在转到图5,NOC 102可以在某些实施例中被用于实现基于软件的流水线。特别地,图5示出了包含线程流水线软件引擎202的示例性处理单元200,该引擎可以被用来实现和执行NOC架构上的一个或多个软件流水线204。每个流水线204典型地被分配了共享存储器208中的一个或多个数据结构206,以使得流水线的不同阶段能交换数据。此外,提供了中断机制210,以使得流水线的阶段能互相通知要执行的待决工作。
在引擎202中还提供了一个或多个主机接口处理器(HIP)212,来处理到软件流水线204的工作发出。提供了一个或多个推送缓冲器214以将每个HIP与位于引擎外部的软件应用216和驱动器218接口连接。为了发起流水线中的工作,软件应用216通过合适的驱动器218以API调用的形式来发出请求,该驱动器然后生成合适的对HIP的请求,并将请求存储在推送缓冲器214中。用于相关流水线的HIP 212从推送缓冲器214中取出工作请求,并发起通过关联的流水线对请求的处理。
在示出的实施例中,且如在NOC 102上所实现的,软件流水线204实现被分为计算机程序指令的一组模块或“阶段”的功能,所述模块或“阶段”互相合作来顺序执行一系列数据处理任务。流水线中的每个阶段由阶段ID所标识的计算机程序指令的可灵活配置模块组成,每个阶段在NOC102的IP块104上的执行线程中执行。阶段是可灵活配置的,在于每个阶段可以支持该阶段的多个实例,从而可以通过基于工作负荷的需要来实例化额外的阶段实例,来伸缩流水线。因为每个阶段由在NOC 102的IP块104上执行的计算机程序指令来实现,每个阶段能够通过存储器通信控制器106来访问被寻址的存储器。此外,至少一个阶段能够在其他阶段之间发送基于网络地址的通信,其中基于网络地址的通信保持包顺序。
基于网络地址的通信,例如,可以使用每个阶段中的“收件箱”来实现,所述“收件箱”从流水线中先前的阶段接收数据和/或命令。基于网络地址的通信保持包顺序,并且是同一类型的通信,其能够流过上述同一虚拟通道。这样的通信中的每个包以上述方式被路由器110路由,依次地以FIFO顺序进入和离开虚拟通道缓冲器,由此保持严格的包顺序并维持消息完整性。
每个阶段实现与下一阶段的生产者/消费者关系。第一阶段通过HIP212接收工作指令和工件数据,在该工件上实现指定的数据处理任务,生成输出数据,并将生成的输出数据发送到流水线中的下一阶段,该下一阶段通过在来自第一阶段的生成的输出数据上执行其指定的数据处理任务,来消费来自第一阶段的生成的输出数据,由此生成随后被发送到流水线中的下一阶段的输出数据。该操作序列继续直到流水线的最后阶段,该最后阶段然后将其生成的输出数据存储在输出数据结构中,以通过HIP 212最终返回到发起的应用216。
流水线中的阶段的安排在不同的实施例中会不同,并用于在不同应用中执行不同的功能。例如,图6示出了示例性软件流水线220,其包含多个阶段实例222,这些实例也被独立地指定为实例A-I,每个实例表示在NOC 102的IP块上实现的执行线程。阶段实例222在流水线220中被安排为五个阶段,第一阶段具有实例A,第二阶段具有实例B和C,第三阶段具有实例D、E和F,第四阶段具有实例G和H,且第五阶段具有实例I。从图6中可以看到,实例和流水线中的其他实例可具有一对一、一对多和/或多对一的关系。实例可以在特定阶段中互相合作运行,来执行并行任务并共享工作量,由此在执行任务时提升阶段的总体吞吐量。阶段中的实例也可以执行互相不同的任务,以实现不同任务的并行性能。实例可以向多于一个实例提供数据,而其他实例可以从多个实例收集数据并处理数据。
在示出的实施例中,流水线的每个阶段的每个实例典型地被实现为在NOC的单独IP块上执行的计算机程序指令的应用级模块。且每个阶段被分配给NOC的IP块上的一执行线程。每个阶段被分配了阶段ID,且阶段的每个实例被分配了标识符。HIP 212(图5)典型地通过为每个阶段配置所需数量的实例来设置流水线,每个阶段的每个实例的网络位置被提供给其他阶段的其他实例,以使得每个实例能够将其结果工作量发送到下一阶段中的合适实例,例如阶段2的实例被授权向之发送其结果工作量的较早和/或较晚的阶段3。多个实例可以被分配给特定的阶段,来提供相对于其他阶段的额外处理资源,例如,从而工作尽可能高效地流过流水线,且不会有单个阶段成为性能瓶颈。还可以理解,可以在运行时执行工作量监视,且可以根据需要动态地向/从一个阶段添加或移除实例,以在流水线的阶段之间平衡负载。
每个阶段被配置了用于下一阶段的每个实例的阶段ID,其还可以包括下一阶段中实例的数量以及其每个实例的网络位置。通过为一阶段配置用于下一阶段的实例的ID,为该阶段提供了在阶段之间进行负载平衡所需的信息。这样的负载平衡例如可以通过监视阶段的性能并基于一个或多个阶段的性能来实例化每个阶段的若干实例来实现。监视阶段的性能可以通过将每个阶段配置为向单独的监视应用报告性能统计来实现,该监视应用转而在IP块上的另一执行线程上或在HIP上安装并运行。如本领域技术人员所能想到的,性能统计可以包括例如完成数据处理任务所需的时间、在特定时间段内完成的数据处理任务的数量等。基于一个或多个阶段的性能来实例化每个阶段的若干实例可以通过在被监视的性能指示需要新实例时由HIP实例化新实例来实现。
具有滚动上下文数据结构的多线程呈现流水线架构
现在转到图7,该图示出了被配置为实现根据本发明的呈现流水线架构的处理单元200的实现。特别地,图7示出了多线程呈现流水线230,其包含具有一个或多个分组器单元232的分组器阶段、具有一个或多个几何体引擎234的几何体引擎阶段、包括一个或多个后续GE单元236的后续几何体引擎(后续GE)阶段、包括一个或多个光栅化器(rasterizer)238的光栅化器阶段、以及包括一个或多个像素着色器(shader)240的像素着色阶段。
每个处理元件或单元232、234、236、238、240希望在NOC 102的节点中的IP块中实现,每个这样的单元被指定了至少一个专用的硬件线程。每个单元典型地放置在独立的节点上,尽管在其他实施例中,多个单元可以被放置在单个节点上。此外,在某些实施例中,每个单元可以被分配多个执行线程。在某些实施例中还可以实现基于时间片的软件线程,尽管在示出的实施例中希望多个单元不完全在同一基于硬件的线程中实现。
每个分组器单元232被用来对数据分组以沿流水线向下流式传输,例如,通过从物体数组中拉出相关顶点。每个几何体引擎234典型地被用来执行物体变换并生成几何体基元,而每个后续GE单元236被配置为执行几何体基元的后续处理,例如透视分割、裁剪、排序、分解几何体等。
每个光栅化器238被配置为用作像素片段生成器,以生成表征一个像素的像素片段数据集的流(stream),即来自输入到光栅化器的基元的一个像素或多个像素的片段。在其他操作中,每个光栅化器典型地执行从基元中的坐标到将应用于基元的纹理中的(u,v)纹理坐标的扫描线转换(scan line conversion)。每个像素着色器240转而取得像素片段数据集,并典型地使用纹理过滤和其他着色技术来应用或更新帧缓冲器242中的一个或多个像素的颜色。可以理解,在实现为场景呈现图像数据的基于光栅的呈现流水线方面,由单元232、234、236、238和240执行的特定操作可以包含任何数量的已知呈现技术、改进和算法,并且在合适的单元中实现这样的技术将在受益于本公开的普通技术人员的能力范围内。还可以理解,其他呈现算法,例如,使用物理呈现技术例如光线跟踪或光子映射,也可以在根据本发明的多线程流水线中实现,且这样的技术会依赖于在图7中未示出的不同的和/或另外的流水线阶段。因此,本发明不限于在图7中表示的特定的基于光栅的呈现流水线架构。
命令和数据可在流水线230的阶段之间传递,而某些数据,包括共享的上下文或状态数据,不会在阶段之间直接传递,而是保持在共享存储器208中,并在需要时被每个阶段访问。在该共享数据中,可以包括滚动上下文数据结构,其在图7中被实现为呈现上下文表244。
如图8所示,呈现上下文表244的一种实现包括多个条目246,每个条目包含键或索引字段248、一个或多个属性字段250以及inUse(正在使用中)字段252。键或索引字段248为其相应条目246提供唯一的标识符,并且在示出的实施例中,字段248存储了整数索引,从而呈现上下文游标254可以通过整数值指向特定的条目246。在某些实施例中,字段248可以被忽略,例如在每个条目246为固定大小,从而基于每个条目在存储器中的位置,其索引已经被暗示的时候。还可以理解,其他标识符可以被用来标识表244中的条目,且本发明不限于使用整数索引来标识表中的条目。
每个字段250存储了与由相应条目246所表示的特定上下文或状态相关的属性数据。在每个条目中可以提供固定或可变数量的字段250,且每个字段可以存储属性数据目录和/或指针,其指向包含相关属性数据的其他数据结构。为了图形图像处理的目的,可以被保留在呈现上下文表条目中的状态数据的类型包括但不限于指向颜色缓冲器的指针、指向球形图的指针、指向纹理图的指针、旋转属性、光照属性、混色属性、屏幕偏移量等。
每个条目246的inUse字段252被用来表示特定的条目当前是否正在使用,或者空闲以用于修改和/或用于存储不同的呈现上下文。可以根据本发明使用表示条目状态的各种方法,包括单个比特或标志,或者另一数值。此外,单独的数据结构可以被用来存储表244中每个条目的状态。
一个或多个呈现上下文游标254典型地指向表244中正在使用的条目246。呈现上下文游标254典型地与希望为其保持特定状态的特定的图像元素或图像元素的集合或组关联。例如,当每个条目由整数来标识时,呈现上下文游标254可以存储来自循环索引的整数值,其针对每个新的呈现上下文递增,并且一旦到达表中的最后一个条目,翻滚过去以指向第一个条目。如以下将更详细地讨论的,每当需要新的状态时,新的条目246被投入使用,呈现上下文游标254被设置为指向该新条目,并与用于该特定图像元素或图像元素组的任何流数据一起传递,从而当流数据在软件流水线的阶段间传递时,该状态能够被访问。由此,对于共享共同状态的每个唯一图像元素或图像元素组,保持单独的呈现上下文游标254,以提供访问该状态的机制。可以理解,在本发明的不同实施例中,呈现上下文游标可以以多种方式来表示,并可以和流数据一起流式传输或在共享存储器中存储。
可以理解,呈现上下文表244只是可以被用来同时存储在多线程软件流水线中使用的状态数据的多个“快照”的大量不同数据结构中的一种。本发明因此不限于图8中示出的特定实现。
图9接下来示出了由处理单元200执行的命令处理例程270的一部分,其示出了在图7的多线程呈现软件流水线230中的呈现上下文的管理。命令典型地由HIP 212(图7)响应于应用程序216生成的函数调用从设备驱动器218接收,且某些这样的命令将典型地需要呈现上下文的使用或修改。这些命令在例程270中被处理,以确保在一个或多个图像元素通过流水线230被处理时,为所述元素保持一致的呈现上下文或状态。
在示出的实施例中,图9中的示例步骤由HIP 212执行;但是,在其他实施例中,某些或所有步骤可以由例如在多线程呈现软件流水线的特定阶段中的其他逻辑来执行。
在软件流水线230中,图像数据以一个或多个图像元素的形式在阶段之间流式传输。图像元素可以和顶点一样基本,或者可以是表示基元或物体的顶点集合。多个图像元素也可以被分组到一起,并由流水线共同处理。在图像元素在软件流水线中被处理之前,所述图像元素被HIP 212初始地分配给当前呈现上下文。与特定图像元素或图像元素组相关的命令由设备驱动器218生成,并且其使得HIP 212发起由流水线的各阶段执行这样的命令。
由此,在例程270中,在框272中,HIP 212从设备驱动器218接收命令。在框274中,确定该命令是否会修改当前呈现上下文。会修改呈现上下文的命令典型地是改变与图像元素或图像元素组关联的某些状态数据的命令,当这样的元素经流水线230处理时,会为其建立共同状态。例如,命令例如glRotate、glTranslate和glColor3f等在执行时会修改呈现上下文。
如果命令会修改当前呈现上下文,控制传递到框276,来确定当前呈现上下文是否正在被使用,例如,通过检查与该命令关联的图像元素所关联的呈现上下文游标254所指向的呈现上下文表条目246的inUse字段252(图8)。在当前呈现上下文被确定没有在使用时,控制传递到框278,基于该命令来修改呈现上下文。如果当前呈现上下文没有被使用,对呈现上下文的修改还可以包括重置相关呈现上下文表条目246中的数据和/或初始化该数据。例程270然后完成命令的处理,如框292所示。
响应于试图使用呈现上下文的命令例如glVertex,呈现上下文被设置为“正在使用”。由此,回到框274,如果命令不会修改当前呈现上下文,控制传递到框280,来确定该命令是否会使用该呈现上下文。如果是,控制传递到框282,通过设置与特定图像元素关联的呈现上下文游标所指向的表条目246中的inUse字段252,将呈现上下文标记为“正在使用”,然后命令的处理在框292继续。
回到框276,如果命令会修改当前呈现上下文,并且该呈现上下文当前正在被使用,框276将控制传递到框284,例如通过将当前呈现上下文表条目246中的数据复制到表244中下一个未使用的呈现上下文表条目246中来复制当前呈现上下文。框286然后将与当前命令关联的图像元素的呈现上下文游标更新为指向新的呈现上下文,并将控制传递到框278,来为该命令适当地修改该新的呈现上下文。结果,由正在流水线中处理的另一图像元素组正在使用的原始呈现上下文保持其原始状态,并且新的修改过的状态针对当前图像元素组被创建。可以理解,在某些实施例中,用于图像元素组的新的呈现上下文的使用可能不需要将当前呈现上下文复制到新的呈现上下文中。还可以理解,每当在搜索未使用呈现上下文时到达表244中最后的呈现上下文条目246,该搜索将翻滚到表的第一条目。此外,在某些实施例中,修改呈现上下文的尝试可以通过在复制现有呈现上下文以创建新的呈现上下文之后修改现有呈现上下文来实现。
为了进一步示出呈现上下文的使用和创建,如上讨论的示例性OpenGl代码被再现如下:
glBegin(GL_TRIANGLES);
glColor(0,255,0,255);//set color to green
glVertex3f(100.0f,100.0f,0.0f);
glColor(0,0,255,255);//set color to blue
glVertex3f(150.0f,100.0f,0.0f);
glColor(255,0,0,255);//set color to red
Vertex3f(125.0f,50.0f,0.0f);
glEnd();
假设在开始该代码执行时,当前没有呈现上下文正在被使用。在接收到与glColor(0,255,0,255)调用关联的命令时,该命令可以被确定为通过将当前颜色设置为绿色来修改当前呈现上下文。因此,例程270可以经过框272、274、276和278的路径来进行,以修改当前呈现上下文,来将当前颜色设置为绿色。然后,在接收到基于glVertext3f(100.0f,100.0f,0.0f)调用来定义顶点的命令时,例程270可以经过框272、274、280和282的路径来进行,以将当前呈现上下文设置为“正在使用”,因为glVertex3f()调用创建了图像元素,其现在使用当前呈现上下文。
接下来,在接收到与glColor(0,0,255,255)关联的命令时,该命令被确定为通过将当前颜色设置为蓝色来修改当前呈现上下文。但是,由于当前呈现上下文现在已被标记为正在使用,例程可经过框272、274、276、284、286和278的路径来进行,创建新的呈现上下文,将状态数据从现有呈现上下文复制到新的呈现上下文,更新呈现上下文游标以指向新的呈现上下文,并修改新的呈现上下文以将当前颜色设置为蓝色。然后,在接收到基于glVertex3f(150.0f,100.0f,0.0f)调用来定义顶点的命令时,例程270可以再次经过框272、274、280和282的路径来进行,以将新的呈现上下文设置为“正在使用”,因为glVertex3f()调用创建了第二图像元素,其现在使用新的呈现上下文,其中颜色被设置为蓝色。类似地,对于glColor(255,0,0,255)和Vertex3f(125.0f,50.0f,0.0f)调用,新的呈现上下文被创建,其具有当前颜色被设置为红色的状态,且第三图像元素使用该呈现上下文,使得三个顶点中的每个通过流水线以单独和独立的状态被处理。
可以理解,从多线程呈现软件流水线的角度来看,例程270对来自设备驱动器218的命令进行处理的操作将确保图像元素可以被路由到流水线中的不同阶段和阶段实例,而不用担心对其他图像元素的处理会改变用于该图像元素的上下文或状态。不同的图像元素因此可以被并行并在多个实例中处理,而不用担心完成顺序,由此最大化通过流水线的吞吐量,并最小化串行化和争用冲突。因此,例程720,以及该例程在其上实现的硬件,用作将每个图像元素与呈现上下文表中的呈现上下文进行关联的控制逻辑,从而在多线程呈现软件流水线对第二图像元素进行处理时,响应于对与第二图像元素关联的第二上下文的状态数据进行的改变,与第一图像元素关联的第一上下文中的状态数据不被改变。
回到图9的框280,如果命令不使用或修改呈现上下文,控制传递到框288,来确定呈现上下文是否应被释放(free或release)。如果是,控制传递到框290,将相关程序上下文表条目标记为未使用,由此控制于是传递到框292。如果没有呈现上下文应该被释放,框288跳过框290,并将控制直接传递到框292。
为了释放呈现上下文,可以使用多种技术。例如,当已知呈现上下文将不再被使用时,可以生成特定的命令来释放呈现上下文。这样的命令可以作为由应用进行的函数调用的结果而显式生成,或者呈现上下文不再被使用的事实可以被检测,并被用来自动释放呈现上下文。例如,HIP 212可以检测到后续命令将修改当前呈现上下文,并且标记当前命令以指示该命令将是使用当前呈现上下文的最后命令。例如,图9的框288和290可以在流水线230的特定阶段例如在每个光栅化器单元238中实现,从而,在检测到被HIP标记为是使用当前呈现上下文的最后命令的命令时,光栅化器单元238将以上述方式自动释放呈现上下文。或者,光栅化器单元238可以检测改变呈现上下文的后续命令。还或者,HIP可以沿着流水线向下发送“清空”包,以释放特定的呈现上下文。还可以理解,其他阶段可以负责释放未使用的呈现上下文,尽管在很多情况中,希望在呈现上下文所表示的状态数据可能被使用的最后阶段中释放该呈现上下文。
或者,一个或多个计数器可以被用来跟踪每个呈现上下文的使用。例如,每当呈现上下文被命令使用时,HIP可以递增“已使用”计数,而每当使用该呈现上下文的命令完成时,每个光栅化器单元可以递增“空闲”计数。每个光栅化器然后可以比较已使用计数和空闲计数,并在两个计数相等时自动释放呈现上下文。在其他实施例中,单个计数器可以代替单独的数量被使用,该计数器在命令使用呈现上下文时递增,并在使用呈现上下文的命令完成时递减。用于检测和释放未使用呈现上下文的其他机制对于受益于本公开的本领域普通技术人员来说是明显的。
上下文数据向量寄存器文件高速缓存
在某些实施例中,对上下文数据以及多线程图形处理架构所使用的其他状态数据的访问,可以通过将该数据高速缓存在处理单元的向量寄存器文件中、并将该向量寄存器文件有效地用作软件存储合并队列来进行优化。特别地,已经发现在图像处理应用程序中使用的某些处理单元中,当这样的处理单元执行某些任务时,向量寄存器未被充分利用。例如,在同时包括标量定点执行单元和向量浮点执行单元的处理单元中,某些任务会是定点密集型的,由此在执行这样的任务时,向量浮点执行单元中的向量寄存器文件不会被使用,因此在某些情形下可被改变目的以临时高速缓存可以被定点执行单元使用的状态数据。
例如,图10示出了示例性装置300,其包括耦合到存储器304的处理单元302。处理单元302包括指令单元306、标量定点执行单元(XU)308和向量浮点执行单元(AXU)310。在示出的实施例中,处理单元可以被实现为IP块例如图4中的IP块104,并且可以和NOC装置中的多个其他IP块放置在一起,例如如图2的集成电路设备100那样。但是,可以理解,本发明的原理可以应用于包含定点和向量浮点执行单元的很多其他处理单元配置,且由此,本发明不限于这里公开的特定配置。
定点执行单元308包括寄存器文件,其包含多个通用寄存器(GPR)312,而向量浮点执行单元310包括一向量寄存器文件,其包含多个向量浮点寄存器314。可以理解,寄存器314典型地比GRP 312更宽得多,并且向量寄存器和存储器304之间的数据传送比定点执行单元寄存器文件和存储器304之间的数据传送在更宽的数据路径上进行。这样,与存储器304和定点执行单元308之间的数据传送相比,在存储器304和向量浮点执行单元310之间的等量数据传送典型地需要更少的周期。
此外,可能希望通过在执行单元308、310之间提供专用总线来支持执行单元308、310的寄存器文件之间的快速移动。例如,可能希望处理单元302的指令集支持快速移动指令,以在源和目标寄存器之间传送数据。
在示出的实施例中,在向量寄存器文件中高速缓存的状态数据被组织为例如如上关于图7-9所述的呈现上下文,并被多线程软件流水线使用。例如,呈现上下文表316可以被存储在存储器304中,并包含多个呈现上下文(RCTX)318。可以理解,存储器304可以表示高速缓存存储器和主存储器的各个级别,并且呈现上下文318的所有或部分可以在任何给定时间被高速缓存在一个或多个高速缓存存储器中。但是,已经发现,特别是在包含于NOC的处理单元中,软件流水线中的多线程试图访问呈现上下文会消耗多级存储器架构中的大量存储器带宽,特别是在如大多数典型的L1高速缓存被使用的那样写通过(write through)高速缓存的时候。
另一方面,根据本发明的实施例通过在如320所示的一个或多个向量浮点寄存器(VRF)314中高速缓存所有或部分呈现上下文,来减少存储器带宽消耗。尤其是,呈现上下文的至少一部分包括非浮点数据(例如,整数数据、字符数据、定点数据等),且该非浮点数据在寄存器中有效地高速缓存,该寄存器一般与存储浮点数据相关联地使用。但是,可以理解,在某些实施例中,浮点数据还可以被包含于呈现上下文中,从而浮点和非浮点数据两者都可以被高速缓存以作为呈现上下文。
每当来自呈现上下文的非浮点数据需要被定点执行单元308访问时,处理单元302将非浮点数据从向量寄存器文件复制到例如如322所示的一个或多个通用寄存器312。如上所述,在某些实施例中,快速移动指令可以被用来执行必要的传送。一旦数据被存储到合适的通用寄存器,定点执行单元308可以在该数据上进行操作。
接下来,每当上下文数据被定点执行单元更新时,更新的上下文数据可以和向量寄存器文件中存储的副本以及存储器304中保留的主副本进行同步。但是,在某些实施例中,可能希望包含高速缓存一致性技术来最小化对向量寄存器和/或存储器304的不必要的更新,例如,从而不改变数据的对上下文数据的任何存储不需要在存储器架构中执行存储器事务。
在根据本发明的某些实施例中,向量寄存器文件高速缓存可以用在处理单元的指令集中定义的指令来实现,从而向量寄存器文件高速缓存被应用程序、固件、操作系统、内核等有效地实现,且实现这样的功能所需的指令可以由编译器或其他自动化工具来生成。但是,在其他实施例中,实现向量寄存器文件高速缓存所需的功能可以在处理单元304中实现的电路逻辑内直接实现,例如,通过使用定序器或其他专用逻辑。因此,本发明可以典型地使用硬件和软件的各种组合来实现,且由此不限于这里公开的特定实现。
图11-12例如示出了分别用于载入和存储上下文数据的例程330、340,并且为了这些例程的目的,可以假设呈现上下文整个被高速缓存在向量寄存器文件中。但是,在其他实施例中,只有部分呈现上下文会被高速缓存。在根据本发明的一个实施例中,上下文大小大约2KB,且向量浮点寄存器为16字节宽,从而呈现上下文可以被高速缓存在128个寄存器中而不用压缩。
如图11所示,载入上下文数据例程330(其可以例如每当定点执行单元需要对上下文数据进行操作时被调用)在框332中开始,确定被请求的数据在其中被组织的呈现上下文是否已经被高速缓存在向量寄存器文件中。如果否,控制传递到框334,将呈现上下文载入到一组向量浮点寄存器中。此外,在某些实施例中,可能希望使用压缩指令来压缩呈现上下文中的数据,从而呈现上下文可以被存储在较少的寄存器中。
接下来,一旦在框334中呈现上下文已经被高速缓存到向量寄存器文件中,或者如果框332确定呈现上下文已经被高速缓存,控制传递到框336,将被请求的上下文数据从向量寄存器文件移动到定点执行单元的寄存器文件中的一个或多个通用寄存器。此后,上下文数据可以被定点执行单元使用,且例程330完成。
图12示出了存储上下文数据例程340,其可以例如每当由定点执行单元修改之后希望存储上下文数据的时候被调用。例程340在框342中开始,将相关的通用寄存器与向量寄存器文件中的相应数据进行比较。框344然后确定数据是否已被改变。如果否,不需要将通用寄存器中的上下文数据与向量寄存器文件或存储器进行同步,从而框344可以结束例程340。
否则,框344将控制传递到框346,来将上下文数据从GPR移动到向量寄存器文件,然后传递到框348,来将改变的数据存储到存储器中的呈现上下文的副本。此外,如果数据在向量寄存器中被压缩,在将数据存回到存储器之前,解压指令可以被用来解压该数据。例程340然后完成。
因此可以理解,特别是在向量寄存器文件对某些任务不能充分利用的应用中,本来未使用的寄存器可以被改变目的以用作临时高速缓存,并显著降低与这样的状态数据相关的存储器开销。此外,在根据本发明的某些实施例中,通过使用压缩/解压缩指令以及通用寄存器和向量寄存器文件之间的快速移动,宝贵的寄存器存储的消耗以及与访问状态数据相关的延迟可以被进一步最小化。此外,给定与向量寄存器文件相关的典型地较宽的数据路径,与在存储器和定点执行单元所使用的通用寄存器之间传送等量的数据相比,在存储器和向量寄存器文件之间传送数据所需的周期数可以被典型的减少。
还可以理解,在某些实施例中,可能希望包含基于空间限制来将存储在通用寄存器和/或向量寄存器文件中的上下文数据逐出(cast out)的功能,这和传统的高速缓存类似。此外,可以进行各种其他修改,而不偏离本发明的精神和范围。因此,本发明在于以下所附权利要求书。
Claims (22)
1.一种电路装置,包括:
存储器单元,其包含定点执行单元和向量浮点单元,该定点执行单元包括多个通用寄存器,且该向量浮点单元包含向量寄存器文件;
其中,所述处理单元被配置为在向量寄存器文件中高速缓存状态数据,包括定点执行单元所使用的非浮点状态数据,其中,该处理单元被进一步配置为将非浮点状态数据从向量寄存器文件复制到所述多个通用寄存器中的至少一个通用寄存器,且其中,所述定点执行单元被配置为对在所述至少一个通用寄存器中存储的非浮点状态数据进行操作。
2.如权利要求所述的电路装置,其中,所述处理单元还被配置为,在对存储在至少一个通用寄存器中的非浮点状态数据进行修改后,将该非浮点状态数据从至少一个通用寄存器复制到向量寄存器文件。
3.如权利要求2所述的电路装置,其中,所述状态数据与用于存储状态数据的上下文数据结构关联,该状态数据被图形处理架构中的多线程呈现软件流水线中的多个阶段所共享,其中所述处理单元被配置为执行多线程呈现软件流水线的至少一个线程,且其中状态数据结构的副本被保持在存储器中,所述处理单元耦合到该存储器。
4.如权利要求3所述的电路装置,其中,所述处理单元还被配置为通过将向量寄存器文件中存储的上下文数据结构的至少一部分写回到所述存储器,将向量寄存器文件中存储的上下文数据结构的该至少一部分与存储器中存储的上下文数据结构的副本进行同步。
5.如权利要求4所述的电路装置,其中,所述处理单元被配置为在将上下文数据结构的一部分写回到所述存储器之前,确定在向量寄存器文件中存储的上下文数据结构的该部分是否已改变,其中,所述处理单元还被配置为响应于确定在向量寄存器中存储的上下文数据结构的该部分没有被改变,禁止将该上下文数据结构的该部分写回到存储器。
6.如权利要求3所述的电路装置,其中,所述处理单元被配置为在将状态数据高速缓存到向量寄存器文件时,对来自存储器中存储的上下文数据结构的数据进行压缩,并且其中,所述处理单元被配置为在将来自上下文数据结构的数据写回到所述存储器时,将来自向量寄存器文件中的上下文数据结构的数据进行解压。
7.如权利要求3所述的电路装置,其中,所述上下文数据结构包括可以被多线程呈现软件流水线中的多个阶段访问的滚动上下文数据结构,该滚动上下文数据结构被配置为存储多个上下文,每个上下文被配置为在至少一个图像元素被多线程呈现软件流水线的多个阶段处理时,为该至少一个图像元素存储状态数据,并且其中,所述处理单元被配置为将每个图像元素与滚动上下文数据结构中的上下文关联,从而在多线程呈现软件流水线对第二图像元素进行处理时,响应于对与该第二图像元素关联的第二上下文中的状态数据进行的修改,与第一图像元素关联的第一上下文中的状态数据不被改变。
8.如权利要求7所述的电路装置,其中,所述第二图像元素在第一图像元素之后被多线程呈现软件流水线接收,并且其中,所述处理单元被配置为:
响应于第二图像元素被多线程呈现软件流水线接收,初始地将该第二图像元素与第一上下文关联;并且
响应于在所述第一上下文被用于第一图像元素时试图修改用于第二图像元素的状态数据,将该状态数据从第一上下文复制到第二上下文、将第二图像元素与第二上下文关联、并修改在第二上下文中存储的状态数据。
9.如权利要求8所述的电路装置,其中,所述处理单元还被配置为,响应于所述第一上下文中的状态数据被多线程呈现软件流水线用于第一图像元素,将该第一上下文标记为正在使用,并且其中,所述处理单元被配置为响应于确定第一上下文被标记为正在使用,将该状态数据从第一上下文复制到第二上下文并将第二图像元素与第二上下文关联。
10.如权利要求7所述的电路装置,其中,所述在每个上下文中存储的状态数据包括从由指向颜色缓冲器的指针、指向球形图的指针、指向纹理图的指针、旋转属性、光照属性、混色属性、屏幕偏移量及其组合所构成的组中选择的多个状态属性。
11.一种集成电路装置,包含如权利要求1所述的电路装置。
12.一种程序产品,包含计算机可读介质,以及位于计算机可读介质上、并定义如权利要求1所述的电路装置的逻辑定义程序代码。
13.一种在包含定点执行单元和向量浮点单元的类型的处理单元中高速缓存状态数据的方法,其中,所述定点执行单元包括多个通用寄存器,且向量浮点单元包括向量寄存器文件,该方法包括:
在向量寄存器文件中高速缓存状态数据,包括被定点执行单元使用的非浮点状态数据;
将非浮点状态数据从向量寄存器文件复制到所述多个通用寄存器中的至少一个通用寄存器;以及
对在所述至少一个通用寄存器中存储的非浮点状态数据进行操作。
14.如权利要求13所述的方法,还包括,在对所述至少一个通用寄存器中存储的非浮点状态数据进行修改后,将该非浮点状态数据从该至少一个通用寄存器复制到向量寄存器文件。
15.如权利要求14所述的方法,其中,所述状态数据与用于存储状态数据的上下文数据结构关联,该状态数据被图形处理架构中的多线程呈现软件流水线中的多个阶段所共享,其中,所述方法还包括在处理单元中执行多线程呈现软件流水线的至少一个线程,且其中状态数据结构的副本被保持在存储器中,所述处理单元耦合到该存储器。
16.如权利要求15所述的方法,还包括通过将所述向量寄存器文件中存储的上下文数据结构的至少一部分写回到存储器,将向量寄存器文件中存储的上下文数据结构的该至少一部分与存储器中存储的上下文数据结构的副本进行同步。
17.如权利要求16所述的方法,还包括在将上下文数据结构的一部分写回到所述存储器之前,确定在向量寄存器文件中存储的上下文数据结构的该部分是否已改变,其中,响应于确定在向量寄存器中存储的上下文数据结构的该部分没有被改变,禁止将该上下文数据结构的该部分写回到该存储器。
18.如权利要求15所述的方法,还包括在将状态数据高速缓存到向量寄存器文件时,对来自存储器中存储的上下文数据结构的数据进行压缩,并且在将来自该上下文数据结构的数据写回到所述存储器时,将来自向量寄存器文件中的上下文数据结构的该数据进行解压。
19.如权利要求15所述的方法,其中,所述上下文数据结构包括可以被多线程呈现软件流水线中的多个阶段访问的滚动上下文数据结构,该滚动上下文数据结构被配置为存储多个上下文,每个上下文被配置为在至少一个图像元素被多线程呈现软件流水线的多个阶段处理时,为该至少一个图像元素存储状态数据,所述方法还包括将每个图像元素与滚动上下文数据结构中的上下文关联,从而在多线程呈现软件流水线对第二图像元素进行处理时,响应于对与该第二图像元素关联的第二上下文中的状态数据进行的修改,与第一图像元素关联的第一上下文中的状态数据不被改变。
20.如权利要求19所述的方法,其中,所述第二图像元素在第一图像元素之后被多线程呈现软件流水线接收,该方法还包括:
响应于第二图像元素被多线程呈现软件流水线接收,初始地将该第二图像元素与第一上下文关联;并且
响应于在所述第一上下文被用于第一图像元素时试图修改用于第二图像元素的状态数据,将该状态数据从第一上下文复制到第二上下文、将第二图像元素与第二上下文关联、并修改在第二上下文中存储的状态数据。
21.如权利要求20所述的方法,还包括,响应于所述第一上下文中的状态数据被多线程呈现软件流水线用于第一图像元素,将该第一上下文标记为正在使用,并且响应于确定第一上下文被标记为正在使用,将该状态数据从第一上下文复制到第二上下文并将第二图像元素与第二上下文关联。
22.如权利要求19所述的方法,其中,所述在每个上下文中存储的状态数据包括从由指向颜色缓冲器的指针、指向球形图的指针、指向纹理图的指针、旋转属性、光照属性、混色属性、屏幕偏移量及其组合所构成的组中选择的多个状态属性。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/212,418 | 2011-08-18 | ||
US13/212,418 US8836709B2 (en) | 2011-08-18 | 2011-08-18 | Vector register file caching of context data structure for maintaining state data in a multithreaded image processing pipeline |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103092772A true CN103092772A (zh) | 2013-05-08 |
CN103092772B CN103092772B (zh) | 2015-08-12 |
Family
ID=46546611
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210295908.0A Active CN103092772B (zh) | 2011-08-18 | 2012-08-17 | 电路装置和高速缓存状态数据的方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US8836709B2 (zh) |
CN (1) | CN103092772B (zh) |
DE (1) | DE102012213631B4 (zh) |
GB (1) | GB2493808B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104679585A (zh) * | 2013-11-28 | 2015-06-03 | 中国航空工业集团公司第六三一研究所 | 浮点上下文切换方法 |
CN109313554A (zh) * | 2016-05-27 | 2019-02-05 | Arm有限公司 | 用于在非均匀计算装置中进行调度的方法和设备 |
CN111149116A (zh) * | 2017-09-29 | 2020-05-12 | 国际商业机器公司 | 通过电路重写调试量子电路 |
CN111861860A (zh) * | 2020-07-23 | 2020-10-30 | 哈尔滨工业大学(威海) | 一种面向ai智能soc芯片的图像加速处理系统 |
CN112380150A (zh) * | 2020-11-12 | 2021-02-19 | 上海壁仞智能科技有限公司 | 计算装置以及用于加载或更新数据的方法 |
CN117215972A (zh) * | 2023-11-09 | 2023-12-12 | 中央军委政治工作部军事人力资源保障中心 | 一种基于云原生基础架构的缓存分层方法及系统 |
Families Citing this family (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8629867B2 (en) | 2010-06-04 | 2014-01-14 | International Business Machines Corporation | Performing vector multiplication |
US8692825B2 (en) | 2010-06-24 | 2014-04-08 | International Business Machines Corporation | Parallelized streaming accelerated data structure generation |
US8860725B2 (en) | 2010-08-13 | 2014-10-14 | Nvidia Corporation | System, method, and computer program product for deterministically simulating light transport |
US8847957B1 (en) * | 2011-10-05 | 2014-09-30 | Nvidia Corporation | Divide-and-conquer system, method, and computer program product for providing photon mapping |
US9520180B1 (en) | 2014-03-11 | 2016-12-13 | Hypres, Inc. | System and method for cryogenic hybrid technology computing and memory |
US9742630B2 (en) * | 2014-09-22 | 2017-08-22 | Netspeed Systems | Configurable router for a network on chip (NoC) |
US10348563B2 (en) | 2015-02-18 | 2019-07-09 | Netspeed Systems, Inc. | System-on-chip (SoC) optimization through transformation and generation of a network-on-chip (NoC) topology |
US9804666B2 (en) | 2015-05-26 | 2017-10-31 | Samsung Electronics Co., Ltd. | Warp clustering |
US10218580B2 (en) | 2015-06-18 | 2019-02-26 | Netspeed Systems | Generating physically aware network-on-chip design from a physical system-on-chip specification |
US10452124B2 (en) | 2016-09-12 | 2019-10-22 | Netspeed Systems, Inc. | Systems and methods for facilitating low power on a network-on-chip |
US20180159786A1 (en) | 2016-12-02 | 2018-06-07 | Netspeed Systems, Inc. | Interface virtualization and fast path for network on chip |
US10063496B2 (en) | 2017-01-10 | 2018-08-28 | Netspeed Systems Inc. | Buffer sizing of a NoC through machine learning |
US10469337B2 (en) | 2017-02-01 | 2019-11-05 | Netspeed Systems, Inc. | Cost management against requirements for the generation of a NoC |
US10424107B2 (en) | 2017-04-01 | 2019-09-24 | Intel Corporation | Hierarchical depth buffer back annotaton |
US11010953B2 (en) | 2017-04-21 | 2021-05-18 | Intel Corporation | Dedicated fixed point blending for energy efficiency |
US10178619B1 (en) | 2017-09-29 | 2019-01-08 | Intel Corporation | Advanced graphics power state management |
US11144457B2 (en) | 2018-02-22 | 2021-10-12 | Netspeed Systems, Inc. | Enhanced page locality in network-on-chip (NoC) architectures |
US10547514B2 (en) | 2018-02-22 | 2020-01-28 | Netspeed Systems, Inc. | Automatic crossbar generation and router connections for network-on-chip (NOC) topology generation |
US10983910B2 (en) | 2018-02-22 | 2021-04-20 | Netspeed Systems, Inc. | Bandwidth weighting mechanism based network-on-chip (NoC) configuration |
US11023377B2 (en) | 2018-02-23 | 2021-06-01 | Netspeed Systems, Inc. | Application mapping on hardened network-on-chip (NoC) of field-programmable gate array (FPGA) |
US11176302B2 (en) | 2018-02-23 | 2021-11-16 | Netspeed Systems, Inc. | System on chip (SoC) builder |
CN111680091B (zh) * | 2020-06-03 | 2023-04-28 | 中国银行股份有限公司 | 多线程文件注册方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6571328B2 (en) * | 2000-04-07 | 2003-05-27 | Nintendo Co., Ltd. | Method and apparatus for obtaining a scalar value directly from a vector register |
US20090231349A1 (en) * | 2008-03-12 | 2009-09-17 | Eric Oliver Mejdrich | Rolling Context Data Structure for Maintaining State Data in a Multithreaded Image Processing Pipeline |
US7594102B2 (en) * | 2004-12-15 | 2009-09-22 | Stmicroelectronics, Inc. | Method and apparatus for vector execution on a scalar machine |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100280285B1 (ko) | 1996-08-19 | 2001-02-01 | 윤종용 | 멀티미디어 신호에 적합한 멀티미디어 프로세서 |
US6253311B1 (en) | 1997-11-29 | 2001-06-26 | Jp First Llc | Instruction set for bi-directional conversion and transfer of integer and floating point data |
JP4060960B2 (ja) | 1998-09-18 | 2008-03-12 | 富士通株式会社 | キャッシュ記憶装置 |
-
2011
- 2011-08-18 US US13/212,418 patent/US8836709B2/en active Active
-
2012
- 2012-05-25 GB GB1209171.6A patent/GB2493808B/en active Active
- 2012-08-02 DE DE102012213631.2A patent/DE102012213631B4/de active Active
- 2012-08-17 CN CN201210295908.0A patent/CN103092772B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6571328B2 (en) * | 2000-04-07 | 2003-05-27 | Nintendo Co., Ltd. | Method and apparatus for obtaining a scalar value directly from a vector register |
US7594102B2 (en) * | 2004-12-15 | 2009-09-22 | Stmicroelectronics, Inc. | Method and apparatus for vector execution on a scalar machine |
US20090231349A1 (en) * | 2008-03-12 | 2009-09-17 | Eric Oliver Mejdrich | Rolling Context Data Structure for Maintaining State Data in a Multithreaded Image Processing Pipeline |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104679585A (zh) * | 2013-11-28 | 2015-06-03 | 中国航空工业集团公司第六三一研究所 | 浮点上下文切换方法 |
CN104679585B (zh) * | 2013-11-28 | 2017-10-24 | 中国航空工业集团公司第六三一研究所 | 浮点上下文切换方法 |
CN109313554A (zh) * | 2016-05-27 | 2019-02-05 | Arm有限公司 | 用于在非均匀计算装置中进行调度的方法和设备 |
CN109313554B (zh) * | 2016-05-27 | 2023-03-07 | Arm有限公司 | 用于在非均匀计算装置中进行调度的方法和设备 |
CN111149116A (zh) * | 2017-09-29 | 2020-05-12 | 国际商业机器公司 | 通过电路重写调试量子电路 |
CN111149116B (zh) * | 2017-09-29 | 2023-10-27 | 国际商业机器公司 | 通过电路重写调试量子电路 |
US11809962B2 (en) | 2017-09-29 | 2023-11-07 | International Business Machines Corporation | Debugging quantum circuits by circuit rewriting |
CN111861860A (zh) * | 2020-07-23 | 2020-10-30 | 哈尔滨工业大学(威海) | 一种面向ai智能soc芯片的图像加速处理系统 |
CN111861860B (zh) * | 2020-07-23 | 2023-04-21 | 哈尔滨工业大学(威海) | 一种面向ai智能soc芯片的图像加速处理系统 |
CN112380150A (zh) * | 2020-11-12 | 2021-02-19 | 上海壁仞智能科技有限公司 | 计算装置以及用于加载或更新数据的方法 |
CN117215972A (zh) * | 2023-11-09 | 2023-12-12 | 中央军委政治工作部军事人力资源保障中心 | 一种基于云原生基础架构的缓存分层方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
GB201209171D0 (en) | 2012-07-04 |
CN103092772B (zh) | 2015-08-12 |
DE102012213631A1 (de) | 2013-02-21 |
US8836709B2 (en) | 2014-09-16 |
DE102012213631B4 (de) | 2019-03-07 |
GB2493808A (en) | 2013-02-20 |
GB2493808B (en) | 2015-06-03 |
US20130044117A1 (en) | 2013-02-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103092772B (zh) | 电路装置和高速缓存状态数据的方法 | |
US8330765B2 (en) | Rolling context data structure for maintaining state data in a multithreaded image processing pipeline | |
US8405670B2 (en) | Rolling texture context data structure for maintaining texture data in a multithreaded image processing pipeline | |
US10957095B2 (en) | Programmable ray tracing with hardware acceleration on a graphics processor | |
US8711163B2 (en) | Reuse of static image data from prior image frames to reduce rasterization requirements | |
US8102391B2 (en) | Hybrid rendering of image data utilizing streaming geometry frontend interconnected to physical rendering backend through dynamic accelerated data structure generator | |
EP3627451B1 (en) | Vertex shader with primitive replication | |
US11721059B2 (en) | Apparatus and method for cross-instance front-to-back traversal for ray tracing heavily-instanced scenes | |
US8248412B2 (en) | Physical rendering with textured bounding volume primitive mapping | |
US10692170B2 (en) | Software scoreboard information and synchronization | |
US20100228781A1 (en) | Resetting of Dynamically Grown Accelerated Data Structure | |
US20110063285A1 (en) | Rendering of stereoscopic images with multithreaded rendering software pipeline | |
US20100239186A1 (en) | Accelerated Data Structure Positioning Based Upon View Orientation | |
US11704181B2 (en) | Apparatus and method for scalable error detection and reporting | |
US20240193722A1 (en) | Apparatus and method for seamless container migration for graphics processors and associated devices | |
US11321799B2 (en) | Compiler assisted register file write reduction | |
CN111724294A (zh) | 分布式拷贝引擎 | |
EP3916544A1 (en) | Ordering of shader code execution | |
US11861907B2 (en) | Technology to automatically locate ball-holding players in multi-camera video feeds | |
CN116071489A (zh) | 用于基于对先前帧的分析将帧分割成多个命令缓冲器提交的3d图形驱动器 |
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 | ||
TR01 | Transfer of patent right |
Effective date of registration: 20220824 Address after: Gyeonggi Do Korea Suwon Patentee after: SAMSUNG ELECTRONICS Co.,Ltd. Address before: USA New York Patentee before: International Business Machines Corp. |
|
TR01 | Transfer of patent right |