Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Xin Wang
codes-dev
Commits
2b0cd41e
Commit
2b0cd41e
authored
Jan 08, 2016
by
Jonathan Jenkins
Browse files
modelnet sampling interface and event loop
NOTE: no models implement it yet
parent
3059a209
Changes
9
Hide whitespace changes
Inline
Side-by-side
codes/model-net-lp.h
View file @
2b0cd41e
...
...
@@ -97,6 +97,8 @@ enum model_net_base_event_type {
MN_BASE_NEW_MSG
,
// schedule next packet
MN_BASE_SCHED_NEXT
,
// gather a sample from the underlying model
MN_BASE_SAMPLE
,
// message goes directly down to topology-specific event handler
MN_BASE_PASS
};
...
...
codes/model-net-method.h
View file @
2b0cd41e
...
...
@@ -54,7 +54,11 @@ struct model_net_method
int
(
*
mn_get_msg_sz
)();
void
(
*
mn_report_stats
)();
void
(
*
mn_collective_call
)(
char
const
*
category
,
int
message_size
,
int
remote_event_size
,
const
void
*
remote_event
,
tw_lp
*
sender
);
void
(
*
mn_collective_call_rc
)(
int
message_size
,
tw_lp
*
sender
);
void
(
*
mn_collective_call_rc
)(
int
message_size
,
tw_lp
*
sender
);
event_f
mn_sample_fn
;
revent_f
mn_sample_rc_fn
;
init_f
mn_sample_init_fn
;
final_f
mn_sample_fini_fn
;
};
extern
struct
model_net_method
*
method_array
[];
...
...
codes/model-net.h
View file @
2b0cd41e
...
...
@@ -140,6 +140,14 @@ void model_net_register();
* modelnet_order configuration parameter */
int
*
model_net_configure
(
int
*
id_count
);
/* Sets up a sampling loop for model net events. The sampling data provided by
* each modelnet lp is model-defined. This is a PE-wide setting. Data is sent
* to LP-IO with the category modelnet-samples */
void
model_net_enable_sampling
(
tw_stime
interval
);
/* Returns 1 if modelnet is performing sampling, 0 otherwise */
int
model_net_sampling_enabled
(
void
);
/* Initialize/configure the network(s) based on the CODES configuration.
* returns an array of the network ids, indexed in the order given by the
* modelnet_order configuration parameter
...
...
src/networks/model-net/dragonfly.c
View file @
2b0cd41e
...
...
@@ -2851,6 +2851,10 @@ struct model_net_method dragonfly_method =
.
mn_get_msg_sz
=
dragonfly_get_msg_sz
,
.
mn_report_stats
=
dragonfly_report_stats
,
.
mn_collective_call
=
dragonfly_collective
,
.
mn_collective_call_rc
=
dragonfly_collective_rc
.
mn_collective_call_rc
=
dragonfly_collective_rc
,
.
mn_sample_fn
=
NULL
,
.
mn_sample_rc_fn
=
NULL
,
.
mn_sample_init_fn
=
NULL
,
.
mn_sample_fini_fn
=
NULL
};
src/networks/model-net/loggp.c
View file @
2b0cd41e
...
...
@@ -155,7 +155,11 @@ struct model_net_method loggp_method =
.
mn_get_msg_sz
=
loggp_get_msg_sz
,
.
mn_report_stats
=
loggp_report_stats
,
.
mn_collective_call
=
loggp_collective
,
.
mn_collective_call_rc
=
loggp_collective_rc
.
mn_collective_call_rc
=
loggp_collective_rc
,
.
mn_sample_fn
=
NULL
,
.
mn_sample_rc_fn
=
NULL
,
.
mn_sample_init_fn
=
NULL
,
.
mn_sample_fini_fn
=
NULL
};
static
void
loggp_init
(
...
...
src/networks/model-net/model-net-lp.c
View file @
2b0cd41e
...
...
@@ -35,6 +35,9 @@ static int num_params = 0;
static
const
char
*
annos
[
CONFIGURATION_MAX_ANNOS
];
static
model_net_base_params
all_params
[
CONFIGURATION_MAX_ANNOS
];
static
tw_stime
mn_sample_interval
=
0
.
0
;
static
int
mn_sample_enabled
=
0
;
typedef
struct
model_net_base_state
{
int
net_id
;
// whether scheduler loop is running
...
...
@@ -112,6 +115,26 @@ tw_lptype model_net_base_lp = {
/**** BEGIN IMPLEMENTATIONS ****/
void
model_net_enable_sampling
(
tw_stime
interval
)
{
mn_sample_interval
=
interval
;
mn_sample_enabled
=
1
;
}
int
model_net_sampling_enabled
(
void
)
{
return
mn_sample_enabled
;
}
// schedule sample event - want to be precise, so no noise here
static
void
issue_sample_event
(
tw_lp
*
lp
)
{
tw_event
*
e
=
tw_event_new
(
lp
->
gid
,
mn_sample_interval
,
lp
);
model_net_wrap_msg
*
m
=
tw_event_data
(
e
);
msg_set_header
(
model_net_base_magic
,
MN_BASE_SAMPLE
,
lp
->
gid
,
&
m
->
h
);
tw_event_send
(
e
);
}
void
model_net_base_register
(
int
*
do_config_nets
){
// here, we initialize ALL lp types to use the base type
for
(
int
i
=
0
;
i
<
MAX_NETS
;
i
++
){
...
...
@@ -319,6 +342,28 @@ void model_net_base_lp_init(
// initialize the model-net method
ns
->
sub_type
->
init
(
ns
->
sub_state
,
lp
);
// check validity of sampling function
event_f
sample
=
method_array
[
ns
->
net_id
]
->
mn_sample_fn
;
revent_f
rsample
=
method_array
[
ns
->
net_id
]
->
mn_sample_rc_fn
;
if
(
model_net_sampling_enabled
())
{
if
(
sample
==
NULL
)
{
tw_error
(
TW_LOC
,
"Sampling requested for a model that doesn't provide it
\n
"
);
}
else
if
(
rsample
==
NULL
&&
(
g_tw_synchronization_protocol
==
OPTIMISTIC
||
g_tw_synchronization_protocol
==
OPTIMISTIC_DEBUG
))
{
tw_error
(
TW_LOC
,
"Sampling requested for a model that doesn't provide it
\n
"
);
}
else
{
init_f
sinit
=
method_array
[
ns
->
net_id
]
->
mn_sample_init_fn
;
if
(
sinit
!=
NULL
)
sinit
(
ns
->
sub_state
,
lp
);
issue_sample_event
(
lp
);
}
}
}
void
model_net_base_event
(
...
...
@@ -327,7 +372,8 @@ void model_net_base_event(
model_net_wrap_msg
*
m
,
tw_lp
*
lp
){
assert
(
m
->
h
.
magic
==
model_net_base_magic
);
void
*
sub_msg
;
switch
(
m
->
h
.
event_type
){
case
MN_BASE_NEW_MSG
:
handle_new_msg
(
ns
,
b
,
m
,
lp
);
...
...
@@ -335,8 +381,15 @@ void model_net_base_event(
case
MN_BASE_SCHED_NEXT
:
handle_sched_next
(
ns
,
b
,
m
,
lp
);
break
;
case
MN_BASE_SAMPLE
:
;
event_f
sample
=
method_array
[
ns
->
net_id
]
->
mn_sample_fn
;
assert
(
model_net_sampling_enabled
()
&&
sample
!=
NULL
);
sub_msg
=
((
char
*
)
m
)
+
msg_offsets
[
ns
->
net_id
];
sample
(
ns
->
sub_state
,
b
,
sub_msg
,
lp
);
issue_sample_event
(
lp
);
break
;
case
MN_BASE_PASS
:
;
void
*
sub_msg
=
((
char
*
)
m
)
+
msg_offsets
[
ns
->
net_id
];
sub_msg
=
((
char
*
)
m
)
+
msg_offsets
[
ns
->
net_id
];
ns
->
sub_type
->
event
(
ns
->
sub_state
,
b
,
sub_msg
,
lp
);
break
;
/* ... */
...
...
@@ -352,7 +405,8 @@ void model_net_base_event_rc(
model_net_wrap_msg
*
m
,
tw_lp
*
lp
){
assert
(
m
->
h
.
magic
==
model_net_base_magic
);
void
*
sub_msg
;
switch
(
m
->
h
.
event_type
){
case
MN_BASE_NEW_MSG
:
handle_new_msg_rc
(
ns
,
b
,
m
,
lp
);
...
...
@@ -360,8 +414,14 @@ void model_net_base_event_rc(
case
MN_BASE_SCHED_NEXT
:
handle_sched_next_rc
(
ns
,
b
,
m
,
lp
);
break
;
case
MN_BASE_SAMPLE
:
;
revent_f
sample_rc
=
method_array
[
ns
->
net_id
]
->
mn_sample_rc_fn
;
assert
(
model_net_sampling_enabled
()
&&
sample_rc
!=
NULL
);
sub_msg
=
((
char
*
)
m
)
+
msg_offsets
[
ns
->
net_id
];
sample_rc
(
ns
->
sub_state
,
b
,
sub_msg
,
lp
);
break
;
case
MN_BASE_PASS
:
;
void
*
sub_msg
=
((
char
*
)
m
)
+
msg_offsets
[
ns
->
net_id
];
sub_msg
=
((
char
*
)
m
)
+
msg_offsets
[
ns
->
net_id
];
ns
->
sub_type
->
revent
(
ns
->
sub_state
,
b
,
sub_msg
,
lp
);
break
;
/* ... */
...
...
@@ -369,13 +429,14 @@ void model_net_base_event_rc(
assert
(
!
"model_net_base event type not known"
);
break
;
}
*
(
int
*
)
b
=
0
;
}
void
model_net_base_finalize
(
model_net_base_state
*
ns
,
tw_lp
*
lp
){
final_f
sfini
=
method_array
[
ns
->
net_id
]
->
mn_sample_fini_fn
;
if
(
sfini
!=
NULL
)
sfini
(
ns
->
sub_state
,
lp
);
ns
->
sub_type
->
final
(
ns
->
sub_state
,
lp
);
free
(
ns
->
sub_state
);
}
...
...
src/networks/model-net/simplenet-upd.c
View file @
2b0cd41e
...
...
@@ -120,8 +120,12 @@ struct model_net_method simplenet_method =
.
mn_get_lp_type
=
sn_get_lp_type
,
.
mn_get_msg_sz
=
sn_get_msg_sz
,
.
mn_report_stats
=
sn_report_stats
,
.
mn_collective_call
=
simple_net_collective
,
.
mn_collective_call_rc
=
simple_net_collective_rc
.
mn_collective_call
=
simple_net_collective
,
.
mn_collective_call_rc
=
simple_net_collective_rc
,
.
mn_sample_fn
=
NULL
,
.
mn_sample_rc_fn
=
NULL
,
.
mn_sample_init_fn
=
NULL
,
.
mn_sample_fini_fn
=
NULL
};
static
void
sn_init
(
...
...
src/networks/model-net/simplep2p.c
View file @
2b0cd41e
...
...
@@ -151,7 +151,11 @@ struct model_net_method simplep2p_method =
.
mn_get_msg_sz
=
sp_get_msg_sz
,
.
mn_report_stats
=
sp_report_stats
,
.
mn_collective_call
=
simple_wan_collective
,
.
mn_collective_call_rc
=
simple_wan_collective_rc
.
mn_collective_call_rc
=
simple_wan_collective_rc
,
.
mn_sample_fn
=
NULL
,
.
mn_sample_rc_fn
=
NULL
,
.
mn_sample_init_fn
=
NULL
,
.
mn_sample_fini_fn
=
NULL
};
static
void
sp_init
(
...
...
src/networks/model-net/torus.c
View file @
2b0cd41e
...
...
@@ -1981,7 +1981,11 @@ struct model_net_method torus_method =
.
mn_get_msg_sz
=
torus_get_msg_sz
,
.
mn_report_stats
=
torus_report_stats
,
.
mn_collective_call
=
torus_collective
,
.
mn_collective_call_rc
=
torus_collective_rc
.
mn_collective_call_rc
=
torus_collective_rc
,
.
mn_sample_fn
=
NULL
,
.
mn_sample_rc_fn
=
NULL
,
.
mn_sample_init_fn
=
NULL
,
.
mn_sample_fini_fn
=
NULL
};
/* user-facing modelnet functions */
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new 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