/***************************************************************************** * 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 #include #include #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_ */