js/src/parjs-benchmarks/edges.js

branch
TOR_BUG_9701
changeset 14
925c144e1f1f
equal deleted inserted replaced
-1:000000000000 0:c0c45f780f72
1 load(libdir + "util.js");
2
3 var SobelX = [[-1.0, 0.0, 1.0],
4 [-2.0, 0.0, 2.0],
5 [-1.0, 0.0, 1.0]];
6 var SobelY = [[ 1.0, 2.0, 1.0],
7 [ 0.0, 0.0, 0.0],
8 [-1.0, -2.0, -1.0]];
9
10 function stripedImage(w, h) {
11 var resultArray = new Array(w * h);
12 for (var y = 0; y < h; y++) {
13 for (var x = 0; x < w; x++) {
14 resultArray[y*w + x] = (Math.abs(x%100-y%100) < 10) ? 32 : 0;
15 }
16 }
17 return resultArray;
18 }
19
20 function edgesSequentially(data, width, height) {
21 var data1 = new Array(width * height);
22 for (var y = 0; y < height; y++) {
23 for (var x = 0; x < width; x++) {
24 var total = compute(x, y);
25 data1[y*width + x] = total | 0;
26 }
27 }
28 return data1;
29
30 function compute(x, y) {
31 var totalX = 0;
32 var totalY = 0;
33
34 var offYMin = (y == 0 ? 0 : -1);
35 var offYMax = (y == height - 1 ? 0 : 1);
36 var offXMin = (x == 0 ? 0 : -1);
37 var offXMax = (x == width - 1 ? 0 : 1);
38
39 for (var offY = offYMin; offY <= offYMax; offY++) {
40 for (var offX = offXMin; offX <= offXMax; offX++) {
41 var e = data[(y + offY) * width + x + offX];
42 totalX += e * SobelX[offY + 1][offX + 1];
43 totalY += e * SobelY[offY + 1][offX + 1];
44 }
45 }
46
47 return (Math.abs(totalX) + Math.abs(totalY))/8.0 | 0;
48 }
49 }
50
51 function edgesParallel(data) {
52 var pa = new ParallelArray([Height, Width], function (y, x) {
53 var totalX = 0;
54 var totalY = 0;
55
56 var offYMin = (y == 0 ? 0 : -1);
57 var offYMax = (y == Height - 1 ? 0 : 1);
58 var offXMin = (x == 0 ? 0 : -1);
59 var offXMax = (x == Width - 1 ? 0 : 1);
60
61 for (var offY = offYMin; offY <= offYMax; offY++) {
62 for (var offX = offXMin; offX <= offXMax; offX++) {
63 var e = data.get(y + offY, x + offX);
64 totalX += e * SobelX[offY + 1][offX + 1];
65 totalY += e * SobelY[offY + 1][offX + 1];
66 }
67 }
68
69 return (Math.abs(totalX) + Math.abs(totalY))/8.0 | 0;
70 });
71 return pa.flatten();
72 }
73
74 var Width = 1024;
75 var Height = 768;
76 var ArrInput = stripedImage(Width, Height);
77 var ParArrInput2D = new ParallelArray([Height, Width],
78 function (y, x) ArrInput[y*Width + x]);
79
80 benchmark("EDGES", 2, DEFAULT_MEASURE * 20,
81 function() edgesSequentially(ArrInput, Width, Height),
82 function() edgesParallel(ParArrInput2D));

mercurial