001 /* 002 Galois, a framework to exploit amorphous data-parallelism in irregular 003 programs. 004 005 Copyright (C) 2010, The University of Texas at Austin. All rights reserved. 006 UNIVERSITY EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES CONCERNING THIS SOFTWARE 007 AND DOCUMENTATION, INCLUDING ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR ANY 008 PARTICULAR PURPOSE, NON-INFRINGEMENT AND WARRANTIES OF PERFORMANCE, AND ANY 009 WARRANTY THAT MIGHT OTHERWISE ARISE FROM COURSE OF DEALING OR USAGE OF TRADE. 010 NO WARRANTY IS EITHER EXPRESS OR IMPLIED WITH RESPECT TO THE USE OF THE 011 SOFTWARE OR DOCUMENTATION. Under no circumstances shall University be liable 012 for incidental, special, indirect, direct or consequential damages or loss of 013 profits, interruption of business, or related expenses which may arise from use 014 of Software or Documentation, including but not limited to those resulting from 015 defects in Software and/or Documentation, or loss or inaccuracy of data of any 016 kind. 017 018 File: RuntimeStatistics.java 019 020 */ 021 022 package util; 023 024 import java.io.PrintStream; 025 import java.util.ArrayList; 026 import java.util.List; 027 028 /** 029 * Runtime statistics (wall-clock time) with and without garbage collection 030 * time. This class is intended to repeatedly measure the same piece of code 031 * and return a summary of the measured runtimes. 032 * 033 * 034 */ 035 public class RuntimeStatistics extends Statistics { 036 private final List<Long> times; 037 private final List<Long> timesWithGc; 038 039 public RuntimeStatistics() { 040 this.times = new ArrayList<Long>(); 041 this.timesWithGc = new ArrayList<Long>(); 042 } 043 044 /** 045 * Adds the measured times to the accumulated statistics. 046 * 047 * @param time wall-clock time in milliseconds <i>excluding</i> garbage collection time 048 * @param timeWithGc wall-clock time in milliseconds <i>including</i> garbage collection time 049 */ 050 public void putStats(long time, long timeWithGc) { 051 times.add(time); 052 timesWithGc.add(timeWithGc); 053 } 054 055 @Override 056 public void dumpFull(PrintStream out) { 057 printFullHeader(out, "Runtimes"); 058 out.printf("Without GC (ms): %s\n", times); 059 summarizeLongs(out, times, 0, "\t"); 060 out.printf("With GC (ms): %s\n", timesWithGc); 061 summarizeLongs(out, timesWithGc, 0, "\t"); 062 } 063 064 @Override 065 public void dumpSummary(PrintStream out) { 066 printSummaryHeader(out, "Runtimes (ms)"); 067 float[] wgc = summarizeLongs(timesWithGc, 1); 068 float[] wogc = summarizeLongs(times, 1); 069 boolean output = wgc != null; 070 summarizeLongs(out, timesWithGc, 1, "", output); 071 if (output) { 072 float rel = 0; 073 if (wgc[0] != 0) 074 rel = (wgc[0] - wogc[0]) / wgc[0]; 075 out.printf(" Rel. GC time: %.4f\n", rel); 076 } 077 } 078 079 @Override 080 public void merge(Object obj) { 081 RuntimeStatistics other = (RuntimeStatistics) obj; 082 times.addAll(other.times); 083 timesWithGc.addAll(other.timesWithGc); 084 } 085 }