diff --git a/codes/model-net-lp.h b/codes/model-net-lp.h index 32d150cbb2877148e8d76c69bfa96cc8c6ba41a2..acf92e17a82a8e30065a2d4f588994edf67985fc 100644 --- a/codes/model-net-lp.h +++ b/codes/model-net-lp.h @@ -22,6 +22,7 @@ extern "C" { #include "model-net.h" #include "model-net-sched.h" #include "net/dragonfly.h" +#include "net/slimfly.h" #include "net/loggp.h" #include "net/simplenet-upd.h" #include "net/simplep2p.h" @@ -120,12 +121,13 @@ typedef struct model_net_base_msg { typedef struct model_net_wrap_msg { msg_header h; union { - model_net_base_msg m_base; // base lp - terminal_message m_dfly; // dragonfly - loggp_message m_loggp; // loggp - sn_message m_snet; // simplenet - sp_message m_sp2p; // simplep2p - nodes_message m_torus; // torus + model_net_base_msg m_base; // base lp + terminal_message m_dfly; // dragonfly + slim_terminal_message m_slim; // slimfly + loggp_message m_loggp; // loggp + sn_message m_snet; // simplenet + sp_message m_sp2p; // simplep2p + nodes_message m_torus; // torus // add new ones here } msg; } model_net_wrap_msg; diff --git a/codes/model-net.h b/codes/model-net.h index b1ce4819cff43cdd6933ab291b02ae5465c68407..da36aa3ad24fe4d5da7a43341fe047964bdca975 100644 --- a/codes/model-net.h +++ b/codes/model-net.h @@ -60,6 +60,7 @@ typedef struct mn_stats mn_stats; X(SIMPLENET, "modelnet_simplenet", "simplenet", &simplenet_method)\ X(SIMPLEP2P, "modelnet_simplep2p", "simplep2p", &simplep2p_method)\ X(TORUS, "modelnet_torus", "torus", &torus_method)\ + X(SLIMFLY, "modelnet_slimfly", "slimfly", &slimfly_method)\ X(DRAGONFLY, "modelnet_dragonfly", "dragonfly", &dragonfly_method)\ X(DRAGONFLY_ROUTER, "modelnet_dragonfly_router", "dragonfly_router", &dragonfly_router_method)\ X(LOGGP, "modelnet_loggp", "loggp", &loggp_method)\ diff --git a/codes/net/slimfly.h b/codes/net/slimfly.h new file mode 100644 index 0000000000000000000000000000000000000000..895cb357d50194fe60eefdbe953f1d0d62608aa5 --- /dev/null +++ b/codes/net/slimfly.h @@ -0,0 +1,106 @@ +/* + * Copyright (C) 2014 University of Chicago. + * See COPYRIGHT notice in top-level directory. + * + */ + +#ifndef SLIMFLY_H +#define SLIMFLY_H + +#include + +typedef struct slim_terminal_message slim_terminal_message; + +/* this message is used for both dragonfly compute nodes and routers */ +struct slim_terminal_message +{ + /* magic number */ + int magic; + /* flit travel start time*/ + tw_stime travel_start_time; + /* packet ID of the flit */ + unsigned long long packet_ID; + /* event type of the flit */ + short type; + /* category: comes from codes */ + char category[CATEGORY_NAME_MAX]; + /* final destination LP ID, this comes from codes can be a server or any other LP type*/ + tw_lpid final_dest_gid; + /*sending LP ID from CODES, can be a server or any other LP type */ + tw_lpid sender_lp; + tw_lpid sender_mn_lp; // source modelnet id + /* destination terminal ID of the dragonfly */ + tw_lpid dest_terminal_id; + /* source terminal ID of the dragonfly */ + unsigned int src_terminal_id; + /* local LP ID to calculate the radix of the sender node/router */ + unsigned int local_id; + /* message originating router id */ + unsigned int origin_router_id; + + /* number of hops traversed by the packet */ + short my_N_hop; + short my_l_hop, my_g_hop; + short saved_channel; + + /* Intermediate LP ID from which this message is coming */ + unsigned int intm_lp_id; + short new_vc; + short saved_vc; + /* last hop of the message, can be a terminal, local router or global router */ + short last_hop; + /* For routing */ + int intm_group_id; + int intm_router_id; + int chunk_id; + uint64_t packet_size; + uint64_t message_id; + uint64_t total_size; + + int saved_remote_esize; + int remote_event_size_bytes; + int local_event_size_bytes; + + // For buffer message + short vc_index; + int sender_radix; + int output_chan; + model_net_event_return event_rc; + int is_pull; + uint64_t pull_size; + + /* for reverse computation */ + short path_type; + tw_stime saved_available_time; + tw_stime saved_avg_time; + tw_stime saved_credit_time; + tw_stime saved_collective_init_time; + tw_stime saved_hist_start_time; + tw_stime msg_start_time; + + short saved_completed_chunks; + int saved_hist_num; + int saved_occupancy; + + + /* for reverse computation of a node's fan in*/ + int saved_fan_nodes; + tw_lpid sender_svr; + + /* LP ID of the sending node, has to be a network node in the dragonfly */ + tw_lpid sender_node; + tw_lpid next_stop; + + struct sfly_qhash_entry * saved_hash; +}; + +#endif /* end of include guard: DRAGONFLY_H */ + +/* + * Local variables: + * c-indent-level: 4 + * c-basic-offset: 4 + * End: + * + * vim: ft=c ts=8 sts=4 sw=4 expandtab + */ diff --git a/src/Makefile.subdir b/src/Makefile.subdir index 6f4d9fe0076251b9eee76ac34b01ee1211338507..f4e6a7423c284787258a57c3886464eca1adc82a 100644 --- a/src/Makefile.subdir +++ b/src/Makefile.subdir @@ -80,6 +80,7 @@ nobase_include_HEADERS = \ codes/model-net-sched.h \ codes/model-net-inspect.h \ codes/net/dragonfly.h \ + codes/net/slimfly.h \ codes/net/loggp.h \ codes/net/simplenet-upd.h \ codes/net/simplep2p.h \ @@ -139,6 +140,7 @@ src_libcodes_a_SOURCES = \ src/networks/model-net/simplenet-upd.c \ src/networks/model-net/torus.c \ src/networks/model-net/dragonfly.c \ + src/networks/model-net/slimfly.c \ src/networks/model-net/loggp.c \ src/networks/model-net/simplep2p.c \ src/networks/model-net/model-net-lp.c \ @@ -148,6 +150,7 @@ src_libcodes_a_SOURCES = \ src/network-workloads/model-net-mpi-wrklds.c \ src/network-workloads/model-net-mpi-replay.c \ src/network-workloads/model-net-synthetic.c \ + src/network-workloads/model-net-synthetic-slimfly.c \ src/network-workloads/model-net-dumpi-traces-dump.c @@ -178,6 +181,7 @@ src_network_workloads_model_net_mpi_replay_SOURCES = src/network-workloads/model src_network_workloads_model_net_mpi_wrklds_SOURCES = src/network-workloads/model-net-mpi-wrklds.c src_network_workloads_model_net_synthetic_SOURCES = src/network-workloads/model-net-synthetic.c +src_network_workloads_model_net_synthetic_slimfly_SOURCES = src/network-workloads/model-net-synthetic-slimfly.c src_network_workloads_model_net_dumpi_traces_dump_SOURCES = src/network-workloads/model-net-dumpi-traces-dump.c #bin_PROGRAMS += src/network-workload/codes-nw-test diff --git a/src/network-workloads/conf/modelnet-synthetic-slimfly-min.conf b/src/network-workloads/conf/modelnet-synthetic-slimfly-min.conf index 4e5807107f6a25f2b10303399e10b1ed96c35dd7..2d3d1a85b52dea04214cb0714fc89a2f7c2250d3 100644 --- a/src/network-workloads/conf/modelnet-synthetic-slimfly-min.conf +++ b/src/network-workloads/conf/modelnet-synthetic-slimfly-min.conf @@ -2,9 +2,9 @@ LPGROUPS { MODELNET_GRP { - repetitions="338"; # The number of repetitions of this modelnet group - server="9"; # The number of servers attached to a terminal (should always equal num_terminals) - modelnet_slimfly="9"; # The number of terminals attached to a router + repetitions="50"; # The number of repetitions of this modelnet group + server="3"; # The number of servers attached to a terminal (should always equal num_terminals) + modelnet_slimfly="3"; # The number of terminals attached to a router slimfly_router="1"; # The number of routers in a modelnet group } } @@ -17,10 +17,10 @@ PARAMS chunk_size="256"; # modelnet_scheduler="round-robin"; num_vcs="4"; - num_routers="13"; # The number of routers in a slimfly group - num_terminals="9"; # The number of terminals connected to a router (should be same as "modelnet_slimfly" above) - global_channels="13"; - local_channels="6"; + num_routers="5"; # The number of routers in a slimfly group + num_terminals="3"; # The number of terminals connected to a router (should be same as "modelnet_slimfly" above) + global_channels="5"; + local_channels="2"; local_vc_size="25600"; global_vc_size="25600"; cn_vc_size="25600"; diff --git a/src/networks/model-net/model-net-lp.c b/src/networks/model-net/model-net-lp.c index e4962722d88923535bea82e22fbcb153b9ade3c1..17f7161180774648c3dcd702111a635e8de51745 100644 --- a/src/networks/model-net/model-net-lp.c +++ b/src/networks/model-net/model-net-lp.c @@ -257,6 +257,8 @@ void model_net_base_configure(){ // note: dragonfly router uses the same event struct msg_offsets[DRAGONFLY_ROUTER] = offsetof(model_net_wrap_msg, msg.m_dfly); + msg_offsets[SLIMFLY] = + offsetof(model_net_wrap_msg, msg.m_slim); msg_offsets[LOGGP] = offsetof(model_net_wrap_msg, msg.m_loggp); diff --git a/src/networks/model-net/model-net.c b/src/networks/model-net/model-net.c index 398213199bc0d0150b365adfc06153d3b7c8fa3c..472e9dc691d10a21c762aa58f3948c78a26c2de6 100644 --- a/src/networks/model-net/model-net.c +++ b/src/networks/model-net/model-net.c @@ -21,6 +21,7 @@ extern struct model_net_method simplenet_method; extern struct model_net_method simplep2p_method; extern struct model_net_method torus_method; extern struct model_net_method dragonfly_method; +extern struct model_net_method slimfly_method; extern struct model_net_method dragonfly_router_method; extern struct model_net_method loggp_method;