INSEE 05.04.2011
Interconnection Nertworks Simulation and Evaluation Environment
C:/cygwin/home/Javier/insee/src/globals.h
Go to the documentation of this file.
00001 
00021 #ifndef _globals
00022 #define _globals
00023 
00024 #include "packet.h"
00025 #include "constants.h"
00026 #include "literal.h"
00027 #include "misc.h"
00028 #include "phit.h"
00029 #include "queue.h"
00030 #include "event.h"
00031 #include "router.h"
00032 #include "pkt_mem.h"
00033 #include "batch.h"
00034 
00035 #include <math.h>
00036 #include <time.h>
00037 #include <limits.h>
00038 
00039 #ifndef _main
00040 
00041 extern long radix;
00042 extern long ndim;
00043 extern long nstages;
00044 extern long stDown;
00045 extern long stUp;
00046 extern long NUMNODES;
00047 extern long nprocs;
00048 extern long n_ports;
00049 
00050 extern long r_seed;
00051 extern long nodes_x, nodes_y, nodes_z;
00052 extern long binj_cap;
00053 extern long ninj;
00054 extern router * network;
00055 extern long **destinations;
00056 extern long **sources;
00057 extern long * con_dst;
00058 extern long * inj_dst;
00059 extern long max_dst;
00060 extern long *source_ports;
00061 extern long *dest_ports;
00062 extern long *port_utilization;
00063 extern double sent_count;
00064 extern double injected_count;
00065 extern double rcvd_count;
00066 extern double last_rcvd_count;
00067 extern double dropped_count;
00068 extern double transit_dropped_count;
00069 extern double last_tran_drop_count;
00070 
00071 extern long pnodes_x;
00072 extern long pnodes_y;
00073 extern long pnodes_z;
00074 
00075 extern long faults;
00076 
00077 #if (BIMODAL_SUPPORT != 0)
00078  extern double msg_sent_count[3];
00079  extern double msg_injected_count[3];
00080  extern double msg_rcvd_count[3];
00081 
00082  extern double msg_acum_delay[3], msg_acum_inj_delay[3];
00083  extern long msg_max_delay[3], msg_max_inj_delay[3];
00084  extern double msg_acum_sq_delay[3], msg_acum_sq_inj_delay[3];
00085 
00086  extern long msglength;
00087  extern double lm_prob, lm_percent;
00088 #endif /* BIMODAL */
00089 
00090 extern long sim_clock;
00091 extern long last_reset_time;
00092 extern long bub_adap[2], bub_x, bub_y, bub_z;
00093 extern topo_t topo;
00094 extern long plevel;
00095 extern long pheaders;
00096 extern long bheaders;
00097 extern long pinterval;
00098 extern long extract;
00099 extern long monitored;
00100 extern double intransit_pr;
00101 
00102 extern double inj_phit_count;
00103 extern double sent_phit_count;
00104 extern double rcvd_phit_count;
00105 extern double dropped_phit_count;
00106 
00107 extern long (*neighbor)(long ad, dim wd, way ww);
00108 extern routing_r (*calc_rr)(long source, long destination);
00109 extern void (*request_port) (long i, port_type s_p);
00110 extern void (*arbitrate_cons)(long i);
00111 extern port_type (*arbitrate_select)(long i, port_type d_p, port_type first, port_type last);
00112 extern void (*consume)(long i);
00113 extern bool_t (*check_rr)(packet_t * pkt, dim *d_d, way *d_w);
00114 extern port_type (* select_input_port) (long i, long dest);
00115 extern void (*data_movement)(bool_t inject);
00116 extern void (*arbitrate)(long i, port_type d_p);
00117 
00118 extern double load, trigger_rate ;
00119 extern long aload, lm_load, trigger;
00120 extern long trigger_max, trigger_min, trigger_dif;
00121 extern double global_q_u, global_q_u_current;
00122 extern vc_management_t vc_management;
00123 extern routing_t routing;
00124 extern traffic_pattern_t pattern;
00125 extern cons_mode_t cons_mode;
00126 extern arb_mode_t arb_mode;
00127 extern req_mode_t req_mode;
00128 extern inj_mode_t inj_mode;
00129 
00130 extern placement_t placement;
00131 extern long shift;
00132 extern long trace_nodes;
00133 extern long trace_instances;
00134 extern char placefile[128];
00135 
00136 extern bool_t drop_packets;
00137 extern bool_t parallel_injection;
00138 extern bool_t shotmode;
00139 extern long shotsize;
00140 extern double global_cc;
00141 extern long timeout_upper_limit;
00142 extern long timeout_lower_limit;
00143 
00144 extern long update_period;
00145 extern long total_shot_size;
00146 
00147 extern batch_t *batch;
00148 extern long samples;
00149 extern long batch_time;
00150 extern double threshold;
00151 extern long warm_up_period, warmed_up;
00152 extern long conv_period;
00153 extern long max_conv_time;
00154 extern long min_batch_size;
00155 
00156 extern double acum_delay, acum_inj_delay;
00157 extern long max_delay, max_inj_delay;
00158 extern double acum_sq_delay, acum_sq_inj_delay;
00159 extern double acum_hops;
00160 
00161 extern long nodes_per_switch;
00162 extern long links_per_direction;
00163 
00164 extern long pkt_len, phit_size, buffer_cap, tr_ql, inj_ql;
00165 
00166 extern dim * port_coord_dim;
00167 extern way * port_coord_way;
00168 extern channel * port_coord_channel;
00169 
00170 extern packet_t * pkt_space;
00171 extern long pkt_max;
00172 
00173 extern char trcfile[128];
00174 
00175 extern bool_t go_on;
00176 extern long reseted;
00177 extern double threshold;
00178 
00179 extern FILE *fp;
00180 extern char file[128];
00181 
00182 extern port_type last_port_arb_con;
00183 
00184 extern void (* run_network)(void);
00185 
00186 void run_network_shotmode(void);
00187 void run_network_batch(void);
00188 
00189 #endif // _main
00190 
00191 /* In data_generation.c */
00192 void init_injection (void);
00193 void data_generation(long i);
00194 void data_injection(long i);
00195 void datagen_oneshot(bool_t reset);
00196 
00197 void generate_pkt(long i);
00198 port_type select_input_port_shortest(long i, long dest);
00199 port_type select_input_port_dor_only(long i, long dest);
00200 port_type select_input_port_dor_shortest(long i, long dest);
00201 port_type select_input_port_shortest_profitable(long i, long dest);
00202 port_type select_input_port_lpath(long i, long dest);
00203 
00204 /* In arbitrate.c */
00205 void reserve(long i, port_type d_p, port_type s_p);
00206 void arbitrate_init(void);
00207 void arbitrate_cons_single(long i);
00208 void arbitrate_cons_multiple(long i);
00209 void arbitrate_direct(long i, port_type d_p);
00210 void arbitrate_icube(long i, port_type d_p);
00211 void arbitrate_trees(long i, port_type d_p);
00212 port_type arbitrate_select_fifo(long i, port_type d_p, port_type first, port_type last);
00213 port_type arbitrate_select_longest(long i, port_type d_p, port_type first, port_type last);
00214 port_type arbitrate_select_round_robin(long i, port_type d_p, port_type first, port_type last);
00215 port_type arbitrate_select_random(long i, port_type d_p, port_type first, port_type last);
00216 port_type arbitrate_select_age(long i, port_type d_p, port_type first, port_type last);
00217 
00218 /* In request_ports.c */
00219 void request_ports_init(void);
00220 void request_port_bubble_oblivious(long i, port_type s_p);
00221 void request_port_bubble_adaptive_random(long i, port_type s_p);
00222 void request_port_bubble_adaptive_shortest(long i, port_type s_p);
00223 void request_port_bubble_adaptive_smart(long i, port_type s_p);
00224 void request_port_double_oblivious(long i, port_type s_p);
00225 void request_port_double_adaptive(long i, port_type s_p);
00226 void request_port_hexa_oblivious(long i, port_type s_p);
00227 void request_port_hexa_adaptive(long i, port_type s_p);
00228 void request_port_dally_trc(long i, port_type s_p);
00229 void request_port_dally_basic(long i, port_type s_p);
00230 void request_port_dally_improved(long i, port_type s_p);
00231 void request_port_dally_adaptive(long i, port_type s_p);
00232 void request_port_bimodal_random(long i, port_type s_p);
00233 
00234 void request_port_tree(long i, port_type s_p);
00235 void request_port_icube(long i, port_type s_p);
00236 void request_port_icube_IB(long i, port_type s_p);
00237 
00238 bool_t check_rr_dim_o_r(packet_t * pkt, dim *d_d, way *d_w);
00239 bool_t check_rr_dir_o_r(packet_t * pkt, dim *d_d, way *d_w);
00240 bool_t check_rr_fattree(packet_t * pkt, dim *d_d, way *d_w);
00241 bool_t check_rr_fattree_adaptive(packet_t * pkt, dim *d, way *w);
00242 bool_t check_rr_thintree_adaptive(packet_t * pkt, dim *d, way *w);
00243 bool_t check_rr_slimtree_adaptive(packet_t * pkt, dim *d, way *w);
00244 bool_t check_rr_icube_adaptive(packet_t * pkt, dim *d, way *w);
00245 bool_t check_rr_icube_static_IB(packet_t * pkt, dim *d, way *w);
00246 bool_t check_rr_fattree_static(packet_t * pkt, dim *d, way *w);
00247 bool_t check_rr_thintree_static(packet_t * pkt, dim *d, way *w);
00248 bool_t check_rr_slimtree_static(packet_t * pkt, dim *d, way *w);
00249 bool_t check_rr_icube_static(packet_t * pkt, dim *d, way *w);
00250 
00251 
00252 /* In perform_mov.c */
00253 void phit_away(long, port_type, phit);
00254 void consume_single(long i);
00255 void consume_multiple(long i);
00256 void advance(long n, long p);
00257 void data_movement_direct(bool_t inject);
00258 void data_movement_indirect(bool_t inject);
00259 
00260 /* In init_functions.c */
00261 void init_functions (void);
00262 
00263 /* In stats.c */
00264 void stats(long i);
00265 void reset_stats(void);
00266 
00267 /* In router.c */
00268 extern long nchan;
00269 extern long nways;
00270 extern port_type p_con;
00271 extern port_type p_drop;
00272 extern port_type p_inj_first, p_inj_last;
00273 
00274 void router_init(void);
00275 void init_network(void);
00276 void coords (long ad, long *cx, long *cy, long *cz);
00277 void coords_icube (long ad, long *cx, long *cy, long *cz);
00278 
00279 long torus_neighbor(long ad, dim wd, way ww);
00280 long midimew_neighbor(long ad, dim wd, way ww);
00281 long dtt_neighbor(long ad, dim wd, way ww);
00282 
00283 routing_r torus_rr (long source, long destination);
00284 routing_r torus_rr_unidir (long source, long destination);
00285 routing_r mesh_rr (long source, long destination);
00286 routing_r midimew_rr (long source, long destination);
00287 routing_r dtt_rr (long source, long destination);
00288 routing_r dtt_rr_unidir (long source, long destination);
00289 routing_r icube_rr (long source, long destination);
00290 routing_r icube_4mesh_rr (long source, long destination);
00291 routing_r icube_1mesh_rr (long source, long destination);
00292 routing_r fattree_rr_adapt (long source, long destination);
00293 routing_r thintree_rr_adapt (long source, long destination);
00294 routing_r slimtree_rr_adapt (long source, long destination);
00295 
00296 void create_fattree();
00297 void create_slimtree();
00298 void create_thintree();
00299 void create_icube();
00300 
00301 /* In get_conf.c */
00302 extern literal_t vc_l[];
00303 extern literal_t routing_l[];
00304 extern literal_t rmode_l[];
00305 extern literal_t atype_l[];
00306 extern literal_t ctype_l[];
00307 extern literal_t pattern_l[];
00308 extern literal_t topology_l[];
00309 extern literal_t injmode_l[];
00310 extern literal_t placement_l[];
00311 
00312 void get_conf(long, char **);
00313 
00314 /* In print_results.c */
00315 void print_headers(void);
00316 void print_partials(void);
00317 void print_results(time_t, time_t);
00318 void results_partial(void);
00319 
00320 /* In batch.c */
00321 void save_batch_results();
00322 void print_batch_results(batch_t *b);
00323 void print_batch_results_vast(batch_t *b);
00324 
00325 /* In dtt.c */
00326 extern long sk_xy, sk_xz, sk_yx, sk_yz, sk_zx, sk_zy; // Skews for twisted torus
00327 
00328 /* In queue.c */
00329 void init_queue (queue *q);
00330 
00331 /* In pkt_mem.c */
00332 void pkt_init();
00333 void free_pkt(unsigned long n);
00334 unsigned long get_pkt();
00335 
00336 #if (TRACE_SUPPORT != 0)
00337  /* In trace.c */
00338  void read_trace();
00339  void run_network_trc();
00340  
00341 /* In event.c */
00342  void init_event (event_q *q);
00343  void ins_event (event_q *q, event i);
00344  void do_event (event_q *q, event *i);
00345  event head_event (event_q *q);
00346  void rem_head_event (event_q *q);
00347  bool_t event_empty (event_q *q);
00348 #endif /* TRACE common */
00349 
00350 #if (TRACE_SUPPORT > 1)
00351  void init_occur (event_l **l);
00352  void ins_occur (event_l **l, event i);
00353  bool_t occurred (event_l **l, event i);
00354 #endif /* TRACE multilist */
00355 
00356 #if (TRACE_SUPPORT == 1)
00357  void init_occur (event_l *l);
00358  void ins_occur (event_l *l, event i);
00359  bool_t occurred (event_l *l, event i);
00360 #endif /* TRACE single list */
00361 
00362 #define packet_size_in_phits pkt_len
00363 #if (EXECUTION_DRIVEN != 0)
00364   extern long fsin_cycle_relation;
00365   extern long simics_cycle_relation;
00366   extern long serv_addr;
00367   extern long num_periodos_espera;
00368   extern long num_executions;
00369   void init_exd(long, long, long, long, long);
00370   void run_network_exd(void);
00371 #endif
00372 
00373 #endif /* _globals */