info.hh revision 8666
15086Sgblack@eecs.umich.edu/* 25086Sgblack@eecs.umich.edu * Copyright (c) 2003-2005 The Regents of The University of Michigan 35086Sgblack@eecs.umich.edu * All rights reserved. 45086Sgblack@eecs.umich.edu * 55086Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without 65086Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are 75086Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright 85086Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer; 95086Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright 105086Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the 115086Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution; 125086Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its 135086Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from 145086Sgblack@eecs.umich.edu * this software without specific prior written permission. 155086Sgblack@eecs.umich.edu * 165086Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 175086Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 185086Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 195086Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 205086Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 215086Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 225086Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 235086Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 245086Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 255086Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 265086Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 275086Sgblack@eecs.umich.edu * 285086Sgblack@eecs.umich.edu * Authors: Nathan Binkert 295086Sgblack@eecs.umich.edu */ 305086Sgblack@eecs.umich.edu 315086Sgblack@eecs.umich.edu#ifndef __BASE_STATS_INFO_HH__ 325086Sgblack@eecs.umich.edu#define __BASE_STATS_INFO_HH__ 335086Sgblack@eecs.umich.edu 345086Sgblack@eecs.umich.edu#include "base/stats/types.hh" 355086Sgblack@eecs.umich.edu#include "base/flags.hh" 365086Sgblack@eecs.umich.edu 375086Sgblack@eecs.umich.edunamespace Stats { 385086Sgblack@eecs.umich.edu 395086Sgblack@eecs.umich.edutypedef uint16_t FlagsType; 405086Sgblack@eecs.umich.edutypedef ::Flags<FlagsType> Flags; 415086Sgblack@eecs.umich.edu 425086Sgblack@eecs.umich.edu/** Nothing extra to print. */ 435086Sgblack@eecs.umich.educonst FlagsType none = 0x0000; 445086Sgblack@eecs.umich.edu/** This Stat is Initialized */ 455086Sgblack@eecs.umich.educonst FlagsType init = 0x0001; 465086Sgblack@eecs.umich.edu/** Print this stat. */ 475086Sgblack@eecs.umich.educonst FlagsType display = 0x0002; 485086Sgblack@eecs.umich.edu/** Print the total. */ 495086Sgblack@eecs.umich.educonst FlagsType total = 0x0010; 505086Sgblack@eecs.umich.edu/** Print the percent of the total that this entry represents. */ 515086Sgblack@eecs.umich.educonst FlagsType pdf = 0x0020; 525086Sgblack@eecs.umich.edu/** Print the cumulative percentage of total upto this entry. */ 535086Sgblack@eecs.umich.educonst FlagsType cdf = 0x0040; 545086Sgblack@eecs.umich.edu/** Print the distribution. */ 555086Sgblack@eecs.umich.educonst FlagsType dist = 0x0080; 565086Sgblack@eecs.umich.edu/** Don't print if this is zero. */ 575086Sgblack@eecs.umich.educonst FlagsType nozero = 0x0100; 585647Sgblack@eecs.umich.edu/** Don't print if this is NAN */ 595647Sgblack@eecs.umich.educonst FlagsType nonan = 0x0200; 605647Sgblack@eecs.umich.edu 615647Sgblack@eecs.umich.edu/** Mask of flags that can't be set directly */ 625647Sgblack@eecs.umich.educonst FlagsType __reserved = init | display; 635135Sgblack@eecs.umich.edu 645135Sgblack@eecs.umich.edustruct StorageParams; 655135Sgblack@eecs.umich.edustruct Output; 665086Sgblack@eecs.umich.edu 675135Sgblack@eecs.umich.educlass Info 685647Sgblack@eecs.umich.edu{ 695234Sgblack@eecs.umich.edu public: 705086Sgblack@eecs.umich.edu /** The name of the stat. */ 715086Sgblack@eecs.umich.edu std::string name; 725086Sgblack@eecs.umich.edu /** The separator string used for vectors, dist, etc. */ 735086Sgblack@eecs.umich.edu static std::string separatorString; 745086Sgblack@eecs.umich.edu /** The description of the stat. */ 755086Sgblack@eecs.umich.edu std::string desc; 765086Sgblack@eecs.umich.edu /** The formatting flags. */ 775086Sgblack@eecs.umich.edu Flags flags; 785086Sgblack@eecs.umich.edu /** The display precision. */ 795086Sgblack@eecs.umich.edu int precision; 805086Sgblack@eecs.umich.edu /** A pointer to a prerequisite Stat. */ 815135Sgblack@eecs.umich.edu const Info *prereq; 825135Sgblack@eecs.umich.edu /** 835135Sgblack@eecs.umich.edu * A unique stat ID for each stat in the simulator. 845135Sgblack@eecs.umich.edu * Can be used externally for lookups as well as for debugging. 855135Sgblack@eecs.umich.edu */ 865135Sgblack@eecs.umich.edu static int id_count; 875135Sgblack@eecs.umich.edu int id; 885135Sgblack@eecs.umich.edu 895135Sgblack@eecs.umich.edu public: 905135Sgblack@eecs.umich.edu const StorageParams *storageParams; 915135Sgblack@eecs.umich.edu 925135Sgblack@eecs.umich.edu public: 935135Sgblack@eecs.umich.edu Info(); 945135Sgblack@eecs.umich.edu virtual ~Info(); 955135Sgblack@eecs.umich.edu 965135Sgblack@eecs.umich.edu /** Set the name of this statistic */ 975135Sgblack@eecs.umich.edu void setName(const std::string &name); 985135Sgblack@eecs.umich.edu void setSeparator(std::string _sep) { separatorString = _sep;} 995135Sgblack@eecs.umich.edu 1005135Sgblack@eecs.umich.edu /** 1015135Sgblack@eecs.umich.edu * Check that this stat has been set up properly and is ready for 1025135Sgblack@eecs.umich.edu * use 1035135Sgblack@eecs.umich.edu * @return true for success 1045135Sgblack@eecs.umich.edu */ 1055135Sgblack@eecs.umich.edu virtual bool check() const = 0; 1065135Sgblack@eecs.umich.edu bool baseCheck() const; 1075264Sgblack@eecs.umich.edu 1085135Sgblack@eecs.umich.edu /** 1095135Sgblack@eecs.umich.edu * Enable the stat for use 1105135Sgblack@eecs.umich.edu */ 1115135Sgblack@eecs.umich.edu virtual void enable(); 1125135Sgblack@eecs.umich.edu 1135264Sgblack@eecs.umich.edu /** 1145135Sgblack@eecs.umich.edu * Prepare the stat for dumping. 1155135Sgblack@eecs.umich.edu */ 1165135Sgblack@eecs.umich.edu virtual void prepare() = 0; 1175141Sgblack@eecs.umich.edu 1185141Sgblack@eecs.umich.edu /** 1195141Sgblack@eecs.umich.edu * Reset the stat to the default state. 1205141Sgblack@eecs.umich.edu */ 1215141Sgblack@eecs.umich.edu virtual void reset() = 0; 1225141Sgblack@eecs.umich.edu 1235141Sgblack@eecs.umich.edu /** 1245135Sgblack@eecs.umich.edu * @return true if this stat has a value and satisfies its 1255135Sgblack@eecs.umich.edu * requirement as a prereq 1265135Sgblack@eecs.umich.edu */ 1275289Sgblack@eecs.umich.edu virtual bool zero() const = 0; 1285135Sgblack@eecs.umich.edu 1295141Sgblack@eecs.umich.edu /** 1305135Sgblack@eecs.umich.edu * Visitor entry for outputing statistics data 1315135Sgblack@eecs.umich.edu */ 1325141Sgblack@eecs.umich.edu virtual void visit(Output &visitor) = 0; 1335141Sgblack@eecs.umich.edu 1345141Sgblack@eecs.umich.edu /** 1355141Sgblack@eecs.umich.edu * Checks if the first stat's name is alphabetically less than the second. 1365141Sgblack@eecs.umich.edu * This function breaks names up at periods and considers each subname 1375141Sgblack@eecs.umich.edu * separately. 1385141Sgblack@eecs.umich.edu * @param stat1 The first stat. 1395135Sgblack@eecs.umich.edu * @param stat2 The second stat. 1405289Sgblack@eecs.umich.edu * @return stat1's name is alphabetically before stat2's 1415289Sgblack@eecs.umich.edu */ 1425289Sgblack@eecs.umich.edu static bool less(Info *stat1, Info *stat2); 1435289Sgblack@eecs.umich.edu}; 1445135Sgblack@eecs.umich.edu 1455135Sgblack@eecs.umich.educlass ScalarInfo : public Info 1465141Sgblack@eecs.umich.edu{ 1475135Sgblack@eecs.umich.edu public: 1485264Sgblack@eecs.umich.edu virtual Counter value() const = 0; 1495135Sgblack@eecs.umich.edu virtual Result result() const = 0; 1505135Sgblack@eecs.umich.edu virtual Result total() const = 0; 1515135Sgblack@eecs.umich.edu}; 1525294Sgblack@eecs.umich.edu 1535294Sgblack@eecs.umich.educlass VectorInfo : public Info 1545135Sgblack@eecs.umich.edu{ 1555135Sgblack@eecs.umich.edu public: 1565135Sgblack@eecs.umich.edu /** Names and descriptions of subfields. */ 1575135Sgblack@eecs.umich.edu std::vector<std::string> subnames; 1585294Sgblack@eecs.umich.edu std::vector<std::string> subdescs; 1595294Sgblack@eecs.umich.edu 1605294Sgblack@eecs.umich.edu public: 1615294Sgblack@eecs.umich.edu void enable(); 1625135Sgblack@eecs.umich.edu 1635135Sgblack@eecs.umich.edu public: 1645135Sgblack@eecs.umich.edu virtual size_type size() const = 0; 1655135Sgblack@eecs.umich.edu virtual const VCounter &value() const = 0; 1665135Sgblack@eecs.umich.edu virtual const VResult &result() const = 0; 1675135Sgblack@eecs.umich.edu virtual Result total() const = 0; 1685135Sgblack@eecs.umich.edu}; 1695135Sgblack@eecs.umich.edu 1705135Sgblack@eecs.umich.eduenum DistType { Deviation, Dist, Hist }; 1715135Sgblack@eecs.umich.edu 1725135Sgblack@eecs.umich.edustruct DistData 1735135Sgblack@eecs.umich.edu{ 1745135Sgblack@eecs.umich.edu DistType type; 1755141Sgblack@eecs.umich.edu Counter min; 1765141Sgblack@eecs.umich.edu Counter max; 1775141Sgblack@eecs.umich.edu Counter bucket_size; 1785141Sgblack@eecs.umich.edu 1795141Sgblack@eecs.umich.edu Counter min_val; 1805141Sgblack@eecs.umich.edu Counter max_val; 1815141Sgblack@eecs.umich.edu Counter underflow; 1825141Sgblack@eecs.umich.edu Counter overflow; 1835141Sgblack@eecs.umich.edu VCounter cvec; 1845182Sgblack@eecs.umich.edu Counter sum; 1855141Sgblack@eecs.umich.edu Counter squares; 1865141Sgblack@eecs.umich.edu Counter logs; 1875141Sgblack@eecs.umich.edu Counter samples; 1885141Sgblack@eecs.umich.edu}; 1895141Sgblack@eecs.umich.edu 1905141Sgblack@eecs.umich.educlass DistInfo : public Info 1915135Sgblack@eecs.umich.edu{ 1925141Sgblack@eecs.umich.edu public: 1935141Sgblack@eecs.umich.edu /** Local storage for the entry values, used for printing. */ 1945141Sgblack@eecs.umich.edu DistData data; 1955141Sgblack@eecs.umich.edu}; 1965141Sgblack@eecs.umich.edu 1975141Sgblack@eecs.umich.educlass VectorDistInfo : public Info 1985141Sgblack@eecs.umich.edu{ 1995141Sgblack@eecs.umich.edu public: 2005141Sgblack@eecs.umich.edu std::vector<DistData> data; 2015141Sgblack@eecs.umich.edu 2025141Sgblack@eecs.umich.edu /** Names and descriptions of subfields. */ 2035141Sgblack@eecs.umich.edu std::vector<std::string> subnames; 2045135Sgblack@eecs.umich.edu std::vector<std::string> subdescs; 2055135Sgblack@eecs.umich.edu void enable(); 2065135Sgblack@eecs.umich.edu 2075135Sgblack@eecs.umich.edu protected: 2085135Sgblack@eecs.umich.edu /** Local storage for the entry values, used for printing. */ 2095135Sgblack@eecs.umich.edu mutable VResult rvec; 2105264Sgblack@eecs.umich.edu 2115264Sgblack@eecs.umich.edu public: 2125135Sgblack@eecs.umich.edu virtual size_type size() const = 0; 2135141Sgblack@eecs.umich.edu}; 2145141Sgblack@eecs.umich.edu 2155135Sgblack@eecs.umich.educlass Vector2dInfo : public Info 2165141Sgblack@eecs.umich.edu{ 2175141Sgblack@eecs.umich.edu public: 2185141Sgblack@eecs.umich.edu /** Names and descriptions of subfields. */ 2195141Sgblack@eecs.umich.edu std::vector<std::string> subnames; 2205135Sgblack@eecs.umich.edu std::vector<std::string> subdescs; 2215141Sgblack@eecs.umich.edu std::vector<std::string> y_subnames; 2225141Sgblack@eecs.umich.edu 2235141Sgblack@eecs.umich.edu size_type x; 2245141Sgblack@eecs.umich.edu size_type y; 2255141Sgblack@eecs.umich.edu 2265141Sgblack@eecs.umich.edu /** Local storage for the entry values, used for printing. */ 2275141Sgblack@eecs.umich.edu mutable VCounter cvec; 2285141Sgblack@eecs.umich.edu 2295141Sgblack@eecs.umich.edu void enable(); 2305141Sgblack@eecs.umich.edu}; 2315141Sgblack@eecs.umich.edu 2325141Sgblack@eecs.umich.educlass FormulaInfo : public VectorInfo 2335264Sgblack@eecs.umich.edu{ 2345141Sgblack@eecs.umich.edu public: 2355141Sgblack@eecs.umich.edu virtual std::string str() const = 0; 2365141Sgblack@eecs.umich.edu}; 2375141Sgblack@eecs.umich.edu 2385141Sgblack@eecs.umich.edu/** Data structure of sparse histogram */ 2395141Sgblack@eecs.umich.edustruct SparseHistData 2405141Sgblack@eecs.umich.edu{ 2415141Sgblack@eecs.umich.edu MCounter cmap; 2425141Sgblack@eecs.umich.edu Counter samples; 2435141Sgblack@eecs.umich.edu}; 2445141Sgblack@eecs.umich.edu 2455141Sgblack@eecs.umich.edu 2465141Sgblack@eecs.umich.educlass SparseHistInfo : public Info 2475141Sgblack@eecs.umich.edu{ 2485141Sgblack@eecs.umich.edu public: 2495141Sgblack@eecs.umich.edu /** Local storage for the entry values, used for printing. */ 2505141Sgblack@eecs.umich.edu SparseHistData data; 2515135Sgblack@eecs.umich.edu}; 2525135Sgblack@eecs.umich.edu 2535135Sgblack@eecs.umich.edu} // namespace Stats 2545135Sgblack@eecs.umich.edu 2555135Sgblack@eecs.umich.edu#endif // __BASE_STATS_INFO_HH__ 2565135Sgblack@eecs.umich.edu