From f5d40df2df16fc696f55bb81acd96fa93048ede4 Mon Sep 17 00:00:00 2001 From: Neil Gershenfeld <gersh@cba.mit.edu> Date: Sat, 24 Nov 2018 08:13:13 -0500 Subject: [PATCH] wip --- Node/clusterpi.js | 57 +++++++++++++++++++++++++++++++++++++++++++++++ README.md | 1 + 2 files changed, 58 insertions(+) create mode 100644 Node/clusterpi.js diff --git a/Node/clusterpi.js b/Node/clusterpi.js new file mode 100644 index 0000000..61b49af --- /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 7a90a82..edfb9eb 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| -- GitLab