Saints Row Scheduler Randall Turner, Volition, Inc. [email protected] Discussion...

31

Transcript of Saints Row Scheduler Randall Turner, Volition, Inc. [email protected] Discussion...

Page 1: Saints Row Scheduler  Randall Turner, Volition, Inc.  Randall.turner@volition-inc.com  Discussion Areas:  Saints Row project  Saint’s Row scheduler.
Page 2: Saints Row Scheduler  Randall Turner, Volition, Inc.  Randall.turner@volition-inc.com  Discussion Areas:  Saints Row project  Saint’s Row scheduler.

Saints Row Scheduler

Randall Turner, Volition, Inc. [email protected] Discussion Areas:

Saints Row project Saint’s Row scheduler

Page 3: Saints Row Scheduler  Randall Turner, Volition, Inc.  Randall.turner@volition-inc.com  Discussion Areas:  Saints Row project  Saint’s Row scheduler.

Saint’s Row

Page 4: Saints Row Scheduler  Randall Turner, Volition, Inc.  Randall.turner@volition-inc.com  Discussion Areas:  Saints Row project  Saint’s Row scheduler.

Single Thread, CPU Bound

Page 5: Saints Row Scheduler  Randall Turner, Volition, Inc.  Randall.turner@volition-inc.com  Discussion Areas:  Saints Row project  Saint’s Row scheduler.

Alpha Kits

Two Hardware Threads Dual Core

Hardware thread Software thread Many software threads on one hardware

thread Software threads != concurrency. Hardware

threads do.

Page 6: Saints Row Scheduler  Randall Turner, Volition, Inc.  Randall.turner@volition-inc.com  Discussion Areas:  Saints Row project  Saint’s Row scheduler.

First Step: Alpha kit solution Sim/Render Split (Still CPU bound,

not as bad.) Two HW Threads

Page 7: Saints Row Scheduler  Randall Turner, Volition, Inc.  Randall.turner@volition-inc.com  Discussion Areas:  Saints Row project  Saint’s Row scheduler.

Beta Kits

Betas = Six hardware threads, Woo Hoo! But each hardware thread was slower than Alphas. Homogeneous processing, unified memory

Page 8: Saints Row Scheduler  Randall Turner, Volition, Inc.  Randall.turner@volition-inc.com  Discussion Areas:  Saints Row project  Saint’s Row scheduler.

First Beta Soluton

Page 9: Saints Row Scheduler  Randall Turner, Volition, Inc.  Randall.turner@volition-inc.com  Discussion Areas:  Saints Row project  Saint’s Row scheduler.

Problem

Still only using mostly two HW threads (Sim, Render)

Badly CPU bound No more major “natural” separation

points

Page 10: Saints Row Scheduler  Randall Turner, Volition, Inc.  Randall.turner@volition-inc.com  Discussion Areas:  Saints Row project  Saint’s Row scheduler.

Interim Solution

Manually move processing to other HW threads.

Example – Shadow Calculations Create a SW thread to process half of

the object list Process half the list when triggered.

Page 11: Saints Row Scheduler  Randall Turner, Volition, Inc.  Randall.turner@volition-inc.com  Discussion Areas:  Saints Row project  Saint’s Row scheduler.

Fixed Concurrent Processing

Uses an entire SW thread for one type of processing.

Wastes system resources Hard coded to execute that processing type only. Inflexible, Scales up badly.

Page 13: Saints Row Scheduler  Randall Turner, Volition, Inc.  Randall.turner@volition-inc.com  Discussion Areas:  Saints Row project  Saint’s Row scheduler.

Goal Make all movable so will use

available space

Page 14: Saints Row Scheduler  Randall Turner, Volition, Inc.  Randall.turner@volition-inc.com  Discussion Areas:  Saints Row project  Saint’s Row scheduler.

Scheduler (Job Manager)

Jobs Worker threads Job Queues Triggers

Page 15: Saints Row Scheduler  Randall Turner, Volition, Inc.  Randall.turner@volition-inc.com  Discussion Areas:  Saints Row project  Saint’s Row scheduler.

Jobs

Independently schedulable entity No dependencies on other jobs. Atomic with respect to other jobs Essentially a function/data pair

Page 16: Saints Row Scheduler  Randall Turner, Volition, Inc.  Randall.turner@volition-inc.com  Discussion Areas:  Saints Row project  Saint’s Row scheduler.

Creating Jobs

Extract parallelism from loops. (Splatting)

Segregate memory usage Thread safe interactions with systems

critical sections double-buffering

Page 17: Saints Row Scheduler  Randall Turner, Volition, Inc.  Randall.turner@volition-inc.com  Discussion Areas:  Saints Row project  Saint’s Row scheduler.

Examples

Compute shadow silhouettes Character animation Object visibility culling Building command buffers Bad candidate - AI processing

Not easily turned into jobs due to interaction with large, difficult to thread safe data set.

Page 18: Saints Row Scheduler  Randall Turner, Volition, Inc.  Randall.turner@volition-inc.com  Discussion Areas:  Saints Row project  Saint’s Row scheduler.

Basic Scheduler Flow

Page 19: Saints Row Scheduler  Randall Turner, Volition, Inc.  Randall.turner@volition-inc.com  Discussion Areas:  Saints Row project  Saint’s Row scheduler.

Worker Threads

One per HW thread Draws jobs from job queues Associated with job “type”

Sim jobs, Render jobs, or “any” job. “Soft” or “Hard” linkage Dynamically configurable

Wakes up when jobs go into job queue Can be deactivated

Page 20: Saints Row Scheduler  Randall Turner, Volition, Inc.  Randall.turner@volition-inc.com  Discussion Areas:  Saints Row project  Saint’s Row scheduler.

Job Queues

One per job type Sim or Render

Implicit prioritization High frequency, contention sensitive

Used critical sections on version 1.0

Page 21: Saints Row Scheduler  Randall Turner, Volition, Inc.  Randall.turner@volition-inc.com  Discussion Areas:  Saints Row project  Saint’s Row scheduler.

Triggers Fire on completion of jobs Scheduling Triggers – schedule more

jobs Event Triggers - activate suspended

threads Can tie together to create state

machines.

Page 22: Saints Row Scheduler  Randall Turner, Volition, Inc.  Randall.turner@volition-inc.com  Discussion Areas:  Saints Row project  Saint’s Row scheduler.

First Pass

Page 23: Saints Row Scheduler  Randall Turner, Volition, Inc.  Randall.turner@volition-inc.com  Discussion Areas:  Saints Row project  Saint’s Row scheduler.

Final Pass 90% CPU Utilization

Page 24: Saints Row Scheduler  Randall Turner, Volition, Inc.  Randall.turner@volition-inc.com  Discussion Areas:  Saints Row project  Saint’s Row scheduler.

Flow-Around Callback to scheduler on interrupt

Allow “small” jobs to complete, then resume Jobs contain duration info

Page 25: Saints Row Scheduler  Randall Turner, Volition, Inc.  Randall.turner@volition-inc.com  Discussion Areas:  Saints Row project  Saint’s Row scheduler.

Havok

Timestep called from Scheduler job More flexible

Problem: Has own internal scheduler Timestep Goes “Serial” Jobs don’t flow

Solution: break out and splat serial processing ourselves.

Page 26: Saints Row Scheduler  Randall Turner, Volition, Inc.  Randall.turner@volition-inc.com  Discussion Areas:  Saints Row project  Saint’s Row scheduler.

Havok - serial extraction

Page 27: Saints Row Scheduler  Randall Turner, Volition, Inc.  Randall.turner@volition-inc.com  Discussion Areas:  Saints Row project  Saint’s Row scheduler.

Performance Critical Sections

Scheduler v1.0 all critical sections Blockage risk – CS owner preemption

Can stall ALL threads

Lock-Free Faster – x2 no contention, x10-20 high-

contention situations NO blockage risk (Woo Hoo!)

GP Gems 6, Fober

Page 28: Saints Row Scheduler  Randall Turner, Volition, Inc.  Randall.turner@volition-inc.com  Discussion Areas:  Saints Row project  Saint’s Row scheduler.

Job Size

Scheduler overhead determines job size. Small as possible. Assume 5% overhead Saints Row “ideal” size about 250

microseconds 7 microseconds per job, 5% = 150 microsec, 250 drops to ~ 3% overhed

Page 29: Saints Row Scheduler  Randall Turner, Volition, Inc.  Randall.turner@volition-inc.com  Discussion Areas:  Saints Row project  Saint’s Row scheduler.

Questions?

For latest slides: http://www.volition-inc.com/gdc07/

Page 30: Saints Row Scheduler  Randall Turner, Volition, Inc.  Randall.turner@volition-inc.com  Discussion Areas:  Saints Row project  Saint’s Row scheduler.

Extras Pix with PVS on, night, high load

Release, w/o PIX samples, ~ 35ms

Page 31: Saints Row Scheduler  Randall Turner, Volition, Inc.  Randall.turner@volition-inc.com  Discussion Areas:  Saints Row project  Saint’s Row scheduler.

Lock Free URL’s

Fober implementation: http://www.grame.fr/pub/LockFree.pdf

http://www.grame.fr/pub/TR-050523.pdf

Toby Jones: GP Gems 6 Good coding style