Various benchmarks for the Möller-Trumbore intersection algorithm.
Uses the canonical vector example as reference (translated from the CPP example here)
Current implementations:
canonical_f32canonical_f32_force_inline(force inlined in the benchmark procedure)decomposed_f32(decomposed into scalar operations (no vector ops))decomposed_f32_force_inlinedecomposed_f32_soa(uses#soafor memory layout)decomposed_f32_soa_force_inline
Saves output to a buffer. Output buffer layout can be switched between AoS and SoA.
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%)
--------------------------------------------------------------------------------
- There seems to be some inconsistency between the
decomposed_f32_force_inlineanddecomposed_f32_soa_force_inlineresults when running with-o:speedand/or-o:aggressive. I'm not entirely sure why this is the case. Increasing/decreasing triangle count does not seem to be a factor.