diff --git a/Node/clusterpi.js b/Node/clusterpi.js new file mode 100644 index 0000000000000000000000000000000000000000..61b49af5ce9c5ccaf873149d5b0fdaf1b316da70 --- /dev/null +++ b/Node/clusterpi.js @@ -0,0 +1,57 @@ +// +// clusterpi.js +// Neil Gershenfeld 11/23/18 +// pi calculation benchmark +// pi = 3.14159265358979323846 +// +const cluster = require('cluster') +const points = 1e8 +if (cluster.isMaster) + master() +else + child() +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) + }) + } diff --git a/README.md b/README.md index 7a90a824684b949c56502357c1eab63536d249e0..edfb9ebdf86209a69911982cef8cdb1aa6cacc5b 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ |9.371|[pi.c](C/pi.c)|C<br>gcc pi.c -o pi -lm -O3 -ffast-math|Intel i7-8700T|Nov 17, 2018| |3.734|[pi.html](https://pub.pages.cba.mit.edu/pi/JavaScript/pi.html)|JavaScript, 1 worker|Intel i7-8700T|Nov 17, 2018| |3.472|[pi.html](https://pub.pages.cba.mit.edu/pi/JavaScript/pi.html)|JavaScript, 1 worker|Intel 2x E5-2680|Nov 19, 2018| +|3.007|[clusterpi.js](Node/clusterpi.js)|Node, 12 processes|Intel 2x E5-2680|Nov 24, 2018| |0.573|[pi.c](C/pi.c)|C<br>gcc pi.c -o pi -lm|Intel i7-8700T|Nov 17, 2018| |0.470|[numpi.py](Python/numpi.py)|Python, NumPy|Intel i7-8700T|Nov 17, 2018| |0.029|[pi.py](Python/pi.py)|Python|Intel i7-8700T|Nov 17, 2018|