astra-sim-alibabacloud/astra-sim/system/SharedBusStat.hh (156 lines of code) (raw):

/****************************************************************************** This source code is licensed under the MIT license found in the LICENSE file in the root directory of this source tree. *******************************************************************************/ #ifndef __SHAREDBUSSTAT_HH__ #define __SHAREDBUSSTAT_HH__ #include <assert.h> #include <math.h> #include <algorithm> #include <chrono> #include <cstdint> #include <ctime> #include <fstream> #include <list> #include <map> #include <sstream> #include <tuple> #include <vector> #include "CallData.hh" namespace AstraSim { class SharedBusStat : public CallData { public: double total_shared_bus_transfer_queue_delay; double total_shared_bus_transfer_delay; double total_shared_bus_processing_queue_delay; double total_shared_bus_processing_delay; double total_mem_bus_transfer_queue_delay; double total_mem_bus_transfer_delay; double total_mem_bus_processing_queue_delay; double total_mem_bus_processing_delay; int mem_request_counter; int shared_request_counter; SharedBusStat( BusType busType, double total_bus_transfer_queue_delay, double total_bus_transfer_delay, double total_bus_processing_queue_delay, double total_bus_processing_delay) { if (busType == BusType::Shared) { this->total_shared_bus_transfer_queue_delay = total_bus_transfer_queue_delay; this->total_shared_bus_transfer_delay = total_bus_transfer_delay; this->total_shared_bus_processing_queue_delay = total_bus_processing_queue_delay; this->total_shared_bus_processing_delay = total_bus_processing_delay; this->total_mem_bus_transfer_queue_delay = 0; this->total_mem_bus_transfer_delay = 0; this->total_mem_bus_processing_queue_delay = 0; this->total_mem_bus_processing_delay = 0; } else { this->total_shared_bus_transfer_queue_delay = 0; this->total_shared_bus_transfer_delay = 0; this->total_shared_bus_processing_queue_delay = 0; this->total_shared_bus_processing_delay = 0; this->total_mem_bus_transfer_queue_delay = total_bus_transfer_queue_delay; this->total_mem_bus_transfer_delay = total_bus_transfer_delay; this->total_mem_bus_processing_queue_delay = total_bus_processing_queue_delay; this->total_mem_bus_processing_delay = total_bus_processing_delay; } shared_request_counter = 0; mem_request_counter = 0; } void update_bus_stats(BusType busType, SharedBusStat* sharedBusStat) { if (busType == BusType::Shared) { total_shared_bus_transfer_queue_delay += sharedBusStat->total_shared_bus_transfer_queue_delay; total_shared_bus_transfer_delay += sharedBusStat->total_shared_bus_transfer_delay; total_shared_bus_processing_queue_delay += sharedBusStat->total_shared_bus_processing_queue_delay; total_shared_bus_processing_delay += sharedBusStat->total_shared_bus_processing_delay; shared_request_counter++; } else if (busType == BusType::Mem) { total_mem_bus_transfer_queue_delay += sharedBusStat->total_mem_bus_transfer_queue_delay; total_mem_bus_transfer_delay += sharedBusStat->total_mem_bus_transfer_delay; total_mem_bus_processing_queue_delay += sharedBusStat->total_mem_bus_processing_queue_delay; total_mem_bus_processing_delay += sharedBusStat->total_mem_bus_processing_delay; mem_request_counter++; } else { total_shared_bus_transfer_queue_delay += sharedBusStat->total_shared_bus_transfer_queue_delay; total_shared_bus_transfer_delay += sharedBusStat->total_shared_bus_transfer_delay; total_shared_bus_processing_queue_delay += sharedBusStat->total_shared_bus_processing_queue_delay; total_shared_bus_processing_delay += sharedBusStat->total_shared_bus_processing_delay; total_mem_bus_transfer_queue_delay += sharedBusStat->total_mem_bus_transfer_queue_delay; total_mem_bus_transfer_delay += sharedBusStat->total_mem_bus_transfer_delay; total_mem_bus_processing_queue_delay += sharedBusStat->total_mem_bus_processing_queue_delay; total_mem_bus_processing_delay += sharedBusStat->total_mem_bus_processing_delay; shared_request_counter++; mem_request_counter++; } } void update_bus_stats(BusType busType, SharedBusStat sharedBusStat) { if (busType == BusType::Shared) { total_shared_bus_transfer_queue_delay += sharedBusStat.total_shared_bus_transfer_queue_delay; total_shared_bus_transfer_delay += sharedBusStat.total_shared_bus_transfer_delay; total_shared_bus_processing_queue_delay += sharedBusStat.total_shared_bus_processing_queue_delay; total_shared_bus_processing_delay += sharedBusStat.total_shared_bus_processing_delay; shared_request_counter++; } else if (busType == BusType::Mem) { total_mem_bus_transfer_queue_delay += sharedBusStat.total_mem_bus_transfer_queue_delay; total_mem_bus_transfer_delay += sharedBusStat.total_mem_bus_transfer_delay; total_mem_bus_processing_queue_delay += sharedBusStat.total_mem_bus_processing_queue_delay; total_mem_bus_processing_delay += sharedBusStat.total_mem_bus_processing_delay; mem_request_counter++; } else { total_shared_bus_transfer_queue_delay += sharedBusStat.total_shared_bus_transfer_queue_delay; total_shared_bus_transfer_delay += sharedBusStat.total_shared_bus_transfer_delay; total_shared_bus_processing_queue_delay += sharedBusStat.total_shared_bus_processing_queue_delay; total_shared_bus_processing_delay += sharedBusStat.total_shared_bus_processing_delay; total_mem_bus_transfer_queue_delay += sharedBusStat.total_mem_bus_transfer_queue_delay; total_mem_bus_transfer_delay += sharedBusStat.total_mem_bus_transfer_delay; total_mem_bus_processing_queue_delay += sharedBusStat.total_mem_bus_processing_queue_delay; total_mem_bus_processing_delay += sharedBusStat.total_mem_bus_processing_delay; shared_request_counter++; mem_request_counter++; } } void take_bus_stats_average() { total_shared_bus_transfer_queue_delay /= shared_request_counter; total_shared_bus_transfer_delay /= shared_request_counter; total_shared_bus_processing_queue_delay /= shared_request_counter; total_shared_bus_processing_delay /= shared_request_counter; total_mem_bus_transfer_queue_delay /= mem_request_counter; total_mem_bus_transfer_delay /= mem_request_counter; total_mem_bus_processing_queue_delay /= mem_request_counter; total_mem_bus_processing_delay /= mem_request_counter; } }; } // namespace AstraSim #endif