parallelizing a real-time steering simulation for computer games with openmp by bjoern knafla and...
DESCRIPTION
Slides from my presentation of a paper with the same title at ParCo 2007 - http://www.fz-juelich.de/nic-series/volume38/knafla.pdf . Future computer games need parallel programming to meet their ever growing hunger for per- formance. We report on our experiences in parallelizing the game-like C++ application Open- SteerDemo with OpenMP. To enable deterministic data-parallel processing of real-time agent steering behaviour, we had to change the high-level design, and refactor interfaces for explicit shared resource access. Our experience is summarized in a set of guidelines to help parallelizing legacy game code.TRANSCRIPT
Parallelizinga Real-Time
Steering Simulation for Computer Games
withOpenMP
Bjoern Knafla and Claudia LeopoldUniversity of Kassel (Germany)
1Dienstag, 11. September 2007
2Dienstag, 11. September 2007
Steering a flock of birds
2Dienstag, 11. September 2007
3Dienstag, 11. September 2007
3Dienstag, 11. September 2007
3Dienstag, 11. September 2007
Bird
3Dienstag, 11. September 2007
BirdBoid
3Dienstag, 11. September 2007
BirdBoid
Agent
3Dienstag, 11. September 2007
4Dienstag, 11. September 2007
CPU
core
4Dienstag, 11. September 2007
4Dienstag, 11. September 2007
CPU
core
CPU
core
CPU
core
CPU
core
CPU
core
CPU
core
CPU
core
CPU
core
CPU
core
CPU
core
CPU
core
CPU
core
CPU
core
CPU
core
CPU
core
CPU
core
4Dienstag, 11. September 2007
4Dienstag, 11. September 2007
Outline
5Dienstag, 11. September 2007
Outline
1. Steering behaviors
5Dienstag, 11. September 2007
Outline
1. Steering behaviors
2. OpenSteerDemo
5Dienstag, 11. September 2007
Outline
1. Steering behaviors
2. OpenSteerDemo
3. Bad parallelization
5Dienstag, 11. September 2007
Outline
1. Steering behaviors
2. OpenSteerDemo
3. Bad parallelization
4. Parallelization that works
5Dienstag, 11. September 2007
Outline
1. Steering behaviors
2. OpenSteerDemo
3. Bad parallelization
4. Parallelization that works
5. Performance
5Dienstag, 11. September 2007
Outline
1. Steering behaviors
2. OpenSteerDemo
3. Bad parallelization
4. Parallelization that works
5. Performance
6. Summary
5Dienstag, 11. September 2007
Steering behaviors
6Dienstag, 11. September 2007
7Dienstag, 11. September 2007
7Dienstag, 11. September 2007
7Dienstag, 11. September 2007
7Dienstag, 11. September 2007
Alignment8Dienstag, 11. September 2007
OpenSteerDemo
9Dienstag, 11. September 2007
OpenSteerDemo
Testbed for the open source library OpenSteer from Craig W. Reynods
9Dienstag, 11. September 2007
OpenSteerDemo
Testbed for the open source library OpenSteer from Craig W. Reynods
Simulates steering behavior of agents
9Dienstag, 11. September 2007
OpenSteerDemo
Testbed for the open source library OpenSteer from Craig W. Reynods
Simulates steering behavior of agents
Game-like C++ real-time application
9Dienstag, 11. September 2007
OpenSteerDemo
Testbed for the open source library OpenSteer from Craig W. Reynods
Simulates steering behavior of agents
Game-like C++ real-time application
OpenGL
9Dienstag, 11. September 2007
OpenSteerDemo
Testbed for the open source library OpenSteer from Craig W. Reynods
Simulates steering behavior of agents
Game-like C++ real-time application
OpenGL
http://opensteer.sourceforge.net
9Dienstag, 11. September 2007
Main loop
10Dienstag, 11. September 2007
Main loop
Input Update Output
10Dienstag, 11. September 2007
Input Update Graph-
ics
Main loop
11Dienstag, 11. September 2007
Input stage
Time step t
Input Update Graph-
ics
12Dienstag, 11. September 2007
Update stage
Time step t
Input Update Graph-
ics
13Dienstag, 11. September 2007
Graphics stage
Time step t
Input Update Graph-
ics
14Dienstag, 11. September 2007
Next main loop cycle
Time step t+1
Input Update Graph-
ics
15Dienstag, 11. September 2007
Update stage
Input Update Graph-
ics
16Dienstag, 11. September 2007
Agent update
Update
agent
Neighbors Random.Agent
state
read + write read + write read + write
references
Graphics
write
17Dienstag, 11. September 2007
Time step t
Sequentialagent
updateorder
Update
agent
0
Update
agent
1
Update
agent
2
Update
agent
n
...
In state t-1
18Dienstag, 11. September 2007
Time step t
Sequentialagent
updateorder
Neighbors
In state t-1
Update
agent
0
Update
agent
1
Update
agent
2
Update
agent
n
...
In state t-1
18Dienstag, 11. September 2007
Time step t
Sequentialagent
updateorder
Update
agent
0
Update
agent
1
Update
agent
2
Update
agent
n
...
In state t-1
19Dienstag, 11. September 2007
Time step t
Sequentialagent
updateorder
Update
agent
0
Update
agent
1
Update
agent
2
Update
agent
n
...
In state t-1In state t
20Dienstag, 11. September 2007
Time step t
Sequentialagent
updateorder
Update
agent
0
Update
agent
1
Update
agent
2
Update
agent
n
...
In state t-1In state t
21Dienstag, 11. September 2007
Time step t
Sequentialagent
updateorder
Neighbors
In state ?
Update
agent
0
Update
agent
1
Update
agent
2
Update
agent
n
...
In state t-1In state t
21Dienstag, 11. September 2007
Bad parallelization
22Dienstag, 11. September 2007
23Dienstag, 11. September 2007
Questionable reliabilityand correctness
23Dienstag, 11. September 2007
No speedup
24Dienstag, 11. September 2007
No speedup
24Dienstag, 11. September 2007
Mainparallelization problems
25Dienstag, 11. September 2007
26Dienstag, 11. September 2007
Race conditions
26Dienstag, 11. September 2007
Race conditions
Global variables, deep inheritance hierarchies, strongly interdependent classes
26Dienstag, 11. September 2007
Race conditions
Global variables, deep inheritance hierarchies, strongly interdependent classes
Non-determinism
26Dienstag, 11. September 2007
Race conditions
Global variables, deep inheritance hierarchies, strongly interdependent classes
Non-determinism
Order of agent updates and random numbers
26Dienstag, 11. September 2007
Race conditions
Global variables, deep inheritance hierarchies, strongly interdependent classes
Non-determinism
Order of agent updates and random numbers
Non-thread-safe functions
26Dienstag, 11. September 2007
Parallelizationthat works
27Dienstag, 11. September 2007
Guiding ideas
28Dienstag, 11. September 2007
Guiding ideas
Update order independent simulation
28Dienstag, 11. September 2007
Guiding ideas
Update order independent simulation
Agent modification only dependent on its steering vector
28Dienstag, 11. September 2007
Guiding ideas
Update order independent simulation
Agent modification only dependent on its steering vector
Minimize synchronization
28Dienstag, 11. September 2007
Guiding ideas
Update order independent simulation
Agent modification only dependent on its steering vector
Minimize synchronization
Finish parallel processing before graphics stage
28Dienstag, 11. September 2007
Guiding ideas
Update order independent simulation
Agent modification only dependent on its steering vector
Minimize synchronization
Finish parallel processing before graphics stage
Interfaces for explicit context
28Dienstag, 11. September 2007
Refactorization
29Dienstag, 11. September 2007
Split agent update
Agentupdateorder
Sim.
agent
Modify
agent
Agent update
30Dienstag, 11. September 2007
Simulate agent stage
Agent public
Agent private
Sim.
agent
Random.
Agent
state
Agent
stateNeighbors
Render-
Feeder
references
readread
read + write
write
Steering
Vector
31Dienstag, 11. September 2007
Simulate agent stage
Agent public
Agent private
Sim.
agent
Random.
Agent
state
Agent
stateNeighbors
Render-
Feeder
references
readread
read + write
write
Steering
Vectorconst
const
31Dienstag, 11. September 2007
Modify agent stage
Agent public
Agent private
Modify
agent
Random.
Agent
state
Agent
stateNeighbors
Render-
Feeder
references
read + write
read
Steering
Vector
32Dienstag, 11. September 2007
Modify neighbor data structure
Agent public
Agent private
Modify
neigh-
bors
Random.
Agent
state
Agent
stateNeighbors
Render-
Feeder
references
write
Steering
Vector read
33Dienstag, 11. September 2007
Input Update Output
Refactor update stage
34Dienstag, 11. September 2007
Split update stage
Sub-stages: simulation and modification
Sim. Modify
Update stage
35Dienstag, 11. September 2007
Old update stage
Sequentialprocessing
order
Sim.
agent
0
Modify
agent
0
Sim.
agent
1
Modify
agent
1
Sim.
agent
n
Modify
agent
n
...
Update agent Update agent Update agent
36Dienstag, 11. September 2007
Time step t
Sequentialprocessing
order
Sim.
agent
0
Modify
agent
0
Sim.
agent
1
Modify
agent
1
Sim.
agent
n
Modify
agent
n
...
Agents in state t-1
37Dienstag, 11. September 2007
Time step t
Sequentialprocessing
order
Sim.
agent
0
Modify
agent
0
Sim.
agent
1
Modify
agent
1
Sim.
agent
n
Modify
agent
n
...
Agent in state t Agents in state t-1
38Dienstag, 11. September 2007
New update stage
Sequentialprocessing
order
Sim.
agent
0
Sim.
agent
1
...
Sim.
agent
n
Modify
agent
0
Modify
agent
1
...
Modify
agent
n
Simulation sub-stage Modification sub-stage
39Dienstag, 11. September 2007
Time step t
Sequentialprocessing
order
Sim.
agent
0
Sim.
agent
1
...
Sim.
agent
n
Modify
agent
0
Modify
agent
1
...
Modify
agent
n
Agents in public state t-1
40Dienstag, 11. September 2007
Time step t
Sequentialprocessing
order
Sim.
agent
0
Sim.
agent
1
...
Sim.
agent
n
Modify
agent
0
Modify
agent
1
...
Modify
agent
n
Agents in public state t-1
41Dienstag, 11. September 2007
Time step t
Sequentialprocessing
order
Sim.
agent
0
Sim.
agent
1
...
Sim.
agent
n
Modify
agent
0
Modify
agent
1
...
Modify
agent
n
Agents in public state t-1
42Dienstag, 11. September 2007
Time step t
Each agent is modifiedbased solely on its ownstate
Sequentialprocessing
order
Sim.
agent
0
Sim.
agent
1
...
Sim.
agent
n
Modify
agent
0
Modify
agent
1
...
Modify
agent
n
Agents in public state t-1
42Dienstag, 11. September 2007
Parallelization
43Dienstag, 11. September 2007
Parallel update stage
S M
B
a
r
r
i
e
r
P
a
r
a
l
l
e
l
Simulation
B
a
r
r
i
e
r
P
a
r
a
l
l
e
l
Modification
Update
neigh-
bors
Possibly
parallelS S
S S
S S S
S S
SS
M M
M M M
M M M
M M M
M M M
44Dienstag, 11. September 2007
Parallel simulationsub-stage
S
B
a
r
r
i
e
r
P
a
r
a
l
l
e
l
Simulation
B
a
r
r
i
e
r
P
a
r
a
l
l
e
l
Modification
Update
neigh-
bors
Possibly
parallelS S
S S
S S S
S S
SS
45Dienstag, 11. September 2007
Parallel modificationsub-stage
M
B
a
r
r
i
e
r
P
a
r
a
l
l
e
l
Simulation
B
a
r
r
i
e
r
P
a
r
a
l
l
e
l
Modification
Update
neigh-
bors
Possibly
parallelM M
M M M
M M M
M M M
M M M
46Dienstag, 11. September 2007
Parallel modificationsub-stage
B
a
r
r
i
e
r
P
a
r
a
l
l
e
l
Simulation
B
a
r
r
i
e
r
P
a
r
a
l
l
e
l
Modification
Update
neigh-
bors
Possibly
parallel
47Dienstag, 11. September 2007
Performance
48Dienstag, 11. September 2007
Dual-processor dual-core 2 GHz AMD Opteron with 2 GB Ram
2x Nvidia 7800 GTX graphics cards in SLI mode
Linux OS
Test-computer
49Dienstag, 11. September 2007
Max speedups
50Dienstag, 11. September 2007
Comparison of OpenSteerDemo flock of birds simulation with 4 threads with OpenMP-disabled version
Max speedups
50Dienstag, 11. September 2007
Comparison of OpenSteerDemo flock of birds simulation with 4 threads with OpenMP-disabled version
Whole application: !2.84
Max speedups
50Dienstag, 11. September 2007
Comparison of OpenSteerDemo flock of birds simulation with 4 threads with OpenMP-disabled version
Whole application: !2.84
Update stage: !! ! 3.54
Max speedups
50Dienstag, 11. September 2007
Summary
51Dienstag, 11. September 2007
52Dienstag, 11. September 2007
Refactored first
52Dienstag, 11. September 2007
Refactored first
Simplicity!
52Dienstag, 11. September 2007
Refactored first
Simplicity!
High-level design to min. synchronization
52Dienstag, 11. September 2007
Refactored first
Simplicity!
High-level design to min. synchronization
Explicit context
52Dienstag, 11. September 2007
Refactored first
Simplicity!
High-level design to min. synchronization
Explicit context
Deferred computation
52Dienstag, 11. September 2007
Refactored first
Simplicity!
High-level design to min. synchronization
Explicit context
Deferred computation
Identified slices for data-parallel computation
52Dienstag, 11. September 2007
Thank you!
53Dienstag, 11. September 2007