/[xulu]/trunk/src/appl/util/benchmark/SimpleBenchmark.java
ViewVC logotype

Contents of /trunk/src/appl/util/benchmark/SimpleBenchmark.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 78 - (show annotations)
Wed Feb 10 16:43:46 2010 UTC (14 years, 10 months ago) by alfonx
File size: 4343 byte(s)
Merged branch 1.8-gt2-2.6 to trunk. Now the trunk is based on GeoTools 2.6.1 and schmitzm-2.0.x
1 package appl.util.benchmark;
2
3 import java.awt.Rectangle;
4 import java.awt.image.DataBuffer;
5 import java.util.Random;
6
7 import appl.data.LoadingException;
8 import appl.ext.XuluConfig;
9 import appl.parallel.data.splittable.SplittableLLProxyGrid;
10 import appl.util.RasterMetaData;
11 import edu.bonn.xulu.plugin.io.grid.array.WritableGridArrayFactory;
12
13 /**
14 * The algorithm simply iterates over a grid. The with and height can be
15 * specified by the {@link XuluConfig} Property
16 * <code>Benchmark.SimpleBench.gridwidth</code>. For each cell the average
17 * over a neighborhood region is calculated. The neighborhoodRange can be
18 * specified by <code>Benchmark.SimpleBench.neighborhood</code>. If the
19 * algorithm reaches the end of the raster it starts again at (0,0). The rating
20 * depends on the number of cells visited in the time (ms) specified by
21 * <code>Benchmark.SimpleBench.time<code>. The number of cells is divided by
22 * <code>Benchmark.SimpleBench.calibrator</code> and then given back as rating.
23 *
24 * @author Dominik Appl
25 */
26 public class SimpleBenchmark implements Benchmark {
27 private SplittableLLProxyGrid inputGrid;
28
29 int runningTime = 10000;
30
31 private int gridwidth = 1000;
32
33 private int neighborhoodRange;
34
35 private double calibrator = 1;
36
37 public int bench() {
38 setUp();
39
40 int cellCount = 0;
41 long startTime = System.currentTimeMillis();
42 Rectangle partition = new Rectangle(0, 0, inputGrid.getWidth(),
43 inputGrid.getHeight());
44 boolean exit = false;
45 for (int step = 0; exit == false; step++) {
46 // the overallsum is simply the sum over all elements
47 float overallSum = 0f;
48 for (int y = 0; y < inputGrid.getHeight(); y++)
49 for (int x = 0; x < inputGrid.getWidth(); x++) {
50 if (System.currentTimeMillis() - startTime > runningTime)
51 exit = true;
52 else
53 cellCount++;
54 float tmp = inputGrid.getRasterSampleAsFloat(x, y);
55 if (!Float.isNaN(tmp))
56 overallSum += tmp;
57 // the local sum is simply the sum over all elements in the
58 // neighborhood
59 float localSum = 0;
60 // number of cells over which the sum is calculated
61 int noOfCells = 0;
62 // for each cell: calculate the sum of all neighbors
63 for (int y2 = y - neighborhoodRange; y2 <= y
64 + neighborhoodRange; y2++)
65 for (int x2 = x - neighborhoodRange; x2 <= x
66 + neighborhoodRange; x2++)
67 // check if the coordinates are valid (inside the
68 // grid and not NaN)
69 if (partition.contains(x2, y2))
70 if (!Float.isNaN(inputGrid
71 .getRasterSampleAsFloat(x2, y2))) {
72 localSum += inputGrid
73 .getRasterSampleAsFloat(x2, y2);
74 noOfCells++;
75 }
76
77 }
78 }
79 return (int) (cellCount / calibrator);
80 }
81
82 /**
83 * The method is used to load grids and to initialize the benchmarks
84 * configuration.
85 */
86 private void setUp() {
87 // read config
88 int width = XuluConfig.getXuluConfig().getIntProperty(
89 "Benchmark.SimpleBench.gridwidth");
90 if (width != 0)
91 this.gridwidth = width;
92 // init running time
93 int time = XuluConfig.getXuluConfig().getIntProperty(
94 "Benchmark.SimpleBench.runningtime");
95 if (time != 0)
96 this.runningTime = time;
97 // init calibrator
98 double calibrator = XuluConfig.getXuluConfig().getDoubleProperty(
99 "Benchmark.SimpleBench.calibrator");
100 if (calibrator != 0)
101 this.calibrator = calibrator;
102 // init neighborhoodRange
103 neighborhoodRange = XuluConfig.getXuluConfig().getIntProperty(
104 "Benchmark.SimpleBench.neighborhood");
105 // create input Grid
106 inputGrid = new SplittableLLProxyGrid(new WritableGridArrayFactory(),
107 new RasterMetaData(DataBuffer.TYPE_DOUBLE, gridwidth,
108 gridwidth, 0, 0, 0, 0, 50, null));
109 // load grid (so late loading has no influence on the calculation)
110 try {
111 inputGrid.loadData();
112 } catch (LoadingException e) {
113 // TODO Auto-generated catch block
114 e.printStackTrace();
115 }
116 // fill Grid with random Data
117 Random rand = new Random();
118 for (int y = 0; y < inputGrid.getHeight(); y++)
119 for (int x = 0; x < inputGrid.getWidth(); x++)
120 inputGrid.setGridSample(rand.nextDouble(), x, y);
121 }
122
123 public static void main(String[] args) {
124 System.out.println("Current rating: " + new SimpleBenchmark().bench());
125 }
126 }

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26