Accessing Speed (v2)

Revision 2 of this benchmark created by James on


Description

SoA vs AoS

Setup

var COUNT = 500;
    
    var objects = [];
    var f32Foo = new Float32Array(COUNT);
    var f32Bar = new Float32Array(COUNT);
    var f32Out = new Float32Array(COUNT);
    var arrFoo = [];
    var arrBar = [];
    var arrOut = [];
    var i32Foo = new Int32Array(COUNT);
    var i32Bar = new Int32Array(COUNT);
    var i32Out = new Int32Array(COUNT);
    
    for (var i = 0; i < COUNT; ++i) {
      objects.push({
        foo: i,
        bar: i + 1,
        out: 0
      });
      f32Foo[i] = i;
      f32Bar[i] = i + 1;
      f32Out[i] = 0;
      i32Foo[i] = i;
      i32Bar[i] = i + 1;
      i32Out[i] = 0;
      arrFoo.push(i);
      arrBar.push(i + 1);
      arrOut.push(0);
    }

Test runner

Ready to run.

Testing in
TestOps/sec
Float32Array
for (var i = 0; i < COUNT; ++i) {
  var foo = f32Foo[i];
  var bar = f32Bar[i];
  f32Out[i] = foo + bar;
}
ready
Objects
for (var i = 0; i < COUNT; ++i) {
  var obj = objects[i];
  var foo = obj.foo;
  var bar = obj.bar;
  obj.out = foo + bar;
}
ready
Int32Array
for (var i = 0; i < COUNT; ++i) {
  var foo = i32Foo[i];
  var bar = i32Bar[i];
  i32Out[i] = foo + bar;
}
ready
Array
for (var i = 0; i < COUNT; ++i) {
  var foo = arrFoo[i];
  var bar = arrBar[i];
  arrOut[i] = foo + bar;
}
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.

  • Revision 2: published by James on