CPU cache microbenchmark

HTML

<script src="https://github.com/bestiejs/benchmark.js/raw/master/benchmark.js"></script>
<div id='log'/>

JavaScript

var logs=document.getElementById('log');
console.log= function(s){
var e=document.createElement('pre');
    e.innerHTML=s;
    logs.insertBefore(e);
}

'use strict';
//var Benchmark=require('benchmark');
var N = 500000; // 1m

function randperm(maxValue){
    // first generate number sequence
    var permArray = new Array(maxValue);
    for(var i = 0; i < maxValue; i++){
        permArray[i] = i;
    }
    // draw out of the number sequence
    for (var i = (maxValue - 1); i >= 0; --i){
        var randPos = Math.floor(i * Math.random());
        var tmpStore = permArray[i];
        permArray[i] = permArray[randPos];
        permArray[randPos] = tmpStore;
    }
    return permArray;
}


function sum(arr){
    var s = 0;
    for (var i=0; i<N; i++){
        s+=arr[i].el;
    }
    return s;
}

function revSum(arr){
    var s = 0;
    for (var i=N-1; i>=0; i--){
        s+=arr[i].el;
    }
    return s;
}


function Wrapper(v){
    this.el=v;
}

var el=function(){
    return new Wrapper(1.1);
};


function genLinear(){
    var arr = Array(N);
    for (var i=0; i<N; i++){
        arr[i]=el();
    }
    return arr;
}

function genReverse(){
    var arr = Array(N);
    for (var i=N-1; i>=0; i--){
        arr[i]=el();
    }
    return arr;
}

function genRandom(){
    var arr = Array(N);
    randperm(N).forEach(function (i) {
        arr[i]=el();
    });
    return arr;
}

function genRandom(randPerm){
    var arr = Array(N);
    randperm.forEach(function (i) {
        arr[i]=el();
    });
    return arr;
}

var l = genLinear();
var r = genReverse();
var randPerm = randperm(N);
var rand = genRandom(randPerm);

console.log(sum(l)==sum(r) && sum(l)==sum(rand) && sum(l)==revSum(r));

var suite = new Benchmark.Suite;
suite.add('linear sum', function() {
    sum(l);
}).add('reverse sum', function() {
    sum(r);
}).add('scan in reverse sum', function() {
    revSum(l);
}).add('random sum', function() {
    sum(rand);
}).on('cycle', function(event, bench) {
   ...