设计一个功能可分解的、数据可分解的系统可以提供大规模的并行化执行,同时保证发挥多核处理器的性能。
随着多核心处理器的降临,对可并行计算游戏引擎的需求已经变得越来越重要了。尽管仅仅依靠GPU和单线程游戏引擎依然是可行的,但是在一个系统上使用多核处理器所具有的优势会给用户带来更深刻的体验。譬如,使用多核CPU一个游戏可以增加更多的物理刚体对象来提升效果,或者开发出更加智慧的类人化的AI。
并行化游戏引擎框架,或者称为多线程引擎,目的是在开发平台上利用所有的处理器来提升性能。(引擎)通过并行化处理,各个功能模块可以利用所有可用的处理器。当然,说比做要容易,毕竟在游戏引擎中很多东西是互相交叉的,这通常会引起线程错误。因此,需要设计一套系统来合适地处理数据同步问题,同时避免被同步锁所限制。此外,也需要一套方法来保证在并行方式下处理数据同步时使串行处理消耗尽可能小。本文要求读者需要对现代计算机游戏发展以及游戏引擎线程编程有很好的理解和工作经验。
2.并行处理态
并行处理态的概念对于一个高效的具有多线程运行时态的引擎来说是非常重要的。引擎如果要实现真正意义上的并行处理——即尽可能少的同步损耗,则需要引擎内部各个系统在运行时坐到尽量少的交互。尽管数据需要共享,但是现在每个系统都应该有自己的一份数据拷贝,而不是通过一个公共的方式来访问数据。这样各个系统之间将不再有数据依赖关系。任何一个共享数据的变化都会被送到一个状态管理器那里,并且被加入一个变化队列,不妨称作消息提示队列。一旦各个系统完成处理任务,他们将会被提示改变自己的状态,同时更新各自内部的数据结构(作为消息队列的一部分)。使用这一机制将会大大减少同步损耗,使得各个系统能更加独立地工作。
3.引擎 设计引擎时应关注结构的弹性,以使得在扩展功能时更加简便。基于此,引擎在各种受到限制(譬如内存)的平台上应用时可以很好地做出调整。
引擎由两部分组成,一部分是框架,另一部分是管理器。框架(章节3.1)包含了游戏中会重复出现的拥有多个实例的那些部分,同时也包含那些出现在主循环的东西。管理器(章节3.2)作为单件存在并且独立于游戏逻辑。
|