Multithreaded game programming and Hyper-Threading Technology
The widespread adoption of multiprocessor machines means that programmers can seriously consider the threaded performance of algorithms, and software system design.

by Will Damon. Intel Corp.

Multiprocessor machines are becoming more commonplace on the desktop with the introduction of Hyper-Threading Technology to the Intel® Pentium® 4 processor. While multithreaded programming is not new to games, the widespread adoption of multiprocessor machines means that programmers can seriously consider the threaded performance of algorithms, and software system design. This paper aims to introduce the two domains of threading methodology as they apply to game development, and address the most common pitfalls of game programming for Hyper-Threading Technology (HT) enabled systems.

Parallel models
Parallelism, the simultaneous processing of different data or tasks, is achieved through two models: data- and functional- decomposition (also known as data and task parallelism). As the names imply, these two models represent very different yet complementary methods of applying multiple threads to achieve a higher level of performance within a single process (like a game). Each parallel model has its own section below; data decomposition is covered first, followed by functional decomposition.

Data decomposition
Data decomposition means that the same independent operation is applied to different data. Compute-intensive loops, like those found in game physics simulation solvers, for example, are good candidates for data parallelization. Each game has different situations in which data parallelism applies, but just for illustration, here is a short list that is by no means exhaustive:

  • Generating procedural terrain, textures, or geometry
  • Physics solvers (for collision, behavior, and even sound)
  • Skinning and/or animation
  • Various artificial intelligence algorithms
  • Path finding
  • Audio processing
Many other applications are also possible. The trick is determining when to use threads to implement parallel computation for higher performance.

If you're interested in this topic, these articles may be helpful:

Persistence pays off, part 1: the server
by Michael L. Perry, president and consultant, Mallard Software Design...
The 64-bit tipping point
from Intel Corp. For more than a decade, 64-bit architectures have ...
PJO: persistent data objects 1.1 - complex objects and PJO
by Tony Walker, Datamorphics Ltd. Object orientation and persistenc...
Threading basics for games
by Jeff Andrews, application engineer, Intel Corp. Take advantage o...
Online: HT Technology on the Desktop
This course describes Intel® Hyper-Threading Technology and introd...

Related Jobs:

Principal Performance/Benchmarking Engineer #5789-DGS - MA - Natick - The MathWorks
Principal Performance/Benchmarking Engineer Job #: 5789-DG...
Senior Distributed Computing Software Engineer #5179-DGS - MA - Natick - The MathWorks
Senior Distributed Computing Software Engineer Job #: 5179...
Junior Network Engineer - CT #19140 - CA - Santa Monica - Activision, Inc.
Junior Network Engineer - CT Apply Online Desc...
Principal Software Engineer #RX1000021845 - TX - Dallas - Yahoo! Inc.
Principal Software Engineer, Dallas Job No. RX1000021845 Locati...
Senior Software Developer #5126-DGS - MA - Natick - The MathWorks
Senior Software Developer - Multithreading Specialist Job #...
Software Dev Eng #RX1000023740 - TX - Dallas Louis - Yahoo! Inc.
Software Dev Eng, Streaming Center Job No. RX1000023740 Locatio...
Senior Software Engineer #5846-DGS - MA - Natick - The MathWorks
Senior Software Engineer - MATLAB Language Implementation J...
Principal Engineer #5627-JP - MA - Natick - The MathWorks
Principal Engineer - MATLAB Language Implementation Job #: ...
Senior Software Engineer - Smart Answers #A1BBE13DB2FAFF8C - CA - Oakland - Ask Jeeves,Inc.
Title Senior Software Engineer - Smart Answers City Oakland State ...
Software Development Engineer, Website Application Platform #023896 - WA - Seattle - Amazon.com, Inc.
Software Development Engineer, Website Application Platform – 023896...