IntersimConfig::IntersimConfig() { // Add options for intersim _int_map["perfect_icnt"] = 0; // if set overrides fixed_lat_per_hop setting _int_map["fixed_lat_per_hop"] = 0; // if set icnt is NOT simulated instead packets are sent into destination based on a fixed_lat_per_hop _int_map["use_map"] = 1; // config SMs and memory nodes map AddStrField("memory_node_map", ""); _int_map["flit_size"] = 32; _int_map["input_buffer_size"] = 0; _int_map["ejection_buffer_size"] = 0; // if left zero the simulator will use the vc_buf_size instead _int_map["boundary_buffer_size"] = 16; // FIXME: obsolete, unsupport configs _int_map["output_extra_latency"] = 0; _int_map["network_count"] = 2; // number of independent interconnection networks (if it is set to 2 then 2 identical networks are created: sh2mem and mem2shd ) _int_map["enable_link_stats"] = 0; // show output link and VC utilization stats //stats _int_map["MATLAB_OUTPUT"] = 0; // output data in MATLAB friendly format _int_map["DISPLAY_LAT_DIST"] = 0; // distribution of packet latencies _int_map["DISPLAY_HOP_DIST"] = 0; // distribution of hop counts _int_map["DISPLAY_PAIR_LATENCY"] = 0; // avg. latency for each s-d pair }
BookSimConfig::BookSimConfig( ) { //======================================================== // Network options //======================================================== // Channel length listing file AddStrField( "channel_file", "" ) ; // Use read/write request reply scheme _int_map["use_read_write"] = 0; _int_map["read_request_begin_vc"] = 0; _int_map["read_request_end_vc"] = 5; _int_map["write_request_begin_vc"] = 2; _int_map["write_request_end_vc"] = 7; _int_map["read_reply_begin_vc"] = 8; _int_map["read_reply_end_vc"] = 13; _int_map["write_reply_begin_vc"] = 10; _int_map["write_reply_end_vc"] = 15; // Physical sub-networks _int_map["physical_subnetworks"] = 1; // Control Injection of Packets into Replicated Networks _int_map["read_request_subnet"] = 0; _int_map["read_reply_subnet"] = 0; _int_map["write_request_subnet"] = 0; _int_map["write_reply_subnet"] = 0; // TCC Simulation Traffic Trace AddStrField( "trace_file", "trace-file.txt" ) ; //==== Multi-node topology options ======================= AddStrField( "topology", "torus" ); _int_map["k"] = 8; //network radix _int_map["n"] = 2; //network dimension _int_map["c"] = 1; //concentration _int_map["x"] = 8; //number of routers in X _int_map["y"] = 8; //number of routers in Y _int_map["xr"] = 1; //number of nodes per router in X only if c>1 _int_map["yr"] = 1; //number of nodes per router in Y only if c>1 _int_map["limit"] = 0; //how many of the nodes are actually used AddStrField( "routing_function", "none" ); _int_map["link_failures"] = 0; //legacy _int_map["fail_seed"] = 0; //legacy _int_map["use_noc_latency"] = 1; //==== Cmesh topology options ======================= _int_map["express_channels"] = 0; //for Cmesh only, 0=no express channels //==== Single-node options =============================== _int_map["in_ports"] = 5; _int_map["out_ports"] = 5; _int_map["voq"] = 0; //output queuing //======================================================== // Router options //======================================================== //==== General options =================================== AddStrField( "router", "iq" ); _int_map["output_delay"] = 0; _int_map["credit_delay"] = 0; _float_map["internal_speedup"] = 1.0; //==== Input-queued ====================================== // Control of virtual channel speculation _int_map["speculative"] = 0 ; // what to use to inhibit speculative allocator grants? AddStrField("filter_spec_grants", "confl_nonspec_gnts"); _int_map["num_vcs"] = 16; _int_map["vc_buf_size"] = 8; _int_map["wait_for_tail_credit"] = 0; // reallocate a VC before a tail credit? _int_map["hold_switch_for_packet"] = 0; // hold a switch config for the entire packet _int_map["input_speedup"] = 1; // expansion of input ports into crossbar _int_map["output_speedup"] = 1; // expansion of output ports into crossbar _int_map["routing_delay"] = 0; _int_map["vc_alloc_delay"] = 0; _int_map["sw_alloc_delay"] = 0; _int_map["st_prepare_delay"] = 0; _int_map["st_final_delay"] = 0; //==== Event-driven ===================================== _int_map["vct"] = 0; //==== Allocators ======================================== AddStrField( "vc_allocator", "islip" ); AddStrField( "sw_allocator", "islip" ); AddStrField( "vc_alloc_arb_type", "round_robin" ); AddStrField( "sw_alloc_arb_type", "round_robin" ); _int_map["alloc_iters"] = 1; // dub: allow setting the number of iterations for each allocator separately // (a value of -1 indicates it should inherit its value from alloc_iters) _int_map["vc_alloc_iters"] = 0; _int_map["sw_alloc_iters"] = 0; //==== Traffic ======================================== AddStrField( "traffic", "uniform" ); _int_map["perm_seed"] = 0; // seed value for random permuation trafficpattern generator _float_map["injection_rate"] = 0.1; //if 0.0 assumes it is batch mode _int_map["injection_rate_uses_flits"] = 0; _int_map["const_flits_per_packet"] = 1; //use read_request_size etc insted AddStrField( "injection_process", "bernoulli" ); _float_map["burst_alpha"] = 0.5; // burst interval _float_map["burst_beta"] = 0.5; // burst length AddStrField( "priority", "none" ); // message priorities _int_map["batch_size"] = 1000; _int_map["max_outstanding_requests"] = 4; _int_map["read_request_size"] = 1; //flit per packet _int_map["write_request_size"] = 1; //flit per packet _int_map["read_reply_size"] = 1; //flit per packet _int_map["write_reply_size"] = 1; //flit per packet //==== Simulation parameters ========================== // types: // latency - average + latency distribution for a particular injection rate // throughput - sustained throughput for a particular injection rate AddStrField( "sim_type", "latency" ); _int_map["warmup_periods"] = 3; // number of samples periods to "warm-up" the simulation _int_map["sample_period"] = 1000; // how long between measurements _int_map["max_samples"] = 10; // maximum number of sample periods in a simulation _float_map["latency_thres"] = 500.0; // if avg. latency exceeds the threshold, assume unstable _int_map["sim_count"] = 1; // number of simulations to perform _int_map["include_queuing"] =1; // non-zero includes source queuing latency // _int_map["reorder"] = 0; // know what you're doing //_int_map["flit_timing"] = 0; // know what you're doing //_int_map["split_packets"] = 0; // know what you're doing _int_map["seed"] = 0; //random seed for simulation, e.g. traffic _int_map["print_activity"] = 0; _int_map["print_csv_results"] = 0; _int_map["drain_measured_only"] = 0; _int_map["viewer_trace"] = 0; AddStrField("watch_file", ""); //==================Power model params===================== _int_map["sim_power"] = 0; AddStrField("power_output_file","pwr_tmp"); AddStrField("tech_file", "../utils/temp"); _int_map["channel_width"] = 128; _int_map["channel_sweep"] = 0; //==================Network file=========================== AddStrField("network_file",""); }
BookSimConfig::BookSimConfig( ) { //======================================================== // Network options //======================================================== // Channel length listing file AddStrField( "channel_file", "" ) ; // Physical sub-networks _int_map["subnets"] = 1; //==== Topology options ======================= //important AddStrField( "topology", "torus" ); _int_map["k"] = 8; //network radix _int_map["n"] = 2; //network dimension _int_map["c"] = 1; //concentration AddStrField( "routing_function", "none" ); _int_map["use_noc_latency"] = 1; //not critical _int_map["x"] = 8; //number of routers in X _int_map["y"] = 8; //number of routers in Y _int_map["xr"] = 1; //number of nodes per router in X only if c>1 _int_map["yr"] = 1; //number of nodes per router in Y only if c>1 _int_map["link_failures"] = 0; //legacy _int_map["fail_seed"] = 0; //legacy //==== Single-node options =============================== _int_map["in_ports"] = 5; _int_map["out_ports"] = 5; //======================================================== // Router options //======================================================== //==== General options =================================== AddStrField( "router", "iq" ); _int_map["output_delay"] = 0; _int_map["credit_delay"] = 0; _float_map["internal_speedup"] = 1.0; //with switch speedup flits requires otuput buffering //full output buffer will cancel switch allocation requests //default setting is unlimited _int_map["output_buffer_size"] = -1; // enable next-hop-output queueing _int_map["noq"] = 0; //==== Input-queued ====================================== // Control of virtual channel speculation _int_map["speculative"] = 0 ; _int_map["spec_check_elig"] = 1 ; _int_map["spec_check_cred"] = 1 ; _int_map["spec_mask_by_reqs"] = 0 ; AddStrField("spec_sw_allocator", "prio"); _int_map["num_vcs"] = 16; _int_map["vc_buf_size"] = 8; _int_map["buf_size"] = -1; AddStrField("buffer_policy", "private"); _int_map["private_bufs"] = -1; _int_map["private_buf_size"] = 1; AddStrField("private_buf_size", ""); _int_map["private_buf_start_vc"] = -1; AddStrField("private_buf_start_vc", ""); _int_map["private_buf_end_vc"] = -1; AddStrField("private_buf_end_vc", ""); _int_map["max_held_slots"] = -1; _int_map["feedback_aging_scale"] = 1; _int_map["feedback_offset"] = 0; _int_map["wait_for_tail_credit"] = 0; // reallocate a VC before a tail credit? _int_map["vc_busy_when_full"] = 0; // mark VCs as in use when they have no credit available _int_map["vc_prioritize_empty"] = 0; // prioritize empty VCs over non-empty ones in VC allocation _int_map["vc_priority_donation"] = 0; // allow high-priority flits to donate their priority to low-priority that they are queued up behind _int_map["vc_shuffle_requests"] = 0; // rearrange VC allocator requests to avoid unfairness _int_map["hold_switch_for_packet"] = 0; // hold a switch config for the entire packet _int_map["input_speedup"] = 1; // expansion of input ports into crossbar _int_map["output_speedup"] = 1; // expansion of output ports into crossbar _int_map["routing_delay"] = 1; _int_map["vc_alloc_delay"] = 1; _int_map["sw_alloc_delay"] = 1; _int_map["st_prepare_delay"] = 0; _int_map["st_final_delay"] = 1; //==== Event-driven ===================================== _int_map["vct"] = 0; //==== Allocators ======================================== AddStrField( "vc_allocator", "islip" ); AddStrField( "sw_allocator", "islip" ); AddStrField( "arb_type", "round_robin" ); _int_map["alloc_iters"] = 1; //==== Traffic ======================================== _int_map["classes"] = 1; AddStrField( "traffic", "uniform" ); _int_map["class_priority"] = 0; AddStrField("class_priority", ""); // workaraound to allow for vector specification _int_map["perm_seed"] = 0; // seed value for random permuation trafficpattern generator _float_map["injection_rate"] = 0.1; AddStrField("injection_rate", ""); // workaraound to allow for vector specification _int_map["injection_rate_uses_flits"] = 0; // number of flits per packet _int_map["packet_size"] = 1; AddStrField("packet_size", ""); // workaraound to allow for vector specification // if multiple values are specified per class, set probabilities for each _int_map["packet_size_rate"] = 1; AddStrField("packet_size_rate", ""); // workaraound to allow for vector specification AddStrField( "injection_process", "bernoulli" ); _float_map["burst_alpha"] = 0.5; // burst interval _float_map["burst_beta"] = 0.5; // burst length _float_map["burst_r1"] = -1.0; // burst rate AddStrField( "priority", "none" ); // message priorities _int_map["batch_size"] = 1000; _int_map["batch_count"] = 1; _int_map["max_outstanding_requests"] = 0; // 0 = unlimited // Use read/write request reply scheme _int_map["use_read_write"] = 0; AddStrField("use_read_write", ""); // workaraound to allow for vector specification _float_map["write_fraction"] = 0.5; AddStrField("write_fraction", ""); // Control assignment of packets to VCs _int_map["read_request_begin_vc"] = 0; _int_map["read_request_end_vc"] = 5; _int_map["write_request_begin_vc"] = 2; _int_map["write_request_end_vc"] = 7; _int_map["read_reply_begin_vc"] = 8; _int_map["read_reply_end_vc"] = 13; _int_map["write_reply_begin_vc"] = 10; _int_map["write_reply_end_vc"] = 15; // Control Injection of Packets into Replicated Networks _int_map["read_request_subnet"] = 0; _int_map["read_reply_subnet"] = 0; _int_map["write_request_subnet"] = 0; _int_map["write_reply_subnet"] = 0; // Set packet length in flits _int_map["read_request_size"] = 1; AddStrField("read_request_size", ""); // workaraound to allow for vector specification _int_map["write_request_size"] = 1; AddStrField("write_request_size", ""); // workaraound to allow for vector specification _int_map["read_reply_size"] = 1; AddStrField("read_reply_size", ""); // workaraound to allow for vector specification _int_map["write_reply_size"] = 1; AddStrField("write_reply_size", ""); // workaraound to allow for vector specification //==== Simulation parameters ========================== // types: // latency - average + latency distribution for a particular injection rate // throughput - sustained throughput for a particular injection rate AddStrField( "sim_type", "latency" ); _int_map["warmup_periods"] = 0; // number of samples periods to "warm-up" the simulation _int_map["sample_period"] = 1000; // how long between measurements _int_map["max_samples"] = 10; // maximum number of sample periods in a simulation // whether or not to measure statistics for a given traffic class _int_map["measure_stats"] = 1; AddStrField("measure_stats", ""); // workaround to allow for vector specification //whether to enable per pair statistics, caution N^2 memory usage _int_map["pair_stats"] = 0; // if avg. latency exceeds the threshold, assume unstable _float_map["latency_thres"] = 1000.0; AddStrField("latency_thres", ""); // workaround to allow for vector specification // consider warmed up once relative change in latency / throughput between successive iterations is smaller than this _float_map["warmup_thres"] = 0.05; AddStrField("warmup_thres", ""); // workaround to allow for vector specification _float_map["acc_warmup_thres"] = 0.05; AddStrField("acc_warmup_thres", ""); // workaround to allow for vector specification // consider converged once relative change in latency / throughput between successive iterations is smaller than this _float_map["stopping_thres"] = 0.05; AddStrField("stopping_thres", ""); // workaround to allow for vector specification _float_map["acc_stopping_thres"] = 0.05; AddStrField("acc_stopping_thres", ""); // workaround to allow for vector specification _int_map["sim_count"] = 1; // number of simulations to perform _int_map["include_queuing"] =1; // non-zero includes source queuing latency // _int_map["reorder"] = 0; // know what you're doing //_int_map["flit_timing"] = 0; // know what you're doing //_int_map["split_packets"] = 0; // know what you're doing _int_map["seed"] = 0; //random seed for simulation, e.g. traffic _int_map["print_activity"] = 0; _int_map["print_csv_results"] = 0; _int_map["deadlock_warn_timeout"] = 256; _int_map["viewer_trace"] = 0; AddStrField("watch_file", ""); AddStrField("watch_flits", ""); AddStrField("watch_packets", ""); AddStrField("watch_transactions", ""); AddStrField("watch_out", ""); AddStrField("stats_out", ""); #ifdef TRACK_FLOWS AddStrField("injected_flits_out", ""); AddStrField("received_flits_out", ""); AddStrField("stored_flits_out", ""); AddStrField("sent_flits_out", ""); AddStrField("outstanding_credits_out", ""); AddStrField("ejected_flits_out", ""); AddStrField("active_packets_out", ""); #endif #ifdef TRACK_CREDITS AddStrField("used_credits_out", ""); AddStrField("free_credits_out", ""); AddStrField("max_credits_out", ""); #endif // batch only -- packet sequence numbers AddStrField("sent_packets_out", ""); //==================Power model params===================== _int_map["sim_power"] = 0; AddStrField("power_output_file","pwr_tmp"); AddStrField("tech_file", ""); _int_map["channel_width"] = 128; _int_map["channel_sweep"] = 0; //==================Network file=========================== AddStrField("network_file",""); }
BookSimConfig::BookSimConfig( ) { //======================================================== // Network options //======================================================== //==== Multi-node topology options ======================= AddStrField( "topology", "torus" ); _int_map["k"] = 8; _int_map["n"] = 2; AddStrField( "routing_function", "none" ); AddStrField( "selection_function", "random" ); _int_map["link_failures"] = 0; _int_map["fail_seed"] = 0; _int_map["wire_delay"] = 0; //==== Single-node options =============================== _int_map["in_ports"] = 5; _int_map["out_ports"] = 5; _int_map["voq"] = 0; //======================================================== // Router options //======================================================== //==== General options =================================== AddStrField( "router", "iq" ); _int_map["output_delay"] = 0; _int_map["credit_delay"] = 0; _float_map["internal_speedup"] = 1.0; //==== Input-queued ====================================== _int_map["num_vcs"] = 1; _int_map["vc_buf_size"] = 4; _int_map["vc_buffer_pool"] = 0; _int_map["wait_for_tail_credit"] = 1; // reallocate a VC before a tail credit? _int_map["hold_switch_for_packet"] = 0; // hold a switch config for the entire packet _int_map["input_speedup"] = 1; // expansion of input ports into crossbar _int_map["output_speedup"] = 1; // expansion of output ports into crossbar _int_map["routing_delay"] = 0; _int_map["vc_alloc_delay"] = 0; _int_map["sw_alloc_delay"] = 0; _int_map["st_prepare_delay"] = 0; _int_map["st_final_delay"] = 0; //==== Event-driven ===================================== _int_map["vct"] = 0; //==== Allocators ======================================== AddStrField( "vc_allocator", "max_size" ); AddStrField( "sw_allocator", "max_size" ); _int_map["alloc_iters"] = 1; //==== Traffic ======================================== AddStrField( "traffic", "uniform" ); _int_map["perm_seed"] = 0; // seed value for random perms _float_map["injection_rate"] = 0.2; _int_map["const_flits_per_packet"] = 1; AddStrField( "injection_process", "bernoulli" ); _float_map["burst_alpha"] = 0.5; // burst interval _float_map["burst_beta"] = 0.5; // burst length AddStrField( "priority", "age" ); // message priorities //==== Simulation parameters ========================== // types: // latency - average + latency distribution for a particular injection rate // throughput - sustained throughput for a particular injection rate AddStrField( "sim_type", "latency" ); _int_map["warmup_periods"] = 0; // number of samples periods to "warm-up" the simulation _int_map["sample_period"] = 1000; // how long between measurements _int_map["max_samples"] = 10; // maximum number of sample periods in a simulation _float_map["latency_thres"] = 1000.0; // if avg. latency exceeds the threshold, assume unstable _int_map["sim_count"] = 1; // number of simulations to perform _int_map["auto_periods"] = 1; // non-zero for the simulator to automatically // control the length of warm-up and the // total length of the simulation _int_map["include_queuing"] = 1; // non-zero includes source queuing latency _int_map["reorder"] = 0; _int_map["flit_timing"] = 0; // know what you're doing _int_map["split_packets"] = 0; _int_map["seed"] = 0; }