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
AGULLO Emmanuel
Chameleon
Commits
74907797
Commit
74907797
authored
Dec 12, 2017
by
Mathieu Faverge
Browse files
Update contriold directory
parent
6e2d7fca
Changes
3
Hide whitespace changes
Inline
Side-by-side
runtime/parsec/control/runtime_async.c
View file @
74907797
...
...
@@ -15,15 +15,14 @@
**/
int
RUNTIME_sequence_create
(
MORSE_context_t
*
morse
,
MORSE_sequence_t
*
sequence
)
{
dague
_context_t
*
dague
=
(
dague
_context_t
*
)
morse
->
schedopt
;
dague_dtd_handle_t
*
dague_dtd_handle
=
dague_dtd_handle_new
((
dague_context_t
*
)
morse
->
schedopt
);
parsec
_context_t
*
parsec
=
(
parsec
_context_t
*
)
morse
->
schedopt
;
parsec_taskpool_t
*
parsec_dtd_tp
=
parsec_dtd_taskpool_new
(
);
dague_enqueue
(
dague
,
(
dague_handle_t
*
)
dague_dtd_handle
);
sequence
->
schedopt
=
dague_dtd_handle
;
parsec_enqueue
(
parsec
,
(
parsec_taskpool_t
*
)
parsec_dtd_tp
);
sequence
->
schedopt
=
parsec_dtd_tp
;
parsec_context_start
(
parsec
);
#if defined (OVERLAP)
dague_context_start
(
dague
);
#endif
return
MORSE_SUCCESS
;
}
...
...
@@ -32,14 +31,18 @@ int RUNTIME_sequence_create(MORSE_context_t *morse, MORSE_sequence_t *sequence)
**/
int
RUNTIME_sequence_destroy
(
MORSE_context_t
*
morse
,
MORSE_sequence_t
*
sequence
)
{
dague
_context_t
*
dague
=
(
dague
_context_t
*
)
morse
->
schedopt
;
dague_dtd_handle_t
*
dague_dtd_handle
=
(
dague_dtd_handle
_t
*
)
sequence
->
schedopt
;
parsec
_context_t
*
parsec
=
(
parsec
_context_t
*
)
morse
->
schedopt
;
parsec_taskpool_t
*
parsec_dtd_tp
=
(
parsec_taskpool
_t
*
)
sequence
->
schedopt
;
(
void
)
morse
;
assert
(
dague_dtd_handle
);
assert
(
parsec_dtd_tp
);
// TODO: switch to a patial wait
//parsec_dtd_taskpool_wait(parsec, parsec_dtd_tp);
parsec_context_wait
(
parsec
);
parsec_taskpool_free
(
parsec_dtd_tp
);
dague_dtd_context_wait_on_handle
(
dague
,
dague_dtd_handle
);
dague_dtd_handle_destruct
(
dague_dtd_handle
);
sequence
->
schedopt
=
NULL
;
return
MORSE_SUCCESS
;
}
...
...
@@ -49,12 +52,12 @@ int RUNTIME_sequence_destroy(MORSE_context_t *morse, MORSE_sequence_t *sequence)
**/
int
RUNTIME_sequence_wait
(
MORSE_context_t
*
morse
,
MORSE_sequence_t
*
sequence
)
{
dague
_context_t
*
dague
=
(
dague
_context_t
*
)
morse
->
schedopt
;
dague_dtd_handle_t
*
dague_dtd_handle
=
(
dague_dtd_handle
_t
*
)
sequence
->
schedopt
;
parsec
_context_t
*
parsec
=
(
parsec
_context_t
*
)
morse
->
schedopt
;
parsec_taskpool_t
*
parsec_dtd_tp
=
(
parsec_taskpool
_t
*
)
sequence
->
schedopt
;
assert
(
dague_dtd_handle
);
assert
(
parsec_dtd_tp
);
dague_dtd_handle_wait
(
dague
,
dague_dtd_handle
);
parsec_dtd_taskpool_wait
(
parsec
,
parsec_dtd_tp
);
return
MORSE_SUCCESS
;
}
...
...
@@ -64,7 +67,7 @@ int RUNTIME_sequence_wait(MORSE_context_t *morse, MORSE_sequence_t *sequence )
**/
void
RUNTIME_sequence_flush
(
void
*
schedopt
,
MORSE_sequence_t
*
sequence
,
MORSE_request_t
*
request
,
int
status
)
{
dague
_context_t
*
dague
=
(
dague
_context_t
*
)
schedopt
;
parsec
_context_t
*
parsec
=
(
parsec
_context_t
*
)
schedopt
;
(
void
)
schedopt
;
sequence
->
request
=
request
;
sequence
->
status
=
status
;
...
...
runtime/parsec/control/runtime_control.c
View file @
74907797
...
...
@@ -11,6 +11,10 @@
#include
<stdlib.h>
#include
"chameleon_parsec.h"
#if defined(CHAMELEON_USE_MPI)
#include
<mpi.h>
#endif
/*******************************************************************************
* Thread rank.
**/
...
...
@@ -28,13 +32,13 @@ int RUNTIME_init_scheduler(MORSE_context_t *morse, int nworkers, int ncudas, int
int
*
argc
=
(
int
*
)
malloc
(
sizeof
(
int
));
*
argc
=
0
;
/* Initializing
dague
context */
/* Initializing
parsec
context */
if
(
0
<
nworkers
)
{
default_ncores
=
nworkers
;
}
morse
->
parallel_enabled
=
MORSE_TRUE
;
morse
->
schedopt
=
(
void
*
)
dague
_init
(
default_ncores
,
argc
,
NULL
);
dague_dtd_init
();
morse
->
schedopt
=
(
void
*
)
parsec
_init
(
default_ncores
,
argc
,
NULL
);
if
(
NULL
!=
morse
->
schedopt
)
{
morse
->
nworkers
=
nworkers
;
morse
->
nthreads_per_worker
=
nthreads_per_worker
;
...
...
@@ -50,9 +54,8 @@ int RUNTIME_init_scheduler(MORSE_context_t *morse, int nworkers, int ncudas, int
*/
void
RUNTIME_finalize_scheduler
(
MORSE_context_t
*
morse
)
{
dague_context_t
*
dague
=
(
dague_context_t
*
)
morse
->
schedopt
;
dague_dtd_fini
();
dague_fini
(
&
dague
);
parsec_context_t
*
parsec
=
(
parsec_context_t
*
)
morse
->
schedopt
;
parsec_fini
(
&
parsec
);
return
;
}
...
...
@@ -61,9 +64,9 @@ void RUNTIME_finalize_scheduler(MORSE_context_t *morse)
**/
void
RUNTIME_barrier
(
MORSE_context_t
*
morse
)
{
dague
_context_t
*
dague
=
(
dague
_context_t
*
)
morse
->
schedopt
;
parsec
_context_t
*
parsec
=
(
parsec
_context_t
*
)
morse
->
schedopt
;
// This will be a problem with the fake tasks inserted to detect end of DTD algorithms
//
dague
_context_wait(
dague
);
//
parsec
_context_wait(
parsec
);
return
;
}
...
...
@@ -131,5 +134,7 @@ void RUNTIME_comm_size( int *size )
**/
int
RUNTIME_get_thread_nbr
()
{
return
vpmap_get_nb_total_threads
();
// TODO: fixme
//return vpmap_get_nb_total_threads();
return
0
;
}
runtime/parsec/control/runtime_descriptor.c
View file @
74907797
...
...
@@ -9,7 +9,12 @@
**/
#include
<stdlib.h>
#include
"chameleon_parsec.h"
#include
<dague/data.h>
#include
<parsec/data.h>
#include
<parsec/datatype.h>
#include
<parsec/data_dist/matrix/matrix.h>
#include
<parsec/arena.h>
static
int
parsec_global_arena_index
=
0
;
void
RUNTIME_user_tag_size
(
int
user_tag_width
,
int
user_tag_sep
)
{
(
void
)
user_tag_width
;
...
...
@@ -29,16 +34,21 @@ void RUNTIME_mat_free( void *mat, size_t size)
}
struct
morse_parsec_desc_s
{
dague_ddesc
_t
super
;
parsec_data_collection
_t
super
;
MORSE_desc_t
*
desc
;
dague_data_t
**
data_map
;
parsec_data_t
**
data_map
;
int
arena_index
;
};
int
morse_parsec_get_arena_index
(
const
MORSE_desc_t
*
desc
)
{
return
((
morse_parsec_desc_t
*
)
desc
->
schedopt
)
->
arena_index
;
}
static
void
morse_parsec_key_to_coordinates
(
dague_ddesc_t
*
ddesc
,
dague
_data_key_t
key
,
morse_parsec_key_to_coordinates
(
parsec_data_collection_t
*
data_collection
,
parsec
_data_key_t
key
,
int
*
m
,
int
*
n
)
{
morse_parsec_desc_t
*
pdesc
=
(
morse_parsec_desc_t
*
)
d
desc
;
morse_parsec_desc_t
*
pdesc
=
(
morse_parsec_desc_t
*
)
d
ata_collection
;
MORSE_desc_t
*
mdesc
=
pdesc
->
desc
;
int
_m
,
_n
;
...
...
@@ -48,16 +58,16 @@ morse_parsec_key_to_coordinates(dague_ddesc_t *ddesc, dague_data_key_t key,
*
n
=
_n
-
mdesc
->
j
/
mdesc
->
nb
;
}
static
dague
_data_key_t
morse_parsec_data_key
(
dague_ddesc_t
*
ddesc
,
...)
static
parsec
_data_key_t
morse_parsec_data_key
(
parsec_data_collection_t
*
data_collection
,
...)
{
morse_parsec_desc_t
*
pdesc
=
(
morse_parsec_desc_t
*
)
d
desc
;
morse_parsec_desc_t
*
pdesc
=
(
morse_parsec_desc_t
*
)
d
ata_collection
;
MORSE_desc_t
*
mdesc
=
pdesc
->
desc
;
va_list
ap
;
int
m
,
n
;
/* Get coordinates */
va_start
(
ap
,
d
desc
);
va_start
(
ap
,
d
ata_collection
);
m
=
va_arg
(
ap
,
unsigned
int
);
n
=
va_arg
(
ap
,
unsigned
int
);
va_end
(
ap
);
...
...
@@ -70,15 +80,15 @@ morse_parsec_data_key(dague_ddesc_t *ddesc, ...)
}
static
uint32_t
morse_parsec_rank_of
(
dague_ddesc_t
*
ddesc
,
...)
morse_parsec_rank_of
(
parsec_data_collection_t
*
data_collection
,
...)
{
morse_parsec_desc_t
*
pdesc
=
(
morse_parsec_desc_t
*
)
d
desc
;
morse_parsec_desc_t
*
pdesc
=
(
morse_parsec_desc_t
*
)
d
ata_collection
;
MORSE_desc_t
*
mdesc
=
pdesc
->
desc
;
va_list
ap
;
int
m
,
n
;
/* Get coordinates */
va_start
(
ap
,
d
desc
);
va_start
(
ap
,
d
ata_collection
);
m
=
va_arg
(
ap
,
unsigned
int
);
n
=
va_arg
(
ap
,
unsigned
int
);
va_end
(
ap
);
...
...
@@ -91,37 +101,37 @@ morse_parsec_rank_of(dague_ddesc_t *ddesc, ...)
}
static
uint32_t
morse_parsec_rank_of_key
(
dague_ddesc_t
*
ddesc
,
dague
_data_key_t
key
)
morse_parsec_rank_of_key
(
parsec_data_collection_t
*
data_collection
,
parsec
_data_key_t
key
)
{
int
m
,
n
;
morse_parsec_key_to_coordinates
(
d
desc
,
key
,
&
m
,
&
n
);
return
morse_parsec_rank_of
(
d
desc
,
m
,
n
);
morse_parsec_key_to_coordinates
(
d
ata_collection
,
key
,
&
m
,
&
n
);
return
morse_parsec_rank_of
(
d
ata_collection
,
m
,
n
);
}
static
int32_t
morse_parsec_vpid_of
(
dague_ddesc_t
*
ddesc
,
...)
morse_parsec_vpid_of
(
parsec_data_collection_t
*
data_collection
,
...)
{
return
0
;
}
static
int32_t
morse_parsec_vpid_of_key
(
dague_ddesc_t
*
ddesc
,
dague
_data_key_t
key
)
morse_parsec_vpid_of_key
(
parsec_data_collection_t
*
data_collection
,
parsec
_data_key_t
key
)
{
int
m
,
n
;
morse_parsec_key_to_coordinates
(
d
desc
,
key
,
&
m
,
&
n
);
return
morse_parsec_vpid_of
(
d
desc
,
m
,
n
);
morse_parsec_key_to_coordinates
(
d
ata_collection
,
key
,
&
m
,
&
n
);
return
morse_parsec_vpid_of
(
d
ata_collection
,
m
,
n
);
}
static
dague
_data_t
*
morse_parsec_data_of
(
dague_ddesc_t
*
ddesc
,
...)
static
parsec
_data_t
*
morse_parsec_data_of
(
parsec_data_collection_t
*
data_collection
,
...)
{
morse_parsec_desc_t
*
pdesc
=
(
morse_parsec_desc_t
*
)
d
desc
;
morse_parsec_desc_t
*
pdesc
=
(
morse_parsec_desc_t
*
)
d
ata_collection
;
MORSE_desc_t
*
mdesc
=
pdesc
->
desc
;
va_list
ap
;
int
m
,
n
;
/* Get coordinates */
va_start
(
ap
,
d
desc
);
va_start
(
ap
,
d
ata_collection
);
m
=
va_arg
(
ap
,
unsigned
int
);
n
=
va_arg
(
ap
,
unsigned
int
);
va_end
(
ap
);
...
...
@@ -132,39 +142,39 @@ morse_parsec_data_of(dague_ddesc_t *ddesc, ...)
#if defined(CHAMELEON_USE_MPI)
/* TODO: change displacement in data_map when in distributed */
assert
(
mdesc
->
nodes
==
1
);
//
assert(
data_collection
->nodes == 1 );
#endif
return
dague
_data_create
(
pdesc
->
data_map
+
n
*
mdesc
->
lmt
+
m
,
d
desc
,
morse_parsec_data_key
(
d
desc
,
m
,
n
),
return
parsec
_data_create
(
pdesc
->
data_map
+
n
*
mdesc
->
lmt
+
m
,
d
ata_collection
,
morse_parsec_data_key
(
d
ata_collection
,
m
,
n
),
mdesc
->
get_blkaddr
(
mdesc
,
m
,
n
),
mdesc
->
bsiz
*
MORSE_Element_Size
(
mdesc
->
dtyp
)
);
}
static
dague
_data_t
*
morse_parsec_data_of_key
(
dague_ddesc_t
*
ddesc
,
dague
_data_key_t
key
)
static
parsec
_data_t
*
morse_parsec_data_of_key
(
parsec_data_collection_t
*
data_collection
,
parsec
_data_key_t
key
)
{
morse_parsec_desc_t
*
pdesc
=
(
morse_parsec_desc_t
*
)
d
desc
;
morse_parsec_desc_t
*
pdesc
=
(
morse_parsec_desc_t
*
)
d
ata_collection
;
MORSE_desc_t
*
mdesc
=
pdesc
->
desc
;
int
m
,
n
;
morse_parsec_key_to_coordinates
(
d
desc
,
key
,
&
m
,
&
n
);
morse_parsec_key_to_coordinates
(
d
ata_collection
,
key
,
&
m
,
&
n
);
#if defined(CHAMELEON_USE_MPI)
/* TODO: change displacement in data_map when in distributed */
assert
(
mdesc
->
nodes
==
1
);
//
assert(
data_collection
->nodes == 1 );
#endif
return
dague
_data_create
(
pdesc
->
data_map
+
key
,
d
desc
,
key
,
return
parsec
_data_create
(
pdesc
->
data_map
+
key
,
d
ata_collection
,
key
,
mdesc
->
get_blkaddr
(
mdesc
,
m
,
n
),
mdesc
->
bsiz
*
MORSE_Element_Size
(
mdesc
->
dtyp
)
);
}
#ifdef
DAGUE
_PROF_TRACE
#ifdef
parsec
_PROF_TRACE
static
int
morse_parsec_key_to_string
(
dague_ddesc_t
*
ddesc
,
dague
_data_key_t
key
,
char
*
buffer
,
uint32_t
buffer_size
)
morse_parsec_key_to_string
(
parsec_data_collection_t
*
data_collection
,
parsec
_data_key_t
key
,
char
*
buffer
,
uint32_t
buffer_size
)
{
morse_parsec_desc_t
*
pdesc
=
(
morse_parsec_desc_t
*
)
d
desc
;
morse_parsec_desc_t
*
pdesc
=
(
morse_parsec_desc_t
*
)
d
ata_collection
;
MORSE_desc_t
*
mdesc
=
pdesc
->
desc
;
int
m
,
n
,
res
;
morse_parsec_key_to_coordinates
(
d
desc
,
key
,
&
m
,
&
n
);
morse_parsec_key_to_coordinates
(
d
ata_collection
,
key
,
&
m
,
&
n
);
res
=
snprintf
(
buffer
,
buffer_size
,
"(%d, %d)"
,
m
,
n
);
if
(
res
<
0
)
{
...
...
@@ -182,42 +192,44 @@ void RUNTIME_desc_init( MORSE_desc_t *mdesc )
void
RUNTIME_desc_create
(
MORSE_desc_t
*
mdesc
)
{
dague_ddesc_t
*
ddesc
;
parsec_data_collection_t
*
data_collection
;
morse_parsec_desc_t
*
pdesc
;
int
comm_size
;
pdesc
=
malloc
(
sizeof
(
morse_parsec_desc_t
)
);
d
desc
=
(
dague_ddesc
_t
*
)
pdesc
;
d
ata_collection
=
(
parsec_data_collection
_t
*
)
pdesc
;
/* Super setup */
RUNTIME_comm_size
(
&
comm_size
);
d
desc
->
nodes
=
comm_size
;
d
desc
->
myrank
=
mdesc
->
myrank
;
d
desc
->
data_key
=
morse_parsec_data_key
;
d
desc
->
rank_of
=
morse_parsec_rank_of
;
d
desc
->
rank_of_key
=
morse_parsec_rank_of_key
;
d
desc
->
data_of
=
morse_parsec_data_of
;
d
desc
->
data_of_key
=
morse_parsec_data_of_key
;
d
desc
->
vpid_of
=
morse_parsec_vpid_of
;
d
desc
->
vpid_of_key
=
morse_parsec_vpid_of_key
;
#if defined(
DAGUE
_PROF_TRACE)
d
ata_collection
->
nodes
=
comm_size
;
d
ata_collection
->
myrank
=
mdesc
->
myrank
;
d
ata_collection
->
data_key
=
morse_parsec_data_key
;
d
ata_collection
->
rank_of
=
morse_parsec_rank_of
;
d
ata_collection
->
rank_of_key
=
morse_parsec_rank_of_key
;
d
ata_collection
->
data_of
=
morse_parsec_data_of
;
d
ata_collection
->
data_of_key
=
morse_parsec_data_of_key
;
d
ata_collection
->
vpid_of
=
morse_parsec_vpid_of
;
d
ata_collection
->
vpid_of_key
=
morse_parsec_vpid_of_key
;
#if defined(
parsec
_PROF_TRACE)
{
int
rc
;
d
desc
->
key_to_string
=
morse_parsec_key_to_string
;
d
desc
->
key
=
NULL
;
rc
=
asprintf
(
&
(
d
desc
->
key_dim
),
"(%d, %d)"
,
mdesc
->
lmt
,
mdesc
->
lnt
);
d
ata_collection
->
key_to_string
=
morse_parsec_key_to_string
;
d
ata_collection
->
key
=
NULL
;
rc
=
asprintf
(
&
(
d
ata_collection
->
key_dim
),
"(%d, %d)"
,
mdesc
->
lmt
,
mdesc
->
lnt
);
(
void
)
rc
;
}
#endif
d
desc
->
memory_registration_status
=
MEMORY_STATUS_UNREGISTERED
;
d
ata_collection
->
memory_registration_status
=
MEMORY_STATUS_UNREGISTERED
;
pdesc
->
data_map
=
calloc
(
mdesc
->
lmt
*
mdesc
->
lnt
,
sizeof
(
dague
_data_t
*
)
);
pdesc
->
data_map
=
calloc
(
mdesc
->
lmt
*
mdesc
->
lnt
,
sizeof
(
parsec
_data_t
*
)
);
/* Double linking */
pdesc
->
desc
=
mdesc
;
mdesc
->
schedopt
=
pdesc
;
parsec_dtd_data_collection_init
(
data_collection
);
/* /\* Overwrite the leading dimensions to store the padding *\/ */
/* mdesc->llm = mdesc->mb * mdesc->lmt; */
/* mdesc->lln = mdesc->nb * mdesc->lnt; */
...
...
@@ -229,18 +241,21 @@ void RUNTIME_desc_destroy( MORSE_desc_t *mdesc )
morse_parsec_desc_t
*
pdesc
=
(
morse_parsec_desc_t
*
)(
mdesc
->
schedopt
);
if
(
pdesc
->
data_map
!=
NULL
)
{
dague
_data_t
**
data
=
pdesc
->
data_map
;
parsec
_data_t
**
data
=
pdesc
->
data_map
;
int
nb_local_tiles
=
mdesc
->
lmt
*
mdesc
->
lnt
;
int
i
;
for
(
i
=
0
;
i
<
nb_local_tiles
;
i
++
,
data
++
)
{
dague
_data_destroy
(
*
data
);
parsec
_data_destroy
(
*
data
);
}
free
(
pdesc
->
data_map
);
pdesc
->
data_map
=
NULL
;
}
parsec_dtd_data_collection_fini
(
(
parsec_data_collection_t
*
)
pdesc
);
free
(
pdesc
);
return
;
}
...
...
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