Multidimensional array vs inlinearray

Benchmark created by Tymoteusz Beczek on


Setup

var multidimensional_array_create = function(size) {
        var array_4d = new Array(size);
    
        for(var x = 0; x < size; x++) {
                array_4d[x] = new Array(size);
                var array_4d_x = array_4d[x];
    
                for(var y = 0; y < size; y++) {
                        array_4d_x[y] = new Array(size);
                        var array_4d_y = array_4d_x[y];
    
                        for(var z = 0; z < size; z++) {
                                array_4d_y[z] = new Array(size);
                                var array_4d_z = array_4d_y[z];
    
                                for(var i = 0; i < size; i++) {
                                        array_4d_z[i] = i + 1;
                                }
                        }
                }
        }
    
        return array_4d;
    };
    
    var multidimensional_array_read = function(size, array_4d) {
        var sum = 0;
    
        for(var x = 0; x < size; x++) {
                var array_4d_x = array_4d[x];
    
                for(var y = 0; y < size; y++) {
                        var array_4d_y = array_4d_x[y];
    
                        for(var z = 0; z < size; z++) {
                                var array_4d_z = array_4d_y[z];
    
                                for(var i = 0; i < size; i++) {
                                        sum += array_4d_z[i];
                                }
                        }
                }
        }
    
        return sum;
    };
    
    var multidimensional_array_write = function(size, array_4d) {
        for(var x = 0; x < size; x++) {
                var array_4d_x = array_4d[x];
    
                for(var y = 0; y < size; y++) {
                        var array_4d_y = array_4d_x[y];
    
                        for(var z = 0; z < size; z++) {
                                var array_4d_z = array_4d_y[z];
    
                                for(var i = 0; i < size; i++) {
                                        array_4d_z[i] += 10;
                                }
                        }
                }
        }
    };
    
    var inline_array_create = function(size) {
        var array_4d = new Array(size * size * size * size);
    
        var size3 = size * size * size;
        var size2 = size * size;
    
        for(var x = 0; x < size; x++) {
                var x_offset = x * size3;
    
                for(var y = 0; y < size; y++) {
                        var y_offset = y * size2 + x_offset;
    
                        for(var z = 0; z < size; z++) {
                                var z_offset = z * size + y_offset;
    
                                for(var i = 0; i < size; i++) {
                                        array_4d[i + z_offset] = i + 1;
                                }
                        }
                }
        }
    
        return array_4d;
    };
    
    var inline_array_read = function(size, array_4d) {
        var sum = 0;
    
        var size2 = size * size;
        var size3 = size2 * size;
    
        for(var x = 0; x < size; x++) {
                var x_offset = x * size3;
    
                for(var y = 0; y < size; y++) {
                        var y_offset = y * size2 + x_offset;
    
                        for(var z = 0; z < size; z++) {
                                var z_offset = z * size + y_offset;
    
                                for(var i = 0; i < size; i++) {
                                        sum += array_4d[i + z_offset];
                                }
                        }
                }
        }
    
        return sum;
    };
    
    var inline_array_write = function(size, array_4d) {
        var size2 = size * size;
        var size3 = size2 * size;
    
        for(var x = 0; x < size; x++) {
                var x_offset = x * size3;
    
                for(var y = 0; y < size; y++) {
                        var y_offset = y * size2 + x_offset;
    
                        for(var z = 0; z < size; z++) {
                                var z_offset = z * size + y_offset;
    
                                for(var i = 0; i < size; i++) {
                                        array_4d[i + z_offset] += 10;
                                }
                        }
                }
        }
    };
    
    var multidimensional_array = function() {
        for(var size = 1; size <= 32; size *= 2) {
                var array = multidimensional_array_create(size);
                console.log(size, multidimensional_array_read(size, array));
                multidimensional_array_write(size, array);
        }
    };
    
    var inline_array = function() {
        for(var size = 1; size <= 32; size *= 2) {
                var array = inline_array_create(size);
                console.log(size, inline_array_read(size, array));
                inline_array_write(size, array);
        }
    };

Test runner

Ready to run.

Testing in
TestOps/sec
Multidimensional array
multidimensional_array();
ready
Inline array
inline_array();
ready

Revisions

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

  • Revision 1: published by Tymoteusz Beczek on