AccessTraceForAddress.hh revision 7055
17753SWilliam.Wang@arm.com/* 27753SWilliam.Wang@arm.com * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood 37753SWilliam.Wang@arm.com * All rights reserved. 47753SWilliam.Wang@arm.com * 57753SWilliam.Wang@arm.com * Redistribution and use in source and binary forms, with or without 67753SWilliam.Wang@arm.com * modification, are permitted provided that the following conditions are 77753SWilliam.Wang@arm.com * met: redistributions of source code must retain the above copyright 87753SWilliam.Wang@arm.com * notice, this list of conditions and the following disclaimer; 97753SWilliam.Wang@arm.com * redistributions in binary form must reproduce the above copyright 107753SWilliam.Wang@arm.com * notice, this list of conditions and the following disclaimer in the 117753SWilliam.Wang@arm.com * documentation and/or other materials provided with the distribution; 127753SWilliam.Wang@arm.com * neither the name of the copyright holders nor the names of its 137753SWilliam.Wang@arm.com * contributors may be used to endorse or promote products derived from 147753SWilliam.Wang@arm.com * this software without specific prior written permission. 157753SWilliam.Wang@arm.com * 167753SWilliam.Wang@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 177753SWilliam.Wang@arm.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 187753SWilliam.Wang@arm.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 197753SWilliam.Wang@arm.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 207753SWilliam.Wang@arm.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 217753SWilliam.Wang@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 227753SWilliam.Wang@arm.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 237753SWilliam.Wang@arm.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 247753SWilliam.Wang@arm.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 257753SWilliam.Wang@arm.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 267753SWilliam.Wang@arm.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 277753SWilliam.Wang@arm.com */ 287753SWilliam.Wang@arm.com 297753SWilliam.Wang@arm.com#ifndef __MEM_RUBY_PROFILER_ACCESSTRACEFORADDRESS_HH__ 307753SWilliam.Wang@arm.com#define __MEM_RUBY_PROFILER_ACCESSTRACEFORADDRESS_HH__ 317753SWilliam.Wang@arm.com 327753SWilliam.Wang@arm.com#include <iostream> 337753SWilliam.Wang@arm.com 347753SWilliam.Wang@arm.com#include "mem/protocol/AccessModeType.hh" 357753SWilliam.Wang@arm.com#include "mem/protocol/CacheRequestType.hh" 367753SWilliam.Wang@arm.com#include "mem/ruby/common/Address.hh" 377753SWilliam.Wang@arm.com#include "mem/ruby/common/Global.hh" 387950SAli.Saidi@ARM.com#include "mem/ruby/common/Set.hh" 397753SWilliam.Wang@arm.com#include "mem/ruby/system/NodeID.hh" 407753SWilliam.Wang@arm.com 418229Snate@binkert.orgclass Histogram; 427950SAli.Saidi@ARM.com 437950SAli.Saidi@ARM.comclass AccessTraceForAddress 447753SWilliam.Wang@arm.com{ 457753SWilliam.Wang@arm.com public: 467753SWilliam.Wang@arm.com AccessTraceForAddress(); 477753SWilliam.Wang@arm.com explicit AccessTraceForAddress(const Address& addr); 487753SWilliam.Wang@arm.com ~AccessTraceForAddress(); 497753SWilliam.Wang@arm.com 507753SWilliam.Wang@arm.com void update(CacheRequestType type, AccessModeType access_mode, NodeID cpu, 517753SWilliam.Wang@arm.com bool sharing_miss); 527753SWilliam.Wang@arm.com int getTotal() const; 537753SWilliam.Wang@arm.com int getSharing() const { return m_sharing; } 547753SWilliam.Wang@arm.com int getTouchedBy() const { return m_touched_by.count(); } 557753SWilliam.Wang@arm.com const Address& getAddress() const { return m_addr; } 567753SWilliam.Wang@arm.com void addSample(int value); 577950SAli.Saidi@ARM.com 587753SWilliam.Wang@arm.com void print(std::ostream& out) const; 597753SWilliam.Wang@arm.com 607753SWilliam.Wang@arm.com private: 617950SAli.Saidi@ARM.com Address m_addr; 627950SAli.Saidi@ARM.com uint64 m_loads; 637753SWilliam.Wang@arm.com uint64 m_stores; 647753SWilliam.Wang@arm.com uint64 m_atomics; 657753SWilliam.Wang@arm.com uint64 m_total; 667753SWilliam.Wang@arm.com uint64 m_user; 677753SWilliam.Wang@arm.com uint64 m_sharing; 687950SAli.Saidi@ARM.com Set m_touched_by; 697950SAli.Saidi@ARM.com Histogram* m_histogram_ptr; 707950SAli.Saidi@ARM.com}; 717950SAli.Saidi@ARM.com 727753SWilliam.Wang@arm.cominline bool 737753SWilliam.Wang@arm.comnode_less_then_eq(const AccessTraceForAddress* n1, 747753SWilliam.Wang@arm.com const AccessTraceForAddress* n2) 757950SAli.Saidi@ARM.com{ 767950SAli.Saidi@ARM.com return n1->getTotal() > n2->getTotal(); 777950SAli.Saidi@ARM.com} 787753SWilliam.Wang@arm.com 797753SWilliam.Wang@arm.cominline std::ostream& 807753SWilliam.Wang@arm.comoperator<<(std::ostream& out, const AccessTraceForAddress& obj) 817753SWilliam.Wang@arm.com{ 827753SWilliam.Wang@arm.com obj.print(out); 837753SWilliam.Wang@arm.com out << std::flush; 847753SWilliam.Wang@arm.com return out; 857753SWilliam.Wang@arm.com} 867753SWilliam.Wang@arm.com 877753SWilliam.Wang@arm.com#endif // __MEM_RUBY_PROFILER_ACCESSTRACEFORADDRESS_HH__ 887753SWilliam.Wang@arm.com