BiGraph bg;
int upperlimit;
int lowerlimit;
- Barrier mybarr;
public Em3d() {
}
- public Em3d(BiGraph bg, int lowerlimit, int upperlimit, int numIter, Barrier mybarr, int numDegree, int threadindex) {
+ public Em3d(BiGraph bg, int lowerlimit, int upperlimit, int numIter, int numDegree, int threadindex) {
this.bg = bg;
this.lowerlimit = lowerlimit;
this.upperlimit = upperlimit;
this.numIter = numIter;
- this.mybarr = mybarr;
this.numDegree = numDegree;
this.threadindex=threadindex;
}
Barrier barr;
int degree;
Random random;
+ String hname;
+ barr = new Barrier("128.195.175.79");
atomic {
iteration = numIter;
- barr=mybarr;
degree = numDegree;
random = new Random(lowerlimit);
}
atomic {
//This is going to conflict badly...Minimize work here
- bg.allocateNodes( lowerlimit, upperlimit, threadindex);
+ bg.allocateNodes ( lowerlimit, upperlimit, threadindex);
}
Barrier.enterBarrier(barr);
+ System.clearPrefetchCache();
atomic {
//initialize the eNodes
int numThreads = em.numThreads;
int[] mid = new int[4];
mid[0] = (128<<24)|(195<<16)|(175<<8)|79;//dw-1
- mid[1] = (128<<24)|(195<<16)|(175<<8)|80;//dw-2
- mid[2] = (128<<24)|(195<<16)|(175<<8)|73;
- mid[3] = (128<<24)|(195<<16)|(175<<8)|78;
+ mid[1] = (128<<24)|(195<<16)|(175<<8)|73;//dw-2
+ mid[2] = (128<<24)|(195<<16)|(175<<8)|78;
+ mid[3] = (128<<24)|(195<<16)|(175<<8)|69;
+
System.printString("DEBUG -> numThreads = " + numThreads+"\n");
- Barrier mybarr;
+ BarrierServer mybarr;
BiGraph graph;
// System.printString( "Allocating BiGraph.\n" );
atomic {
- mybarr = global new Barrier(numThreads);
+ mybarr = global new BarrierServer(numThreads);
graph = BiGraph.create(em.numNodes, em.numDegree, numThreads);
}
+ mybarr.start(mid[0]);
+
Em3dWrap[] em3d=new Em3dWrap[numThreads];
int increment = em.numNodes/numThreads;
for(int i=0;i<numThreads;i++) {
Em3d tmp;
if ((i+1)==numThreads)
- tmp = global new Em3d(graph, base, em.numNodes, em.numIter, mybarr, em.numDegree, 1);
+ tmp = global new Em3d(graph, base, em.numNodes, em.numIter, em.numDegree, i);
else
- tmp = global new Em3d(graph, base, base+increment, em.numIter, mybarr, em.numDegree, 1);
+ tmp = global new Em3d(graph, base, base+increment, em.numIter, em.numDegree, i);
em3d[i]=new Em3dWrap(tmp);
base+=increment;
}
}
- for(int i = 0; i<numThreads; i++) {
- em3d[i].em3d.start(mid[i]);
+ boolean waitfordone=true;
+ while(waitfordone) {
+ atomic {
+ if (mybarr.done)
+ waitfordone=false;
+ }
}
+ //System.printString("Starting Barrier run\n");
+ for(int i = 0; i<numThreads; i++) {
+ em3d[i].em3d.start(mid[i]);
+ }
for(int i = 0; i<numThreads; i++) {
- em3d[i].em3d.join();
+ em3d[i].em3d.join();
}
+ System.printString("Done!"+ "\n");
}