Skip to content

Instantly share code, notes, and snippets.

@d3x0r
Created April 6, 2018 22:02
Show Gist options
  • Save d3x0r/be849400be3ea30877568e5656a86ca3 to your computer and use it in GitHub Desktop.
Save d3x0r/be849400be3ea30877568e5656a86ca3 to your computer and use it in GitHub Desktop.
Simplified, Slow version that causes deoptimization
function pcg_setseq_128_srandom_r()
{
//const state = new Uint32Array([0,0,0,0,0,0,0,0]);
const state = [0,0,0,0,0,0,0,0];
const b = [ 0x7F2D, 0x4C95, 0xF42D, 0x5851 ];
const c = [ 0x7F2D, 0x4C95, 0xF42D, 0x5851 ];
const rng = {
state: new Uint32Array([0,0,0,0,0,0,0,0]),
inc: [ 0x7F2D, 0x4C95, 0xF42D, 0x5851 ],
get : null // will be the step and output function pair
}
function pcg_setseq_64_xsh_rr_32_r( )
{
//const a = rng.state;
var a = state;
//var a = rng.state;//new Uint32Array([0,0,0,0,0,0,0,0]);
/* some work on 'rng.state' */
var over = 0;
over = ( (a[0]*b[0])+c[0] );
a[0] = over & 0xFFFF; over >>>= 16;
over += ( (a[1]*b[1])+c[1] );
const s1 = a[1] = over & 0xFFFF; over >>>= 16;
over += ( (a[2]*b[2])+c[2] );
const s2 = a[2] = over & 0xFFFF; over >>>= 16;
over += ( (a[3]*b[3])+c[3] );
const s3 = a[3] = over & 0xFFFF; over >>>= 16;
return over;
}
rng.get = pcg_setseq_64_xsh_rr_32_r;
rng.get();
return rng;
}
var n, m;
var testRng = pcg_setseq_128_srandom_r( )
console.log( testRng );
var start = Date.now();
for( n = 0; n < 10000; n++ )
for( m = 0; m < 10000; m++ ) {
testRng.get();
}
console.log( "Done in ", Date.now() - start, "/ms", (m*n)/(Date.now()-start), ((m*n)/(Date.now()-start)) * 32 );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment