Top Banner
Dynamic Execution Tracing of Physical Simulations Jonathan Cohen
33

Dynamic Execution Tracing of Physical Simulations Jonathan Cohen.

Dec 17, 2015

Download

Documents

Diana Wells
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Dynamic Execution Tracing of Physical Simulations Jonathan Cohen.

Dynamic Execution Tracing of Physical Simulations

Jonathan Cohen

Page 2: Dynamic Execution Tracing of Physical Simulations Jonathan Cohen.

Jonathan CohenSIGGRAPH 2007 San Diego

The Motivation

• Typical bugs in physical simulation are hard to find!

• Complex code path & data flow

• gdb/printf ill-suited to the task – where's the breakpoint go? Insert complex debugging routines into the code?

• Need: trace aggregate data flow, gather statistics, look for anomalies, profiling, etc.

• Want: programmable, no recompiling, minimal impact

Page 3: Dynamic Execution Tracing of Physical Simulations Jonathan Cohen.

Jonathan CohenSIGGRAPH 2007 San Diego

Anatomy of an sstrace Script

• A script is made of probes – like breakpoint, triggered by name

MODULE:FUNCTION:EVENT

or

MODULE:CLASS@METHOD:EVENT

Page 4: Dynamic Execution Tracing of Physical Simulations Jonathan Cohen.

Jonathan CohenSIGGRAPH 2007 San Diego

Examples of probe names

• sim:IncompressibleSolver@Advance:enter

• sim:IncompressibleSolver@*:enter

• sim:*:enter

• sim:PoissonSolver@Solve:iterations

• sys:main:enter

Page 5: Dynamic Execution Tracing of Physical Simulations Jonathan Cohen.

Jonathan CohenSIGGRAPH 2007 San Diego

Anatomy of an sstrace Script

• Following each probe is a block of code that is executed when probe is hit

MODULE:FUNCTION:EVENT{

command -option arg -option argcommand -option arg -option arg

}

Page 6: Dynamic Execution Tracing of Physical Simulations Jonathan Cohen.

Jonathan CohenSIGGRAPH 2007 San Diego

Some Commands

• print – display text to a log file

• timer – start, stop, pause a stopwatch

• histogram – add sample points, display

• indent – set indentation level of print out

• counters – basic math

Page 7: Dynamic Execution Tracing of Physical Simulations Jonathan Cohen.

Jonathan CohenSIGGRAPH 2007 San Diego

Anatomy of an sstrace Script

• Command arguments can reference variables

MODULE:FUNCTION:EVENT{

print $TOTAL_COSTcounter -name TOTAL_COST -add $ARG0

}

Page 8: Dynamic Execution Tracing of Physical Simulations Jonathan Cohen.

Jonathan CohenSIGGRAPH 2007 San Diego

Special Variables

• Any timer can be read as variable ($total_time)

• Arguments passed from code ($ARG0, $ARG1, etc.)

• Other special variables ($TIME, $PROBE, $PROCESSMEM, etc.)

Page 9: Dynamic Execution Tracing of Physical Simulations Jonathan Cohen.

Jonathan CohenSIGGRAPH 2007 San Diego

Example: Execution Stack Tracing

*:*:enter{ print -var $PROBEBASE indent -add 2}

*:*:exit{ indent -add -2}

sim:SphereSim@step sim:SphereWorldBase@AddParticleSim sim:SphereWorldBase@AddParticleSim sim:ContSphereSolverGuendelman@Advance sim:ContSphereSolverGuendelman@TakeStep sim:ContSphereSolverGuendelman@DoCollisionImpulses sim:ContSphereMultiCollision@Insert sim:ContSphereUniformGridCollision@Insert sim:ContSphereUniformGridCollision@Insert sim:ContSphereUniformGridCollision@GetCollisions sim:ContSphereUniformGridCollision@GetCollisions sim:ContSphereSolverGuendelman@DoCollisionImpulses sim:ContSphereUniformGridCollision@GetCollisions sim:ContSphereUniformGridCollision@GetCollisions<snip>

Page 10: Dynamic Execution Tracing of Physical Simulations Jonathan Cohen.

Jonathan CohenSIGGRAPH 2007 San Diego

sim:FluidSim@step:enter{

timer -reset mytimertimer -start mytimer

}

sim:FluidSim@step:exit{

histogram -name myhist -add $mytimer}

sys:main:exit{

histogram -print myhist}

Example: Analyze FluidSim Timing

Page 11: Dynamic Execution Tracing of Physical Simulations Jonathan Cohen.

Jonathan CohenSIGGRAPH 2007 San Diego

Example: Sphere-Sphere collision

• Complex collision data structure:

– KD-Tree

– Leaf nodes are either flat lists or uniform grids

– Heuristic recursively decides whether to make leaf (which type?) or keep splitting

– How does the heuristic work in practice?

Page 12: Dynamic Execution Tracing of Physical Simulations Jonathan Cohen.

Jonathan CohenSIGGRAPH 2007 San Diego

Video – First spheresim

Page 13: Dynamic Execution Tracing of Physical Simulations Jonathan Cohen.

Jonathan CohenSIGGRAPH 2007 San Diego

FRAME 240--------------------------

Type: <top level> Type:ContSphereUniformGridCollision (X,Y,Z) = 9,14,15 efficiency 46.8783 Type:ContSphereUniformGridCollision (X,Y,Z) = 8,13,13 efficiency 60.5769Acceleration data structure memory usage: 122812Total memory usage: 3.03354e+08

Trace Output

Page 14: Dynamic Execution Tracing of Physical Simulations Jonathan Cohen.

Jonathan CohenSIGGRAPH 2007 San Diego

dem:*SphereSim@step:enter{ print -msg "\nFRAME " -var $ARG0 print -msg "--------------------------\n"}

Per-Frame Callback

FRAME 240--------------------------

Type: <top level> Type:ContSphereUniformGridCollision (X,Y,Z) = 9,14,15 efficiency 46.8783 Type:ContSphereUniformGridCollision (X,Y,Z) = 8,13,13 efficiency 60.5769Acceleration data structure memory usage: 122812Total memory usage: 3.03354e+08

Page 15: Dynamic Execution Tracing of Physical Simulations Jonathan Cohen.

Jonathan CohenSIGGRAPH 2007 San Diego

Memory Statistics

dem:*SphereWorld@MakeAccelValid:memusage{ print -msg "Acceleration data structure memory usage: " -var $ARG0 print -msg "Total memory usage: " -var $PROCESSMEM}

FRAME 240--------------------------

Type: <top level> Type:ContSphereUniformGridCollision (X,Y,Z) = 9,14,15 efficiency 46.8783 Type:ContSphereUniformGridCollision (X,Y,Z) = 8,13,13 efficiency 60.5769Acceleration data structure memory usage: 122812Total memory usage: 3.03354e+08

Page 16: Dynamic Execution Tracing of Physical Simulations Jonathan Cohen.

Jonathan CohenSIGGRAPH 2007 San Diego

dem:*SphereMultiCollision@Insert:child?type{ print -msg "Type:" -var $ARG0}

dem:*SphereMultiCollision@Insert:enter{ indent -add 2}

dem:*SphereMultiCollision@Insert:exit{ indent -add -2}

Tree Structure

FRAME 240--------------------------

Type: <top level> Type:ContSphereUniformGridCollision (X,Y,Z) = 9,14,15 efficiency 46.8783 Type:ContSphereUniformGridCollision (X,Y,Z) = 8,13,13 efficiency 60.5769Acceleration data structure memory usage: 122812Total memory usage: 3.03354e+08

Page 17: Dynamic Execution Tracing of Physical Simulations Jonathan Cohen.

Jonathan CohenSIGGRAPH 2007 San Diego

dem:*SphereUniformGridCollision@Insert:dimension{ print -msg " (X,Y,Z) = " -var $ARG0, $ARGV1, $ARGV2}

dem:*SphereUniformGridCollision@Insert:efficiency{ print -msg " efficiency " -var $ARG0}

Uniform Grid Statistics

FRAME 240--------------------------

Type: <top level> Type:ContSphereUniformGridCollision (X,Y,Z) = 9,14,15 efficiency 46.8783 Type:ContSphereUniformGridCollision (X,Y,Z) = 8,13,13 efficiency 60.5769Acceleration data structure memory usage: 122812Total memory usage: 3.03354e+08

Page 18: Dynamic Execution Tracing of Physical Simulations Jonathan Cohen.

Jonathan CohenSIGGRAPH 2007 San Diego

Video – second spheresim

Page 19: Dynamic Execution Tracing of Physical Simulations Jonathan Cohen.

Jonathan CohenSIGGRAPH 2007 San Diego

FRAME 240--------------------------

Type: <top level> Type:ContSphereUniformGridCollision (X,Y,Z) = 23, 38, 87 efficiency 3.92304 Type:ContSphereUniformGridCollision (X,Y,Z) = 41, 440, 62 efficiency 0.164151Acceleration data structure memory usage: 2.86844e+07Total memory usage: 3.25038e+08

Trace Output – Second try

Page 20: Dynamic Execution Tracing of Physical Simulations Jonathan Cohen.

Jonathan CohenSIGGRAPH 2007 San Diego

FRAME 240--------------------------

Type: <top level> Type:ContSphereUniformGridCollision (X,Y,Z) = 23, 38, 87 efficiency 3.92304 Type:ContSphereUniformGridCollision (X,Y,Z) = 41, 440, 62 efficiency 0.164151Acceleration data structure memory usage: 2.86844e+07Total memory usage: 3.25038e+08

Trace Output – Second try

Page 21: Dynamic Execution Tracing of Physical Simulations Jonathan Cohen.

Jonathan CohenSIGGRAPH 2007 San Diego

Found a bug in the Heuristic!

• Splitting threshold was set so that it could never succeed

• Code was never splitting

• Validate (with another sstrace script):

– cumulative time: 107.553 sec (old)

Page 22: Dynamic Execution Tracing of Physical Simulations Jonathan Cohen.

Jonathan CohenSIGGRAPH 2007 San Diego

Found a bug in the Heuristic!

• Splitting threshold was set so that it could never succeed

• Code was never splitting

• Validate (with another sstrace script):

– cumulative time: 107.553 sec (old)

– cumulative time: 82.6091 sec (new)

Page 23: Dynamic Execution Tracing of Physical Simulations Jonathan Cohen.

Jonathan CohenSIGGRAPH 2007 San Diego

Type: <top level> Type:ContSphereUniformGridCollision (X,Y,Z) = 23, 38, 87 efficiency 3.96249 Type:ContSphereMultiCollision Type:ContSphereUniformGridCollision (X,Y,Z) = 32, 18, 24 efficiency 8.99161 Type:ContSphereMultiCollision Type:ContSphereUniformGridCollision (X,Y,Z) = 26, 150, 20 efficiency 0.387179 Type:ContSphereMultiCollision Type:ContSphereMultiCollision Type:ContSphereBruteForceCollision Type:ContSphereBruteForceCollision Type:ContSphereMultiCollision Type:ContSphereBruteForceCollision Type:ContSphereBruteForceCollisionAcceleration data structure memory usage: 5.63038e+06Total memory usage: 3.10231e+08

Trace Output – Third try

Page 24: Dynamic Execution Tracing of Physical Simulations Jonathan Cohen.

Jonathan CohenSIGGRAPH 2007 San Diego

sstrace Run-Time

• In static constructor, loads sstrace script based on environment variable

• Parse each probe, build master list of active probes and stores pre-parsed commands

• Each probe associated with command list

• Commands triggered at run-time

Page 25: Dynamic Execution Tracing of Physical Simulations Jonathan Cohen.

Jonathan CohenSIGGRAPH 2007 San Diego

Implementation

• Triggers are C++ macros, may be disabled with compile-time option

• Total overhead for probes ~5%

• Probe binding during static constructor

– Pro: minimize overhead when probes disabled

– Con: Can't change trace script after program launch

Page 26: Dynamic Execution Tracing of Physical Simulations Jonathan Cohen.

Jonathan CohenSIGGRAPH 2007 San Diego

Implementation

#define T_PROBE_FUNCTION1(BASENAME, ARG0) \ static THookToProbe *__hook = TInitializeProbe(BASENAME); \ TProbeFunctionRef __probe_function; \ if (__hook) __probe_function = \ new TProbeFunction(__hook, TDataList(ARG0))

FluidSim::Step(float dt) { T_PROBE_FUNCTION1(“sim:FluidSim@Step”, dt); ...}

Page 27: Dynamic Execution Tracing of Physical Simulations Jonathan Cohen.

Jonathan CohenSIGGRAPH 2007 San Diego

Implementation

#define T_PROBE_FUNCTION1(BASENAME, ARG0) \ static THookToProbe *__hook = TInitializeProbe(BASENAME); \ TProbeFunctionRef __probe_function; \ if (__hook) __probe_function = \ new TProbeFunction(__hook, TDataList(ARG0))

• __hook is bound statically

• If BASENAME is never referenced in the script, TInitializeProbe

returns NULL

Page 28: Dynamic Execution Tracing of Physical Simulations Jonathan Cohen.

Jonathan CohenSIGGRAPH 2007 San Diego

Implementation

#define T_PROBE_FUNCTION1(BASENAME, ARG0) \ static THookToProbe *__hook = TInitializeProbe(BASENAME); \ TProbeFunctionRef __probe_function; \ if (__hook) __probe_function = \ new TProbeFunction(__hook, TDataList(ARG0))

• TProbeFunctionRef is a smart pointer

• Basically like std::auto_ptr

Page 29: Dynamic Execution Tracing of Physical Simulations Jonathan Cohen.

Jonathan CohenSIGGRAPH 2007 San Diego

Implementation

#define T_PROBE_FUNCTION1(BASENAME, ARG0) \ static THookToProbe *__hook = TInitializeProbe(BASENAME); \ TProbeFunctionRef __probe_function; \ if (__hook) __probe_function = \ new TProbeFunction(__hook, TDataList(ARG0))

• Since __hook is bound statically, one test per function call

• TProbeFunction triggers “enter” and “exit” probes in its constructor and

destructor

• Passes ARG0 down to the sstrace run-time as $ARG0

Page 30: Dynamic Execution Tracing of Physical Simulations Jonathan Cohen.

Jonathan CohenSIGGRAPH 2007 San Diego

Related Work

• Solaris DTRACE

– Same concept, but probes operate at kernel level (e.g. break on file IO, thread start, timers, etc.)

– DTRACE does everything sstrace can do & more

• Aspect Oriented Programming (AOP)

– “aspects” not “objects” - dynamic emergent entities

– “code weaver” interleaves aspects with rest of code

Page 31: Dynamic Execution Tracing of Physical Simulations Jonathan Cohen.

Jonathan CohenSIGGRAPH 2007 San Diego

Future

• Get a real interpreter

• Hook up 2D/3D visualization tools

• Allow control to pass to user (like gdb breakpoint) for interactive queries

Page 32: Dynamic Execution Tracing of Physical Simulations Jonathan Cohen.

Jonathan CohenSIGGRAPH 2007 San Diego

An idea...

• What if this were a standard library?

• All 3rd party applications could use the same trace language

• Maybe Sun DTRACE team will do this?

– User-level DTRACE for compatibility with non-Solaris/BSD applications

Page 33: Dynamic Execution Tracing of Physical Simulations Jonathan Cohen.

Jonathan CohenSIGGRAPH 2007 San Diego

Thanks

• Entire Sandstorm development team

• Spider-Man 3 sand team

• DTRACE team for the idea