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[4];
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
59 numthreads = sor.nthreads;
60 datasize = sor.datasizes[sor.size];
61 mybarr = global new BarrierServer(numthreads);
62 G = global new double[datasize][];
63 num_iterations = sor.JACOBI_NUM_ITER;
68 double omega_over_four = omega * 0.25;
69 double one_minus_omega = 1.0 - omega;
71 // update interior points
75 SORWrap[] thobjects = new SORWrap[numthreads];
78 for(int i=0;i<numthreads;i++) {
79 thobjects[i] = new SORWrap(global new SORRunner(i,omega,G,num_iterations,numthreads));
83 boolean waitfordone=true;
91 for(int i=0;i<numthreads;i++) {
92 thobjects[i].sor.start(mid[i]);
95 for(int i=0;i<numthreads;i++) {
96 thobjects[i].sor.join();
99 //JGFInstrumentor.stopTimer("Section2:SOR:Kernel", instr.timers);
101 for (int i=1; i<G.length-1; i++) {
102 for (int j=1; j<G.length-1; j++) {
103 sor.Gtotal += G[i][j];
109 public int JGFvalidate(){
112 refval = new double[4];
113 refval[0] = 0.498574406322512;
114 refval[1] = 1.1234778980135105;
115 refval[2] = 1.9954895063582696;
116 refval[3] = 2.654895063582696;
117 double dev = Math.fabs(Gtotal - refval[size]);
118 long l = (long) refval[size] * 1000000;
119 long r = (long) Gtotal * 1000000;