o
odin.langpkg.dev
packages / library / odin-ray-triangle-intersection-benchmarks

odin-ray-triangle-intersection-benchmarks

1cd2a06library

No description provided.

No license · updated 3 weeks ago

Odin Benchmarks for Ray Triangle Intersection

Various benchmarks for the Möller-Trumbore intersection algorithm.

Uses the canonical vector example as reference (translated from the CPP example here)

Current implementations:

  1. canonical_f32
  2. canonical_f32_force_inline (force inlined in the benchmark procedure)
  3. decomposed_f32 (decomposed into scalar operations (no vector ops))
  4. decomposed_f32_force_inline
  5. decomposed_f32_soa (uses #soa for memory layout)
  6. decomposed_f32_soa_force_inline

Saves output to a buffer. Output buffer layout can be switched between AoS and SoA.


Current Results:

Optimization: None

task: [run] odin run . -o:none
--------------------------------------------------------------------------------
Benchmarking: Ray Triangle Intersection
  CPU              : AMD Ryzen 7 5800X3D 8-Core Processor
  RAM              : Total Ram 62Gb / Free Ram 57Gb
  Optimization Mode: None
  SoA Output       : true (when applicable)
RunTimeConfig:
  Triangle Count: 1000000
--------------------------------------------------------------------------------
Running:
  benchmark: decomposed_f32_soa_force_inline
  benchmark: decomposed_f32_force_inline
  benchmark: decomposed_f32_soa
  benchmark: canonical_f32_force_inline
  benchmark: canonical_f32
  benchmark: decomposed_f32
--------------------------------------------------------------------------------
Comparison:
  Reference Duration: 251.97024499999998 (ms)
--------------------------------------------------------------------------------
benchmark:                            canonical_f32	(+0.000%)	--- REFERENCE ---
benchmark:               canonical_f32_force_inline	(-0.259%)	
benchmark:              decomposed_f32_force_inline	(-75.689%)	
benchmark:                           decomposed_f32	(-76.067%)	
benchmark:          decomposed_f32_soa_force_inline	(-77.077%)	
benchmark:                       decomposed_f32_soa	(-77.125%)	
--------------------------------------------------------------------------------

Optimization: Minimal

--------------------------------------------------------------------------------
Benchmarking: Ray Triangle Intersection
  CPU              : AMD Ryzen 7 5800X3D 8-Core Processor
  RAM              : Total Ram 62Gb / Free Ram 57Gb
  Optimization Mode: Minimal
  SoA Output       : true (when applicable)
RunTimeConfig:
  Triangle Count: 1000000
--------------------------------------------------------------------------------
Running:
  benchmark: canonical_f32
  benchmark: decomposed_f32_force_inline
  benchmark: decomposed_f32_soa
  benchmark: decomposed_f32_soa_force_inline
  benchmark: decomposed_f32
  benchmark: canonical_f32_force_inline
--------------------------------------------------------------------------------
Comparison:
  Reference Duration: 47.061641 (ms)
--------------------------------------------------------------------------------
benchmark:                            canonical_f32	(+0.000%)	--- REFERENCE ---
benchmark:               canonical_f32_force_inline	(-9.499%)	
benchmark:                           decomposed_f32	(-15.434%)	
benchmark:                       decomposed_f32_soa	(-22.603%)	
benchmark:              decomposed_f32_force_inline	(-28.084%)	
benchmark:          decomposed_f32_soa_force_inline	(-33.403%)	
--------------------------------------------------------------------------------

Optimization: Speed

--------------------------------------------------------------------------------
Benchmarking: Ray Triangle Intersection
  CPU              : AMD Ryzen 7 5800X3D 8-Core Processor
  RAM              : Total Ram 62Gb / Free Ram 57Gb
  Optimization Mode: Speed
  SoA Output       : true (when applicable)
RunTimeConfig:
  Triangle Count: 1000000
--------------------------------------------------------------------------------
Running:
  benchmark: decomposed_f32_soa_force_inline
  benchmark: decomposed_f32_force_inline
  benchmark: decomposed_f32_soa
  benchmark: canonical_f32_force_inline
  benchmark: canonical_f32
  benchmark: decomposed_f32
--------------------------------------------------------------------------------
Comparison:
  Reference Duration: 25.902774 (ms)
--------------------------------------------------------------------------------
benchmark:                       decomposed_f32_soa	(+13.505%)	
benchmark:                           decomposed_f32	(+9.132%)	
benchmark:                            canonical_f32	(+0.000%)	--- REFERENCE ---
benchmark:               canonical_f32_force_inline	(-3.031%)	
benchmark:              decomposed_f32_force_inline	(-4.973%)	
benchmark:          decomposed_f32_soa_force_inline	(-8.112%)	
--------------------------------------------------------------------------------

Optimization: Aggresive

--------------------------------------------------------------------------------
Benchmarking: Ray Triangle Intersection
  CPU              : AMD Ryzen 7 5800X3D 8-Core Processor
  RAM              : Total Ram 62Gb / Free Ram 57Gb
  Optimization Mode: Aggressive
  SoA Output       : true (when applicable)
RunTimeConfig:
  Triangle Count: 1000000
--------------------------------------------------------------------------------
Running:
  benchmark: decomposed_f32_soa
  benchmark: canonical_f32_force_inline
  benchmark: canonical_f32
  benchmark: decomposed_f32
  benchmark: decomposed_f32_soa_force_inline
  benchmark: decomposed_f32_force_inline
--------------------------------------------------------------------------------
Comparison:
  Reference Duration: 25.074840999999999 (ms)
--------------------------------------------------------------------------------
benchmark:                       decomposed_f32_soa	(+16.856%)	
benchmark:                           decomposed_f32	(+13.464%)	
benchmark:               canonical_f32_force_inline	(+2.062%)	
benchmark:                            canonical_f32	(+0.000%)	--- REFERENCE ---
benchmark:          decomposed_f32_soa_force_inline	(-1.338%)	
benchmark:              decomposed_f32_force_inline	(-5.736%)	
--------------------------------------------------------------------------------

NOTES

  1. There seems to be some inconsistency between the decomposed_f32_force_inline and decomposed_f32_soa_force_inline results when running with -o:speed and/or -o:aggressive. I'm not entirely sure why this is the case. Increasing/decreasing triangle count does not seem to be a factor.