Utilities for flop (floating-point operation) counting.
/* Copyright (C) 2006 Univ. of Massachusetts Amherst, Computer Science Dept. This file is part of "MALLET" (MAchine Learning for LanguagE Toolkit). http://www.cs.umass.edu/~mccallum/mallet This software is provided under the terms of the Common Public License, version 1.0, as published by http://www.opensource.org. For further information, see the file `LICENSE' included with this distribution. */ //package cc.mallet.grmm.util; /** * Utilities for flop (floating-point operation) counting. This is a much better * way to measure computation than CPU time, because it avoids measuring non-essential * properties of the implementations. * * $Id: Flops.java,v 1.1 2007/10/22 21:37:58 mccallum Exp $ */ public class Flops { private static long flops = 0; // this figures taken from Tom Minka's lightspeed private static final int EXP_FLOPS = 40; private static final int LOG_FLOPS = 20; private static final int DIV_FLOPS = 8; private static final int SQRT_FLOPS = 8; public static long getFlops () { return flops; } public static void exp () { flops += EXP_FLOPS; } public static void log () { flops += LOG_FLOPS; } public static void div () { flops += DIV_FLOPS; } public static void sqrt () { flops += SQRT_FLOPS; } public static void sumLogProb (int n) { flops += n * (LOG_FLOPS + EXP_FLOPS); } public static void increment (int N) { flops += N; } public static void log (int N) { flops += N * LOG_FLOPS; } public static void exp (int N) { flops += N * EXP_FLOPS; } public static void pow (int N) { // Get an upper bound using // a^b = exp(b*log(a)) Flops.increment (N * (EXP_FLOPS + LOG_FLOPS + 1)); } public static class Watch { private long starting; private long current; public Watch () { starting = flops; current = starting; } public long tick () { return tick (null); } public long tick (String message) { long elapsed = flops - current; current = flops; if (message != null) System.err.println (message+" flops = "+elapsed); return elapsed; } public long totalFlopsElapsed () { return flops - starting; } } }