AccessTraceForAddress.hh revision 7048
14309Sgblack@eecs.umich.edu/*
24309Sgblack@eecs.umich.edu * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
34309Sgblack@eecs.umich.edu * All rights reserved.
44309Sgblack@eecs.umich.edu *
54309Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without
64309Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are
74309Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright
84309Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer;
94309Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright
104309Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the
114309Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution;
124309Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its
134309Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from
144309Sgblack@eecs.umich.edu * this software without specific prior written permission.
154309Sgblack@eecs.umich.edu *
164309Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
174309Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
184309Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
194309Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
204309Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
214309Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
224309Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
234309Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
244309Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
254309Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
264309Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
274309Sgblack@eecs.umich.edu */
284309Sgblack@eecs.umich.edu
294309Sgblack@eecs.umich.edu#ifndef __MEM_RUBY_PROFILER_ACCESSTRACEFORADDRESS_HH__
304309Sgblack@eecs.umich.edu#define __MEM_RUBY_PROFILER_ACCESSTRACEFORADDRESS_HH__
314309Sgblack@eecs.umich.edu
324309Sgblack@eecs.umich.edu#include "mem/protocol/AccessModeType.hh"
334309Sgblack@eecs.umich.edu#include "mem/protocol/CacheRequestType.hh"
344309Sgblack@eecs.umich.edu#include "mem/ruby/common/Address.hh"
354309Sgblack@eecs.umich.edu#include "mem/ruby/common/Global.hh"
364309Sgblack@eecs.umich.edu#include "mem/ruby/common/Set.hh"
374309Sgblack@eecs.umich.edu#include "mem/ruby/system/NodeID.hh"
384309Sgblack@eecs.umich.edu
394309Sgblack@eecs.umich.educlass Histogram;
404309Sgblack@eecs.umich.edu
414309Sgblack@eecs.umich.educlass AccessTraceForAddress
424309Sgblack@eecs.umich.edu{
434309Sgblack@eecs.umich.edu  public:
444309Sgblack@eecs.umich.edu    AccessTraceForAddress();
454309Sgblack@eecs.umich.edu    explicit AccessTraceForAddress(const Address& addr);
464309Sgblack@eecs.umich.edu    ~AccessTraceForAddress();
474309Sgblack@eecs.umich.edu
484309Sgblack@eecs.umich.edu    void update(CacheRequestType type, AccessModeType access_mode, NodeID cpu,
494309Sgblack@eecs.umich.edu                bool sharing_miss);
504309Sgblack@eecs.umich.edu    int getTotal() const;
514309Sgblack@eecs.umich.edu    int getSharing() const { return m_sharing; }
524309Sgblack@eecs.umich.edu    int getTouchedBy() const { return m_touched_by.count(); }
534309Sgblack@eecs.umich.edu    const Address& getAddress() const { return m_addr; }
544309Sgblack@eecs.umich.edu    void addSample(int value);
554309Sgblack@eecs.umich.edu
564309Sgblack@eecs.umich.edu    void print(ostream& out) const;
574309Sgblack@eecs.umich.edu
584533Sgblack@eecs.umich.edu  private:
594533Sgblack@eecs.umich.edu    Address m_addr;
604537Sgblack@eecs.umich.edu    uint64 m_loads;
614537Sgblack@eecs.umich.edu    uint64 m_stores;
624533Sgblack@eecs.umich.edu    uint64 m_atomics;
634533Sgblack@eecs.umich.edu    uint64 m_total;
644537Sgblack@eecs.umich.edu    uint64 m_user;
654533Sgblack@eecs.umich.edu    uint64 m_sharing;
664528Sgblack@eecs.umich.edu    Set m_touched_by;
674528Sgblack@eecs.umich.edu    Histogram* m_histogram_ptr;
684528Sgblack@eecs.umich.edu};
694528Sgblack@eecs.umich.edu
704528Sgblack@eecs.umich.eduinline bool
714605Sgblack@eecs.umich.edunode_less_then_eq(const AccessTraceForAddress* n1,
724528Sgblack@eecs.umich.edu                  const AccessTraceForAddress* n2)
734528Sgblack@eecs.umich.edu{
744528Sgblack@eecs.umich.edu    return n1->getTotal() > n2->getTotal();
754615Sgblack@eecs.umich.edu}
764615Sgblack@eecs.umich.edu
774615Sgblack@eecs.umich.eduinline ostream&
784615Sgblack@eecs.umich.eduoperator<<(ostream& out, const AccessTraceForAddress& obj)
794615Sgblack@eecs.umich.edu{
804615Sgblack@eecs.umich.edu    obj.print(out);
814615Sgblack@eecs.umich.edu    out << flush;
824615Sgblack@eecs.umich.edu    return out;
834615Sgblack@eecs.umich.edu}
844615Sgblack@eecs.umich.edu
854615Sgblack@eecs.umich.edu#endif // __MEM_RUBY_PROFILER_ACCESSTRACEFORADDRESS_HH__
864615Sgblack@eecs.umich.edu