src/Sim/Dumper/CountDumper.cpp

説明を見る。
00001 // 
00002 // Copyright (c) 2005-2008 Kenichi Watanabe.
00003 // Copyright (c) 2005-2008 Yasuhiro Watari.
00004 // Copyright (c) 2005-2008 Hironori Ichibayashi.
00005 // Copyright (c) 2008-2009 Kazuo Horio.
00006 // Copyright (c) 2009-2013 Naruki Kurata.
00007 // Copyright (c) 2005-2013 Ryota Shioya.
00008 // Copyright (c) 2005-2013 Masahiro Goshima.
00009 // 
00010 // This software is provided 'as-is', without any express or implied
00011 // warranty. In no event will the authors be held liable for any damages
00012 // arising from the use of this software.
00013 // 
00014 // Permission is granted to anyone to use this software for any purpose,
00015 // including commercial applications, and to alter it and redistribute it
00016 // freely, subject to the following restrictions:
00017 // 
00018 // 1. The origin of this software must not be misrepresented; you must not
00019 // claim that you wrote the original software. If you use this software
00020 // in a product, an acknowledgment in the product documentation would be
00021 // appreciated but is not required.
00022 // 
00023 // 2. Altered source versions must be plainly marked as such, and must not be
00024 // misrepresented as being the original software.
00025 // 
00026 // 3. This notice may not be removed or altered from any source
00027 // distribution.
00028 // 
00029 // 
00030 
00031 
00032 #include <pch.h>
00033 
00034 #include "Sim/Dumper/CountDumper.h"
00035 #include "Sim/Dumper/DumpFileName.h"
00036 
00037 using namespace std;
00038 using namespace boost;
00039 using namespace Onikiri;
00040 
00041 CountDumper::CountDumper()
00042 {
00043     m_curInsnCount = 0;
00044     m_curCycleCount = 0;
00045     m_insnIntervalOrigin = 0;
00046     m_cycleIntervalOrigin = 0;
00047     m_nextUpdateInsnCount = 0;
00048 }
00049 
00050 CountDumper::~CountDumper()
00051 {
00052 }
00053 
00054 void CountDumper::Initialize( const String& suffix )
00055 {
00056     LoadParam();
00057 
00058     String fileName = g_env.GetHostWorkPath() + MakeDumpFileName( m_fileName, suffix, m_gzipEnabled );
00059 
00060     if( m_enabled && (!m_stream.is_complete()) ){
00061         if(m_gzipEnabled){
00062             m_stream.push(
00063                 iostreams::gzip_compressor(
00064                     iostreams::gzip_params(m_gzipLevel) ) );
00065         }
00066         m_stream.push( 
00067             iostreams::file_sink(
00068                 fileName, ios::binary) );
00069     }
00070 
00071     m_nextUpdateInsnCount = m_interval;
00072 }
00073 
00074 void CountDumper::Finalize()
00075 {
00076     ReleaseParam();
00077 
00078     if(m_stream.is_complete()) {
00079         m_stream.reset();
00080     }
00081 }
00082 
00083 void CountDumper::SetCurrentInsnCount(s64 count)
00084 {
00085     m_curInsnCount = count;
00086 }
00087 
00088 void CountDumper::SetCurrentCycle(s64 count)
00089 {
00090     m_curCycleCount = count;
00091     Update();
00092 }
00093 
00094 bool CountDumper::Enabled()
00095 {
00096     return m_enabled;
00097 }
00098 
00099 void CountDumper::Update()
00100 {
00101     if(m_curInsnCount < m_nextUpdateInsnCount)
00102         return;
00103 
00104     s64 insnCountDelta  = m_curInsnCount  - m_insnIntervalOrigin;
00105     s64 cycleCountDelta = m_curCycleCount - m_cycleIntervalOrigin;
00106     double localIPC  = (double)insnCountDelta / (double)cycleCountDelta;
00107     double globalIPC = (double)m_curInsnCount / (double)m_curCycleCount;
00108 
00109     m_stream
00110         << "insns ,"        << insnCountDelta   << ","
00111         << "cycles ,"       << cycleCountDelta  << ","
00112         << "ipc ,"          << localIPC         << ","
00113         << "total insns ,"  << m_curInsnCount   << ","
00114         << "total cycles ," << m_curCycleCount  << ","
00115         << "total ipc ,"    << globalIPC        << ","
00116         << "\n";
00117 
00118     m_nextUpdateInsnCount += m_interval;
00119     m_insnIntervalOrigin  = m_curInsnCount;
00120     m_cycleIntervalOrigin = m_curCycleCount;
00121 }

Onikiri2に対してTue Jun 18 14:34:22 2013に生成されました。  doxygen 1.4.7