diff --git a/Node/workerpi.js b/Node/workerpi.js new file mode 100644 index 0000000000000000000000000000000000000000..d7ae629eb91d065880135c1a83902f3d7832a8b3 --- /dev/null +++ b/Node/workerpi.js @@ -0,0 +1,46 @@ +// +// workerpi.js +// Neil Gershenfeld 12/11/18 +// pi calculation benchmark +// pi = 3.14159265358979323846 +// +const {Worker} = require('worker_threads') +var points = 1e9 +var thread = + ` + const Worker = require('worker_threads') + Worker.parentPort.on('message',(msg) => { + var index = msg.index + var points = msg.points + var a = 0.5 + var b = 0.75 + var c = 0.25 + var sum = 0 + var start = 1+points*index + var end = points*(index+1) + for (var i = start; i <= end; ++i) + sum += a/((i-b)*(i-c)) + Worker.parentPort.postMessage(sum) + }) + ` +var workers = parseInt(process.argv[2]) +var results = 0 +var pi = 0 +var tstart = Date.now()/1000 +for (let i = 0; i < workers; ++i) { + var worker = new Worker(thread,{eval:true}) + worker.on('message',(sum) => { + results += 1 + pi += sum + if (results == workers) { + var tend = Date.now()/1000 + var mflops = (workers*points)*5.0*1e-6/(tend-tstart) + console.log('pi: '+pi) + console.log('time: '+(tend-tstart).toFixed(1)+'s') + console.log('workers: '+workers) + console.log('estimated MFlops: '+mflops.toFixed(1)) + process.exit() + } + }) + worker.postMessage({index:i,points:points}) + }