{"modules":{"0.5638807172368232":{"definition":"//\n// benchmark\n//\n// Neil Gershenfeld \n// (c) Massachusetts Institute of Technology 2018\n// \n// This work may be reproduced, modified, distributed, performed, and \n// displayed for any purpose, but must acknowledge the mods\n// project. Copyright is retained and must be preserved. The work is \n// provided as is; no warranty is provided, and users accept all \n// liability.\n//\n// closure\n//\n(function(){\n//\n// module globals\n//\nvar mod = {}\n//\n// name\n//\nvar name = 'benchmark'\n//\n// initialization\n//\nvar init = function() {\n mod.terms.value = '1e8'\n mod.workers.value = '4'\n }\n//\n// inputs\n//\nvar inputs = {\n start:{type:'',\n event:function(evt){\n benchmark()}}}\n//\n// outputs\n//\nvar outputs = {\n }\n//\n// interface\n//\nvar interface = function(div){\n mod.div = div\n div.appendChild(document.createTextNode('terms: '))\n var input = document.createElement('input')\n input.type = 'text'\n input.size = 6\n div.appendChild(input)\n mod.terms = input\n div.appendChild(document.createElement('br'))\n div.appendChild(document.createTextNode('workers: '))\n var input = document.createElement('input')\n input.type = 'text'\n input.size = 6\n div.appendChild(input)\n mod.workers = input\n div.appendChild(document.createElement('br'))\n var btn = document.createElement('button')\n btn.style.padding = mods.ui.padding\n btn.style.margin = 1\n var text = document.createTextNode('calculate pi')\n mod.label = text\n btn.appendChild(text)\n btn.addEventListener('click',function() {\n benchmark()\n })\n mod.button = btn\n div.appendChild(btn)\n div.appendChild(document.createElement('br'))\n var text = document.createTextNode('value: ')\n div.appendChild(text)\n mod.value = text\n div.appendChild(document.createElement('br'))\n var text = document.createTextNode('time (s): ')\n div.appendChild(text)\n mod.time = text\n div.appendChild(document.createElement('br'))\n var text = document.createTextNode('Mflops: ')\n div.appendChild(text)\n mod.mflops = text\n }\n//\n// local functions\n//\nfunction benchmark() {\n mod.label.nodeValue = 'calculating'\n var nworkers = parseInt(mod.workers.value)\n var count = 0\n var pi = 0\n var time = 0\n var workers = []\n var tstart = Date.now()\n var blob = new Blob(['('+worker.toString()+'())'])\n var url = window.URL.createObjectURL(blob)\n for (var index = 0; index < nworkers; ++index) {\n workers[index] = new Worker(url)\n workers[index].addEventListener('message',function(evt) {\n pi += evt.data.pi\n workers[evt.data.index].terminate()\n count += 1\n if (count == nworkers) {\n window.URL.revokeObjectURL(url)\n var tend = Date.now()\n time = (tend-tstart)/1000\n mod.value.nodeValue = 'value: '+pi\n mod.time.nodeValue = 'time (s): '+time\n var mflops = nworkers*5*terms/(time*1e6)\n mod.mflops.nodeValue = 'Mflops: '+mflops.toFixed(0)\n mod.label.nodeValue = 'calculate pi'\n mods.fit(mod.div)\n }\n })\n var terms = parseFloat(mod.terms.value)\n workers[index].postMessage({terms:terms,index:index})\n }\n }\nfunction worker() {\n self.addEventListener('message',function(evt) {\n var terms = evt.data.terms\n var index = evt.data.index\n var start = 1+index*terms\n var end = (index+1)*terms\n var pi = 0\n for (var term = start; term <= end; ++term)\n pi += 0.5/((term-0.75)*(term-0.25))\n self.postMessage({pi:pi,index:index})\n })\n }\n//\n// return values\n//\nreturn ({\n mod:mod,\n name:name,\n init:init,\n inputs:inputs,\n outputs:outputs,\n interface:interface\n })\n}())\n","top":"133","left":"217","inputs":{},"outputs":{}}},"links":[]}