Mega Code Archive

 
Categories / Java / Collections Data Structure
 

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; }   } }