592 lines
18 KiB
C
592 lines
18 KiB
C
|
/*****************************************************************************
|
||
|
* McPAT
|
||
|
* SOFTWARE LICENSE AGREEMENT
|
||
|
* Copyright 2012 Hewlett-Packard Development Company, L.P.
|
||
|
* All Rights Reserved
|
||
|
*
|
||
|
* Redistribution and use in source and binary forms, with or without
|
||
|
* modification, are permitted provided that the following conditions are
|
||
|
* met: redistributions of source code must retain the above copyright
|
||
|
* notice, this list of conditions and the following disclaimer;
|
||
|
* redistributions in binary form must reproduce the above copyright
|
||
|
* notice, this list of conditions and the following disclaimer in the
|
||
|
* documentation and/or other materials provided with the distribution;
|
||
|
* neither the name of the copyright holders nor the names of its
|
||
|
* contributors may be used to endorse or promote products derived from
|
||
|
* this software without specific prior written permission.
|
||
|
|
||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||
|
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.”
|
||
|
*
|
||
|
***************************************************************************/
|
||
|
|
||
|
#ifndef XML_PARSE_H_
|
||
|
#define XML_PARSE_H_
|
||
|
|
||
|
|
||
|
//#ifdef WIN32
|
||
|
//#define _CRT_SECURE_NO_DEPRECATE
|
||
|
//#endif
|
||
|
|
||
|
#include <stdio.h>
|
||
|
#include <string.h>
|
||
|
|
||
|
#include <iostream>
|
||
|
|
||
|
#include "xmlParser.h"
|
||
|
using namespace std;
|
||
|
|
||
|
/*
|
||
|
void myfree(char *t); // {free(t);}
|
||
|
ToXMLStringTool tx,tx2;
|
||
|
*/
|
||
|
//all subnodes at the level of system.core(0-n)
|
||
|
//cache_policy is added into cache property arrays;//0 no write or write-though with non-write allocate;1 write-back with write-allocate
|
||
|
|
||
|
typedef struct{
|
||
|
int prediction_width;
|
||
|
char prediction_scheme[20];
|
||
|
int predictor_size;
|
||
|
int predictor_entries;
|
||
|
int local_predictor_size[20];
|
||
|
int local_predictor_entries;
|
||
|
int global_predictor_entries;
|
||
|
int global_predictor_bits;
|
||
|
int chooser_predictor_entries;
|
||
|
int chooser_predictor_bits;
|
||
|
double predictor_accesses;
|
||
|
} predictor_systemcore;
|
||
|
typedef struct{
|
||
|
int number_entries;
|
||
|
int cache_policy;//0 no write or write-though with non-write allocate;1 write-back with write-allocate
|
||
|
double total_hits;
|
||
|
double total_accesses;
|
||
|
double total_misses;
|
||
|
double conflicts;
|
||
|
} itlb_systemcore;
|
||
|
typedef struct{
|
||
|
//params
|
||
|
double icache_config[20];
|
||
|
int buffer_sizes[20];
|
||
|
int cache_policy;//0 no write or write-though with non-write allocate;1 write-back with write-allocate
|
||
|
//stats
|
||
|
double total_accesses;
|
||
|
double read_accesses;
|
||
|
double read_misses;
|
||
|
double replacements;
|
||
|
double read_hits;
|
||
|
double total_hits;
|
||
|
double total_misses;
|
||
|
double miss_buffer_access;
|
||
|
double fill_buffer_accesses;
|
||
|
double prefetch_buffer_accesses;
|
||
|
double prefetch_buffer_writes;
|
||
|
double prefetch_buffer_reads;
|
||
|
double prefetch_buffer_hits;
|
||
|
double conflicts;
|
||
|
} icache_systemcore;
|
||
|
typedef struct{
|
||
|
//params
|
||
|
int number_entries;
|
||
|
int cache_policy;//0 no write or write-though with non-write allocate;1 write-back with write-allocate
|
||
|
//stats
|
||
|
double total_accesses;
|
||
|
double read_accesses;
|
||
|
double write_accesses;
|
||
|
double write_hits;
|
||
|
double read_hits;
|
||
|
double read_misses;
|
||
|
double write_misses;
|
||
|
double total_hits;
|
||
|
double total_misses;
|
||
|
double conflicts;
|
||
|
} dtlb_systemcore;
|
||
|
typedef struct{
|
||
|
//params
|
||
|
double dcache_config[20];
|
||
|
int buffer_sizes[20];
|
||
|
int cache_policy;//0 no write or write-though with non-write allocate;1 write-back with write-allocate
|
||
|
//stats
|
||
|
double total_accesses;
|
||
|
double read_accesses;
|
||
|
double write_accesses;
|
||
|
double total_hits;
|
||
|
double total_misses;
|
||
|
double read_hits;
|
||
|
double write_hits;
|
||
|
double read_misses;
|
||
|
double write_misses;
|
||
|
double replacements;
|
||
|
double write_backs;
|
||
|
double miss_buffer_access;
|
||
|
double fill_buffer_accesses;
|
||
|
double prefetch_buffer_accesses;
|
||
|
double prefetch_buffer_writes;
|
||
|
double prefetch_buffer_reads;
|
||
|
double prefetch_buffer_hits;
|
||
|
double wbb_writes;
|
||
|
double wbb_reads;
|
||
|
double conflicts;
|
||
|
} dcache_systemcore;
|
||
|
typedef struct{
|
||
|
//params
|
||
|
int BTB_config[20];
|
||
|
//stats
|
||
|
double total_accesses;
|
||
|
double read_accesses;
|
||
|
double write_accesses;
|
||
|
double total_hits;
|
||
|
double total_misses;
|
||
|
double read_hits;
|
||
|
double write_hits;
|
||
|
double read_misses;
|
||
|
double write_misses;
|
||
|
double replacements;
|
||
|
} BTB_systemcore;
|
||
|
typedef struct{
|
||
|
//all params at the level of system.core(0-n)
|
||
|
int clock_rate;
|
||
|
bool opt_local;
|
||
|
bool x86;
|
||
|
int machine_bits;
|
||
|
int virtual_address_width;
|
||
|
int physical_address_width;
|
||
|
int opcode_width;
|
||
|
int micro_opcode_width;
|
||
|
int instruction_length;
|
||
|
int machine_type;
|
||
|
int internal_datapath_width;
|
||
|
int number_hardware_threads;
|
||
|
int fetch_width;
|
||
|
int number_instruction_fetch_ports;
|
||
|
int decode_width;
|
||
|
int issue_width;
|
||
|
int peak_issue_width;
|
||
|
int commit_width;
|
||
|
int pipelines_per_core[20];
|
||
|
int pipeline_depth[20];
|
||
|
char FPU[20];
|
||
|
char divider_multiplier[20];
|
||
|
int ALU_per_core;
|
||
|
double FPU_per_core;
|
||
|
int MUL_per_core;
|
||
|
int instruction_buffer_size;
|
||
|
int decoded_stream_buffer_size;
|
||
|
int instruction_window_scheme;
|
||
|
int instruction_window_size;
|
||
|
int fp_instruction_window_size;
|
||
|
int ROB_size;
|
||
|
int archi_Regs_IRF_size;
|
||
|
int archi_Regs_FRF_size;
|
||
|
int phy_Regs_IRF_size;
|
||
|
int phy_Regs_FRF_size;
|
||
|
int rename_scheme;
|
||
|
int register_windows_size;
|
||
|
char LSU_order[20];
|
||
|
int store_buffer_size;
|
||
|
int load_buffer_size;
|
||
|
int memory_ports;
|
||
|
char Dcache_dual_pump[20];
|
||
|
int RAS_size;
|
||
|
int fp_issue_width;
|
||
|
int prediction_width;
|
||
|
int number_of_BTB;
|
||
|
int number_of_BPT;
|
||
|
|
||
|
//all stats at the level of system.core(0-n)
|
||
|
double total_instructions;
|
||
|
double int_instructions;
|
||
|
double fp_instructions;
|
||
|
double branch_instructions;
|
||
|
double branch_mispredictions;
|
||
|
double committed_instructions;
|
||
|
double committed_int_instructions;
|
||
|
double committed_fp_instructions;
|
||
|
double load_instructions;
|
||
|
double store_instructions;
|
||
|
double total_cycles;
|
||
|
double idle_cycles;
|
||
|
double busy_cycles;
|
||
|
double instruction_buffer_reads;
|
||
|
double instruction_buffer_write;
|
||
|
double ROB_reads;
|
||
|
double ROB_writes;
|
||
|
double rename_accesses;
|
||
|
double fp_rename_accesses;
|
||
|
double rename_reads;
|
||
|
double rename_writes;
|
||
|
double fp_rename_reads;
|
||
|
double fp_rename_writes;
|
||
|
double inst_window_reads;
|
||
|
double inst_window_writes;
|
||
|
double inst_window_wakeup_accesses;
|
||
|
double inst_window_selections;
|
||
|
double fp_inst_window_reads;
|
||
|
double fp_inst_window_writes;
|
||
|
double fp_inst_window_wakeup_accesses;
|
||
|
double fp_inst_window_selections;
|
||
|
double archi_int_regfile_reads;
|
||
|
double archi_float_regfile_reads;
|
||
|
double phy_int_regfile_reads;
|
||
|
double phy_float_regfile_reads;
|
||
|
double phy_int_regfile_writes;
|
||
|
double phy_float_regfile_writes;
|
||
|
double archi_int_regfile_writes;
|
||
|
double archi_float_regfile_writes;
|
||
|
double int_regfile_reads;
|
||
|
double float_regfile_reads;
|
||
|
double int_regfile_writes;
|
||
|
double float_regfile_writes;
|
||
|
double windowed_reg_accesses;
|
||
|
double windowed_reg_transports;
|
||
|
double function_calls;
|
||
|
double context_switches;
|
||
|
double ialu_accesses;
|
||
|
double fpu_accesses;
|
||
|
double mul_accesses;
|
||
|
double cdb_alu_accesses;
|
||
|
double cdb_mul_accesses;
|
||
|
double cdb_fpu_accesses;
|
||
|
double load_buffer_reads;
|
||
|
double load_buffer_writes;
|
||
|
double load_buffer_cams;
|
||
|
double store_buffer_reads;
|
||
|
double store_buffer_writes;
|
||
|
double store_buffer_cams;
|
||
|
double store_buffer_forwards;
|
||
|
double main_memory_access;
|
||
|
double main_memory_read;
|
||
|
double main_memory_write;
|
||
|
double pipeline_duty_cycle;
|
||
|
|
||
|
double IFU_duty_cycle ;
|
||
|
double BR_duty_cycle ;
|
||
|
double LSU_duty_cycle ;
|
||
|
double MemManU_I_duty_cycle;
|
||
|
double MemManU_D_duty_cycle ;
|
||
|
double ALU_duty_cycle ;
|
||
|
double MUL_duty_cycle ;
|
||
|
double FPU_duty_cycle ;
|
||
|
double ALU_cdb_duty_cycle ;
|
||
|
double MUL_cdb_duty_cycle ;
|
||
|
double FPU_cdb_duty_cycle ;
|
||
|
|
||
|
//all subnodes at the level of system.core(0-n)
|
||
|
predictor_systemcore predictor;
|
||
|
itlb_systemcore itlb;
|
||
|
icache_systemcore icache;
|
||
|
dtlb_systemcore dtlb;
|
||
|
dcache_systemcore dcache;
|
||
|
BTB_systemcore BTB;
|
||
|
|
||
|
} system_core;
|
||
|
typedef struct{
|
||
|
//params
|
||
|
int Directory_type;
|
||
|
double Dir_config[20];
|
||
|
int buffer_sizes[20];
|
||
|
int clockrate;
|
||
|
int ports[20];
|
||
|
int device_type;
|
||
|
int cache_policy;//0 no write or write-though with non-write allocate;1 write-back with write-allocate
|
||
|
char threeD_stack[20];
|
||
|
//stats
|
||
|
double total_accesses;
|
||
|
double read_accesses;
|
||
|
double write_accesses;
|
||
|
double read_misses;
|
||
|
double write_misses;
|
||
|
double conflicts;
|
||
|
double duty_cycle;
|
||
|
} system_L1Directory;
|
||
|
typedef struct{
|
||
|
//params
|
||
|
int Directory_type;
|
||
|
double Dir_config[20];
|
||
|
int buffer_sizes[20];
|
||
|
int clockrate;
|
||
|
int ports[20];
|
||
|
int device_type;
|
||
|
int cache_policy;//0 no write or write-though with non-write allocate;1 write-back with write-allocate
|
||
|
char threeD_stack[20];
|
||
|
//stats
|
||
|
double total_accesses;
|
||
|
double read_accesses;
|
||
|
double write_accesses;
|
||
|
double read_misses;
|
||
|
double write_misses;
|
||
|
double conflicts;
|
||
|
double duty_cycle;
|
||
|
} system_L2Directory;
|
||
|
typedef struct{
|
||
|
//params
|
||
|
double L2_config[20];
|
||
|
int clockrate;
|
||
|
int ports[20];
|
||
|
int device_type;
|
||
|
int cache_policy;//0 no write or write-though with non-write allocate;1 write-back with write-allocate
|
||
|
char threeD_stack[20];
|
||
|
int buffer_sizes[20];
|
||
|
//stats
|
||
|
double total_accesses;
|
||
|
double read_accesses;
|
||
|
double write_accesses;
|
||
|
double total_hits;
|
||
|
double total_misses;
|
||
|
double read_hits;
|
||
|
double write_hits;
|
||
|
double read_misses;
|
||
|
double write_misses;
|
||
|
double replacements;
|
||
|
double write_backs;
|
||
|
double miss_buffer_accesses;
|
||
|
double fill_buffer_accesses;
|
||
|
double prefetch_buffer_accesses;
|
||
|
double prefetch_buffer_writes;
|
||
|
double prefetch_buffer_reads;
|
||
|
double prefetch_buffer_hits;
|
||
|
double wbb_writes;
|
||
|
double wbb_reads;
|
||
|
double conflicts;
|
||
|
double duty_cycle;
|
||
|
|
||
|
bool merged_dir;
|
||
|
double homenode_read_accesses;
|
||
|
double homenode_write_accesses;
|
||
|
double homenode_read_hits;
|
||
|
double homenode_write_hits;
|
||
|
double homenode_read_misses;
|
||
|
double homenode_write_misses;
|
||
|
double dir_duty_cycle;
|
||
|
} system_L2;
|
||
|
typedef struct{
|
||
|
//params
|
||
|
double L3_config[20];
|
||
|
int clockrate;
|
||
|
int ports[20];
|
||
|
int device_type;
|
||
|
int cache_policy;//0 no write or write-though with non-write allocate;1 write-back with write-allocate
|
||
|
char threeD_stack[20];
|
||
|
int buffer_sizes[20];
|
||
|
//stats
|
||
|
double total_accesses;
|
||
|
double read_accesses;
|
||
|
double write_accesses;
|
||
|
double total_hits;
|
||
|
double total_misses;
|
||
|
double read_hits;
|
||
|
double write_hits;
|
||
|
double read_misses;
|
||
|
double write_misses;
|
||
|
double replacements;
|
||
|
double write_backs;
|
||
|
double miss_buffer_accesses;
|
||
|
double fill_buffer_accesses;
|
||
|
double prefetch_buffer_accesses;
|
||
|
double prefetch_buffer_writes;
|
||
|
double prefetch_buffer_reads;
|
||
|
double prefetch_buffer_hits;
|
||
|
double wbb_writes;
|
||
|
double wbb_reads;
|
||
|
double conflicts;
|
||
|
double duty_cycle;
|
||
|
|
||
|
bool merged_dir;
|
||
|
double homenode_read_accesses;
|
||
|
double homenode_write_accesses;
|
||
|
double homenode_read_hits;
|
||
|
double homenode_write_hits;
|
||
|
double homenode_read_misses;
|
||
|
double homenode_write_misses;
|
||
|
double dir_duty_cycle;
|
||
|
} system_L3;
|
||
|
typedef struct{
|
||
|
//params
|
||
|
int number_of_inputs_of_crossbars;
|
||
|
int number_of_outputs_of_crossbars;
|
||
|
int flit_bits;
|
||
|
int input_buffer_entries_per_port;
|
||
|
int ports_of_input_buffer[20];
|
||
|
//stats
|
||
|
double crossbar_accesses;
|
||
|
} xbar0_systemNoC;
|
||
|
typedef struct{
|
||
|
//params
|
||
|
int clockrate;
|
||
|
bool type;
|
||
|
bool has_global_link;
|
||
|
char topology[20];
|
||
|
int horizontal_nodes;
|
||
|
int vertical_nodes;
|
||
|
int link_throughput;
|
||
|
int link_latency;
|
||
|
int input_ports;
|
||
|
int output_ports;
|
||
|
int virtual_channel_per_port;
|
||
|
int flit_bits;
|
||
|
int input_buffer_entries_per_vc;
|
||
|
int ports_of_input_buffer[20];
|
||
|
int dual_pump;
|
||
|
int number_of_crossbars;
|
||
|
char crossbar_type[20];
|
||
|
char crosspoint_type[20];
|
||
|
xbar0_systemNoC xbar0;
|
||
|
int arbiter_type;
|
||
|
double chip_coverage;
|
||
|
//stats
|
||
|
double total_accesses;
|
||
|
double duty_cycle;
|
||
|
double route_over_perc;
|
||
|
} system_NoC;
|
||
|
typedef struct{
|
||
|
//params
|
||
|
int mem_tech_node;
|
||
|
int device_clock;
|
||
|
int peak_transfer_rate;
|
||
|
int internal_prefetch_of_DRAM_chip;
|
||
|
int capacity_per_channel;
|
||
|
int number_ranks;
|
||
|
int num_banks_of_DRAM_chip;
|
||
|
int Block_width_of_DRAM_chip;
|
||
|
int output_width_of_DRAM_chip;
|
||
|
int page_size_of_DRAM_chip;
|
||
|
int burstlength_of_DRAM_chip;
|
||
|
//stats
|
||
|
double memory_accesses;
|
||
|
double memory_reads;
|
||
|
double memory_writes;
|
||
|
} system_mem;
|
||
|
typedef struct{
|
||
|
//params
|
||
|
//Common Param for mc and fc
|
||
|
double peak_transfer_rate;
|
||
|
int number_mcs;
|
||
|
bool withPHY;
|
||
|
int type;
|
||
|
|
||
|
//FCParam
|
||
|
//stats
|
||
|
double duty_cycle;
|
||
|
double total_load_perc;
|
||
|
|
||
|
//McParam
|
||
|
int mc_clock;
|
||
|
int llc_line_length;
|
||
|
int memory_channels_per_mc;
|
||
|
int number_ranks;
|
||
|
int req_window_size_per_channel;
|
||
|
int IO_buffer_size_per_channel;
|
||
|
int databus_width;
|
||
|
int addressbus_width;
|
||
|
bool LVDS;
|
||
|
|
||
|
//stats
|
||
|
double memory_accesses;
|
||
|
double memory_reads;
|
||
|
double memory_writes;
|
||
|
} system_mc;
|
||
|
|
||
|
typedef struct{
|
||
|
//params
|
||
|
int clockrate;
|
||
|
int number_units;
|
||
|
int type;
|
||
|
//stats
|
||
|
double duty_cycle;
|
||
|
double total_load_perc;
|
||
|
} system_niu;
|
||
|
|
||
|
typedef struct{
|
||
|
//params
|
||
|
int clockrate;
|
||
|
int number_units;
|
||
|
int num_channels;
|
||
|
int type;
|
||
|
bool withPHY;
|
||
|
//stats
|
||
|
double duty_cycle;
|
||
|
double total_load_perc;
|
||
|
} system_pcie;
|
||
|
|
||
|
typedef struct{
|
||
|
//All number_of_* at the level of 'system' Ying 03/21/2009
|
||
|
int number_of_cores;
|
||
|
int number_of_L1Directories;
|
||
|
int number_of_L2Directories;
|
||
|
int number_of_L2s;
|
||
|
bool Private_L2;
|
||
|
int number_of_L3s;
|
||
|
int number_of_NoCs;
|
||
|
int number_of_dir_levels;
|
||
|
int domain_size;
|
||
|
int first_level_dir;
|
||
|
// All params at the level of 'system'
|
||
|
int homogeneous_cores;
|
||
|
int homogeneous_L1Directories;
|
||
|
int homogeneous_L2Directories;
|
||
|
double core_tech_node;
|
||
|
int target_core_clockrate;
|
||
|
int target_chip_area;
|
||
|
int temperature;
|
||
|
int number_cache_levels;
|
||
|
int L1_property;
|
||
|
int L2_property;
|
||
|
int homogeneous_L2s;
|
||
|
int L3_property;
|
||
|
int homogeneous_L3s;
|
||
|
int homogeneous_NoCs;
|
||
|
int homogeneous_ccs;
|
||
|
int Max_area_deviation;
|
||
|
int Max_power_deviation;
|
||
|
int device_type;
|
||
|
bool longer_channel_device;
|
||
|
bool Embedded;
|
||
|
bool opt_dynamic_power;
|
||
|
bool opt_lakage_power;
|
||
|
bool opt_clockrate;
|
||
|
bool opt_area;
|
||
|
int interconnect_projection_type;
|
||
|
int machine_bits;
|
||
|
int virtual_address_width;
|
||
|
int physical_address_width;
|
||
|
int virtual_memory_page_size;
|
||
|
double total_cycles;
|
||
|
//system.core(0-n):3rd level
|
||
|
system_core core[64];
|
||
|
system_L1Directory L1Directory[64];
|
||
|
system_L2Directory L2Directory[64];
|
||
|
system_L2 L2[64];
|
||
|
system_L3 L3[64];
|
||
|
system_NoC NoC[64];
|
||
|
system_mem mem;
|
||
|
system_mc mc;
|
||
|
system_mc flashc;
|
||
|
system_niu niu;
|
||
|
system_pcie pcie;
|
||
|
} root_system;
|
||
|
|
||
|
class ParseXML
|
||
|
{
|
||
|
public:
|
||
|
void parse(char* filepath);
|
||
|
void initialize();
|
||
|
public:
|
||
|
root_system sys;
|
||
|
};
|
||
|
|
||
|
|
||
|
#endif /* XML_PARSE_H_ */
|
||
|
|
||
|
|
||
|
|
||
|
|