Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 45 additions & 14 deletions parsec/interfaces/ptg/ptg-compiler/jdf2c.c
Original file line number Diff line number Diff line change
Expand Up @@ -5024,6 +5024,15 @@ jdf_generate_arena_string_from_datatype(string_arena_t *sa,
string_arena_free(sa2);
}

static int
jdf_datatype_is_auto(jdf_datatransfer_type_t datatype)
{
if( (JDF_VAR == datatype.type->op) || (JDF_STRING == datatype.type->op) ) {
return (0 == strcmp(datatype.type->jdf_var, "AUTO"));
}
return 0;
}

static void
jdf_generate_code_fillup_datatypes(string_arena_t * sa_tmp_arena, string_arena_t * sa_arena,
string_arena_t * sa_tmp_type_src, string_arena_t * sa_type_src,
Expand Down Expand Up @@ -6323,19 +6332,32 @@ jdf_generate_code_datatype_lookup(const jdf_t *jdf,
string_arena_init(sa_tmp_arena);
string_arena_init(sa_tmp_type);
string_arena_init(sa_temp);
jdf_generate_arena_string_from_datatype(sa_temp, dl->datatype_remote);
string_arena_add_string(sa_tmp_arena, " %s->arena ", string_arena_get_string(sa_temp));

if( jdf_datatype_is_auto(dl->datatype_remote) ) {
string_arena_add_string(sa_tmp_arena, "PARSEC_REMOTE_DEP_AUTO_ALLOC");
} else {
jdf_generate_arena_string_from_datatype(sa_temp, dl->datatype_remote);
string_arena_add_string(sa_tmp_arena, " %s->arena ", string_arena_get_string(sa_temp));
}
if( NULL == dl->datatype_remote.layout ) { /* no specific layout */
if( 0 == strlen(string_arena_get_string(sa_temp)) ) {
jdf_generate_arena_string_from_datatype(sa_temp, dl->datatype_remote);
}
string_arena_add_string(sa_tmp_type, "%s->opaque_dtt", string_arena_get_string(sa_temp));
} else {
string_arena_add_string(sa_tmp_type, "%s", dump_expr((void**)dl->datatype_remote.layout, &info));
}
string_arena_init(sa_tmp_count);
string_arena_add_string(sa_tmp_count, "%s", dump_expr((void**)dl->datatype_remote.count, &info));
if( jdf_datatype_is_auto(dl->datatype_remote) ) {
string_arena_add_string(sa_tmp_count, "data->remote.src_count");
} else {
string_arena_add_string(sa_tmp_count, "%s", dump_expr((void**)dl->datatype_remote.count, &info));
}
string_arena_init(sa_tmp_displ);
string_arena_add_string(sa_tmp_displ, "%s", dump_expr((void**)dl->datatype_remote.displ, &info));

if( jdf_datatype_is_auto(dl->datatype_remote) ) {
string_arena_add_string(sa_tmp_displ, "0");
} else {
string_arena_add_string(sa_tmp_displ, "%s", dump_expr((void**)dl->datatype_remote.displ, &info));
}
jdf_generate_code_fillup_datatypes(sa_tmp_arena, sa_arena,
sa_tmp_type, sa_type,
sa_tmp_displ, sa_displ,
Expand Down Expand Up @@ -7796,11 +7818,15 @@ jdf_generate_code_iterate_successors_or_predecessors(const jdf_t *jdf,
string_arena_add_string(sa_tmp_displ_r, "0");
} else {
string_arena_init(sa_temp);
jdf_generate_arena_string_from_datatype(sa_temp, dl->datatype_remote);
string_arena_add_string(sa_tmp_arena_r, "%s->arena", string_arena_get_string(sa_temp));

/* We select the dtt considering [type_remote] on dependency or dtt on datacopy.
*/
if( jdf_datatype_is_auto(dl->datatype_remote) ) {
string_arena_add_string(sa_tmp_arena_r, "PARSEC_REMOTE_DEP_AUTO_ALLOC");
string_arena_add_string(sa_tmp_count_r, "data.remote.src_count");
string_arena_add_string(sa_tmp_displ_r, "0");
} else {
jdf_generate_arena_string_from_datatype(sa_temp, dl->datatype_remote);
string_arena_add_string(sa_tmp_arena_r, "%s->arena", string_arena_get_string(sa_temp));
}
/* Keep type information for AUTO; only count comes from runtime header. */
if( DEP_UNDEFINED_DATATYPE == jdf_dep_undefined_type(dl->datatype_remote) /* undefined type on dependency */
&& (NULL == dl->datatype_remote.layout) ){ /* User didn't specify a custom layout*/
/* using data dtt or using PARSEC_DATATYPE_NULL if we don't have a data (this is the case
Expand All @@ -7809,14 +7835,19 @@ jdf_generate_code_iterate_successors_or_predecessors(const jdf_t *jdf,
string_arena_add_string(sa_tmp_type_r, "(data.data != NULL ? data.data->dtt : PARSEC_DATATYPE_NULL )");
} else {
if( NULL == dl->datatype_remote.layout ){ /* User didn't specify a custom layout*/
if( 0 == strlen(string_arena_get_string(sa_temp)) ) {
jdf_generate_arena_string_from_datatype(sa_temp, dl->datatype_remote);
}
string_arena_add_string(sa_tmp_type_r, "%s->opaque_dtt", string_arena_get_string(sa_temp));
} else {
string_arena_add_string(sa_tmp_type_r, "%s", dump_expr((void**)dl->datatype_remote.layout, &info));
}
}
assert( dl->datatype_remote.count != NULL );
string_arena_add_string(sa_tmp_count_r, "%s", dump_expr((void**)dl->datatype_remote.count, &info));
string_arena_add_string(sa_tmp_displ_r, "%s", dump_expr((void**)dl->datatype_remote.displ, &info));
if( !jdf_datatype_is_auto(dl->datatype_remote) ) {
assert( dl->datatype_remote.count != NULL );
string_arena_add_string(sa_tmp_count_r, "%s", dump_expr((void**)dl->datatype_remote.count, &info));
string_arena_add_string(sa_tmp_displ_r, "%s", dump_expr((void**)dl->datatype_remote.displ, &info));
}
}

string_arena_add_string(sa_datatype," if (action_mask & (PARSEC_ACTION_RESHAPE_ON_RELEASE | PARSEC_ACTION_RESHAPE_REMOTE_ON_RELEASE | PARSEC_ACTION_SEND_REMOTE_DEPS)) {\n");
Expand Down
2 changes: 2 additions & 0 deletions parsec/remote_dep.c
Original file line number Diff line number Diff line change
Expand Up @@ -202,10 +202,12 @@ inline void remote_deps_free(parsec_remote_deps_t* deps)
#if defined(PARSEC_DEBUG_PARANOID)
deps->output[k].data.data = NULL;
deps->output[k].data.local.arena = NULL;
deps->output[k].data.local.device_index = 0;
deps->output[k].data.local.src_displ = deps->output[k].data.local.dst_displ = 0xFFFFFFFF;
deps->output[k].data.local.src_datatype = deps->output[k].data.local.dst_datatype = PARSEC_DATATYPE_NULL;
deps->output[k].data.local.src_count = deps->output[k].data.local.dst_count = -1;
deps->output[k].data.remote.arena = NULL;
deps->output[k].data.remote.device_index = 0;
deps->output[k].data.remote.src_displ = deps->output[k].data.remote.dst_displ = 0xFFFFFFFF;
deps->output[k].data.remote.src_datatype = deps->output[k].data.remote.dst_datatype = PARSEC_DATATYPE_NULL;
deps->output[k].data.remote.src_count = deps->output[k].data.remote.dst_count = -1;
Expand Down
4 changes: 4 additions & 0 deletions parsec/remote_dep.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ typedef struct remote_dep_wire_get_s {

struct parsec_dep_type_description_s {
struct parsec_arena_s *arena;
int16_t device_index;
parsec_datatype_t src_datatype;
uint64_t src_count;
int64_t src_displ;
Expand Down Expand Up @@ -264,6 +265,9 @@ int parsec_remote_dep_propagate(parsec_execution_stream_t* es,
#define parsec_set_CTL_dep(PDEP_DATA_DESC)\
{ (PDEP_DATA_DESC)->data = NULL; (PDEP_DATA_DESC)->remote.src_datatype = PARSEC_DATATYPE_NULL; (PDEP_DATA_DESC)->remote.src_count=0; }

/* Marker used by jdf2c for type_remote=AUTO */
#define PARSEC_REMOTE_DEP_AUTO_ALLOC ((struct parsec_arena_s*)(intptr_t)-1)


/** @} */

Expand Down
Loading