// Interactive test for broadcast performance // accuracy of barrier performance measurement improves as the test proceeds // Dan Bonachea public class barrierperf { public static int initsize = 10; public static double epsilon = 0.001; public static double growfactor = 1.5; public static double getTime(int single numiters, int single source) { Ti.barrier(); // wait for everyone long starttime = System.currentTimeMillis(); Timer t = new Timer(); t.start(); for (int single i = 0; i < numiters; i++) { int x = broadcast 0 from source; } t.stop(); long endtime = System.currentTimeMillis(); return t.micros() / numiters; } public static void main(String[]args) { Double.setPrecision(6); for (int single srcid = 0; srcid < Ti.numProcs(); srcid++) { if (Ti.thisProc() == 0) System.out.println("Testing broadcast performance on " + Ti.numProcs() + " processors, source="+srcid); double numiters = initsize; double barrtime = getTime(broadcast ((int)numiters) from 0, srcid); double newtime; boolean single done = false; while (!done) { if (Ti.thisProc() == 0) System.out.println((barrtime * 1000.0) + " us per broadcast (" + (int)numiters + " iterations)" ); newtime = getTime(broadcast ((int)numiters) from 0, srcid); boolean temp = false; if (newtime * numiters < 0.1 || Math.abs(newtime-barrtime)/newtime > epsilon) { numiters *= growfactor; } else temp = true; done = broadcast temp from 0; barrtime = newtime; } } } }