Script Preparation code:
x
 
var N = 1000000;
var x = new Float32Array(N);
var y = new Float32Array(N);
var z = new Float32Array(N);
var interlaced = new Float32Array(3*N);
var vectors = [];
for (var i = 0, li=x.length; i < li; ++i) {
    x[i] = Math.random();
    y[i] = Math.random();
    z[i] = Math.random();
    vectors.push( {x: Math.random(), y: Math.random(), z: Math.random()} );
}
for (var i = 0, li=interlaced.length; i < li; ++i) {
    interlaced[i] = Math.random();
}
var vector;
Tests:
  • AoS

     
    for (var i = 0, li=vectors.length; i < li; ++i) {
        vector = vectors[i];
        vector.x = 2 * vector.x;
        vector.y = 2 * vector.y;
        vector.z = 2 * vector.z;
    }
  • SoA

     
    for (var i = 0, li=x.length; i < li; ++i) {
        x[i] = 2 * x[i];
        y[i] = 2 * y[i];
        z[i] = 2 * z[i];
    }
  • Interlaced Array - no loop unrolling

     
    for (var i = 0, li=interlaced.length; i < li; ++i) {
        interlaced[i] = 2*interlaced[i];
    }
  • Interlaced Array - with loop unrolling

     
    for (var i = 0, li=interlaced.length; i < li; i+=3) {
        interlaced[i] = 2*interlaced[i];
        interlaced[i+1] = 2*interlaced[i+1];
        interlaced[i+2] = 2*interlaced[i+2];
    }
  • SoA - one component per loop

     
    for (var i = 0, li=x.length; i < li; ++i) {
        x[i] = 2 * x[i];
    }
    for (var i = 0, li=y.length; i < li; ++i) {
        y[i] = 2 * y[i];
    }
    for (var i = 0, li=z.length; i < li; ++i) {
        z[i] = 2 * z[i];
    }
Rendered benchmark preparation results:

Suite status: <idle, ready to run>

Previous results

Experimental features:

  • Test case name Result
    AoS
    SoA
    Interlaced Array - no loop unrolling
    Interlaced Array - with loop unrolling
    SoA - one component per loop

    Fastest: N/A

    Slowest: N/A

Latest run results:
Run details: (Test run date: 3 years ago)
Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1
Mobile Safari 14 on iOS 14.7.1
View result in a separate tab
Test name Executions per second
AoS 1.3 Ops/sec
SoA 1.8 Ops/sec
Interlaced Array - no loop unrolling 1.8 Ops/sec
Interlaced Array - with loop unrolling 1.6 Ops/sec
SoA - one component per loop 0.7 Ops/sec