codes-jobmap.h 1.89 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13
/*
 * Copyright (C) 2015 University of Chicago.
 * See COPYRIGHT notice in top-level directory.
 *
 */

/* SUMMARY - namespace support for multiple groups of ids (jobs) with respect to a
 * flat namespace. Note that this API is meant for static job creation - a more
 * sophisticated method would need to be used to modify job mappings at
 * runtime.
 *
 * Example:
 *
14 15 16
 * job  0      1    2        (<-- jobmap defined "local" IDs)
 * rank 0 1 2  0 1  0 1 2 3  (<-- jobmap defined "local" IDs)
 * ID   0 1 2  3 4  5 6 7 8  (<-- LP relative "global" ID)
17 18 19 20 21 22 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
 * LP   A B C  D E  F G H I  (<-- provided by codes-mapping)
 * */

#ifndef CODES_JOBMAP_H
#define CODES_JOBMAP_H

/** type markers and parameter defs for jobmaps **/

enum codes_jobmap_type {
    /* the "dummy" jobmap is an example implementation. It simply specifies N
     * jobs, with exactly one rank per job, with a trivial mapping */
    CODES_JOBMAP_DUMMY
};

struct codes_jobmap_params_dummy {
    int num_jobs;
};

/** jobmap interface **/

struct codes_jobmap_ctx;

struct codes_jobmap_id {
    int job;
    int rank; // relative to job
};

struct codes_jobmap_ctx *
codes_jobmap_configure(enum codes_jobmap_type t, void const * params);

void codes_jobmap_destroy(struct codes_jobmap_ctx *c);

49 50 51 52 53 54 55
/* main mapping functions - bidirectional mapping is needed:
 * - global -> local ID for initialization
 * - local -> global ID for communication between local IDs
 *
 * functions return {-1, -1} and -1, respectively, for invalid id input */

struct codes_jobmap_id codes_jobmap_to_local_id(
56 57 58
        int id,
        struct codes_jobmap_ctx const * c);

59 60 61 62
int codes_jobmap_to_global_id(
        struct codes_jobmap_id id,
        struct codes_jobmap_ctx const * c);

63 64 65 66 67 68 69 70 71 72 73 74 75
int codes_jobmap_get_num_jobs(struct codes_jobmap_ctx const * c);

#endif

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