Following up on my earlier mails about Float32Array/List performance I have done some initial benchmarking of 4x4 matrix multiply, 4x4 matrix inverse, and 4D vector transform by 4x4 matrix. The benchmark compares DartVectorMath, glmatrix.dart, and a new feature to the DartVM I've been working on- Float32List SIMD (SSE) operations:
Each benchmark is averaged over 10 runs of 20,000 iterations. See the raw results below.
glmatrix.dart performance is _really_ bad, I'm guessing that this is largely a result of the Float32List performance issue I pointed out in the other thread.
DartVectorMath performance is okay. It actually beats the SIMD backend for vector transforms.
SIMD performance is 2x faster for matrix * matrix, 4x faster for matrix inverse, and 50% slower for vector transform.
Starting benchmark
Clock frequency: 1000000
=============================================
Matrix Multiplication
=============================================
Avg: 14.59 ms Min: 10.161 ms Max: 22.927 ms (Avg: 14590 Min: 10161 Max: 22927)
=============================================
Matrix Multiplication SIMD
=============================================
Avg: 8.702 ms Min: 8.475 ms Max: 9.217 ms (Avg: 8702 Min: 8475 Max: 9217)
=============================================
Matrix Multiplication glmatrix.dart
=============================================
Avg: 283.353 ms Min: 272.062 ms Max: 287.988 ms (Avg: 283353 Min: 272062 Max: 287988)
=============================================
mat4x4 inverse
=============================================
Avg: 28.289 ms Min: 21.019 ms Max: 34.891 ms (Avg: 28289 Min: 21019 Max: 34891)
=============================================
mat4x4 inverse SIMD
=============================================
Avg: 7.107 ms Min: 6.89 ms Max: 7.754 ms (Avg: 7107 Min: 6890 Max: 7754)
=============================================
mat4x4 glmatrix.dart
=============================================
Avg: 318.909 ms Min: 315.435 ms Max: 325.831 ms (Avg: 318909 Min: 315435 Max: 325831)
=============================================
vector transform
=============================================
Avg: 4.324 ms Min: 2.811 ms Max: 14.859 ms (Avg: 4324 Min: 2811 Max: 14859)
=============================================
vector transform SIMD
=============================================
Avg: 6.415 ms Min: 6.204 ms Max: 7.006 ms (Avg: 6415 Min: 6204 Max: 7006)
=============================================
vector transform glmatrix.dart
=============================================
Avg: 144.431 ms Min: 138.263 ms Max: 153.798 ms (Avg: 144431 Min: 138263 Max: 153798)