CN103106120A - 具有冲量传播的多线程物理引擎 - Google Patents
具有冲量传播的多线程物理引擎 Download PDFInfo
- Publication number
- CN103106120A CN103106120A CN2012102718474A CN201210271847A CN103106120A CN 103106120 A CN103106120 A CN 103106120A CN 2012102718474 A CN2012102718474 A CN 2012102718474A CN 201210271847 A CN201210271847 A CN 201210271847A CN 103106120 A CN103106120 A CN 103106120A
- Authority
- CN
- China
- Prior art keywords
- thread
- momentum
- message
- cross
- objects
- 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 claims abstract description 63
- 230000001902 propagating effect Effects 0.000 claims abstract description 7
- 238000001514 detection method Methods 0.000 claims description 56
- 238000012545 processing Methods 0.000 claims description 53
- 230000000644 propagated effect Effects 0.000 claims description 36
- 230000004044 response Effects 0.000 claims description 32
- 230000000977 initiatory effect Effects 0.000 claims description 12
- 230000008878 coupling Effects 0.000 claims description 3
- 238000010168 coupling process Methods 0.000 claims description 3
- 238000005859 coupling reaction Methods 0.000 claims description 3
- 238000004891 communication Methods 0.000 description 137
- 239000007787 solid Substances 0.000 description 68
- 230000008569 process Effects 0.000 description 44
- 238000003860 storage Methods 0.000 description 32
- 238000010586 diagram Methods 0.000 description 29
- 230000005540 biological transmission Effects 0.000 description 26
- 238000004422 calculation algorithm Methods 0.000 description 21
- 230000006870 function Effects 0.000 description 17
- 239000011449 brick Substances 0.000 description 14
- 230000014509 gene expression Effects 0.000 description 14
- 230000033001 locomotion Effects 0.000 description 14
- 239000000872 buffer Substances 0.000 description 11
- 230000011218 segmentation Effects 0.000 description 10
- 238000013461 design Methods 0.000 description 9
- 239000012634 fragment Substances 0.000 description 8
- 239000002245 particle Substances 0.000 description 7
- 238000004088 simulation Methods 0.000 description 7
- 238000006243 chemical reaction Methods 0.000 description 6
- 238000004590 computer program Methods 0.000 description 6
- 238000010276 construction Methods 0.000 description 6
- 238000009826 distribution Methods 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 6
- 239000004744 fabric Substances 0.000 description 6
- 238000007726 management method Methods 0.000 description 6
- 239000008186 active pharmaceutical agent Substances 0.000 description 5
- 230000000875 corresponding effect Effects 0.000 description 5
- 230000003068 static effect Effects 0.000 description 5
- 230000001360 synchronised effect Effects 0.000 description 5
- 238000012360 testing method Methods 0.000 description 5
- 230000008859 change Effects 0.000 description 4
- 238000000926 separation method Methods 0.000 description 4
- 238000004458 analytical method Methods 0.000 description 3
- 230000000712 assembly Effects 0.000 description 3
- 238000000429 assembly Methods 0.000 description 3
- 230000004087 circulation Effects 0.000 description 3
- 238000005520 cutting process Methods 0.000 description 3
- 238000007667 floating Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000010408 sweeping Methods 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 241000288673 Chiroptera Species 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000018109 developmental process Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 239000012530 fluid Substances 0.000 description 2
- 238000002156 mixing Methods 0.000 description 2
- 238000012544 monitoring process Methods 0.000 description 2
- 230000006855 networking Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 238000012163 sequencing technique Methods 0.000 description 2
- SNRUBQQJIBEYMU-UHFFFAOYSA-N Dodecane Natural products CCCCCCCCCCCC SNRUBQQJIBEYMU-UHFFFAOYSA-N 0.000 description 1
- 230000003044 adaptive effect Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 239000011805 ball Substances 0.000 description 1
- 230000004888 barrier function Effects 0.000 description 1
- 230000001276 controlling effect Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 125000003438 dodecyl group Chemical group [H]C([H])([H])C([H])([H])C([H])([H])C([H])([H])C([H])([H])C([H])([H])C([H])([H])C([H])([H])C([H])([H])C([H])([H])C([H])([H])C([H])([H])* 0.000 description 1
- 238000005194 fractionation Methods 0.000 description 1
- 239000007789 gas Substances 0.000 description 1
- 230000005484 gravity Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 239000007788 liquid Substances 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000010399 physical interaction Effects 0.000 description 1
- 238000006116 polymerization reaction Methods 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 238000013468 resource allocation Methods 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 230000009183 running Effects 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
- 238000013396 workstream Methods 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
-
- 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F2300/00—Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
- A63F2300/20—Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game characterised by details of the game platform
- A63F2300/203—Image generating hardware
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F2300/00—Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
- A63F2300/60—Methods for processing data by generating or executing the game program
- A63F2300/64—Methods for processing data by generating or executing the game program for computing dynamical parameters of game objects, e.g. motion determination or computation of frictional forces for a virtual car
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F2300/00—Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
- A63F2300/60—Methods for processing data by generating or executing the game program
- A63F2300/64—Methods for processing data by generating or executing the game program for computing dynamical parameters of game objects, e.g. motion determination or computation of frictional forces for a virtual car
- A63F2300/643—Methods for processing data by generating or executing the game program for computing dynamical parameters of game objects, e.g. motion determination or computation of frictional forces for a virtual car by determining the impact between objects, e.g. collision detection
-
- 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/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2210/00—Indexing scheme for image generation or computer graphics
- G06T2210/52—Parallel processing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Multi Processors (AREA)
- Image Processing (AREA)
- Storage Device Security (AREA)
- Debugging And Monitoring (AREA)
- Air Bags (AREA)
- Measurement Of Velocity Or Position Using Acoustic Or Ultrasonic Waves (AREA)
Abstract
一种电路布置和方法,通过将场景中的物体的所有权分配给单独的线程、并通过在拥有相互接触的物体的线程之间传递线程间冲量消息以在相互接触的物体之间传播冲量、而使用该物体所分配给的线程来局部地传播冲量经过该物体,来实现多线程物理引擎中的冲量传播。
Description
技术领域
本发明一般涉及数据处理,更具体地,涉及图形图像处理和呈现(rendering)以及与之相关的物理冲量传播。
背景技术
呈现来自三维场景的二维图像的过程通常被称为图像处理。随着现代计算机产业的发展,图像处理也在发展。图像处理发展中的一个特定目标是使得三维场景的二维模拟或呈现尽可能地真实。
此外,图像处理经常与建模或模拟现实世界场景相关联地使用,其中,表示物理、真实世界物体的虚拟或模拟物体在模拟场景中互相作用。例如,视频游戏越来越能够描绘越来越多的现实虚拟环境,例如通过高尔夫球的飞行、赛车的真实世界性能特征、飞行器的飞行或战争游戏中的爆炸结果。在图像处理的其他商业和科学应用(例如,飞行模拟、弹道模拟等)中,对虚拟环境中的物体的相互作用的准确建模受到更大的关注。
在很多现代数据处理系统中,对物体的真实世界相互作用的建模由通常被称为物理引擎的计算机软件来处理。物理引擎尝试通过使用刚体动力学、软体动力学和/或流体动力学原理来模拟物理现象。大多数物理引擎的一个关键组件是碰撞检测/碰撞响应系统,其试图检测虚拟环境中的物体何时互相碰撞。基于检测到的碰撞,典型地执行动力学模拟,以解析碰撞后施加到物体的力和运动。
某些物理引擎还依赖于基于冲量的算法,其中,冲量被施加到物体之间,以在其之间传播力。例如,当刚性或可变形的物体互相接触时,施加到一个物体的力必须被施加到与该物体接触的其他物体。类似地,施加到流体、织物或其他高度可变形的实体的力必须典型地传播经过这些实体。
尽管某些更高精度的物理引擎不会受时间限制,许多其他的、特别是在交互视频游戏应用中使用的那些引擎,需要“实时”运行。因此,与物理计算例如碰撞检测和冲量传播相关联地执行的操作经常需要被快速和高效地完成。
传统的碰撞检测和冲量传播技术典型地在串行、单线程的应用中运行,其中,运动中的每个物体相对于场景中的所有其他物体被测试,且冲量在物体之间一个接一个的传播。在一些实例中,碰撞检测会利用空间裁剪来降低所需的碰撞计算的次数。此外,物体可以用细节层次(LOD)模型来建模,以将物体简化为更容易计算的形状,以便检测两个物体何时互相接触。例如,很多碰撞检测技术使用简单的形状例如球形或其他立方体积来表示更复杂的物体。更详细的包围体(bounding volume)可以在某些应用中被设计,以提高碰撞精度,但是,这样做通常是以更多处理时间和/或硬件需求为代价的。
随着半导体技术在时钟速度以及并行处理的越来越多的使用方面的提升,实时物理引擎的能力必然会提升。在芯片级别,多个处理器核心通常被置于同一芯片上,其与分离的处理器芯片、或者在一定程度上与完全分离的计算机类似的方式来运行。此外,即使在核心内部,通过使用专门用于处理特定类型操作的多个执行单元,并行处理也被使用。基于硬件的流水线在很多实例中也被使用,从而可占用多个时钟周期执行的特定操作被分解为阶段,使得其他操作能在较早的操作完成之前被启动。多线程也被使用以使多指令流被并行处理,使更多总体工作能在任何给定时钟周期内被执行。
但是,即使有提升的时钟速度和并行处理,传统的碰撞检测和冲量传播技术在大多数传统架构下仍然有性能瓶颈。特别地,传统技术通常需要大量的随机存储器存取,以检索和管理场景中的物体,这被发现引起低的高速缓存利用率和其他性能相关的瓶颈。
此外,在很多动态、实时的环境中,将负载分布到执行的多个并行线程中会有问题。特别地,在给定场景中的物体的数量、以及这些物体的分布会随时间而变化。尽管在某个时刻需要大量处理资源的多个物体间的碰撞会在场景的一个区域中发生,在另一时刻,更多碰撞且由此更重的处理工作量会在场景的另一区域中发生。
因此在本领域中仍然存在对高效地处理物理引擎中的物理碰撞检测和冲量传播的需求。
发明内容
本发明通过提供电路布置和方法来解决与现有技术相关的这些和其他问题,该电路布置和方法通过将场景中的物体所有权分配给单独的线程、并通过在拥有接触物体的线程之间传递线程间冲量消息在互相接触的物体之间传播冲量、而使用物体所被分配给的线程来局部传播冲量经过这样的物体,来实现多线程物理引擎中的冲量传播。
因此,根据本发明的一方面,使用多线程物理引擎在场景的多个物体之间传播冲量。对于多个物体中的每个,这样的物体的所有权被分配给多线程物理引擎中的多个线程中的一个。此外,响应于冲量被多个物体中的第一物体接收到,使用多个线程中的第一线程来局部地传播冲量经过第一物体,该第一物体的所有权已被分配给该第一线程,且通过将线程间消息从第一线程发送到多个线程中的第二线程,将冲量传播到与第一物体接触的多个物体中至少一个额外物体,该额外物体的所有权已被分配给该第二线程。
表征本发明的特点的这些和其他优势和特征将在所附权利要求书中阐述,并形成其额外的部分。但是,为了更好地理解本发明以及通过其使用所带来的优势和目标,需要参考附图和伴随的描述性内容,其中描述了本发明的示例性实施例。
附图说明
图1是包含可在根据本发明的实施例的数据处理中使用的示例性计算机的示例性自动计算机器的框图。
图2是在图1的计算机中实现的示例性NOC的框图。
图3是更具体地示出来自图2的NOC的节点的示例性实现的框图。
图4是示出来自图2的NOC的IP块的示例性实现的框图。
图5是适于在图2的NOC中实现的线程流水线软件引擎的框图。
图6是适于在图5的线程流水线软件引擎中实现的示例性软件流水线的框图。
图7是适于在图5的线程流水线软件引擎中实现的示例性呈现软件流水线的框图。
图8是示例性场景的框图,其用于示出使用图7中的GIR生成器来生成几何体内部表示。
图9是为图9中的示例性场景生成的几何体内部表示的框图。
图10是示出由图7中的GIR生成器执行的几何体布置例程的程序流的流程图。
图11是示出由图7中的GIR生成器执行的添加几何体例程的程序流的流程图。
图12是在图7中引用的流式几何前端的示例性实现的框图。
图13是图7中引用的光线跟踪后端的示例性实现的框图。
图14A和14B一起更具体地示出了图7中的呈现软件流水线的实现。
图15是用于示出以根据本发明的方式进行的碰撞检测的示例性场景的框图。
图16是适于以根据本发明的方式实现碰撞检测的示例性NOC的框图。
图17是示出由图16中的NOC中的主线程执行的示例性碰撞检测例程的程序流的流程图。
图18是示出由图16中的NOC中的从线程执行的示例性碰撞检测例程的程序流的流程图。
图19是用于示出以根据本发明的方式进行的预测性负载平衡的示例性场景的图。
图20是示出结合了以根据本发明的方式进行的预测性负载平衡的示例性物理引擎的程序流的流程图。
图21是示出图20中引用的预测性负载平衡例程的程序流的流程图。
图22是示出根据本发明的由图16的NOC中的主线程执行并使用预测性负载平衡的示例性碰撞检测例程的程序流的流程图。
图23是示出根据本发明的由图16的NOC中的从线程执行并使用预测性负载平衡的示例性碰撞检测例程的程序流的流程图。
图24是以根据本发明的方式与冲量传播一起使用的示例性质点动态格(particle dynamic lattice)的框图。
图25是以根据本发明的方式适于实现冲量传播的示例性NOC的框图。
图26是示出使用图25的NOC的根据发明的、与冲量传播一起使用的示例性初始化例程的程序流的流程图。
图27是图26中引用的相邻物体表的示例性实现的框图。
图28是示出由图25的NOC中的软件线程执行的示例性冲量传播例程的程序流的流程图。
具体实施方式
根据本发明的实施例在多线程物理引擎中使用线程间冲量消息来提升用来在场景的物体之间传播冲量的冲量传播算法的吞吐率。在本发明上下文中的场景是指“世界”或多维空间,在图像帧的呈现之前,物体被放置在该空间中。典型地,场景是三维物体空间;但是,以下为了简化讨论,许多例子示出了二维场景。但是可以理解,根据本发明场景可以是任何数量的维度。
在根据本发明的实施例中,场景中的物体被分配给多个线程,从而每个线程有效地“拥有”一个或多个物体。线程能够确定其拥有的物体当前接触的那些物体,以及拥有这些被接触物体的线程,从而,响应于施加到一个物体的冲量,该物体的线程能够局部地传播冲量经过该物体,并且假设冲量不会在该物体中完全衰减,将线程间冲量消息发送到拥有该物体所接触的物体的线程,使得这些线程能局部地传播冲量经过其各自的物体。冲量消息典型地包括表示传递到被接触物体的冲量的大小的值,以及表示冲量方向的矢量。
此外,在一些实施例中,每个线程可以代表其拥有的物体、以线程间冲量应答消息的形式来返回反作用冲量。在一些实施例中在没有生成响应于冲量的反作用冲量的情况下(例如,如果接收冲量的物体完全衰减该冲量),应答消息也可以是可选的。
如下将变得更明显,根据本发明的可以与冲量传播相关联地使用的特别有用的硬件环境使用片上网络(NOC)布置,其中多个处理器核心被置于同一集成电路布置上,并通过用来在核心之间传递消息的具有收件箱的点对点链路的网络来彼此互连。线程间消息可以通过在核心之间传递的核心间消息(例如,下面将更详细地讨论的IP块),在这样的实施例中实现。但是可以理解,根据本发明,其他多线程硬件布置,以及其他消息发送格式和网络可以被用来在线程之间转发线程间冲量消息。
在某些实施例中,物理引擎可以通过在多线程电路布置中的硬件线程之间流式传输细节层次分量(例如,如在2010年5月12号提交并转让给与本发明相同的受让人的、通过引用结合于此的美国专利申请号12/778,390中所公开的)来实现冲量传播,并可以使用预测性负载平衡(例如,如在2010年6月24号提交并转让给与本发明相同的受让人、也通过引用结合于此的美国专利申请号12/822,615中所公开的)。在这样的实施例中,作为主线程运行的分量载入器硬件线程被用来从存储器获取物体的细节层次数据,并将该数据流式传输到作为从属硬件线程运行的一个或多个碰撞检测线程。从属硬件线程也可以将细节层次数据流式传输到其他从属硬件线程,例如,被布置在软件流水线更下面的从属硬件线程。因为从属硬件线程从主线程接收细节层次数据,典型地,从属硬件线程不需要从存储器载入数据,由此减少了存储器带宽需求并加速了性能。但是,可以理解,根据本发明的冲量传播可以被用于前述应用中公开的设计以外的其他物理引擎设计。
对于本领域普通技术人员来说,各种改变和调整是明显的。因此,本发明不限于这里讨论的特定实现。
硬件和软件环境
现在转到附图,其中在几个图中,相同的参考标号表示相同的部件,图1示出了包含可用于根据本发明的实施例的数据处理的示例性自动计算机器的示例性计算机10。图1中的计算机10包括至少一个计算机处理器12或“CPU”,以及随机存取存储器14(“RAM”),其通过高速存储器总线16和总线适配器18连接到处理器12并连接到计算机10的其他组件。
在RAM14中存储了应用程序20,即一种用户级别计算机程序指令的模块,用于实现特定的数据处理任务,例如,字处理、电子数据表、数据库操作、视频游戏、股票市场模拟、原子量子过程模拟或其他用户级别应用。在RAM14中还存储了操作系统22。可与本发明的实施例关联使用的操作系统包括UNIXTM,LinuxTM,微软视窗XPTM,AIXTM,IBM的i5/OSTM,以及本领域技术人员所知的其他操作系统。图1的例子中的操作系统22和应用20被示出在RAM14中,但这样的软件的许多组件通常被存储在非易失性存储器例如盘驱动器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中实现的通信适配器的示例包括用于有线拨号通信的调制解调器、用于有线数据通信网络通信的以太网(IEEE802.3)和用于无线数据通信网络通信的802.11适配器。
为了进一步说明,图2阐述了根据本发明的实施例的示例性NOC102的功能性框图。图2中的NOC在“芯片”100上(即在集成电路上)实现。NOC102包括集成处理器(“IP”)块104、路由器110、存储器通信控制器106、以及被分组为互连节点的网络接口控制器108。每个IP块104通过存储器通信控制器106和网络接口控制器108来适配到路由器110。每个存储器通信控制器控制IP块和存储器之间的通信,且每个网络接口控制器108控制通过路由器110的IP块之间的通信。
在NOC102中,每个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的NOC102中,每个存储器通信控制器106包括多个存储器通信执行引擎140。每个存储器通信执行引擎140能够执行来自IP块104的存储器通信指令,包括网络和IP块104之间的双向存储器通信指令流141、142、144。由存储器通信控制器执行的存储器通信指令不仅可以源于通过特定存储器通信控制器来适配到路由器的IP块,也可以源于NOC102中任何地方的任何IP块104。即,NOC中的任何IP块可以产生存储器通信指令,并将该存储器通信指令通过NOC的路由器发送到与另一IP块关联的另一存储器通信控制器,以便该存储器通信指令的执行。这样的存储器通信指令可以包括,例如,转换后援缓冲器控制指令、高速缓存控制指令、屏障指令、以及存储器载入和存储指令。
每个存储器通信执行引擎140能够单独并与其他存储器通信执行引擎并行地执行完整的存储器通信指令。存储器通信执行引擎实现了可伸缩的存储器事务处理器,其针对存储器通信指令的并发吞吐量进行了优化。存储器通信控制器106支持多个存储器通信执行引擎140,所有这些引擎并发运行,以用于多个存储器通信指令的同时执行。新的存储器通信指令被存储器通信控制器106分配给存储器通信引擎140,且存储器通信执行引擎140可以同时接收多个响应事件。在该例子中,所有存储器通信执行引擎140都是相同的。因此,通过伸缩存储器通信执行引擎140的数量,实现了伸缩能被存储器通信控制器104同时处理的存储器通信指令的数量。
在图3的NOC102中,每个网络接口控制器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耦合到iCACHE170,并被用来将来自多个线程获取定序器174的指令获取请求转换为用于从较低阶存储器获取指令的真实地址。每个线程获取定序器174专用于特定的硬件线程,并被用来确保要被相关线程执行的指令被取到iCACHE中,以分派到适当的执行单元。同时如图4所示,取到指令缓冲器168中的指令还可以被分支预测逻辑176监视,该分支预测逻辑向每个线程获取定序器174提供提示,以最小化由执行线程中的分支引起的指令高速缓存不命中。
IU162还包括依赖性/发出逻辑块178,其专用于每个硬件线程,并被配置为解决依赖性并控制从指令缓冲器168到XU164的指令的发出。此外,在示出的实施例中,在AXU166中提供单独的依赖性/发出逻辑180,由此使得分别的指令能被不同的线程并发地发出到XU164和AXU166。在另一实施例中,逻辑180可以被布置在IU162中,或者可以整个被忽略,从而逻辑178将指令发出到AXU166。
XU164被实现为定点执行单元,包括一组耦合到定点逻辑184、分支逻辑186和载入/存储逻辑188的通用寄存器(GPR)182。载入/存储逻辑188耦合到L1数据高速缓存(dCACHE)190,其具有dERAT逻辑192提供的有效到实际转换。XU164可以被配置为实际实现任何指令集,例如,32b或64b PowerPC指令集的所有或部分。
AXU166作为辅助执行单元来运行,其包括专用依赖性/发出逻辑180,以及一个或多个执行块194。AXU166可以包括任何数量的执行块,并可以实际实现任何类型的执行单元,例如,浮点单元,或者一个或多个专门执行单元,例如加密/解密单元、协处理器、矢量处理单元、图形处理单元、XML处理单元等。在示出的实施例中,AXU166包括到XU164的高速辅助接口,例如以支持AXU架构状态和XU架构状态之间的直接移动。
与IP块104的通信可以以上述结合图2讨论的方式、通过耦合到NOC102的网络接口控制器108来进行管理。可以提供基于地址的通信,例如用来访问L2高速缓存存储器,以及基于消息的通信。例如,每个IP块104可以包括专用的收件箱和/或发件箱,以处理IP块之间的节点间通信。
本发明的实施例还可以在以上结合图1-4所述的硬件和软件环境中实现。但是,得益于本公开的本领域普通技术人员可以理解,本发明可以在很多种不同环境中实现,且可以对上述硬件和软件实施例进行其他修改,而不偏离本发明的精神和范围。因此,本发明不限于这里公开的特定硬件和软件环境。
软件流水线
现在转到图5,NOC102可以在某些实施例中被用于实现基于软件的流水线。特别地,图5示出了包含线程流水线软件引擎202的示例性处理单元200,该引擎可以被用来实现和执行NOC架构上的一个或多个软件流水线204。每个流水线204典型地被分配了共享存储器208中的一个或多个数据结构206,以使得流水线的不同阶段能交换数据。此外,提供了中断机制210,以使得流水线的阶段能互相通知要执行的待决工作。
在引擎202中还提供了一个或多个主机接口处理器(HIP)212,来处理到软件流水线204的工作发出。提供了一个或多个推送缓冲器214以将每个HIP与位于引擎外部的软件应用216和驱动器218接口连接。为了发起流水线中的工作,软件应用216通过合适的驱动器218以API调用的形式来发出请求,该驱动器然后生成合适的对HIP的请求,并将请求存储在推送缓冲器214中。用于相关流水线的HIP212从推送缓冲器214中取出工作请求,并发起通过关联的流水线对请求的处理。
在示出的实施例中,且如在NOC102上所实现的,软件流水线204实现被分为计算机程序指令的一组模块或“阶段”的功能,所述模块或“阶段”互相合作来顺序执行一系列数据处理任务。流水线中的每个阶段由阶段ID所标识的计算机程序指令的可灵活配置模块组成,每个阶段在NOC102的IP块104上的执行线程中执行。阶段是可灵活配置的,在于每个阶段可以支持该阶段的多个实例,从而可以通过基于工作负荷的需要来实例化额外的阶段实例,来伸缩流水线。因为每个阶段由在NOC102的IP块104上执行的计算机程序指令来实现,每个阶段能够通过存储器通信控制器106来访问被寻址的存储器。此外,至少一个阶段能够在其他阶段之间发送基于网络地址的通信,其中基于网络地址的通信保持包顺序。
基于网络地址的通信,例如,可以使用每个阶段中的“收件箱”来实现,所述“收件箱”从流水线中先前的阶段接收数据和/或命令。基于网络地址的通信保持包顺序,并且是同一类型的通信,其能够流过上述同一虚拟通道。这样的通信中的每个包以上述方式被路由器110路由,依次地以FIFO顺序进入和离开虚拟通道缓冲器,由此保持严格的包顺序并维持消息完整性。
每个阶段实现与下一阶段的生产者/消费者关系。第一阶段通过HIP212接收工作指令和工件数据,在该工件上实现指定的数据处理任务,生成输出数据,并将生成的输出数据发送到流水线中的下一阶段,该下一阶段通过在来自第一阶段的生成的输出数据上执行其指定的数据处理任务,来消费来自第一阶段的生成的输出数据,由此生成随后被发送到流水线中的下一阶段的输出数据。该操作序列继续直到流水线的最后阶段,该最后阶段然后将其生成的输出数据存储在输出数据结构中,以通过HIP212最终返回到发起的应用216。
流水线中的阶段的安排在不同的实施例中会不同,并用于在不同应用中执行不同的功能。例如,图6示出了示例性软件流水线220,其包含多个阶段实例222,这些实例也被独立地指定为实例A-I,每个实例表示在NOC102的IP块上实现的执行线程。阶段实例222在流水线220中被安排为五个阶段,第一阶段具有实例A,第二阶段具有实例B和C,第三阶段具有实例D、E和F,第四阶段具有实例G和H,且第五阶段具有实例I。从图6中可以看到,实例和流水线中的其他实例可具有一对一、一对多和/或多对一的关系。实例可以在特定阶段中互相合作运行,来执行并行任务并共享工作量,由此在执行任务时提升阶段的总体吞吐量。阶段中的实例也可以执行互相不同的任务,以实现不同任务的并行性能。实例可以向多于一个实例提供数据,而其他实例可以从多个实例收集数据并处理数据。
在示出的实施例中,流水线的每个阶段的每个实例典型地被实现为在NOC的单独IP块上执行的计算机程序指令的应用级模块。且每个阶段被分配给NOC的IP块上的一执行线程。每个阶段被分配了阶段ID,且阶段的每个实例被分配了标识符。HIP212(图5)典型地通过为每个阶段配置所需数量的实例来设置流水线,每个阶段的每个实例的网络位置被提供给其他阶段的其他实例,以使得每个实例能够将其结果工作量发送到下一阶段中的合适实例,例如阶段2的实例被授权向之发送其结果工作量的较早和/或较晚的阶段3。多个实例可以被分配给特定的阶段,来提供相对于其他阶段的额外处理资源,例如,从而工作尽可能高效地流过流水线,且不会有单个阶段成为性能瓶颈。还可以理解,可以在运行时执行工作量监视,且可以根据需要动态地向/从一个阶段添加或移除实例,以在流水线的阶段之间平衡负载。
每个阶段被配置了用于下一阶段的每个实例的阶段ID,其还可以包括下一阶段中实例的数量以及其每个实例的网络位置。通过为一阶段配置用于下一阶段的实例的ID,为该阶段提供了在阶段之间进行负载平衡所需的信息。这样的负载平衡例如可以通过监视阶段的性能并基于一个或多个阶段的性能来实例化每个阶段的若干实例来实现。监视阶段的性能可以通过将每个阶段配置为向单独的监视应用报告性能统计来实现,该监视应用转而在IP块上的另一执行线程上或在HIP上安装并运行。如本领域技术人员所能想到的,性能统计可以包括例如完成数据处理任务所需的时间、在特定时间段内完成的数据处理任务的数量等。基于一个或多个阶段的性能来实例化每个阶段的若干实例可以通过在被监视的性能指示需要新实例时由HIP实例化新实例来实现。
流水线呈现架构
现在转到图7,该图示出了处理单元200的实现,该处理单元被配置为实现根据本发明的可以和物理引擎结合使用的流水线呈现架构。特别地,图7示出了包含流式几何前端232的混合呈现软件流水线230,该流式几何前端通过GIR生成器236与光线跟踪后端234接口连接。流式几何前端232例如可以被实现为OpenGL或DirectX兼容前端,例如,如若干不同的基于光栅的技术中所使用的,该前端流式传输用于场景的一组基元(primitive)。前端232也可以本机支持OpenGL或DirectX API,这样可以被应用216通过API调用来访问,该应用216被开发以和基于光栅的呈现算法一起使用,所述API调用被驱动器218转化为工作请求,所述工作请求通过推送缓冲器214被发送到HIP 212,以发起前端232对这些API调用的实现。
GIR生成器236转而处理流式几何前端232输出的基元流,以动态地生成并在存储器208中存储几何体内部表示(GIR)数据结构238。GIR 238作为加速数据结构(ADS)来发挥作用,且这样可以被光线跟踪后端234用来向帧缓冲器240呈现用于场景的一帧图像数据。GIR生成器236使用多个并行执行线程或硬件线程来动态生成GIR,且由此减少GIR生成成为整体性能的瓶颈的可能性。此外,如果需要,允许后端234与GIR生成器动态构建GIR并行地且在GIR生成器完成该GIR之前开始访问GIR。作为另一种选择,后端234不能操作GIR,直到GIR的构建结束。作为再一种选择,前端232和后端234可以对不同帧的数据进行操作,从而前端232将基元数据流式传输到GIR生成器236来为一个帧构建GIR,而后端234针对较早生成的帧来处理GIR。
经这样配置,流式前端232、GIR生成器236和光线跟踪后端234每个适于由多个并行执行线程来执行。此外,GIR生成器236用于适配流式几何前端的输出(其通常被配置为与基于光栅的后端一起使用),以和物理呈现后端例如光线跟踪或光子映射后端一起使用。这样,本来用于基于光栅的呈现技术的相同API可以改变目的用于物理呈现,通常不需要对API或调用该API的应用进行修改。
动态ADS生成
ADS可以被用来使物理呈现算法例如光线跟踪算法能够快速和高效地确定在场景的哪些区域发出的光线与要呈现的场景中的任何物体相交。ADS例如可以被实现为空间索引,其将三维场景或世界划分为可能包含或可能不包含基元的较小体积(相对于整个三维场景较小)。图像处理系统然后可以使用这些较小体积的已知边界来确定光线是否与较小体积内包含的基元相交。如果光线确实和包含基元的体积相交,则可以使用光线的轨迹相对于该体积内包含的基元的已知位置和尺寸来运行光线相交测试。如果光线不和特定体积相交,则不需要对该体积中包含的基元运行光线-基元相交测试。此外,如果光线和不包含基元的包围体相交,则不需要对该包围体运行光线-基元相交测试。于是,通过减少必要的光线-基元相交测试的数量,空间索引的使用大幅提升了光线跟踪图像处理系统的性能。不同的空间索引加速数据结构的一些例子有八叉树(oct-tree)、k维树(kd-树)、以及二叉空间分割树(BSP树)。尽管存在若干种不同的空间索引结构,且它们可以和这里公开的物理呈现技术结合使用,示出的实施例依赖于被实现为基数b树的分支树,该基数b树被分割为深度k的较小的树。
作为示例,图8和9示出了相对简单的分支树实现,其使用轴对齐包围体来将整个场景或空间划分为较小的体积。即,分支树可以通过使用与已知轴并行的分割平面来划分场景所包围的三维空间。分割平面将较大的空间划分为较小的包围体。这些较小的包围体共同组成场景中的整个空间。可以由图像处理系统通过使用分支树构造算法来确定将较大的包围体分割(划分)为两个较小的包围体。
确定何时将包围体划分为较小的体积的一个标准可以是包围体中包含的基元的数量。即,只要包围体包含比预定阈值更多的基元,树构造算法可以通过绘制更多的分隔平面来继续划分体积。确定何时将包围体划分为较小的体积的另一标准可以是包围体内包含的空间量。此外,继续划分包围体的决定还可以基于有多少个基元会和创建该包围体的平面相交。
空间的划分可以通过例如由节点、分支或叶子构成的二叉树来表示。树中的每个内部节点可以表示相对较大的包围体,而节点可以包含到子节点的分支,所述子节点可以表示在由分隔平面划分相对较大的包围体后生成的两个相对较小的已划分体积。在轴对齐的分支树中,每个内部节点可以包含到其他节点的仅两个分支。内部节点可以包含到一个或两个叶子节点的分支(或指针)。叶子节点是不再被划分为更小体积且包含到基元的指针的节点。内部节点还可以包含到被再次划分的其他内部节点的分支。内部节点还可以包含确定分割平面沿着什么轴来绘制以及分割平面沿着轴的哪儿来绘制所需的信息。
图8例如示出了图像处理系统要呈现的示例二维空间,而图9示出了包含节点260-268的相应分支树258,用于图8中示出的基元。为了简单起见,二维场景被用来示出分支树的构造,但是分支树也可以被用来表示三维场景。在图8的二维示例中,例如,示出了分割线而不是分割平面,且示出了边界面积而不是本来在三维结构中使用的包围体。但是,本领域技术人员可以很快认识到,该概念可以被容易地应用到包含物体的三维场景。
图8示出了要在最终图像中呈现的包含基元252A、252B和252C的二维场景250。表示场景的整个体积的最大体积被包围体1(BV1)包围(其没有在图8中单独示出,因为它包围了整个场景)。在相应的分支树中,这可以由顶级节点260表示,其也被称为根或世界节点。在一个实施例中,当包围体包含例如多于两个基元时,图像处理系统可以继续将包围体划分为较小的包围体。如前所述,继续将包围体划分为较小的包围体的决定可以基于很多因素,但是,为了在本例子中容易说明,继续划分包围体的决定仅基于基元的数量。
于是,例如,从图8中可以看到,通过沿着x轴在X1点处绘制分割平面254,BV1可以被分为两个较小的包围体BV2和BV3。BV1的这种划分还在分支树中反映为在内部或父节点BV1260下的两个节点262和264,其分别对应于BV2和BV3。表示BV1的内部节点现在可以存储信息,例如但不限于,到BV1下的两个节点(例如BV2和BV3)的指针、分割平面沿着哪条轴(例如x轴)来绘制、以及分割平面沿着该轴的哪儿(例如,在x1点处)来绘制。
通过沿着y轴在Y1点处绘制分割平面256,包围体BV3然后可以被分为两个更小边界值BV4和BV5。由于BV3已被划分为两个子节点,它现在可以被称为内部节点。BV3的划分也在分支树中被反映为两个叶子节点266和266,其分别对应于BV4和BV5。BV4和BV5是叶子节点,因为它们表示的体积不再被分为更小的包围体。两个叶子节点BV4和BV5位于内部节点BV3的下面,该内部节点BV3表示在分支树中被划分的包围体。
表示BV3的内部节点可以存储信息,例如但不限于,到两个叶子节点(即BV4和BV5)的指针、分割平面沿着哪条轴(即y轴)来绘制、以及分割平面沿着该轴的哪儿(即在Y1点处)来绘制。
于是,如果被跟踪的光线被投射经过包围体BV5中的点(X,Y),光线跟踪算法可以通过下列方式来快速而高效地确定哪些基元需要被检查相交:在节点260开始遍历树,从该点的X坐标确定该点在包围体BV3中并遍历至节点264,从该点的Y坐标确定该点在包围体BV5中并遍历至节点268。节点268提供对基元252C的基元数据的访问,且由此,光线跟踪算法可以针对这些基元执行相交测试。
图10和11接下来示出了分支树生成算法,该算法适于在GIR生成器236中使用,以生成实现为分支树形式的GIR,该分支树可以以高度并行的方式来生成。这里所述的分支树生成算法生成动态构造的加速数据结构(ADS),其用于基于相对地构造和遍历算法,在高度并行的机器上流式传输数据,该算法使用极少的存储器和存储器带宽,且典型地不需要普通的呈现API例如DirectX和OpenGL当前提供的信息以外的信息。
由这里所述的实施例生成的分支树被实现为基数b树,该基数b树被分割为深度k的较小的树,其中,每棵较小的树可以被称为分支。如果分支中的叶子节点是较大的树的内部节点,它会包含指向继续该树的另一分支的指针。如果物体仅被允许放置于较小树的叶子节点上,则不需要包含深度k的树的上级,且该树因此可以被看作是基数bk树。在一个实施例中,分支树是被分割为深度2的较小树的八叉树,其允许数据仅被存储在偶数级别上,这本质上等同于基数64树。
分支树还可以被看作扩展网格(grid)。生成64体素的初始网格。如果足够小的几何体在这些体素的一个中存在,在其中生成另一64体素网格或分支。该模式继续,直到达到显著或最大的网格/分支深度。但是,从存储的角度来看,每个分支被简单地存储为64个节点,如下所示:
struct branch{
node nodes[64];
};
在示出的实施例中,分支的节点是4字节字,其包含指向几何体、几何体列表、空值的指针,或者到另一分支的索引偏移量。如果分支中的节点包含一个或多个几何体,它将包含指向该几何体或几何体列表的指针。几何体和几何体列表的地址需要大于构成树的分支的数量,因为节点数据类型可以根据该节点的无符号整数值大于或小于该阈值来确定。如果节点是空的,它包含空值。如果它是内部节点,它包含到在它之后继续该树的分支的偏移量。该偏移量是到在树的构造过程中建立的分支列表的索引。例如,节点可以具有结构,例如:
而几何体列表可以具有结构例如:
在示出的实施例中,分支树的构造被设计为动态和并行地执行。该算法依赖于两个全局变量:指向为该树分配的存储器的指针,以及存储有到该存储器中的索引的整数next_offset,新创建的分支可以被存储在该索引处。该索引可以被全局共享,或者保留的存储器可以被分为组,以允许使用多个next_offset指针。为了描述简单,假定单个next_offset;但是,在某些实施例中可能需要多个偏移量来减少存储器冲突。
该算法也被提供有树所允许的最大深度。因为浮点数具有24比特的有效位数,可能希望使基数64树的每个深度能在每个方向上使用两比特,从而可以使用最大深度max_d=12。深度十二基数64分支树具有和6412体素网格相当的精度。
为了初始化该树,将next_offset设置为65,且具有所有空节点(空值)的分支被写入到存储器分配的第一分支(顶级分支)中。不需要其他的步骤。
此后,通过使用例程例如图10中的例程270的实例,将来自流式几何前端的每个流式几何体基元置于场景中。由此,GIR生成器被配置为在被分配给GIR生成器的多个并行执行线程的每个中执行放置例程的实例,以并行地将多个基元插入到分支树中。
放置函数接收指向几何体的指针以及从浮点世界坐标转换为整数网格坐标的三维最小值和最大值作为输入。网格坐标假定在最大深度上的步幅大小为1。此外,通过使用几次比较而不是掩码,树构建过程可以典型地被执行而不需要从浮点到整数的转换。
例程270开始于框272,决定在哪些节点上放置几何体基元。该过程典型地涉及从最小和最大值构建键。键可以用比较或从浮点转换为整数值来构建。在示出的实施例中,使用与整数值的比较。6比特的键是当前分支中的节点索引,并由点的一组x、y和z整数值来构建。构建树的等式为:node_key[0:5]={x[2*(max_d-d):+1],y[2*(max_d-d):+1],z[2*(max_d-d):+1]};
其中,d是分支的当前深度,且max_d是树的最大深度,其中节点是整数体积1的立方体。
通过为几何体的最小和最大点寻找键的x、y和z分量,并且生成介于最小和最大值之间并包含最小和最大值的所有可能的键,该算法可以找到与几何体基元相关的所有节点。更多的精确方法可以在替代方案中使用。
于是,框274开始FOR循环,且对于每个节点,在框276中检索每个节点,在框278中确定该节点是否是内部节点,且如果否,在框280中跳转到下一分支。
但是,如果节点被确定为叶子结点而不是内部节点,框278将控制传递给框282,来确定是否将几何体基元置于树的当前深度上。两个因素可以被用来进行该确定。第一个是它在哪种类型的节点中。如果该节点是内部节点,则几何体在它下面存在,且它将不会被置于该级别,这在框278中确定。第二个因素是几何体基元的大小。在示出的实施例中,如果节点宽度大于从几何体基元的最小值到最大值的矢量的大小的四倍,几何体基元被放置。
如果决定放置几何体基元,在框284中将控制传递至标记并添加几何体基元,由此几何体基元被放置,且例程270的当前迭代完成。如果确定不将几何体基元置于当前深度,该节点在框286、288、290和292中被扩展。特别地,框288递归地调用例程270以将几何体基元置于新的分支中。框290确定在节点中是否存在其他几何体,且如果是,将控制传递给框292,以通过为节点中的每个标记的几何体基元调用例程270,来递归地放置节点中的其他几何体。在完成框292之后,或者如果如框290确定节点是空的,例程270完成。
于是,在节点是空节点的情况下,新的空分支在*next_offset指示的位置处创建。*next_offset的值然后被存储在扩展节点中并被递增。这就是树如何被扩展和构建的。如果节点包含现有的标记的几何体基元,该几何体被隐藏,以将当前节点转为内部结点。现有的几何体在放置新的几何体基元之后被隐藏,因为它较小且会比标记的几何体更深。这样,例程270确保所有几何体在它们被扩展时被推送到叶子节点。因此在每当基元需要被插入到完整分支时,例程270动态地扩展分支树。
图11示出了添加几何体例程300,其可以例如在例程270的框284(图10)中被调用。例程300首先使用框302和304确定节点处于哪个状态(空、单个几何体、几何体列表),并采取相应的动作。
如果节点的值为0,节点为空,且这样,框302将控制传递给框306,通过将节点中的值替换为指向被放置的几何体基元的指针,来链接到新的几何体,由此例程300将完成。如果节点具有非零值,框304通过载入所指向地址的值作为无符号整数,来确定节点是否存储了指向单个几何体基元还是几何体列表的指针。如果该整数值两端包含地处于一和所允许的最大基元数量(例如15)之间,指针被确定为geometry_list指针,因为该值为geometry_list的num_geometry分量。否则,该值被认为是单个几何体基元。
需要注意等于1一直到15之间的整数值的浮点值或二进制值是允许的。此外,通过避免在节点中只存在单个几何体基元时处理列表,可以节省大量的时间和存储器,但只有在场景中仅存在一种类型的几何体基元或者几何体基元被提供有类型头部的时候才是适用的。否则,将需要某类列表以用于所有基元。
示出的实施例中的几何体列表具有指示列表中有多少个几何体的整数num_geometry,以及指向几何体的指针列表。为这些数量的指针分配的空间是偶数以降低所需的重分配数量。因此,当新的几何体被加到列表时,如果num_geometry值是偶数,分配新的存储器空间。如果它不是偶数,简单地将指向几何体的指针附加到指针列表的尾部。num_geometry在两种情形下都被递增。
这样,如果框304确定节点包括单个几何体基元,控制传递到框308,以生成几何体列表并将新的几何体基元的链接添加到新的列表中。否则,框304将控制传递给框310,以确定列表是否已满。如果否,框312将几何体基元加到列表。如果列表已满,框314确定在节点中是否有太多基元。如果否,在框316中创建具有两个额外空间的新列表,且将新的几何体基元链接到该列表。但是,如果节点太满了,框318通过递归地调用例程270来隐藏新的和现有的几何体基元。
值得注意地,例程270和300能够在并行硬件架构中使用,因为这样的例程的多个实例化可以被用来并发地将不同基元置于同一分支树中。结果,假设足够数量的并行执行线程被分配给实现这样的例程的ADS生成器,ADS的生成可以以和基元从流式几何前端流式传输的相同速率来进行,且一旦所有基元数据已经针对场景从流式几何前端流式传输,被完整构造的ADS几乎立即可以被物理呈现后端使用。
现在转到图12,如上所述,根据本发明可以使用多个流式几何前端。图12例如示出了包含分组器332、几何体引擎334和后几何体引擎模块336的基于光栅的流式几何前端330。分组器332对数据分组以在流水线中向下流式传输,而几何体引擎334执行物体转换并生成几何体基元。模块336执行例如透视分割、裁剪、排序和拆分几何体等操作,且模块336的最终结果输出是几何体基元的流。可以理解,根据本发明可以使用多种流式几何前端架构,并且这样,本发明不限于图12中示出的特定结构。
图13接下来示出了根据本发明的物理呈现后端340的光线跟踪实现。后端340包括主光线管理模块342,其处理与呈现前端的接口连接、发起并同步所有初始光线、执行性能监视以及动态(或静态)负载平衡。一个或多个其他光线管理模块344用作从属光线管理器,其从主管理模块或其他从属管理器接收光线,并遍历ADS,直到确定光线是否与全叶子节点相交。如果否,应用默认的背景颜色。如果是,将光线发送到光线基元相交模块346,其确定光线与基元之间的相交。颜色更新模块346基于检测到的光线和基元之间的相交来更新场景中的像素。可以理解,根据本发明可以使用多种光线跟踪后端架构,并且这样,本发明不限于图13中示出的特定架构。
用来实现上述混合呈现功能的软件流水线的实现在图14A和14B的400中示出。图14A特别地主要示出了架构的前端方面,而图14B主要示出了架构的后端方面。软件流水线400由位于图像处理器单元(GPU)中的NOC来实现,该图像处理器单元通过总线例如PCI快速总线414耦合到主机处理器(CPU)。
如图14A所示,应用402使用驱动器404经推送缓冲器406向软件流水线提交工作请求。应用402和驱动器404在CPU上执行,而推送缓冲器406位于CPU和GPU都能访问的共享存储器中。工作请求被命令处理逻辑特别是主机接口处理器(HIP)408从推送缓冲器406中取出。此外,驱动器状态信息被分别保持在CPU和GPU中所分配的存储器410、412中。推送缓冲器406的推送缓冲器头部和尾部指针的状态被保持在存储器410中416和418处,而尾部指针的状态被保持在存储器420的中420处。
HIP408设置软件流水线,将执行线程分配给流水线中的阶段实例,将工作请求发出到流水线,并监视工作流以将执行线程动态地重新分配给流水线的不同阶段,以最大化吞吐量并最小化瓶颈。在这方面,HIP408,其自身典型地在来自NOC的IP块中实现,分配一个或多个IP块来处理流水线的每个阶段,以及管理流水线的操作所需的其他支持逻辑。在这方面,执行线程构成在IP块中实现的硬件线程,可以理解在支持多个硬件线程的IP块中,流水线中的多个阶段实例可以被分配给同一IP块中的不同线程。
支持逻辑的例子包括DMA引擎422、424,其分别被用于DMA来自顶点缓冲器426的顶点数据以及来自纹理数据缓冲器428的压缩纹理数据。包含索引数组432、顶点缓冲器434和压缩纹理数据436的暂存器430用作DMA引擎422、424的目的地。HIP408在DMA引擎422、424中设置一组收件箱437,以从HIP接收工作请求。为流水线中已激活的每个DMA引擎提供一个收件箱437。
中断机制441在软件流水线400中被用于实现流水线中的逻辑单元之间的节点间通信。节点例如HIP408和DMA引擎422、424从机制441接收中断,并能够通过发出到中断机制的存储器映射输入/输出(MMIO)请求,将中断发出到其他节点。
流水线400的前端由顶点处理器实现,该顶点处理器包含被配置为分组器的第一单元450和被配置为几何体着色器(shader)的第二单元452,以及纹理处理器454。
HIP408使用收件箱438、440发起顶点处理器450、452和纹理处理器454中的工作。为顶点处理器中的每个单元分配至少一个收件箱438,并为纹理处理器454中的每个单元分配至少一个收件箱440。此外,HIP能够将数据写入到呈现上下文表442、顶点排序表444、基元排序表446和纹理上下文表48。顶点处理器单元450响应进入收件箱438的请求,并从索引数组432和顶点缓冲器434获取工作数据。单元450通过收件箱456与顶点处理器单元452通信,且单元452将基元输出到收件箱458、460阵列。纹理处理器454从收件箱440接收请求,从暂存器430读取纹理数据436,并输出到纹理存储器462。
如图14B所示,为共同实现GIR生成器的多个GIR生成器元件464中的每个分配一组收件箱458、460,使得流水线的前端能提供基元数据,以在构建GIR472时使用。如上所述,多个并行执行线程,例如每元件464一个或多个,被用来以上述方式生成GIR。
一个或多个主光线管理元件466、一个或多个光线管理元件468、一个或多个光线基元相交元件470以及一个或多个颜色更新元件471分别实现光线跟踪后端。可以为每类元件466、468、470、471分配可变数量的执行线程,以最优化通过软件流水线的吞吐率。元件466、468和470使用GIR472来执行光线跟踪操作,而元件471从纹理存储器462获取纹理数据。后端的阶段之间的通信由分别分配给元件468、470和471的收件箱474、476和478来提供。颜色更新元件471将图像数据输出到呈现目标480例如图像缓冲器,其然后通过数字视频输出电路482来输出。
可以理解,将流式几何前端和光线跟踪后端实现在软件流水线元件和基础NOC架构中将完全处于得益于本公开的本领域普通技术人员的能力范围内。还可以理解,不同数量的元件可以被用来实现软件流水线的每个阶段,且基于其使用的特定算法,不同阶段可以被用来实现软件流水线的前端和/或后端。此外,通过主动监视流水线的每个阶段的工作量,在某些实施例中可能希望动态改变分配给流水线的不同阶段的IP块和执行线程,由此提供用于不同类型的任务的最优吞吐量。
用于物理碰撞检测的多线程呈现软件流水线
如上所述,在某些实施例中,多线程呈现软件流水线可以被用来通过在多个从属碰撞检测线程之间流式传输场景中的物体的细节层次(LOD)分量,执行物理碰撞检测。图15例如示出了将被图像处理系统呈现的示例二维场景490。可以理解,场景典型地是物质世界的代表,且由此典型地在三维中定义。但是,为了简单起见,图15中示出了二维。
场景490包括多个物体492,并可以被分为多个空间区域494,其也可以被称为包围体(BV)。如图中所示,空间区域494可以有不同的大小,并且被分层次地定义,从而某些空间区域表示其他空间区域的区域。此外,空间区域可以以类似于用于光线跟踪的包围体的方式被定义,例如,从而每个空间区域可以被定义以平衡工作量,将包含较多数量物体492的场景的区域为较小的空间区域,以在被分配来为这样的区域执行碰撞检测的硬件线程之间更好地平衡工作量。
碰撞检测典型地涉及在场景中移动的物体与其他物体(移动及固定的物体)之间的碰撞。于是,如图15所示,碰撞检测可以被用来检测两个移动物体496、498互相之间、以及其和场景中的其他物体492之间的碰撞。
在根据本发明的某些实施例中,物理碰撞检测使用多个硬件执行线程来实现,所述硬件执行线程在互相之间流式传输细节层次分量,以检测场景中物体之间的碰撞。如图16所示,例如,物理碰撞检测可以在包含耦合到存储器子系统504的NOC 502的电路布置500中实现,两者都可以被集成到相同的集成电路上,或者在单独的集成电路上实现。NOC 502可以包括经网络508互相耦合的IP块506,所述网络可以包括以上关于图2的NOC 102所述的连网逻辑。
如上所述,IP块506的各个子集可以被分配给不同的功能,并且关于物理碰撞检测,一个或多个IP块可以主持(host)包含主线程或者分量载入器线程510的物理引擎,该分量载入器线程被用来从存储器504获取物体的细节层次数据并将该数据流式传输到一个或多个碰撞检测线程512,其作为从属硬件线程且在一个或多个其他IP块506上运行。从属硬件线程还可以将细节层次数据流式传输到其他从属硬件线程,例如被布置在软件流水线更下面的从属硬件线程。
由于从属硬件线程从主线程接收细节层次数据,从属硬件线程典型地不需要从存储器子系统504载入数据,由此减少了存储器带宽需求,降低了通信开销,并加速了性能。这样,可能希望将主线程510物理地定位在与存储器504接近(即具有最小的网络延迟)的IP块506,并将从线程512定位在与主线程510接近及互相接近的IP块506上,以当将数据在线程之间传递时再次最小化网络延迟。
物理碰撞检测还可以在与以上关于图5所述的类似的软件流水线中实现,并且如图16中的箭头所示,细节层次数据可以从主线程510流式传输到从线程512,且碰撞检测的结果从最后的从线程512流式传输回到主线程510,所有这些传输都经过网络508。HIP(在图16中未示出)可以被用来管理传递到主线程和从线程的工作,这类似于HIP管理与呈现相关的工作的方式。每个主线程和从线程可以实现流水线的阶段,尽管可以理解,在某些实施例中,多个硬件线程可以实现一个阶段,而在其他实施例中,一个硬件线程可以实现多个阶段。
此外,线程的布置以及将其分配给空间区域来执行碰撞检测,在很多方面都和如上所述的关于光线跟踪来布置线程的方式类似。这样,可能还希望利用如上所述的加速数据结构来存储场景中的物体,以用于根据本发明执行碰撞检测的目的。
图17接下来示出了主线程所执行的示例性例程520。例程520针对碰撞检测要被执行的每个时间间隔来执行,依赖于关于碰撞检测所需的准确度,该时间间隔可以是或者不是与图像帧之间的相同时间间隔。例程520在框522中开始,发起FOR循环来处理场景中的每个移动物体。对于每个这样的物体,块524首选确定是否已经为该物体创建任何细节层次分量。如果否,在框526中创建合适的细节层次分量。如上所述,细节层次分量的创建会涉及基于例如系统资源或所需准确度等因素来创建可变复杂度的分量。细节层次分量越简单,且需要越少的处理器密集的细节层次计算,则会典型地获得越小的准确度。因此,当可用的系统资源较大且希望准确度时,在一些实施例中可以创建更复杂的细节层次分量。
一旦被创建,在框528中,细节层次分量和物体的“扫动”(sweep)一起被流式传输到一个或多个从线程。此外,如果在框524中确定物体的细节层次分量已经存在,框526被跳过,且框524将控制直接传递给框526。在示出的实施例中,物体的扫动表示物体经过当前间隔从起点位置移动到结束位置的移动。于是,该扫动可以由表示物体在给定间隔上移动的方向和距离的矢量及开始和结束体素来表示。
一旦物体的数据在框528中被流式传输,控制返回到框522来处理另外的物体。一旦所有物体都已被处理,框522将控制传递给框530,以等待由从线程生成的碰撞数据,并在接收该数据时相应地处理。例如,从线程可以返回数据,其指示(1)哪些物体已经碰撞,以及(2)这些碰撞在间隔中的什么时候发生。例程520然后完成。
图18接下来示出了在碰撞检测期间由从线程执行的示例性例程540。例程540在框542中开始,从流水线中的前一阶段(主或从)接收流式数据。框544然后确定物体扫动是否与线程所分配给的区域相交。如果否,控制传递到框546,以将细节层次分量、物体扫动以及先前的从线程生成的任何碰撞数据流式传输到流水线中的一个或多个后续从线程,或者,如果这是流水线中的最后的从线程,回到主线程以进一步地处理。例程540然后完成。
如果物体扫动确实与分配给线程的区域相交,框544将控制传递给框548,来确定相交发生的时间(例如相对于时间间隔)是否比前一从线程检测到的已标记碰撞更早。如果否,在该区域中发生的任何相交仅会在另一碰撞之后发生,因此没有理由再在该线程中进行更多碰撞检测。控制因此传递到框546。
否则,控制传递到框550,来进行深度碰撞检测,以确定在该区域中是否存在任何物体(移动或静止)与当前物体相交。控制然后传递到框552,来确定是否检测到了碰撞。如果否,控制传递到框546。但如果检测到了碰撞,控制传递到框556来更新碰撞数据,以指示当前物体所碰撞的时间和物体。控制然后传递到框546,以将更新的碰撞数据与细节层次分量及物体扫动一起流式传输到一个或多个从线程,或者带着碰撞检测的结果回到主线程。
这里描述的如图14A-14B所示出的在NOC架构中的物理碰撞检测软件流水线的实现,将在得益于本公开的本领域普通技术人员的能力范围内。此外,可以理解,额外的例程也可以在根据本发明的实施例中使用,所述例程例如将线程分配给空间区域,载入用于场景中的静态物体的细节层次分量,载入平衡线程以用于最优性能等。
具有预测性负载平衡的物理引擎
如上所述,在本发明的某些实施例中,可能还希望利用预测性负载平衡在多线程物理引擎的硬件线程之间更好地分配工作量。
预测性负载平衡至少部分基于场景中物体的移动,且更具体而言,基于对场景中物体之间的预计的未来碰撞(即,在当前时间间隔或步骤中还未发生但很可能在即将到来的时间间隔或步骤中发生的碰撞)的检测。此外,尽管在某些实施例中可以在未来碰撞被检测到的任何时刻执行预测性负载平衡,在其他实施例中可能希望只有在预期碰撞对硬件线程工作量产生实质影响的情形下才会执行预测性负载平衡。
图19例如示出了示例性场景600,其中,抛射体602经过场景向包含多块砖的墙壁604移动。抛射体602在当前时刻的当前位置由直线t0示出。抛射体602的移动方向由矢量608示出,且抛射体在随后的三个时刻的预期位置由直线t1、t2和t3示出。还示出了抛射体602和墙壁604在t3时刻的预计碰撞。
为了该示例的目的,假设墙壁604且由此组成它的砖块在场景中固定,期望被分配来执行碰撞检测或冲量传播的任何硬件线程的工作量不会特别大,这并非是不合理的,且因此,分配给围绕墙壁604的区域的硬件线程的数量可能希望较低。
另一方面,抛射体602与墙壁604碰撞的现实模拟会涉及到很大的处理开销,因此多块砖606之间的冲量和碰撞很可能发生。使工作量分配保持静态因此很可能会使分配给包围墙壁的区域的线程负载过重并导致性能降低。此外,基于碰撞检测来重新分配工作量可能改善性能;但是,典型地会存在与重新分配工作量相关的开销,因为用来执行先前被分配给某些线程的工作所需的数据典型地必须被传送到新线程,以便这些新线程能执行工作。
根据本发明的实施例因此试图预测未来碰撞的发生并在实际碰撞之前发起工作量在硬件线程之间的重新分配,从而某些(如果不是所有)与重新分配相关的开销在检测到当前碰撞之前发生,该当前碰撞对应于被检测的未来碰撞,且从而一旦碰撞确实发生,能够有最优的线程分配。
可以理解,通过预测性地发起硬件线程的重新分配,该重新分配希望但不是必须在所预测的碰撞最终发生时完成。但即使在重新分配没有完成的情况下,但是,该重新分配典型地会比响应于检测到的碰撞来发起重新分配要更早完成。还可以理解,在某些情况中,预测性负载平衡操作会导致硬件线程之间的工作的暂时的次优分配,直到所预测的碰撞最终被检测到,这与很多负载平衡算法试图基于当前的工作量需求来创建最优资源分配形成对比。
现在转到图20,该图示出了用于物理引擎的高级例程620,该物理引擎包含根据本发明的预测性负载平衡。物理引擎在该上下文中可以被认为是被配置为执行物理相关计算的任何软件,且因而本发明适用于任何物理相关计算软件,而不管该软件是否被认为是单独的“引擎”。在该实施例中,物理引擎是多线程物理引擎,其中,例如布置在一个或多个处理核心以及一个或多个集成电路芯片中的多个硬件线程共享物理引擎的工作量。
典型的高级物理引擎执行循环,其顺序实现下列操作:在给定时间间隔或步骤内处理物体的移动(框622)、检测碰撞(框624)、以及基于任何检测到的碰撞来传播冲量(框626)。但是,在示出的实施例中,在框628中,典型地在碰撞检测之后以及冲量传播之前,执行预测性负载平衡的额外步骤被执行。可以理解,预测性负载平衡可以在例程620中的不同地方执行,或者在本发明的其他实施例中,可以被认为包含于框622-626中的一个中。
可以分配硬件线程池(未示出)来处理物理引擎中的各种功能。例如,单独的线程池可以被用来处理物理引擎的移动处理、碰撞检测和冲量传播。一个或多个主线程还可以被用来协调这些不同的线程池的活动。在另外的实施例中,单独的线程可以处理框622、624和626中执行的那些功能中的多个功能。这些线程典型地以试图将工作量在线程之间均匀分布(例如,通过将线程分配给场景的特定区域或将线程分配给特定物体集合)的方式来分配。
在示出的实施例中,例程620的步骤622通过为场景中的每个物体计算多个时间间隔上的物体扫动来处理移动。步骤624,如在传统的物理引擎中一样,检测第一时间间隔或步骤中的“当前”碰撞,其表示在当前时间间隔期间在场景中已经发生的移动。此外,步骤624还试图检测“未来”的碰撞,其表示在多个时间间隔上即超出第一时间间隔投射的物体扫动的相交。
基于这些未来的碰撞,并在图21的预测性负载平衡例程630中更详细地示出,硬件线程可以被预测性的重新分配。特别地,例程630在框632中开始,基于碰撞检测步骤624中执行的分析来确定是否已预测到了任何未来的碰撞。如果否,不需要负载平衡,且例程630完成。
另一方面,如果检测/预测到了任何未来的碰撞,控制传递给框634,来分析每个未来碰撞的特性,以确定是否需要负载平衡。基于该分析,框636确定是否需重新平衡负载,且如果是,将控制传递给框638来重新平衡负载(即,重新分配硬件线程),由此例程630完成。否则,框638被跳过,且例程630结束。
对未来检测到的碰撞是否需要重新平衡的分析在不同实施例中会不同。例如,可以考虑的两个因素包括碰撞中可能涉及的物体数量以及在碰撞中可能涉及的物体的属性。对于涉及的物体数量,如以上关于图19所述,抛射体与砖墙的碰撞,随着墙壁变形并最终解体,会涉及大量砖块的互相作用。类似地,当物体复杂并且涉及到在碰撞中会涉及的大量图形基元(其自身可以被认为是物体)时,可能需要更多的相关处理来处理这些物体。
至于物体属性,所涉及的物体的模拟物理性质会需要硬件线程的更多或更少的处理被分配给这样的物体。例如,无损害地从墙壁弹开的橡皮球,不会使墙壁的砖块离开原位,将很可能不需要大量额外处理分配。类似地,两个刚性物体互相碰撞而没有足够的力使其裂开,将不需要额外的处理分配。相反,易碎和/或复杂物体之间的有力碰撞很可能带来(至少在碰撞持续期间)大量的额外处理需求,以管理与这样的物体相关的碰撞和/或冲量传播。因此,在确定特定的被检测的未来碰撞是否需要重新分配时,物体属性例如硬度、可变形性、弹性、速度、质量、弹性常数、物体复杂度等可被考虑。
在预测性负载平衡期间的硬件线程的重新分配可以以根据本发明的多种方式来进行。例如,在碰撞检测和冲量传播由不同线程池执行的实施例中,预测性负载平衡可以针对执行碰撞检测的线程、针对执行冲量传播的线程或针对这两者来进行。
此外,尽管预测性负载平衡可以在基于其他硬件架构的其他多线程物理引擎中实现,预测性负载平衡的一种示例性实现可以是用于下列目的:对NOC例如图16中且如上所述的NOC500中的从属碰撞检测线程进行负载平衡,并使用流式多线程软件流水线架构,该架构将来自主分量载入器硬件线程的细节层次分量流式传输到多个从属碰撞检测线程。图22和23例如示出了分别由主线程和从线程执行的、且与图17和18中示出的例程520、540类似碰撞检测例程640、660。
图22的例程640针对碰撞检测要执行的每个时间间隔来执行,并在框642中开始,发起FOR循环来处理场景中的每个移动物体。对于每个这样的物体,框644首先确定是否已经为该物体创建任何细节层次分量。如果否,在框646中创建合适的细节层次分量。一旦被创建,在框648中,该细节层次分量和物体的“扫动”一起被流式传输到一个或多个从线程。此外,如果在框644中确定该物体已经存在细节层次分量,框646被跳过,且框644将控制直接传递给框648。但是,和其中物体的扫动表示物体经过当前间隔从起始位置到结束位置的移动的例程520不同,在例程640的框648中计算并流式传输的物体扫动表示物体经过多个时间间隔从起始位置到结束位置的移动,从而当前和未来碰撞两者都可以被检测。
一旦物体的数据在框648中被流式传输,控制回到框642来处理另外的物体。一旦所有物体都已被处理,框642将控制传递给框650,来等待由从线程产生的碰撞数据,并在接收到该数据时相应地处理。和图17的例程520一样,从线程可以返回数据,其指示:(1)哪些物体已碰撞;以及(2)那些碰撞在间隔中的什么时候发生。但是,在框650中,从线程还可以返回在从线程之间重新平衡负载的请求或建议。
这样,框650将控制传递给652来确定是否有任何从线程已建议进行重新平衡。如果否,不进行重新平衡,且例程640完成。但如果建议进行重新平衡,在框654中进行重新平衡来重新分配从线程,例如,以提供额外的从线程来处理场景的特定区域中所预测的未来碰撞。
图23接下来示出了在碰撞检测期间由从线程执行的例程660。例程660从框662开始,从流水线的前一阶段(主或从)接收流式数据。框664然后确定物体扫动是否与线程所分配给的区域相交。如果否,控制传递到框666,将细节层次分量、物体扫动以及由前一从线程生成的任何碰撞数据流式传输到流水线中的一个或多个后续从线程,或者,如果这是流水线中最后的从线程,返回到主线程以进一步处理。例程660然后完成。
如果物体扫动确实和分配给该线程的区域相交,框664将控制传递给框668,来确定相交发生的时间(例如相对于时间间隔)是否比前一从线程检测到的已标记碰撞更早。如果否,任何发生在该区域中的相交将仅发生在另一碰撞之后,于是没有理由在该线程中执行进一步的碰撞检测。控制于是传递到框666。
否则,控制传递到框670来执行深度碰撞检测,以确定该区域中是否有任何物体(移动的或静止的)与当前物体相交。控制然后传递到框672来确定是否检测到碰撞。如果检测到了碰撞,控制传递到框674来更新碰撞数据,以指示与当前物体碰撞的时间和物体。控制然后传递到框666,来将更新的碰撞数据与细节层次分量和物体扫动一起流式传输到一个或多个从线程,或者,带着碰撞检测结果返回到主线程。
但是,如果框672没有检测到碰撞,控制传递到框676,来基于未来一个或多个时间间隔中的物体移动(由物体扫动表示)来确定是否检测到了未来的碰撞。如果否,控制返回到框666。但如果检测到了未来碰撞,控制传递到框678来分析未来碰撞的特性。尽管若干不同的碰撞特性可以被分析,如上所述,例程660示出了两个相关的因素:未来碰撞是否涉及大量物体,例如物体数量是否超过特定的阈值(框680),以及碰撞物体的属性是否很可能需要额外的处理量(框682)。如果两个因素都没有被发现,控制传递到框666。但如果任一个确定结果是肯定的,控制传递到框684来更新被流式传输到下一从线程或主线程的碰撞数据,以建议负载重新平衡。控制然后传递到框666,由此例程666完成。
还需要注意,在本实施例中,从线程建议重新平衡,而实际的重新平衡由主线程来管理。但是,在其他实施例中,确定何时需要重新平衡以及执行实际的重新平衡,可以仅在主线程中、仅在从线程中或由完全不同的线程来实现。
因此,通过响应于所预测的物体之间的未来碰撞发起负载均衡操作,可以在可能明显改变物理引擎中的工作量分布的事件发生之前,优化物理引擎中的线程分配,且由此,当这样的事件随后发生,即当检测到对应于未来碰撞的当前碰撞时,物理引擎更可能被最优地配置。
可以理解,这里描述的NOC架构中的预测性负载平衡的实现将会在得益于本公开的普通技术人员的能力范围内。此外,可以理解,基于所预测的工作量将线程分配和重新分配给空间区域的合适算法也将会在得益于本公开的普通技术人员的能力范围内。
使用线程间冲量消息的冲量传播
根据本发明的实施例使用在线程之间传递的线程间消息来传播场景中物体之间的冲量,所述线程拥有在场景中互相接触的物体。如图24所示,例如,互相接触的物体可以由质点动态格690来表示,在该质点动态格中互相接触的物体692通过弹簧692连接。弹簧692定义了由物体692构成的较大物体的物理属性,例如,可变形性、弹性、硬度等。接触的物体例如可以通过弹簧常数来互相关联,所述弹簧常数定义了接触物体之间的弹性。此外,撕裂常数可以被用来定义使两个接触的物体分离所施加的最小的力。质点动态格690可以用通过不同布置和几何形状的弹簧连接、以对不同类型的物体(例如实心体如砖块或砖墙、弹性或可变形物体如充气球、织物、流体、液体、气体、火焰等)建模的物体来任意地定义。尽管质点动态格被用于以下描述的实施例,但可以理解,在根据本发明的其他实施例中,很多种可替代的数据结构可以被用来表示接触的物体,因此本发明不限于使用这样的格。
典型地,通过冲量传播,力(例如,作为与先前没有接触的另一物体的碰撞的结果)所施加的物体以依赖于物体的物理属性的速度(例如,力传播经过砖块比经过橡胶更快),来局部地传播冲量经过该物体,并且当冲量传播经过物体到达与另一物体的边界时,残留力的方向和量然后被传播到该另一物体,该另一物体然后执行相同的计算,来局部地传播冲量且此后将冲量传播到任何其他接触的物体(如果合适的话),直到力完全衰减。
冲量的传播典型地也会导致物体之间的相对间距的改变(例如,拉升或压缩物体,经过织物或在流体表面传播波纹)。此外,如果冲量足够大,冲量的传播还会导致物体的分离(例如,撕裂织物或解体砖墙)。另外,冲量的传播可以与反作用力返回到发起的物体相结合。本领域普通技术人员可以充分理解在冲量传播中使用的物理原理和等式以及表示物体物理属性的质点动态格和其他方式。
在本公开的上下文中,“物体”可以表示单独的物理体(例如子弹、砖块等),或者当希望更准确地对物理环境建模时更典型地,可以表示物理体的一小部分,从而物理体(例如砖块、一块布等)由被认为互相接触的多个物体来定义。特别是在后一种情形下,其中场景中的物理体可以由数百、数千或数百万个物体来表示,冲量的传播会极其地计算密集。
另一方面,本发明的实施例使用多线程物理引擎中的多个线程,来更好地分配冲量传播的工作量,并改善整体的物理引擎吞吐量。在这样的实施例中,物体被认为由单独的线程拥有,且线程间消息在线程间传递,以在物体之间传播冲量。例如,如图25所示,冲量传播可以在电路布置700中实现,该电路布置包含耦合到存储器子系统704的NOC 702,两者都可以被集成到同一集成电路上,或者可以在分离的集成电路上实现。NOC 702可以包括通过网络708互相耦合的IP块706,该网络可以包括如上关于图2的NOC 102所讨论的连网逻辑。
如上所述,IP块706的各个子集可以被分配给不同的功能,并且关于冲量传播,一个或多个IP块可以主持包含多个冲量传播线程710的物理引擎。此外,尽管在图25中没有示出,物理引擎可以包含其他线程,例如如上关于物理引擎的上述碰撞检测方面所描述的分量载入器线程、碰撞检测线程、主线程、从线程等。
冲量可以通过在线程间传递冲量消息来传播,例如,以与在光线跟踪中执行的光线传播类似的方式来传播。此外,质点动态格以及其他类型的物理模型可以以例如ADS的数据结构来表示,从而上述细节层次分量流式传输技术可以和根据本发明的冲量传播结合使用。此外,冲量传播适于在例如如上关于图14A-14B所述的软件流水线中实现,由此冲量传播线程可以提供有收件箱,且冲量消息可以通过收件箱和NOC 702所支持的基础消息传递基础结构在线程之间流式传输。
还可以理解,在某些实施例中,可能希望基于场景中物体的相对布置来将物体的所有权分配给线程,例如,从而直接互相接触的物体被分配给具有最小通信成本的线程(例如,作为共同位于同一IP块中或者位于相邻的IP块中的结果)。在某些实施例中,线程也可以拥有多个物体。
此外,可以理解,拥有物体的线程可以被认为是软件线程,从而线程调度可以被用来将软件线程高效地分配给在一个或多个IP块之间分布的各种硬件执行线程。通过这种方式,软件线程可以基于场景状态被动态地重新分配给硬件执行线程,例如,从而互相接触的物体被分配给相同或相邻的IP块,以最小化冲量消息的网络延迟。静态或动态负载平衡可以被用来确保冲量传播和物理引擎的其他任务一起被高效地执行。此外,在某些实施例中,可能希望在碰撞检测之外或代替碰撞检测来考虑冲量传播以用于预测性负载平衡,例如,从而在抛射体将要接触砖墙的情况下,足够的硬件资源将准备好来处理经过墙壁的所有砖块传播的冲量。
还可以理解,执行冲量传播的软件线程也可以具有其他要执行的线程,例如,相同的线程可以执行碰撞检测和冲量传播。在其他情况中,在特定时刻没有要传播的冲量时,线程可以空闲。
图26-28示出了以根据本发明的方式来实现冲量传播的一种方式。图26例如示出了可以被软件流水线例如主线程执行的初始化例程720,以初始化多个冲量传播线程,来处理用于场景的冲量传播。例程720在框722中开始,将软件线程分配给场景中的每个物体,从而每个物体被一软件线程所拥有,且框724发起FOR循环来处理每个这样的物体。首先,在框726中,物体的属性被关联到拥有物体的软件线程,以为软件线程提供物体的物理属性,以用于冲量传播,例如,通过存储表示物体的物理属性的一个或多个属性,包括将物体与相邻物体关联的弹簧常数、撕裂常数等。其次,用于拥有物体的软件线程的数据结构例如相邻物体表由到所拥有的物体的所有相邻物体(即与所拥有的物体在场景中接触的所有其他物体)的链接来填充。一旦所有物体都已经被分配给软件线程且已经为每个物体标识相邻物体,例程720完成。
相邻物体信息可以被保留在根据本发明的若干数据结构中。例如,图27示出了包含多个条目的相邻物体表730,每个条目标识了物体732及拥有它的线程734。通过使用表730,线程能够确定特定的物体与哪些物体接触,以及拥有这些物体的线程,从而该线程可以将冲量消息传递到拥有相邻物体的线程。标识物体和线程的各种方式可以被使用,例如,数值标识符、指针、存储器地址、网络地址等。各种其他数据结构,例如链表、哈希表等可以被使用,并且在某些实施例中,可以为每个相邻物体存储额外的数据,包括,例如,表示关联的物体之间物理相互作用的各种物理常数(例如,弹簧常数、撕裂常数等)。因此,本发明不限于图27中示出的相邻物体表的特定配置。
图28接下来示出了冲量传播例程740,其可以被拥有物体的软件线程执行来传播冲量。响应于接收到冲量,例程740被发起,并在框742中开始,确定与接收到的冲量关联的传播的力的大小和矢量,其典型地在线程接收到的冲量消息中提供。
框744然后基于物体的物理属性将力传播经过所拥有的物体。可以理解,在某些实施例中,冲量的传播会耗费几个时间步骤。
接下来,框746确定在传播之后是否还有力剩余,即,力是否已经完全衰减。如果有力剩余,控制传递到框748,来发起FOR循环以处理物体的关联的相邻物体表中所标识的每个相邻物体。对于每个这样的相邻物体,控制传递到框750来确定传播到该相邻物体的力的大小和矢量,然后传递到框752来将冲量消息发送到拥有该相邻物体的线程。
一旦冲量消息已经被发送到所有合适的相邻物体,框748将控制传递到框754,来从相邻物体收集冲量应答消息,且然后基于应答消息,框756确定任何反作用力的大小和矢量。控制然后传递到框758,来将冲量应答消息发送到冲量消息最初从其接收的线程,提供反作用力的大小和矢量。例程740然后完成。此外,回到框746,如果在局部传播后确定没有力剩余,框746将控制直接传递到框758,来生成并发送标识没有反作用力的冲量应答消息。
在示出的实施例中,冲量应答消息被发送,不管有没有返回反作用力。但是,在其他实施例中,当没有需要返回的反作用力时,冲量应答消息被抑制,没有冲量应答消息指示缺少反作用力。
典型地,碰撞检测算法基于物体之间的碰撞结果来为每个物体更新相邻物体表。结果,在某些实施例中,需要例程740在每当作为冲量传播的结果检测到了物体的分离的时候,例如,每当冲量超过物体的撕裂常数的时候,通知碰撞检测线程。在其他实施例中,相邻物体表的维护可以由冲量传播线程或由另一线程完全地处理。
因此可以理解,通过在拥有场景中的不同物体的多个线程之间分布冲量传播的功能,并通过使用线程间消息来传播物体之间的冲量,可以为特定的场景和其中物体的布置以最优的方式高效地分配硬件资源,由此提高整体的物理引擎吞吐量。
可以对公开的实施例进行各种修改,而不偏离本发明的精神和范围。例如,与冲量传播相关的预测性负载平衡还可以被用来重新分配其他硬件资源,例如存储器、I/O资源等。其他修改对于本领域普通技术人员来说是明显的。因此,本发明在于以下的所附权利要求书。
Claims (25)
1.一种电路装置,包括:
片上网络硬件逻辑装置,包含定义多个硬件线程的多个处理核心,以及将多个处理核心互相耦合的片上网络;以及
由多个硬件线程中的至少部分执行的物理引擎,该物理引擎包含多线程软件流水线,该多线程软件流水线包含多个阶段,其被配置为检测场景中的多个物体中的物体间的碰撞,以及多个冲量传播线程,其被配置为传播所述多个物体中的互相接触的一组相邻物体之间的冲量;
其中,所述物理引擎被配置为,对于所述一组相邻物体中的每个,将该物体的所有权分配给所述多个冲量传播线程中的一个,并为该物体所分配给的冲量传播线程生成相邻物体表,其标识了所述一组相邻物体中与该物体接触的每个物体;
其中,所述物理引擎被配置为,响应于检测到的与所述一组相邻物体中的第一物体的碰撞,生成包含大小和方向的第一线程间冲量消息;并且
其中,所述多个冲量传播线程中的每个冲量传播线程被配置为,响应于接收到与冲量关联的线程间冲量消息,局部传播这样的冲量经过所有权被分配给该冲量传播线程的物体,为该冲量传播线程的相邻物体表中所标识的每个相邻物体来确定传播的力的大小和方向,通过将线程间冲量消息发送到用于该冲量传播线程的相邻物体表中所标识的每个相邻物体的冲量传播线程,来将冲量传播到该每个相邻物体的冲量传播线程,该线程间冲量消息包含为该冲量传播线程确定的传播的力的大小和方向,从该冲量传播线程的相邻物体表中所标识的每个相邻物体接收线程间冲量应答消息,至少部分基于线程间冲量应答消息来确定反作用力的大小和方向,以及发送具有反作用力的大小和方向的线程间冲量应答消息,作为对接收到的线程间冲量消息的应答。
2.一种使用多线程物理引擎在场景的多个物体之间传播冲量的方法,该方法包括:
对于多个物体中的每个,将该物体的所有权分配给多线程物理引擎中的多个线程中的一个;以及
响应于多个物体中的第一物体所接收到的冲量:
使用多个线程中的第一线程来局部地传播冲量经过第一物体,该第一物体的所有权已被分配给该第一线程;以及
通过将线程间消息从第一线程发送到多个线程中的第二线程,将冲量传播到多个物体中与所述第一物体接触的至少一个额外的物体,该额外物体的所有权已被分配给该第二线程。
3.如权利要求2所述的方法,其中,所述第一物体与多个相邻物体接触,且其中,传播冲量包括,对于多个相邻物体中的每个,将线程间消息从第一线程发送到多个线程中该相邻物体的所有权所分配给的线程。
4.如权利要求2所述的方法,其中,每个物体包含与该物体的物理属性关联的至少一个属性,且其中,局部地传播冲量经过第一物体包括访问该第一物体的属性来模拟冲量传播经过该第一物体。
5.如权利要求2所述的方法,其中,将冲量传播到额外的物体包括访问与所述第一物体和额外物体之间的物理关系关联的物理常数,来确定力的大小和方向,其中,所述线程间消息包括所确定的力的大小和方向。
6.如权利要求5所述的方法,其中,所述物理常数包括弹簧常数和撕裂常数中的至少一个。
7.如权利要求2所述的方法,其中,响应于所述第一线程接收到的第二线程间消息,发起局部地传播冲量,该第二线程间消息包括与冲量关联的大小和方向,且其中,局部地传播冲量包括确定是否仍然有剩余的力要被传播到额外的物体,从而只有当仍然有剩余的力时,该冲量才被传播到额外的物体。
8.如权利要求7所述的方法,还包括确定反作用力,并发送具有所确定的反作用力的线程间消息,作为对所述第二线程间消息的应答。
9.如权利要求8所述的方法,还包括:在所述第一线程中,接收来自所述第二线程的第三线程间消息作为对第一线程间消息的应答,该第三线程间消息包含第二反作用力,其中,对第一反作用力的确定至少部分基于该第二反作用力。
10.如权利要求2所述的方法,还包括为所述第一物体确定场景中与该第一物体接触的一组相邻物体,并生成标识这组相邻物体的相邻物体数据结构,其中,所述第一线程被配置为访问该相邻物体数据结构,来确定冲量应该被传播到多个物体中的哪些物体。
11.如权利要求2所述的方法,其中,所述多个线程包括多个冲量传播线程,且其中,多线程物理引擎包括至少一个碰撞检测线程,该方法还包括响应于检测到场景中物体之间的未来碰撞,发起多个冲量传播线程之间的工作量重新分配。
12.如权利要求2所述的方法,其中,所述多线程物理引擎包括使用多个硬件线程的多线程软件流水线,该多线程软件流水线包括多个阶段,其被配置为检测场景中物体之间的碰撞,该多个阶段包含至少一个分量载入器阶段、被分配给多个硬件线程的多个碰撞检测阶段、以及多个冲量传播线程。
13.如权利要求2所述的方法,其中所述多线程物理引擎在包含多个处理核心的片上网络硬件逻辑中实现,所述多个处理核心定义了多个硬件线程以及使多个处理核心互相耦合的片上网络,且其中,所述线程间消息使用片上网络在硬件线程之间通信。
14.一种电路装置,包括:
硬件多线程物理引擎;以及
实现多线程物理引擎的至少一部分的程序代码装置,该程序代码装置被配置为在场景的多个物体之间传播冲量,该程序代码装置被配置为,对于多个物体中的每个物体,将该物体的所有权分配给多线程物理引擎中的多个线程中的一个,该程序代码装置进一步被配置为,响应于多个物体中的第一物体所接收到的冲量,使用多个线程中的第一线程来传播冲量经过该第一物体,该第一物体的所有权已被分配给该第一线程,并通过将线程间消息从第一线程发送到多个线程中的第二线程,将冲量传播到多个物体中与该第一物体接触的至少一个额外物体,该额外物体的所有权已被分配给该第二线程。
15.如权利要求14所述的电路装置,其中,所述第一物体与多个相邻物体接触,且其中,所述程序代码装置被配置为针对多个相邻物体中的每个,通过将线程间消息从第一线程发送到多个线程中该相邻物体的所有权所分配给的线程,来传播冲量。
16.如权利要求14所述的电路装置,其中,所述程序代码装置被配置为通过访问与第一物体和额外物体之间的物理关系关联的物理常数确定力的大小和方向,来将冲量传播到额外的物体,其中,所述线程间消息包括所确定的力的大小和方向,其中,所述物理常数包括弹簧常数和撕裂常数中的至少一个。
17.如权利要求14所述的电路装置,其中,所述程序代码装置被配置为响应于第一线程接收到的第二线程间消息来局部地传播冲量,该第二线程间消息包括与冲量关联的大小和方向,且其中,所述程序代码装置被配置为通过确定是否仍然有剩余的力要被传播到额外的物体来局部地传播冲量,从而只有当仍然有剩余的力时,该冲量才被传播到额外的物体。
18.如权利要求17所述的电路装置,其中,所述程序代码装置还被配置为确定反作用力,并发送具有所确定的反作用力的线程间消息,作为对所述第二线程间消息的应答。
19.如权利要求18所述的电路装置,其中,所述程序代码装置还被配置为在所述第一线程中从所述第二线程接收第三线程间消息作为对第一线程间消息的应答,该第三线程间消息包含第二反作用力,其中,对第一反作用力的确定至少部分基于该第二反作用力。
20.如权利要求14所述的电路装置,其中,所述程序代码装置还被配置为为所述第一物体确定场景中与该第一物体接触的一组相邻物体,并生成标识这组相邻物体的相邻物体数据结构,其中,所述第一线程被配置为访问该相邻物体数据结构,来确定冲量应被传播到多个相邻物体中的哪些物体。
21.如权利要求14所述的电路装置,其中,所述多个线程包括多个冲量传播线程,且其中,所述多线程物理引擎包括至少一个碰撞检测线程,且其中,所述程序代码装置还被配置为响应于检测到场景中的物体之间的未来碰撞,发起多个冲量传播线程之间的工作量重新分配。
22.如权利要求14所述的电路装置,其中,所述多线程物理引擎还包括使用多个硬件线程的多线程软件流水线,该多线程软件流水线包含多个阶段,其被配置为检测场景中物体之间的碰撞,该多个阶段包括至少一个分量载入器阶段、被分配给多个硬件线程的多个碰撞检测阶段、以及多个冲量传播线程。
23.如权利要求14所述的电路装置,其中,所述多线程物理引擎在包含多个处理核心的片上网络硬件逻辑中实现,所述多个处理核心定义了多个硬件线程以及使多个处理核心互相耦合的片上网络,且其中,所述线程间消息使用片上网络在硬件线程之间通信。
24.一种集成电路设备,包括如权利要求14所述的电路装置。
25.一种程序产品,包括永久计算机可读介质以及在该永久计算机可读介质上的逻辑定义程序代码,该逻辑定义程序代码定义如权利要求14所述的电路装置。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/212,403 | 2011-08-18 | ||
US13/212,403 US8413166B2 (en) | 2011-08-18 | 2011-08-18 | Multithreaded physics engine with impulse propagation |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103106120A true CN103106120A (zh) | 2013-05-15 |
CN103106120B CN103106120B (zh) | 2016-03-16 |
Family
ID=46546610
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210271847.4A Expired - Fee Related CN103106120B (zh) | 2011-08-18 | 2012-08-01 | 具有冲量传播的多线程物理引擎的电路装置、系统及其方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US8413166B2 (zh) |
CN (1) | CN103106120B (zh) |
DE (1) | DE102012213643B4 (zh) |
GB (1) | GB2493807A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109359481A (zh) * | 2018-10-10 | 2019-02-19 | 南京小安信息科技有限公司 | 一种基于bk树的反碰撞搜索约减方法 |
CN112604284A (zh) * | 2020-12-29 | 2021-04-06 | 北京冰封互娱科技有限公司 | 游戏的任务执行方法、装置、设备及计算机可读存储介质 |
Families Citing this family (31)
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 |
US10877780B2 (en) | 2012-10-15 | 2020-12-29 | Famous Industries, Inc. | Visibility detection using gesture fingerprinting |
US9501171B1 (en) | 2012-10-15 | 2016-11-22 | Famous Industries, Inc. | Gesture fingerprinting |
US10908929B2 (en) | 2012-10-15 | 2021-02-02 | Famous Industries, Inc. | Human versus bot detection using gesture fingerprinting |
US11386257B2 (en) * | 2012-10-15 | 2022-07-12 | Amaze Software, Inc. | Efficient manipulation of surfaces in multi-dimensional space using energy agents |
US9390052B1 (en) * | 2012-12-19 | 2016-07-12 | Amazon Technologies, Inc. | Distributed caching system |
US10642738B1 (en) | 2012-12-19 | 2020-05-05 | Amazon Technologies, Inc. | Distributed caching system |
US9621399B1 (en) | 2012-12-19 | 2017-04-11 | Amazon Technologies, Inc. | Distributed caching system |
CN103455356B (zh) * | 2013-09-05 | 2017-02-08 | 中国计量学院 | 多核移动设备上3d模型的并发加载及渲染方法 |
US9443053B2 (en) * | 2013-12-26 | 2016-09-13 | Cavium, Inc. | System for and method of placing clock stations using variable drive-strength clock drivers built out of a smaller subset of base cells for hybrid tree-mesh clock distribution networks |
US9390209B2 (en) | 2013-12-26 | 2016-07-12 | Cavium, Inc. | System for and method of combining CMOS inverters of multiple drive strengths to create tune-able clock inverters of variable drive strengths in hybrid tree-mesh clock distribution networks |
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 |
US10218580B2 (en) | 2015-06-18 | 2019-02-26 | Netspeed Systems | Generating physically aware network-on-chip design from a physical system-on-chip specification |
CN105138804B (zh) * | 2015-09-29 | 2018-09-21 | 中国科学院近代物理研究所 | 一种基于gpu的高能散裂反应级联模拟仿真方法 |
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 |
WO2018237256A1 (en) | 2017-06-22 | 2018-12-27 | Centurion VR, LLC | SIMULATION OF VIRTUAL REALITY |
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 |
US11176302B2 (en) | 2018-02-23 | 2021-11-16 | Netspeed Systems, Inc. | System on chip (SoC) builder |
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) |
WO2019191737A1 (en) * | 2018-03-31 | 2019-10-03 | Micron Technology, Inc. | Multi-threaded self-scheduling reconfigurable computing fabric |
WO2021178755A1 (en) * | 2020-03-06 | 2021-09-10 | Centurion Vr, Inc. | Use of projectile data to create a virtual reality simulation of a live-action sequence |
CN112619151B (zh) * | 2020-12-22 | 2022-08-12 | 上海米哈游天命科技有限公司 | 一种碰撞预测方法、装置、电子设备及存储介质 |
CN116245710B (zh) * | 2023-05-11 | 2023-07-18 | 中国铁路设计集团有限公司 | 基于虚幻引擎和线程池的海量倾斜摄影模型动态调度方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1985002923A1 (en) * | 1983-12-19 | 1985-07-04 | American Telephone & Telegraph Company | Control for a multiprocessing system program process |
CN1137212A (zh) * | 1994-03-24 | 1996-12-04 | Dva公司 | 可重新配置处理级 |
US6233729B1 (en) * | 1998-10-29 | 2001-05-15 | Nortel Networks Limited | Method and apparatus for identifying dynamic structure and indirect messaging relationships between processes |
CN101542487A (zh) * | 2006-07-24 | 2009-09-23 | Ati科技公司 | 图形处理器上的物理仿真 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5784631A (en) * | 1992-06-30 | 1998-07-21 | Discovision Associates | Huffman decoder |
US20050187742A1 (en) | 2004-02-19 | 2005-08-25 | Collodi David J. | Physics engine |
US7788071B2 (en) | 2004-12-03 | 2010-08-31 | Telekinesys Research Limited | Physics simulation apparatus and method |
US8564600B2 (en) | 2010-05-12 | 2013-10-22 | International Business Machines Corporation | Streaming physics collision detection in multithreaded rendering software pipeline |
US8627329B2 (en) | 2010-06-24 | 2014-01-07 | International Business Machines Corporation | Multithreaded physics engine with predictive load balancing |
-
2011
- 2011-08-18 US US13/212,403 patent/US8413166B2/en not_active Expired - Fee Related
-
2012
- 2012-05-25 GB GB1209170.8A patent/GB2493807A/en not_active Withdrawn
- 2012-08-01 CN CN201210271847.4A patent/CN103106120B/zh not_active Expired - Fee Related
- 2012-08-02 DE DE102012213643.6A patent/DE102012213643B4/de active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1985002923A1 (en) * | 1983-12-19 | 1985-07-04 | American Telephone & Telegraph Company | Control for a multiprocessing system program process |
CN1137212A (zh) * | 1994-03-24 | 1996-12-04 | Dva公司 | 可重新配置处理级 |
US6233729B1 (en) * | 1998-10-29 | 2001-05-15 | Nortel Networks Limited | Method and apparatus for identifying dynamic structure and indirect messaging relationships between processes |
CN101542487A (zh) * | 2006-07-24 | 2009-09-23 | Ati科技公司 | 图形处理器上的物理仿真 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109359481A (zh) * | 2018-10-10 | 2019-02-19 | 南京小安信息科技有限公司 | 一种基于bk树的反碰撞搜索约减方法 |
CN112604284A (zh) * | 2020-12-29 | 2021-04-06 | 北京冰封互娱科技有限公司 | 游戏的任务执行方法、装置、设备及计算机可读存储介质 |
CN112604284B (zh) * | 2020-12-29 | 2024-04-16 | 北京冰封互娱科技有限公司 | 游戏的任务执行方法、装置、设备及计算机可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
GB2493807A (en) | 2013-02-20 |
US20130046518A1 (en) | 2013-02-21 |
GB201209170D0 (en) | 2012-07-04 |
DE102012213643A1 (de) | 2013-02-21 |
CN103106120B (zh) | 2016-03-16 |
DE102012213643B4 (de) | 2022-07-21 |
US8413166B2 (en) | 2013-04-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103106120B (zh) | 具有冲量传播的多线程物理引擎的电路装置、系统及其方法 | |
US8627329B2 (en) | Multithreaded physics engine with predictive load balancing | |
US8102391B2 (en) | Hybrid rendering of image data utilizing streaming geometry frontend interconnected to physical rendering backend through dynamic accelerated data structure generator | |
US8248401B2 (en) | Accelerated data structure optimization based upon view orientation | |
US9911212B2 (en) | Resetting of dynamically grown accelerated data structure | |
US11367160B2 (en) | Simultaneous compute and graphics scheduling | |
US8773449B2 (en) | Rendering of stereoscopic images with multithreaded rendering software pipeline | |
US8248412B2 (en) | Physical rendering with textured bounding volume primitive mapping | |
US7973804B2 (en) | Image processing with highly threaded texture fragment generation | |
US9292965B2 (en) | Accelerated data structure positioning based upon view orientation | |
US8711163B2 (en) | Reuse of static image data from prior image frames to reduce rasterization requirements | |
US8587596B2 (en) | Multithreaded software rendering pipeline with dynamic performance-based reallocation of raster threads | |
US8330765B2 (en) | Rolling context data structure for maintaining state data in a multithreaded image processing pipeline | |
US8564600B2 (en) | Streaming physics collision detection in multithreaded rendering software pipeline | |
US8495643B2 (en) | Message selection based on time stamp and priority in a multithreaded processor | |
CN102037497B (zh) | 用于光线追踪渲染的并行相交测试及着色的架构 | |
US8836709B2 (en) | Vector register file caching of context data structure for maintaining state data in a multithreaded image processing pipeline | |
ES2907861T3 (es) | Ejecución especulativa de sombreadores de choque e intersección en arquitecturas programables de trazado de rayos | |
US8405670B2 (en) | Rolling texture context data structure for maintaining texture data in a multithreaded image processing pipeline | |
CN103207774B (zh) | 用于解决线程发散的方法和系统 | |
CN111143174A (zh) | 在共享功率/热约束下操作的硬件的最佳操作点估计器 | |
CN104516831A (zh) | 原子存储器更新单元和方法 | |
Rahman et al. | Towards accelerated agent-based crowd simulation for Hajj and Umrah | |
de Lucas et al. | Ultra-low power render-based collision detection for CPU/GPU systems |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20160316 Termination date: 20200801 |