diff -r 000000000000 -r 6474c204b198 js/src/parjs-benchmarks/edges.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/js/src/parjs-benchmarks/edges.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,82 @@ +load(libdir + "util.js"); + +var SobelX = [[-1.0, 0.0, 1.0], + [-2.0, 0.0, 2.0], + [-1.0, 0.0, 1.0]]; +var SobelY = [[ 1.0, 2.0, 1.0], + [ 0.0, 0.0, 0.0], + [-1.0, -2.0, -1.0]]; + +function stripedImage(w, h) { + var resultArray = new Array(w * h); + for (var y = 0; y < h; y++) { + for (var x = 0; x < w; x++) { + resultArray[y*w + x] = (Math.abs(x%100-y%100) < 10) ? 32 : 0; + } + } + return resultArray; +} + +function edgesSequentially(data, width, height) { + var data1 = new Array(width * height); + for (var y = 0; y < height; y++) { + for (var x = 0; x < width; x++) { + var total = compute(x, y); + data1[y*width + x] = total | 0; + } + } + return data1; + + function compute(x, y) { + var totalX = 0; + var totalY = 0; + + var offYMin = (y == 0 ? 0 : -1); + var offYMax = (y == height - 1 ? 0 : 1); + var offXMin = (x == 0 ? 0 : -1); + var offXMax = (x == width - 1 ? 0 : 1); + + for (var offY = offYMin; offY <= offYMax; offY++) { + for (var offX = offXMin; offX <= offXMax; offX++) { + var e = data[(y + offY) * width + x + offX]; + totalX += e * SobelX[offY + 1][offX + 1]; + totalY += e * SobelY[offY + 1][offX + 1]; + } + } + + return (Math.abs(totalX) + Math.abs(totalY))/8.0 | 0; + } +} + +function edgesParallel(data) { + var pa = new ParallelArray([Height, Width], function (y, x) { + var totalX = 0; + var totalY = 0; + + var offYMin = (y == 0 ? 0 : -1); + var offYMax = (y == Height - 1 ? 0 : 1); + var offXMin = (x == 0 ? 0 : -1); + var offXMax = (x == Width - 1 ? 0 : 1); + + for (var offY = offYMin; offY <= offYMax; offY++) { + for (var offX = offXMin; offX <= offXMax; offX++) { + var e = data.get(y + offY, x + offX); + totalX += e * SobelX[offY + 1][offX + 1]; + totalY += e * SobelY[offY + 1][offX + 1]; + } + } + + return (Math.abs(totalX) + Math.abs(totalY))/8.0 | 0; + }); + return pa.flatten(); +} + +var Width = 1024; +var Height = 768; +var ArrInput = stripedImage(Width, Height); +var ParArrInput2D = new ParallelArray([Height, Width], + function (y, x) ArrInput[y*Width + x]); + +benchmark("EDGES", 2, DEFAULT_MEASURE * 20, + function() edgesSequentially(ArrInput, Width, Height), + function() edgesParallel(ParArrInput2D));