Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
codes
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
38
Issues
38
List
Boards
Labels
Milestones
Merge Requests
8
Merge Requests
8
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
codes
codes
Commits
0c3bcbcf
Commit
0c3bcbcf
authored
Jun 08, 2017
by
Misbah Mubarak
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Changing data type for bytes transferred, modifying reverse handler for MPI_Wait
parent
e35f07f6
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
24 additions
and
18 deletions
+24
-18
codes/codes-workload.h
codes/codes-workload.h
+2
-2
src/network-workloads/model-net-mpi-replay.c
src/network-workloads/model-net-mpi-replay.c
+14
-8
src/workload/codes-workload.c
src/workload/codes-workload.c
+4
-4
src/workload/methods/codes-dumpi-trace-nw-wrkld.c
src/workload/methods/codes-dumpi-trace-nw-wrkld.c
+4
-4
No files found.
codes/codes-workload.h
View file @
0c3bcbcf
...
...
@@ -194,7 +194,7 @@ struct codes_workload_op
/* TODO: not sure why source rank is here */
int
source_rank
;
/* source rank of MPI send message */
int
dest_rank
;
/* dest rank of MPI send message */
int64_t
num_bytes
;
/* number of bytes to be transferred over the network */
u
int64_t
num_bytes
;
/* number of bytes to be transferred over the network */
int16_t
data_type
;
/* MPI data type to be matched with the recv */
int
count
;
/* number of elements to be received */
int
tag
;
/* tag of the message */
...
...
@@ -204,7 +204,7 @@ struct codes_workload_op
/* TODO: not sure why source rank is here */
int
source_rank
;
/* source rank of MPI recv message */
int
dest_rank
;
/* dest rank of MPI recv message */
in
t
num_bytes
;
/* number of bytes to be transferred over the network */
uint64_
t
num_bytes
;
/* number of bytes to be transferred over the network */
int16_t
data_type
;
/* MPI data type to be matched with the send */
int
count
;
/* number of elements to be sent */
int
tag
;
/* tag of the message */
...
...
src/network-workloads/model-net-mpi-replay.c
View file @
0c3bcbcf
...
...
@@ -37,7 +37,7 @@ static int msg_size_hash_compare(
/* NOTE: Message tracking works in sequential mode only! */
int
enable_msg_tracking
=
0
;
tw_lpid
TRACK_LP
=
-
1
;
tw_lpid
TRACK_LP
=
0
;
int
unmatched
=
0
;
char
workload_type
[
128
];
...
...
@@ -794,15 +794,15 @@ static int notify_posted_wait(nw_state* s,
}
/* reverse handler of MPI wait operation */
static
void
codes_exec_mpi_wait_rc
(
nw_state
*
s
,
tw_lp
*
lp
)
static
void
codes_exec_mpi_wait_rc
(
nw_state
*
s
,
tw_
bf
*
bf
,
tw_
lp
*
lp
)
{
if
(
s
->
wait_op
)
if
(
bf
->
c2
)
{
struct
pending_waits
*
wait_op
=
s
->
wait_op
;
free
(
wait_op
);
s
->
wait_op
=
NULL
;
}
else
if
(
bf
->
c1
)
{
codes_issue_next_event_rc
(
lp
);
completed_requests
*
qi
=
rc_stack_pop
(
s
->
processed_ops
);
...
...
@@ -812,11 +812,12 @@ static void codes_exec_mpi_wait_rc(nw_state* s, tw_lp* lp)
}
/* execute MPI wait operation */
static
void
codes_exec_mpi_wait
(
nw_state
*
s
,
tw_lp
*
lp
,
struct
codes_workload_op
*
mpi_op
)
static
void
codes_exec_mpi_wait
(
nw_state
*
s
,
tw_
bf
*
bf
,
tw_
lp
*
lp
,
struct
codes_workload_op
*
mpi_op
)
{
/* check in the completed receives queue if the request ID has already been completed.*/
assert
(
!
s
->
wait_op
);
dumpi_req_id
req_id
=
mpi_op
->
u
.
wait
.
req_id
;
struct
completed_requests
*
current
=
NULL
;
struct
qlist_head
*
ent
=
NULL
;
...
...
@@ -825,12 +826,15 @@ static void codes_exec_mpi_wait(nw_state* s, tw_lp* lp, struct codes_workload_op
current
=
qlist_entry
(
ent
,
completed_requests
,
ql
);
if
(
current
->
req_id
==
req_id
)
{
bf
->
c1
=
1
;
qlist_del
(
&
current
->
ql
);
rc_stack_push
(
lp
,
current
,
free
,
s
->
processed_ops
);
codes_issue_next_event
(
lp
);
return
;
}
}
bf
->
c2
=
1
;
/* If not, add the wait operation in the pending 'waits' list. */
struct
pending_waits
*
wait_op
=
malloc
(
sizeof
(
struct
pending_waits
));
wait_op
->
op_type
=
mpi_op
->
op_type
;
...
...
@@ -1199,6 +1203,7 @@ static void codes_exec_mpi_recv(
recv_op
->
req_id
=
mpi_op
->
u
.
recv
.
req_id
;
//printf("\n Req id %d bytes %d source %d tag %d ", recv_op->req_id, recv_op->num_bytes, recv_op->source_rank, recv_op->tag);
if
(
s
->
nw_id
==
(
tw_lpid
)
TRACK_LP
)
printf
(
"
\n
Receive op posted num bytes %llu source %d "
,
recv_op
->
num_bytes
,
recv_op
->
source_rank
);
...
...
@@ -1328,7 +1333,7 @@ static void codes_exec_mpi_send(nw_state* s,
local_m
.
fwd
.
req_id
=
mpi_op
->
u
.
send
.
req_id
;
local_m
.
fwd
.
app_id
=
s
->
app_id
;
if
(
mpi_op
->
u
.
send
.
num_bytes
<
EAGER_THRESHOLD
)
{
/* directly issue a model-net send */
...
...
@@ -1945,7 +1950,7 @@ static void get_next_mpi_operation_rc(nw_state* s, tw_bf * bf, nw_message * m, t
case
CODES_WK_WAIT
:
{
s
->
num_wait
--
;
codes_exec_mpi_wait_rc
(
s
,
lp
);
codes_exec_mpi_wait_rc
(
s
,
bf
,
lp
);
}
break
;
case
CODES_WK_WAITALL
:
...
...
@@ -2044,7 +2049,8 @@ static void get_next_mpi_operation(nw_state* s, tw_bf * bf, nw_message * m, tw_l
{
//printf("\n MPI WAIT ");
s
->
num_wait
++
;
codes_exec_mpi_wait
(
s
,
lp
,
&
mpi_op
);
//TODO: Uncomment:
codes_exec_mpi_wait
(
s
,
bf
,
lp
,
&
mpi_op
);
}
break
;
case
CODES_WK_BCAST
:
...
...
src/workload/codes-workload.c
View file @
0c3bcbcf
...
...
@@ -327,7 +327,7 @@ void codes_workload_print_op(
break
;
case
CODES_WK_SEND
:
fprintf
(
f
,
"op: app:%d rank:%d type:send "
"src:%d dst:%d bytes:%ll
d
type:%d count:%d tag:%d "
"src:%d dst:%d bytes:%ll
u
type:%d count:%d tag:%d "
"start:%.5e end:%.5e
\n
"
,
app_id
,
rank
,
op
->
u
.
send
.
source_rank
,
op
->
u
.
send
.
dest_rank
,
...
...
@@ -337,7 +337,7 @@ void codes_workload_print_op(
break
;
case
CODES_WK_RECV
:
fprintf
(
f
,
"op: app:%d rank:%d type:recv "
"src:%d dst:%d bytes:%
d
type:%d count:%d tag:%d "
"src:%d dst:%d bytes:%
llu
type:%d count:%d tag:%d "
"start:%.5e end:%.5e
\n
"
,
app_id
,
rank
,
op
->
u
.
recv
.
source_rank
,
op
->
u
.
recv
.
dest_rank
,
...
...
@@ -347,7 +347,7 @@ void codes_workload_print_op(
break
;
case
CODES_WK_ISEND
:
fprintf
(
f
,
"op: app:%d rank:%d type:isend "
"src:%d dst:%d bytes:%ll
d
type:%d count:%d tag:%d "
"src:%d dst:%d bytes:%ll
u
type:%d count:%d tag:%d "
"start:%.5e end:%.5e
\n
"
,
app_id
,
rank
,
op
->
u
.
send
.
source_rank
,
op
->
u
.
send
.
dest_rank
,
...
...
@@ -357,7 +357,7 @@ void codes_workload_print_op(
break
;
case
CODES_WK_IRECV
:
fprintf
(
f
,
"op: app:%d rank:%d type:irecv "
"src:%d dst:%d bytes:%
d
type:%d count:%d tag:%d "
"src:%d dst:%d bytes:%
llu
type:%d count:%d tag:%d "
"start:%.5e end:%.5e
\n
"
,
app_id
,
rank
,
op
->
u
.
recv
.
source_rank
,
op
->
u
.
recv
.
dest_rank
,
...
...
src/workload/methods/codes-dumpi-trace-nw-wrkld.c
View file @
0c3bcbcf
...
...
@@ -116,7 +116,7 @@ static int dumpi_trace_nw_workload_load(const char* params, int app_id, int rank
static
void
dumpi_trace_nw_workload_get_next
(
int
app_id
,
int
rank
,
struct
codes_workload_op
*
op
);
/* get number of bytes from the workload data type and count */
static
int64_t
get_num_bytes
(
rank_mpi_context
*
my_ctx
,
dumpi_datatype
dt
);
static
u
int64_t
get_num_bytes
(
rank_mpi_context
*
my_ctx
,
dumpi_datatype
dt
);
/* computes the delay between MPI operations */
static
void
update_compute_time
(
const
dumpi_time
*
time
,
rank_mpi_context
*
my_ctx
);
...
...
@@ -440,7 +440,7 @@ int handleDUMPIIRecv(const dumpi_irecv *prm, uint16_t thread, const dumpi_time *
wrkld_per_rank
.
u
.
recv
.
tag
=
prm
->
tag
;
wrkld_per_rank
.
u
.
recv
.
num_bytes
=
prm
->
count
*
get_num_bytes
(
myctx
,
prm
->
datatype
);
//
assert(wrkld_per_rank.u.recv.num_bytes >= 0);
assert
(
wrkld_per_rank
.
u
.
recv
.
num_bytes
>=
0
);
wrkld_per_rank
.
u
.
recv
.
source_rank
=
prm
->
source
;
wrkld_per_rank
.
u
.
recv
.
dest_rank
=
-
1
;
wrkld_per_rank
.
u
.
recv
.
req_id
=
prm
->
request
;
...
...
@@ -487,7 +487,6 @@ int handleDUMPIRecv(const dumpi_recv *prm, uint16_t thread,
(
void
)
wall
;
(
void
)
perf
;
//printf("\n irecv source %d count %d data type %d", prm->source, prm->count, prm->datatype);
rank_mpi_context
*
myctx
=
(
rank_mpi_context
*
)
uarg
;
struct
codes_workload_op
wrkld_per_rank
;
...
...
@@ -500,6 +499,7 @@ int handleDUMPIRecv(const dumpi_recv *prm, uint16_t thread,
wrkld_per_rank
.
u
.
recv
.
source_rank
=
prm
->
source
;
wrkld_per_rank
.
u
.
recv
.
dest_rank
=
-
1
;
//printf("\n recv source %d count %d data type %d bytes %lld ", prm->source, prm->count, prm->datatype, wrkld_per_rank.u.recv.num_bytes);
update_times_and_insert
(
&
wrkld_per_rank
,
wall
,
myctx
);
return
0
;
...
...
@@ -933,7 +933,7 @@ int dumpi_trace_nw_workload_load(const char* params, int app_id, int rank)
/* Data types are for 64-bit archs. Source:
* https://www.tutorialspoint.com/cprogramming/c_data_types.htm
* */
static
int64_t
get_num_bytes
(
rank_mpi_context
*
myctx
,
dumpi_datatype
dt
)
static
u
int64_t
get_num_bytes
(
rank_mpi_context
*
myctx
,
dumpi_datatype
dt
)
{
(
void
)
myctx
;
...
...
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