Mentions légales du service
Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
S
starpu_example_dgemm
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Package registry
Model registry
Operate
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
solverstack
mini-examples
starpu_example_dgemm
Commits
d359974a
Commit
d359974a
authored
3 years ago
by
Antoine Jego
Browse files
Options
Downloads
Patches
Plain Diff
added option to disable flushing or enable pruning
parent
52289146
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
starpu_example_dgemm.c
+35
-14
35 additions, 14 deletions
starpu_example_dgemm.c
with
35 additions
and
14 deletions
starpu_example_dgemm.c
+
35
−
14
View file @
d359974a
...
...
@@ -58,6 +58,8 @@ static struct argp_option options[] = {
{
"niter"
,
'l'
,
"int"
,
0
,
"Number of iterations (loops)"
},
{
"mpi-thread"
,
't'
,
"int"
,
0
,
"MPI thread level support : -1 StarPU, 0 SINGLE, 1 FUNNELED, 2 SERIALIZED, 3 MULTIPLE"
},
{
"datatype"
,
'd'
,
0
,
0
,
"Whether or not to use our own datatype implementation"
},
{
"no-flush"
,
's'
,
0
,
0
,
"If handed out to the program, do not flush anything until computation has completed."
},
{
"prune"
,
'r'
,
0
,
0
,
"If handed out to the program, prune the DAG as tightly as possible."
},
{
0
}
};
...
...
@@ -69,6 +71,7 @@ struct arguments
int
check
,
verbose
,
trace
;
int
niter
;
int
mpi_thread
,
datatype
;
int
no_flush
,
prune
;
};
...
...
@@ -114,6 +117,12 @@ parse_opt (int key, char *arg, struct argp_state *state)
case
'd'
:
arguments
->
datatype
=
1
;
break
;
case
's'
:
arguments
->
no_flush
=
1
;
break
;
case
'r'
:
arguments
->
prune
=
1
;
break
;
default:
return
ARGP_ERR_UNKNOWN
;
}
...
...
@@ -134,6 +143,8 @@ static int datatype =
STARPU_EXAMPLE_DGEMM_OWNDATATYPE
;
/* whether to register our own datatype */
static
int
mpi_thread
=
-
1
;
/* whether to register our own datatype */
static
int
verbose
=
0
;
static
int
flush
=
1
;
static
int
prune
=
0
;
#define MB ((M)/(BS))
/* Number of blocks */
#define NB ((N)/(BS))
/* Number of blocks */
...
...
@@ -338,6 +349,8 @@ int main(int argc, char *argv[])
arguments
.
niter
=
T
;
arguments
.
mpi_thread
=
mpi_thread
;
arguments
.
datatype
=
datatype
;
arguments
.
no_flush
=
0
;
arguments
.
prune
=
0
;
argp_parse
(
&
argp
,
argc
,
argv
,
0
,
0
,
&
arguments
);
M
=
arguments
.
m
;
...
...
@@ -352,6 +365,8 @@ int main(int argc, char *argv[])
T
=
arguments
.
niter
;
mpi_thread
=
arguments
.
mpi_thread
;
datatype
=
arguments
.
datatype
;
flush
=
!
arguments
.
no_flush
;
prune
=
arguments
.
prune
;
/* Initializes StarPU and the StarPU-MPI layer */
starpu_fxt_autostart_profiling
(
0
);
...
...
@@ -411,6 +426,8 @@ int main(int argc, char *argv[])
if
(
trace
)
printf
(
"- Tracing enabled
\n
"
);
if
(
datatype
)
printf
(
"- MPI datatype enabled
\n
"
);
if
(
mpi_thread
>
-
1
)
printf
(
"MPI thread support level : %d
\n
"
,
provided_mpi_thread
);
if
(
!
flush
)
printf
(
"- Flushing disabled
\n
"
);
if
(
prune
)
printf
(
"- Pruning enabled
\n
"
);
}
int
barrier_ret
,
trial
;
double
start
,
stop
;
...
...
@@ -433,23 +450,27 @@ int main(int argc, char *argv[])
for
(
b_aisle
=
0
;
b_aisle
<
KB
;
b_aisle
++
)
{
// printf("[%d] inserting C_%d,%d += A_%d,%d B_%d,%d\n",comm_rank, b_row,b_col, b_row,b_aisle, b_aisle,b_col);
struct
cl_zgemm_args_s
*
clargs
=
NULL
;
if
(
C
->
blocks
[
b_row
*
NB
+
b_col
].
owner
==
comm_rank
)
{
clargs
=
malloc
(
sizeof
(
struct
cl_zgemm_args_s
));
clargs
->
alpha
=
alpha
;
clargs
->
beta
=
b_aisle
==
0
?
beta
:
1
.
0
;
if
(
!
prune
||
(
A
->
blocks
[
b_row
*
KB
+
b_aisle
].
owner
==
comm_rank
||
B
->
blocks
[
b_aisle
*
NB
+
b_col
].
owner
==
comm_rank
||
C
->
blocks
[
b_row
*
NB
+
b_col
].
owner
==
comm_rank
))
{
struct
cl_zgemm_args_s
*
clargs
=
NULL
;
if
(
C
->
blocks
[
b_row
*
NB
+
b_col
].
owner
==
comm_rank
)
{
clargs
=
malloc
(
sizeof
(
struct
cl_zgemm_args_s
));
clargs
->
alpha
=
alpha
;
clargs
->
beta
=
b_aisle
==
0
?
beta
:
1
.
0
;
}
starpu_mpi_task_insert
(
MPI_COMM_WORLD
,
&
gemm_cl
,
STARPU_CL_ARGS
,
clargs
,
sizeof
(
struct
cl_zgemm_args_s
),
STARPU_R
,
A_h
[
b_row
*
KB
+
b_aisle
],
STARPU_R
,
B_h
[
b_aisle
*
NB
+
b_col
],
STARPU_RW
,
C_h
[
b_row
*
NB
+
b_col
],
0
);
// printf("[%d] inserted C_%d,%d += A_%d,%d B_%d,%d\n",comm_rank, b_row,b_col, b_row,b_aisle, b_aisle,b_col);
}
starpu_mpi_task_insert
(
MPI_COMM_WORLD
,
&
gemm_cl
,
STARPU_CL_ARGS
,
clargs
,
sizeof
(
struct
cl_zgemm_args_s
),
STARPU_R
,
A_h
[
b_row
*
KB
+
b_aisle
],
STARPU_R
,
B_h
[
b_aisle
*
NB
+
b_col
],
STARPU_RW
,
C_h
[
b_row
*
NB
+
b_col
],
0
);
// printf("[%d] inserted C_%d,%d += A_%d,%d B_%d,%d\n",comm_rank, b_row,b_col, b_row,b_aisle, b_aisle,b_col);
}
}
for
(
b_aisle
=
0
;
b_aisle
<
KB
;
b_aisle
++
)
{
starpu_mpi_cache_flush
(
MPI_COMM_WORLD
,
A_h
[
b_row
*
KB
+
b_aisle
]);
if
(
flush
)
{
for
(
b_aisle
=
0
;
b_aisle
<
KB
;
b_aisle
++
)
{
starpu_mpi_cache_flush
(
MPI_COMM_WORLD
,
A_h
[
b_row
*
KB
+
b_aisle
]);
}
}
}
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
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!
Save comment
Cancel
Please
register
or
sign in
to comment