1 /**************************************************************************
3 * Java Grande Forum Benchmark Suite - Thread Version 1.0 *
7 * Java Grande Benchmarking Project *
11 * Edinburgh Parallel Computing Centre *
13 * email: epcc-javagrande@epcc.ed.ac.uk *
16 * This version copyright (c) The University of Edinburgh, 2001. *
17 * All rights reserved. *
19 **************************************************************************/
20 public class JGFSORBench {
29 public JGFSORBench(int nthreads){
30 this.nthreads = nthreads;
31 datasizes = global new int[4];
36 JACOBI_NUM_ITER = 100;
37 RANDOM_SEED = 10101010;
41 public void JGFsetsize(int size){
45 public static void JGFkernel(JGFSORBench sor) {
46 int numthreads, datasize;
49 int[] mid = new int[8];
50 mid[0] = (128<<24)|(195<<16)|(175<<8)|84;//dw-10
51 mid[1] = (128<<24)|(195<<16)|(175<<8)|85;//dw-11
52 mid[2] = (128<<24)|(195<<16)|(175<<8)|86;//dw-12
53 mid[3] = (128<<24)|(195<<16)|(175<<8)|87;//dw-13
54 mid[4] = (128<<24)|(195<<16)|(175<<8)|88;//dw-14
55 mid[5] = (128<<24)|(195<<16)|(175<<8)|89;//dw-15
56 mid[6] = (128<<24)|(195<<16)|(175<<8)|90;//dw-16
57 mid[7] = (128<<24)|(195<<16)|(175<<8)|91;//dw-17
63 numthreads = sor.nthreads;
64 datasize = sor.datasizes[sor.size];
65 mybarr = global new BarrierServer(numthreads);
66 G = global new double[datasize][];
67 num_iterations = sor.JACOBI_NUM_ITER;
72 double omega_over_four = omega * 0.25;
73 double one_minus_omega = 1.0 - omega;
75 // update interior points
79 SORWrap[] thobjects = new SORWrap[numthreads];
82 for(int i=0;i<numthreads;i++) {
83 thobjects[i] = new SORWrap(global new SORRunner(i,omega,G,num_iterations,numthreads));
87 boolean waitfordone=true;
95 for(int i=0;i<numthreads;i++) {
96 thobjects[i].sor.start(mid[i]);
99 for(int i=0;i<numthreads;i++) {
100 thobjects[i].sor.join();
103 //JGFInstrumentor.stopTimer("Section2:SOR:Kernel", instr.timers);
105 for (int i=1; i<G.length-1; i++) {
106 for (int j=1; j<G.length-1; j++) {
107 sor.Gtotal += G[i][j];
113 public int JGFvalidate(){
116 refval = new double[4];
117 refval[0] = 0.498574406322512;
118 refval[1] = 1.1234778980135105;
119 refval[2] = 1.9954895063582696;
120 refval[3] = 2.654895063582696;
121 double dev = Math.fabs(Gtotal - refval[size]);
122 long l = (long) refval[size] * 1000000;
123 long r = (long) Gtotal * 1000000;