parallelizing a real-time steering simulation for computer games with openmp by bjoern knafla and...

Post on 09-May-2015

979 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

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

top related