Commit 5a518276 authored by Jonathan Jenkins's avatar Jonathan Jenkins

map-ctx: add annotation getter, modify lpid mapper

parent b113ac1d
...@@ -83,11 +83,18 @@ struct codes_mctx codes_mctx_set_group_direct( ...@@ -83,11 +83,18 @@ struct codes_mctx codes_mctx_set_group_direct(
/* helper function to do a codes mapping - this function is subject to change /* helper function to do a codes mapping - this function is subject to change
* based on what types of ctx exist * based on what types of ctx exist
* NOTE: in GLOBAL_DIRECT mode, dest_lp_name and sender are ignored */ * NOTE: in GLOBAL_DIRECT mode, dest_lp_name and sender_gid are ignored */
tw_lpid codes_mctx_to_lpid( tw_lpid codes_mctx_to_lpid(
struct codes_mctx const * ctx, struct codes_mctx const * ctx,
char const * dest_lp_name, char const * dest_lp_name,
tw_lp const * sender); tw_lpid sender_gid);
/* helper function to extract which annotation a various map context maps to.
* annotation is allocated or NULL if unused */
char const * codes_mctx_get_annotation(
struct codes_mctx const *ctx,
char const * dest_lp_name,
tw_lpid sender_id);
#endif /* end of include guard: CODES_MAPPING_CONTEXT_H */ #endif /* end of include guard: CODES_MAPPING_CONTEXT_H */
......
...@@ -56,7 +56,7 @@ struct codes_mctx codes_mctx_set_group_direct( ...@@ -56,7 +56,7 @@ struct codes_mctx codes_mctx_set_group_direct(
tw_lpid codes_mctx_to_lpid( tw_lpid codes_mctx_to_lpid(
struct codes_mctx const * ctx, struct codes_mctx const * ctx,
char const * dest_lp_name, char const * dest_lp_name,
tw_lp const * sender) tw_lpid sender_gid)
{ {
struct codes_mctx_annotation const *anno; struct codes_mctx_annotation const *anno;
// short circuit for direct mappings // short circuit for direct mappings
...@@ -77,7 +77,7 @@ tw_lpid codes_mctx_to_lpid( ...@@ -77,7 +77,7 @@ tw_lpid codes_mctx_to_lpid(
int unused, rep_id, offset; int unused, rep_id, offset;
// get sender info // get sender info
codes_mapping_get_lp_info(sender->gid, sender_group, &unused, NULL, &unused, codes_mapping_get_lp_info(sender_gid, sender_group, &unused, NULL, &unused,
NULL, &rep_id, &offset); NULL, &rep_id, &offset);
int dest_offset; int dest_offset;
...@@ -88,7 +88,7 @@ tw_lpid codes_mctx_to_lpid( ...@@ -88,7 +88,7 @@ tw_lpid codes_mctx_to_lpid(
tw_error(TW_LOC, tw_error(TW_LOC,
"ERROR: Found no LPs of type %s in group %s " "ERROR: Found no LPs of type %s in group %s "
"(source lpid %lu) with annotation: %s\n", "(source lpid %lu) with annotation: %s\n",
dest_lp_name, sender_group, sender->gid, dest_lp_name, sender_group, sender_gid,
anno->ignore_annotations ? "ignored" : anno->ignore_annotations ? "ignored" :
(anno->annotation ? anno->annotation : "none")); (anno->annotation ? anno->annotation : "none"));
...@@ -106,6 +106,40 @@ tw_lpid codes_mctx_to_lpid( ...@@ -106,6 +106,40 @@ tw_lpid codes_mctx_to_lpid(
return rtn; return rtn;
} }
char const * codes_mctx_get_annotation(
struct codes_mctx const *ctx,
char const * dest_lp_name,
tw_lpid sender_id)
{
switch(ctx->type) {
case CODES_MCTX_GLOBAL_DIRECT:
return codes_mapping_get_annotation_by_lpid(sender_id);
case CODES_MCTX_GROUP_MODULO:
// if not ignoring the annotation, just return what's in the
// context
if (!ctx->u.group_modulo.anno.ignore_annotations)
return ctx->u.group_modulo.anno.annotation;
break;
case CODES_MCTX_GROUP_DIRECT:
if (!ctx->u.group_direct.anno.ignore_annotations)
return ctx->u.group_direct.anno.annotation;
break;
default:
tw_error(TW_LOC, "unrecognized or uninitialized context type: %d",
ctx->type);
return NULL;
}
// at this point, we must be a group-wise mapping ignoring annotations
char group[MAX_NAME_LENGTH];
int dummy;
// only need the group name
codes_mapping_get_lp_info(sender_id, group, &dummy, NULL, &dummy, NULL,
&dummy, &dummy);
return codes_mapping_get_annotation_by_name(group, dest_lp_name);
}
/* /*
* Local variables: * Local variables:
* c-indent-level: 4 * c-indent-level: 4
......
...@@ -467,7 +467,7 @@ static void resource_lp_issue_event_base( ...@@ -467,7 +467,7 @@ static void resource_lp_issue_event_base(
SANITY_CHECK_CB(cb, resource_return); SANITY_CHECK_CB(cb, resource_return);
tw_lpid resource_lpid = tw_lpid resource_lpid =
codes_mctx_to_lpid(map_ctx, RESOURCE_LP_NM, sender); codes_mctx_to_lpid(map_ctx, RESOURCE_LP_NM, sender->gid);
tw_event *e = tw_event_new(resource_lpid, codes_local_latency(sender), tw_event *e = tw_event_new(resource_lpid, codes_local_latency(sender),
sender); sender);
......
...@@ -33,39 +33,68 @@ int main(int argc, char *argv[]) ...@@ -33,39 +33,68 @@ int main(int argc, char *argv[])
group_modulo_anno = codes_mctx_set_group_modulo("baz", false); group_modulo_anno = codes_mctx_set_group_modulo("baz", false);
group_direct_anno = codes_mctx_set_group_direct(1, "baz", false); group_direct_anno = codes_mctx_set_group_direct(1, "baz", false);
tw_lp mock_lp; tw_lpid in;
tw_lpid rtn; tw_lpid rtn_id;
char const * rtn_anno;
rtn = codes_mctx_to_lpid(&direct, NULL, NULL); rtn_id = codes_mctx_to_lpid(&direct, NULL, 0);
if (12ul != rtn) if (12ul != rtn_id)
ERR("global_direct mapping: expected %lu, got %lu", 12ul, rtn); ERR("global_direct mapping: expected %lu, got %lu",
12ul, rtn_id);
rtn_anno = codes_mctx_get_annotation(&direct, NULL, 0);
if (rtn_anno)
ERR("global_direct mapping: expected NULL anno, got %s", rtn_anno);
mock_lp.gid = 8ul; in = 8ul;
rtn = codes_mctx_to_lpid(&group_modulo, "bar", &mock_lp); rtn_id = codes_mctx_to_lpid(&group_modulo, "bar", in);
if (rtn != 9ul) if (rtn_id != 9ul)
ERR("group_modulo mapping: expected %lu, got %lu", 9ul, rtn); ERR("group_modulo mapping: expected %lu, got %lu",
9ul, rtn_id);
rtn_anno = codes_mctx_get_annotation(&group_modulo, "bar", in);
if (rtn_anno)
ERR("group_modulo mapping: expected NULL anno, got %s", rtn_anno);
mock_lp.gid = 12ul; in = 12ul;
rtn = codes_mctx_to_lpid(&group_modulo, "bar", &mock_lp); rtn_id = codes_mctx_to_lpid(&group_modulo, "bar", in);
if (rtn != 13ul) if (rtn_id != 13ul)
ERR("group_modulo mapping: expected %lu, got %lu", 13ul, rtn); ERR("group_modulo mapping: expected %lu, got %lu",
13ul, rtn_id);
rtn_anno = codes_mctx_get_annotation(&group_modulo, "bar", in);
if (rtn_anno)
ERR("group_modulo mapping: expected NULL anno, got %s", rtn_anno);
rtn = codes_mctx_to_lpid(CODES_MCTX_DEFAULT, "bar", &mock_lp); rtn_id = codes_mctx_to_lpid(CODES_MCTX_DEFAULT, "bar", in);
if (rtn != 13ul) if (rtn_id != 13ul)
ERR("group_modulo mapping (default): expected %lu, got %lu", 13ul, rtn); ERR("group_modulo mapping (default): expected %lu, got %lu",
13ul, rtn_id);
rtn_anno = codes_mctx_get_annotation(CODES_MCTX_DEFAULT, "bar", in);
if (rtn_anno)
ERR("group_modulo mapping: expected NULL anno, got %s", rtn_anno);
rtn = codes_mctx_to_lpid(&group_modulo_anno, "bar", &mock_lp); rtn_id = codes_mctx_to_lpid(&group_modulo_anno, "bar", in);
if (rtn != 15ul) if (rtn_id != 15ul)
ERR("group_modulo annotated mapping: expected %lu, got %lu", 15ul, rtn); ERR("group_modulo annotated mapping: expected %lu, got %lu",
15ul, rtn_id);
rtn_anno = codes_mctx_get_annotation(&group_modulo_anno, "bar", in);
if (strcmp(rtn_anno,"baz") != 0)
ERR("group_modulo mapping: expected anno \"baz\", got %s", rtn_anno);
mock_lp.gid = 10ul; in = 10ul;
rtn = codes_mctx_to_lpid(&group_direct, "bar", &mock_lp); rtn_id = codes_mctx_to_lpid(&group_direct, "bar", in);
if (rtn != 14ul) if (rtn_id != 14ul)
ERR("group_direct mapping (default): expected %lu, got %lu", 14ul, rtn); ERR("group_direct mapping (default): expected %lu, got %lu",
14ul, rtn_id);
rtn_anno = codes_mctx_get_annotation(&group_direct, "bar", in);
if (rtn_anno)
ERR("group_modulo mapping: expected NULL anno, got %s", rtn_anno);
rtn = codes_mctx_to_lpid(&group_direct_anno, "bar", &mock_lp); rtn_id = codes_mctx_to_lpid(&group_direct_anno, "bar", in);
if (rtn != 16ul) if (rtn_id != 16ul)
ERR("group_direct mapping (default): expected %lu, got %lu", 16ul, rtn); ERR("group_direct mapping (default): expected %lu, got %lu",
16ul, rtn_id);
rtn_anno = codes_mctx_get_annotation(&group_direct_anno, "bar", in);
if (strcmp(rtn_anno,"baz") != 0)
ERR("group_modulo mapping: expected anno \"baz\", got %s", rtn_anno);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment