codes-mapping-context.h 2.78 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 21 22
/* for convenience - an annotation-ignoring "group_modulo" context,
 * matching previous mapping behavior in most interfaces (modelnet and such) */
extern struct codes_mctx const CODES_MCTX_DEFAULT;

23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 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 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
/* 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
    CODES_MCTX_GROUP_DIRECT
};

/* defines whether to specialize by destination annotation, and if so, which
 * one.
 *
 * NOTE: this structure does not "own" the annotation, and makes no attempt to
 * clean it up. */
struct codes_mctx_annotation {
    char const * annotation;
    bool ignore_annotations;
};

/* 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
 * based on what types of ctx exist */
tw_lpid codes_mctx_to_lpid(
        struct codes_mctx const * ctx,
        char const * dest_lp_name,
        tw_lp const * sender);

#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
 */