2 ms·
Amazing! I'm one of the main contributors to the Three.JS math library and I am always looking for speed improvements. Can you help me understand the benchmar
by bhouston 9y ago
Amazing! I'm one of the main contributors to the Three.JS math library and I am always looking for speed improvements.
Can you help me understand the benchmarks because there is some weirdness in them. Usually I can make sense of JS benchmarks, either it is memory allocations, deoptimization, function overhead, implicit conversions, etc.
Specifically these results:
https://maierfelix.github.io/glmw/mat4/ https://maierfelix.github.io/glmw/mat4/
mat4.create:
GLM: 0.3000000142492354ms
GLMW: 0.2999999560415745ms
mat4.copy:
GLM: 4.399999976158142ms
GLMW: 0.5000000237487257ms
mat4.set:
GLM: 6.999999983236194ms
GLMW: 6.800000031944364ms
mat4.identity:
GLM: 2.800000016577542ms
GLMW: 0.4000000189989805ms
Each of the above operations appears to be a series of 16 assignments in order, and some of the above have an additional allocation first.
These options sometimes it takes the same amount of time in JS and WA and sometimes WA is way faster. Any idea as to why?
The one that is weirdest above is that mat4.create is faster than mat4.identity, but mat4.create does more, specifically an allocation? I am struggling to make a mental model of why that is?
Also why is perspective so slow in WA:
mat4.perspective:
GLM: 4.799999995157123ms
GLMW: 4.499999980907887ms
It is a tiny bit of math, with a tan and then 16 assignments. Is tan that slow?
I sort of think there is something wrong with the benchmarking.
- bhouston 9y agoI see that you used a custom benchmarking library. I think that is the problem and why I can not make sense of the results. I suggest https://benchmarkjs.com/ https://benchmarkjs.com/ It is what we use for Three.JS benchmarking.
- beiller 9y agoIm just thinking of ways to patch this in to THREE.Matrix4 :) Do you think that would speed things up significantly? Like I have large many-bones skeletons that can take time to animate.
- bhouston 9y agoUntil I see reliable benchmarks and understand why Matrix4 is slow I do not know. I think that the speed difference may be mostly related to avoiding allocations as in WA it is mostly just views rather than new ArrayBuffers if I am not mistaken. I thought everything else should be fast. But I need to see the benchmarks accurately to know.