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[3];
35 JACOBI_NUM_ITER = 100;
36 RANDOM_SEED = 10101010;
40 public void JGFsetsize(int size){
44 public static void JGFkernel(JGFSORBench sor) {
45 int numthreads, datasize;
48 int[] mid = new int[4];
49 mid[0] = (128<<24)|(195<<16)|(175<<8)|79;
50 mid[1] = (128<<24)|(195<<16)|(175<<8)|73;
51 mid[2] = (128<<24)|(195<<16)|(175<<8)|78;
52 mid[3] = (128<<24)|(195<<16)|(175<<8)|69;
58 numthreads = sor.nthreads;
59 datasize = sor.datasizes[sor.size];
60 mybarr = global new BarrierServer(numthreads);
61 G = global new double[datasize][];
62 num_iterations = sor.JACOBI_NUM_ITER;
67 double omega_over_four = omega * 0.25;
68 double one_minus_omega = 1.0 - omega;
70 // update interior points
74 SORWrap[] thobjects = new SORWrap[numthreads];
77 for(int i=0;i<numthreads;i++) {
78 thobjects[i] = new SORWrap(global new SORRunner(i,omega,G,num_iterations,numthreads));
82 boolean waitfordone=true;
90 for(int i=0;i<numthreads;i++) {
91 thobjects[i].sor.start(mid[i]);
94 for(int i=0;i<numthreads;i++) {
95 thobjects[i].sor.join();
98 //JGFInstrumentor.stopTimer("Section2:SOR:Kernel", instr.timers);
100 for (int i=1; i<G.length-1; i++) {
101 for (int j=1; j<G.length-1; j++) {
102 sor.Gtotal += G[i][j];
108 public int JGFvalidate(){
111 refval = new double[3];
112 refval[0] = 0.498574406322512;
113 refval[1] = 1.1234778980135105;
114 refval[2] = 1.9954895063582696;
115 double dev = Math.fabs(Gtotal - refval[size]);
116 long l = (long) refval[size] * 1000000;
117 long r = (long) Gtotal * 1000000;