//////////////////////////////////////////////////////////////////////////////// // Program: XTREAM // // This program explores several X10 variations of the original STREAM // benchmark to examine both the memory performance accessible to an X10 // program as well as the "wizard gap", defined as the difference between // the performance of the code you'd like to write (or the code produced by // a naive user) and the code you should write (which achieves "wizardly" // performance). (Ideally, these would be the same code, but...) // // Author: J. A. Kuehn, Oak Ridge National Laboratory // (C) Copyright 2007, UT-Battelle, LLC // // License: Unpublished Source, All Rights Reserved //////////////////////////////////////////////////////////////////////////////// import java.util.*; import java.text.*; import java.io.*; public class xtream { public static void main(String[] args) { xVardouble ssd; xVarfloat ssf; xVarlong ssl; xVarint ssi; int N=10000000; int rep=5; DecimalFormat F=new DecimalFormat("0.00"); try { if (args.length > 0) N = java.lang.Integer.parseInt(args[0]); if (args.length > 1) rep = java.lang.Integer.parseInt(args[1]); } catch (NumberFormatException ex) { System.out.println("Usage: x10 xtream ARRAYELEMENTS REPETITIONS"); } String s = " "; System.out.println("=============================================================="); System.out.println("=============================================================="); System.out.println("== XTREAM Memory Test Benchmark =="); System.out.println("=============================================================="); System.out.println("=============================================================="); System.out.println(" COPY SCALE ADD TRIAD"); System.out.println(" (MB/s) (MB/s) (MB/s) (MB/s)"); System.out.println("=============================================================="); System.out.println("64bit Floating Point"); ssd = new xVar1double(N/100,rep); System.out.println( "VARIANT #1 "+s+F.format(ssd.copy())+s+F.format(ssd.scale())+s+F.format(ssd.add())+s+F.format(ssd.triad()) ); ssd = new xVar2double(N/100,rep); System.out.println( "VARIANT #2 "+s+F.format(ssd.copy())+s+F.format(ssd.scale())+s+F.format(ssd.add())+s+F.format(ssd.triad()) ); ssd = new xVar3double(N,rep); System.out.println( "VARIANT #3 "+s+F.format(ssd.copy())+s+F.format(ssd.scale())+s+F.format(ssd.add())+s+F.format(ssd.triad()) ); ssd = new xVar4double(N,rep); System.out.println( "VARIANT #4 "+s+F.format(ssd.copy())+s+F.format(ssd.scale())+s+F.format(ssd.add())+s+F.format(ssd.triad()) ); ssd = new xVar5double(N,rep); System.out.println( "VARIANT #5 "+s+F.format(ssd.copy())+s+F.format(ssd.scale())+s+F.format(ssd.add())+s+F.format(ssd.triad()) ); ssd = new xVar6double(N,rep); System.out.println( "VARIANT #6 "+s+F.format(ssd.copy())+s+F.format(ssd.scale())+s+F.format(ssd.add())+s+F.format(ssd.triad()) ); ssd = new xVar7double(N,rep); System.out.println( "VARIANT #7 "+s+F.format(ssd.copy())+s+F.format(ssd.scale())+s+F.format(ssd.add())+s+F.format(ssd.triad()) ); System.out.println("=============================================================="); System.out.println("64bit Fixed Point"); ssl = new xVar1long(N/100,rep); System.out.println( "VARIANT #1 "+s+F.format(ssl.copy())+s+F.format(ssl.scale())+s+F.format(ssl.add())+s+F.format(ssl.triad()) ); ssl = new xVar2long(N/100,rep); System.out.println( "VARIANT #2 "+s+F.format(ssl.copy())+s+F.format(ssl.scale())+s+F.format(ssl.add())+s+F.format(ssl.triad()) ); ssl = new xVar3long(N,rep); System.out.println( "VARIANT #3 "+s+F.format(ssl.copy())+s+F.format(ssl.scale())+s+F.format(ssl.add())+s+F.format(ssl.triad()) ); ssl = new xVar4long(N,rep); System.out.println( "VARIANT #4 "+s+F.format(ssl.copy())+s+F.format(ssl.scale())+s+F.format(ssl.add())+s+F.format(ssl.triad()) ); ssl = new xVar5long(N,rep); System.out.println( "VARIANT #5 "+s+F.format(ssl.copy())+s+F.format(ssl.scale())+s+F.format(ssl.add())+s+F.format(ssl.triad()) ); ssl = new xVar6long(N,rep); System.out.println( "VARIANT #6 "+s+F.format(ssl.copy())+s+F.format(ssl.scale())+s+F.format(ssl.add())+s+F.format(ssl.triad()) ); ssl = new xVar7long(N,rep); System.out.println( "VARIANT #7 "+s+F.format(ssl.copy())+s+F.format(ssl.scale())+s+F.format(ssl.add())+s+F.format(ssl.triad()) ); System.out.println("=============================================================="); System.out.println("32bit Floating Point"); ssf = new xVar1float(N/100,rep); System.out.println( "VARIANT #1 "+s+F.format(ssf.copy())+s+F.format(ssf.scale())+s+F.format(ssf.add())+s+F.format(ssf.triad()) ); ssf = new xVar2float(N/100,rep); System.out.println( "VARIANT #2 "+s+F.format(ssf.copy())+s+F.format(ssf.scale())+s+F.format(ssf.add())+s+F.format(ssf.triad()) ); ssf = new xVar3float(N,rep); System.out.println( "VARIANT #3 "+s+F.format(ssf.copy())+s+F.format(ssf.scale())+s+F.format(ssf.add())+s+F.format(ssf.triad()) ); ssf = new xVar4float(N,rep); System.out.println( "VARIANT #4 "+s+F.format(ssf.copy())+s+F.format(ssf.scale())+s+F.format(ssf.add())+s+F.format(ssf.triad()) ); ssf = new xVar5float(N,rep); System.out.println( "VARIANT #5 "+s+F.format(ssf.copy())+s+F.format(ssf.scale())+s+F.format(ssf.add())+s+F.format(ssf.triad()) ); ssf = new xVar6float(N,rep); System.out.println( "VARIANT #6 "+s+F.format(ssf.copy())+s+F.format(ssf.scale())+s+F.format(ssf.add())+s+F.format(ssf.triad()) ); ssf = new xVar7float(N,rep); System.out.println( "VARIANT #7 "+s+F.format(ssf.copy())+s+F.format(ssf.scale())+s+F.format(ssf.add())+s+F.format(ssf.triad()) ); System.out.println("=============================================================="); System.out.println("32bit Fixed Point"); ssi = new xVar1int(N/100,rep); System.out.println( "VARIANT #1 "+s+F.format(ssi.copy())+s+F.format(ssi.scale())+s+F.format(ssi.add())+s+F.format(ssi.triad()) ); ssi = new xVar2int(N/100,rep); System.out.println( "VARIANT #2 "+s+F.format(ssi.copy())+s+F.format(ssi.scale())+s+F.format(ssi.add())+s+F.format(ssi.triad()) ); ssi = new xVar3int(N,rep); System.out.println( "VARIANT #3 "+s+F.format(ssi.copy())+s+F.format(ssi.scale())+s+F.format(ssi.add())+s+F.format(ssi.triad()) ); ssi = new xVar4int(N,rep); System.out.println( "VARIANT #4 "+s+F.format(ssi.copy())+s+F.format(ssi.scale())+s+F.format(ssi.add())+s+F.format(ssi.triad()) ); ssi = new xVar5int(N,rep); System.out.println( "VARIANT #5 "+s+F.format(ssi.copy())+s+F.format(ssi.scale())+s+F.format(ssi.add())+s+F.format(ssi.triad()) ); ssi = new xVar6int(N,rep); System.out.println( "VARIANT #6 "+s+F.format(ssi.copy())+s+F.format(ssi.scale())+s+F.format(ssi.add())+s+F.format(ssi.triad()) ); ssi = new xVar7int(N,rep); System.out.println( "VARIANT #7 "+s+F.format(ssi.copy())+s+F.format(ssi.scale())+s+F.format(ssi.add())+s+F.format(ssi.triad()) ); System.out.println("=============================================================="); } }