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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 78 - (hide 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 mojays 2 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