diff --git a/Node/forkpi.js b/Node/forkpi.js new file mode 100644 index 0000000000000000000000000000000000000000..182813268391a8f41f41a18b850d2b0e77b11e96 --- /dev/null +++ b/Node/forkpi.js @@ -0,0 +1,26 @@ +// +// forkpi.js +// Neil Gershenfeld 12/8/18 +// pi calculation benchmark +// pi = 3.14159265358979323846 +// +const points = 1e8 +const { fork } = require('child_process') +var processes = 1 +var pi = 0 +var results = 0 +var tstart = Date.now()/1000 +const forked = fork('child.js','1') +forked.on('message',(result) => { + pi += result + results += 1 + if (results == processes) { + var tend = Date.now()/1000 + var mflops = (processes*points)*5.0*1e-6/(tend-tstart) + console.log('pi: '+pi) + console.log('time: '+(tend-tstart).toFixed(1)+'s') + console.log('processes: '+processes) + console.log('estimated MFlops: '+mflops.toFixed(1)) + process.exit() + } + }) diff --git a/Node/forkspi.js b/Node/forkspi.js new file mode 100644 index 0000000000000000000000000000000000000000..769a8cf85656690d664f5608eb8bd749f8a82af8 --- /dev/null +++ b/Node/forkspi.js @@ -0,0 +1,75 @@ +// +// clusterpi.js +// Neil Gershenfeld 11/23/18 +// pi calculation benchmark +// pi = 3.14159265358979323846 +// + + +const points = 1e8 + +const { fork } = require('child_process'); + +const forked = fork('child.js'); + +forked.on('message', (msg) => { + console.log('Message from child', msg); +}); + +forked.send({ hello: 'world' }); + +process.on('message', (msg) => { + console.log('Message from parent:', msg); +}); + +let counter = 0; + +setInterval(() => { + process.send({ counter: counter++ }); +}, 1000); + +function master() { + var processes = require('os').cpus().length + var tstart = Date.now()/1000 + for (var i = 0; i < processes; i++) + cluster.fork() + var index = 0 + var pi = 0 + var results = 0 + for (const id in cluster.workers) { + var worker = cluster.workers[id] + worker.on('message',(result) => { + pi += result + results += 1 + if (results == processes) { + var tend = Date.now()/1000 + var mflops = (processes*points)*5.0*1e-6/(tend-tstart) + console.log('pi: '+pi) + console.log('time: '+(tend-tstart).toFixed(1)+'s') + console.log('processes: '+processes) + console.log('estimated MFlops: '+mflops.toFixed(1)) + process.exit() + } + }) + function send(index) { + return function() { + worker.send(index) + } + } + worker.on('online',send(index)) + index += 1 + } + } +function child() { + process.on('message',(index) => { + 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)) + process.send(sum) + }) + }