📄 scalechart.java
字号:
/* * * 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(""); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -