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

}
示例#2
0
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","");
}
示例#4
0
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;
}