/*
*
* Copyright (c) 1997-1999 Scott Oaks and Henry Wong. All Rights Reserved.
*
* Permission to use, copy, modify, and distribute this software
* and its documentation for NON-COMMERCIAL purposes and
* without fee is hereby granted.
*
* This sample source code is provided for example only,
* on an unsupported, as-is basis.
*
* AUTHOR MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
* THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
* TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
* PARTICULAR PURPOSE, OR NON-INFRINGEMENT. AUTHOR SHALL NOT BE LIABLE FOR
* ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
* DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
*
* THIS SOFTWARE IS NOT DESIGNED OR INTENDED FOR USE OR RESALE AS ON-LINE
* CONTROL EQUIPMENT IN HAZARDOUS ENVIRONMENTS REQUIRING FAIL-SAFE
* PERFORMANCE, SUCH AS IN THE OPERATION OF NUCLEAR FACILITIES, AIRCRAFT
* NAVIGATION OR COMMUNICATION SYSTEMS, AIR TRAFFIC CONTROL, DIRECT LIFE
* SUPPORT MACHINES, OR WEAPONS SYSTEMS, IN WHICH THE FAILURE OF THE
* SOFTWARE COULD LEAD DIRECTLY TO DEATH, PERSONAL INJURY, OR SEVERE
* PHYSICAL OR ENVIRONMENTAL DAMAGE ("HIGH RISK ACTIVITIES"). AUTHOR
* SPECIFICALLY DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR
* HIGH RISK ACTIVITIES.
*/
import java.util.*;
import java.text.*;
import java.io.*;
public class ScaleChart {
private int nIter = 200;
private int nRows = 2000;
private int nCols = 200;
private int nThreads = 8;
Class target;
ScaleChart(int nIter, int nRows, int nCols, int nThreads, String className) {
this.nIter = nIter;
this.nRows = nRows;
this.nCols = nCols;
this.nThreads = nThreads;
try {
target = Class.forName(className);
} catch (ClassNotFoundException cnfe) {
System.out.println(cnfe);
System.exit(-1);
}
}
void chart() {
long sumTime = 0;
long startLoop = System.currentTimeMillis();
try {
ScaleTester st = (ScaleTester) target.newInstance();
for (int i = 0; i < nIter; i++) {
st.init(nRows, nCols, nThreads);
long then = System.currentTimeMillis();
float ans[][] = st.doCalc();
long now = System.currentTimeMillis();
sumTime += (now - then);
if (nIter == 1)
dump(ans, System.out);
}
} catch (Exception e) {
e.printStackTrace();
System.exit(-1);
}
long endLoop = System.currentTimeMillis();
long calcTime = endLoop - startLoop;
System.err.println("Loop time " + sumTime +
" (" + ((sumTime * 100) / calcTime) + "%)");
System.err.println("Calculation time " + calcTime);
}
public static void main(String args[]) {
if (args.length != 5) {
System.out.println("Usage: java ScaleTester nIter nRows nCols nThreads className");
System.exit(-1);
}
ScaleChart sc = new ScaleChart(Integer.parseInt(args[0]),
Integer.parseInt(args[1]),
Integer.parseInt(args[2]),
Integer.parseInt(args[3]),
args[4]);
CPUSupport.setConcurrency(Integer.parseInt(args[3]) + 5);
sc.chart();
}
private void dump(float[][] ans, PrintStream ps) {
NumberFormat nf = NumberFormat.getInstance();
nf.setMaximumFractionDigits(4);
for (int i = 0; i < ans.length; i++) {
for (int j = 0; j < ans[i].length; j++)
ps.print(nf.format(ans[i][j]) + " ");
ps.println("");
}
}
}
|