|
The performance of the data parallel model is directly
related to how large a part of the game engine can be parallelized by
data. As the amount of processor cores goes up, the data parallel parts
of the engine take less time to run. Fortunately these are usually also
the performance heavy parts of a game engine. If an engine can use data
parallelization for most parts of the game loop, then the data parallel
model will give the best performance of the three models.
The
biggest drawback of the model is the need to have components that
support data parallelism. For example, a physics component would need
to be able to run several physics updates in parallel, and be able to
correctly calculate collisions with objects that are in these separate
threads. A potential solution is to leave the physics calculation
completely out of the data parallel part of the game loop, and use
internal parallelization in the physics component. Fortunately many
other components won't need extensive changes. For example a component
calculating the animations of graphical objects has no interaction
between concurrent threads, and won't need any special support for
parallelism.
Conclusion
Because
the synchronous function parallel model does not require special
changes to engine components, and is really just an enhancement of a
regular game loop, it is well suited for adding some amount of
parallelism to an existing game engine. The model is not suited for
future use because of it's weak scaling support and low amount of
parallelism.
The asynchronous function
parallel model can be recommended for new game engines because of the
high amount of possible parallelism and the fact that existing
components need only few changes. This model is a good choice for game
engines aimed at the generation of multicore processors that have a
relatively small number of cores. The only drawback is the need to tune
thread running times to minimize the impact of worst case thread
timings. More research is needed to know how this timing fluctuation
actually affects game play.
The data
parallel model is definitely something to think about for the future.
It will be needed when the amount of processor cores increases beyond
the number of tasks available for a function parallel model. For
current use the increased scalability doesn't offer enough benefits
compared to the trouble of coding custom components to support this
type of data parallelism.
The current
trend seems to be towards creating engine components that use some
internal form of parallelization. While this allows engine developers
to not worry about threading issues, it may leave large parts of the
program sequential, which results in poor performance. The view
presented in this article has been that whole game loops could be
parallelized, not just some parts of them. The models presented here
can be a good starting point for developing specialized game engine
architectures.
Suggested Reading
[1] Gabb H., Lake A. 2005. Threading 3D Game Engine Basics. http://www.gamasutra.com/features/20051117/gabb_01.shtml
[2]
Costa S. 2004. Game Engineering for a Multiprocessor architecture. MSc
Dissertation Computer Games Technology. Liverpool John Moores
University.
Wilson K. 2006. Managing Concurrency: Latent Futures, Parallel Lives. http://www.gamearchitect.net/Articles/ManagingConcurrency1.html
|