codes-mapping-context.h 3.14 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/*
 * Copyright (C) 2015 University of Chicago.
 * See COPYRIGHT notice in top-level directory.
 *
 */

/* SUMMARY - data structure and utilities to direct LP mappings. As opposed to
 * the codes-mapping API, this defines metadata necessary to allow implicit
 * mappings based on LP type and configuration specification
 * (see modelnet, LSM, etc)
 * mctx stands for mapping context */

#ifndef CODES_MAPPING_CONTEXT_H
#define CODES_MAPPING_CONTEXT_H

#include <stdbool.h>
#include <ross.h>

Jonathan Jenkins's avatar
Jonathan Jenkins committed
19 20
/* for convenience - an annotation-ignoring "group_modulo" context,
 * matching previous mapping behavior in most interfaces (modelnet and such) */
21
extern struct codes_mctx const * const CODES_MCTX_DEFAULT;
Jonathan Jenkins's avatar
Jonathan Jenkins committed
22

23 24 25 26 27 28 29 30 31 32 33
/* types of map contexts */
enum codes_mctx_type {
    // instructs those using the context to map directly to an LP
    CODES_MCTX_GLOBAL_DIRECT,
    // instructs those using the context to map into the same group/repetition
    // and compute the callee offset as the modulus of the caller offset and
    // the number of callees in the group, to provide simple wraparound
    // behaviour
    CODES_MCTX_GROUP_MODULO,
    // instructs those using the context to map into the same group/repetition
    // and directly to a callee offset
34 35 36
    CODES_MCTX_GROUP_DIRECT,
    // unknown/uninitialized context
    CODES_MCTX_UNKNOWN
37 38 39
};

/* defines whether to specialize by destination annotation, and if so, which
40
 * one */
41
struct codes_mctx_annotation {
42 43 44
    // see canonical name mapping api in codes_mapping.h. -1 is used for
    // ignoring annotations
    int cid;
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
};

/* parameters for each mapping context type */
struct codes_mctx_global_direct {
    tw_lpid lpid;
};

struct codes_mctx_group_modulo {
    struct codes_mctx_annotation anno;
};

struct codes_mctx_group_direct {
    struct codes_mctx_annotation anno;
    int offset;
};

struct codes_mctx {
    enum codes_mctx_type type;
    union {
        struct codes_mctx_global_direct global_direct;
        struct codes_mctx_group_modulo  group_modulo;
        struct codes_mctx_group_direct  group_direct;
    } u;
};

/* simple setter functions */
struct codes_mctx codes_mctx_set_global_direct(tw_lpid lpid);

struct codes_mctx codes_mctx_set_group_modulo(
        char const * annotation,
        bool ignore_annotations);

struct codes_mctx codes_mctx_set_group_direct(
        int offset,
        char const * annotation,
        bool ignore_annotations);

/* helper function to do a codes mapping - this function is subject to change
83
 * based on what types of ctx exist
84
 * NOTE: in GLOBAL_DIRECT mode, dest_lp_name and sender_gid are ignored */
85 86 87
tw_lpid codes_mctx_to_lpid(
        struct codes_mctx const * ctx,
        char const * dest_lp_name,
88 89 90 91 92 93 94 95
        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);
96 97 98 99 100 101 102 103 104 105 106 107

#endif /* end of include guard: CODES_MAPPING_CONTEXT_H */

/*
 * Local variables:
 *  c-indent-level: 4
 *  c-basic-offset: 4
 *  indent-tabs-mode: nil
 * End:
 *
 * vim: ts=8 sts=4 sw=4 expandtab
 */