toji / gl-matrix

Javascript Matrix and Vector library for High Performance WebGL apps
glmatrix.net
MIT License
5.4k stars 725 forks source link

`Array` vs `Float32Array`: Performance measurements (again) #465

Open psnet opened 8 months ago

psnet commented 8 months ago

TL;DR

Float32Array is faster for IO operations than usual Array. Only creation of new objects is slower for Float32Array.

Measurements

I saw issues there about complains of performance and I did recent clean and exact measurements about casual Array vs Float32Array:

https://www.measurethat.net/Benchmarks/Show/30129/3/array-vs-float32array-performance-test

And IO operations with Float32Array are 2x FASTER than usual Array. Array wins only in creation of new objects (arrays). But if we create needed data (preallocated) before main render loop (cycle) then Float32Array is big win.

Summary

So I want to say author should not remove support of Float32Array and still use approach available now: default is Float32Array but you can change it by method glMatrix.setMatrixArrayType(Array)

snowfrogdev commented 1 month ago

TL;DR

Float32Array is faster for IO operations than usual Array. Only creation of new objects is slower for Float32Array.

Measurements

I saw issues there about complains of performance and I did recent clean and exact measurements about casual Array vs Float32Array:

https://www.measurethat.net/Benchmarks/Show/30129/3/array-vs-float32array-performance-test

And IO operations with Float32Array are 2x FASTER than usual Array. Array wins only in creation of new objects (arrays). But if we create needed data (preallocated) before main render loop (cycle) then Float32Array is big win.

Summary

So I want to say author should not remove support of Float32Array and still use approach available now: default is Float32Array but you can change it by method glMatrix.setMatrixArrayType(Array)

When I run your benchmark suite on my computer (Windows - Chrome 129) the Array beats the TypedArray in all tests except for sort.

image