diff --git a/Node/forkpi.js b/Node/forkpi.js index 182813268391a8f41f41a18b850d2b0e77b11e96..f3901a6f6f77ea70737b4519bd401aad4ffd70df 100644 --- a/Node/forkpi.js +++ b/Node/forkpi.js @@ -6,21 +6,23 @@ // const points = 1e8 const { fork } = require('child_process') -var processes = 1 +var processes = parseInt(process.argv[2]) var pi = 0 var results = 0 var tstart = Date.now()/1000 -const forked = fork('child.js','1') -forked.on('message',(result) => { +for (let i = 0; i < processes; ++i) { + id = fork('forkspi.js',[i,points]) + id.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() - } - }) + 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 index 769a8cf85656690d664f5608eb8bd749f8a82af8..8582cd789789806ebb701542b720556d59bc8c50 100644 --- a/Node/forkspi.js +++ b/Node/forkspi.js @@ -1,75 +1,17 @@ // -// clusterpi.js +// forkspi.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) - }) - } +var index = parseInt(process.argv[2]) +var points = parseInt(process.argv[3]) +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)