Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Xin Wang
codes-dev
Commits
b49a0715
Commit
b49a0715
authored
Apr 08, 2015
by
Misbah Mubarak
Browse files
some fixes to dragonfly model as suggested by UIUC folks
parent
57ddfd1b
Changes
2
Hide whitespace changes
Inline
Side-by-side
codes/net/dragonfly.h
View file @
b49a0715
...
...
@@ -30,6 +30,8 @@ struct terminal_message
unsigned
int
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
;
/* number of hops traversed by the packet */
short
my_N_hop
;
/* Intermediate LP ID from which this message is coming */
...
...
src/models/networks/model-net/dragonfly.c
View file @
b49a0715
...
...
@@ -487,10 +487,12 @@ void router_credit_send(router_state * s, tw_bf * bf, terminal_message * msg, tw
int
is_terminal
=
0
;
const
dragonfly_param
*
p
=
s
->
params
;
int
sender_radix
;
// Notify sender terminal about available buffer space
if
(
msg
->
last_hop
==
TERMINAL
)
{
dest
=
msg
->
src_terminal_id
;
sender_radix
=
msg
->
local_id
%
p
->
num_cn
;
//determine the time in ns to transfer the credit
credit_delay
=
(
1
/
p
->
cn_bandwidth
)
*
CREDIT_SIZE
;
type
=
T_BUFFER
;
...
...
@@ -499,11 +501,13 @@ void router_credit_send(router_state * s, tw_bf * bf, terminal_message * msg, tw
else
if
(
msg
->
last_hop
==
GLOBAL
)
{
dest
=
msg
->
intm_lp_id
;
sender_radix
=
p
->
num_cn
+
(
msg
->
local_id
%
p
->
num_routers
);
credit_delay
=
(
1
/
p
->
global_bandwidth
)
*
CREDIT_SIZE
;
}
else
if
(
msg
->
last_hop
==
LOCAL
)
{
dest
=
msg
->
intm_lp_id
;
sender_radix
=
p
->
num_cn
+
p
->
num_routers
+
(
msg
->
local_id
%
p
->
num_routers
);
credit_delay
=
(
1
/
p
->
local_bandwidth
)
*
CREDIT_SIZE
;
}
else
...
...
@@ -511,18 +515,19 @@ void router_credit_send(router_state * s, tw_bf * bf, terminal_message * msg, tw
// Assume it takes 0.1 ns of serialization latency for processing the credits in the queue
int
output_port
=
msg
->
saved_vc
/
p
->
num_vcs
;
msg
->
saved_available_time
=
s
->
next_credit_available_time
[
output_port
];
s
->
next_credit_available_time
[
output_port
]
=
maxd
(
tw_now
(
lp
),
s
->
next_credit_available_time
[
output_port
]);
msg
->
saved_available_time
=
s
->
next_credit_available_time
[
sender_radix
];
s
->
next_credit_available_time
[
sender_radix
]
=
maxd
(
tw_now
(
lp
),
s
->
next_credit_available_time
[
output_port
]);
ts
=
credit_delay
+
0
.
1
+
tw_rand_exponential
(
lp
->
rng
,
(
double
)
credit_delay
/
1000
);
s
->
next_credit_available_time
[
output_port
]
+=
ts
;
s
->
next_credit_available_time
[
sender_radix
]
+=
ts
;
if
(
is_terminal
){
buf_e
=
model_net_method_event_new
(
dest
,
s
->
next_credit_available_time
[
output_port
]
-
tw_now
(
lp
),
lp
,
s
->
next_credit_available_time
[
sender_radix
]
-
tw_now
(
lp
),
lp
,
DRAGONFLY
,
(
void
**
)
&
buf_msg
,
NULL
);
}
else
{
buf_e
=
tw_event_new
(
dest
,
s
->
next_credit_available_time
[
output_port
]
-
tw_now
(
lp
)
,
lp
);
buf_e
=
tw_event_new
(
dest
,
s
->
next_credit_available_time
[
sender_radix
]
-
tw_now
(
lp
)
,
lp
);
buf_msg
=
tw_event_data
(
buf_e
);
}
buf_msg
->
vc_index
=
msg
->
saved_vc
;
...
...
@@ -665,6 +670,7 @@ void packet_send(terminal_state * s, tw_bf * bf, terminal_message * msg, tw_lp *
m
->
last_hop
=
TERMINAL
;
m
->
intm_group_id
=
-
1
;
m
->
local_event_size_bytes
=
0
;
m
->
local_id
=
s
->
terminal_id
;
tw_event_send
(
e
);
// Each chunk is 32B and the VC occupancy is in chunks to enable efficient flow control
...
...
@@ -1367,7 +1373,6 @@ router_packet_send( router_state * s,
output_port
=
get_output_port
(
s
,
bf
,
msg
,
lp
,
next_stop
);
}
output_chan
=
output_port
*
s
->
params
->
num_vcs
;
// Even numbered channels for minimal routing
// Odd numbered channels for nonminimal routing
// Separate the queue occupancy into minimal and non minimal virtual channels if the min & non min
...
...
@@ -1444,6 +1449,7 @@ if( msg->packet_ID == TRACK && next_stop != msg->dest_terminal_id && msg->chunk_
m
->
last_hop
=
LOCAL
;
m
->
saved_vc
=
output_chan
;
m
->
local_id
=
s
->
router_id
;
msg
->
old_vc
=
output_chan
;
m
->
intm_lp_id
=
lp
->
gid
;
s
->
vc_occupancy
[
output_chan
]
++
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment