Skip to content
Snippets Groups Projects
forkpi.js 800 B
Newer Older
  • Learn to ignore specific revisions
  • Neil Gershenfeld's avatar
    wip
    Neil Gershenfeld committed
    //
    // forkpi.js
    // Neil Gershenfeld 12/8/18
    // pi calculation benchmark
    // pi = 3.14159265358979323846
    //
    
    Neil Gershenfeld's avatar
    Neil Gershenfeld committed
    const points = 1e9
    
    Neil Gershenfeld's avatar
    wip
    Neil Gershenfeld committed
    const { fork } = require('child_process')
    
    Neil Gershenfeld's avatar
    Neil Gershenfeld committed
    var processes = parseInt(process.argv[2])
    
    Neil Gershenfeld's avatar
    wip
    Neil Gershenfeld committed
    var pi = 0
    var results = 0
    var tstart = Date.now()/1000
    
    Neil Gershenfeld's avatar
    Neil Gershenfeld committed
    for (let i = 0; i < processes; ++i) {
    
    Neil Gershenfeld's avatar
    Neil Gershenfeld committed
       const child = fork('forkspi.js',[i,points])
       child.on('message',(result) => {
    
    Neil Gershenfeld's avatar
    wip
    Neil Gershenfeld committed
       pi += result
       results += 1
    
    Neil Gershenfeld's avatar
    Neil Gershenfeld committed
          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()
             }
          })
       }