INSEE 05.04.2011
Interconnection Nertworks Simulation and Evaluation Environment
|
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 */