root/orte/mca/ras/ras.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
   2 /*
   3  * Copyright (c) 2004-2008 The Trustees of Indiana University and Indiana
   4  *                         University Research and Technology
   5  *                         Corporation.  All rights reserved.
   6  * Copyright (c) 2004-2005 The University of Tennessee and The University
   7  *                         of Tennessee Research Foundation.  All rights
   8  *                         reserved.
   9  * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
  10  *                         University of Stuttgart.  All rights reserved.
  11  * Copyright (c) 2004-2005 The Regents of the University of California.
  12  *                         All rights reserved.
  13  * Copyright (c) 2011-2015 Los Alamos National Security, LLC.  All rights
  14  *                         reserved.
  15  * Copyright (c) 2015      Research Organization for Information Science
  16  *                         and Technology (RIST). All rights reserved.
  17  * $COPYRIGHT$
  18  *
  19  * Additional copyrights may follow
  20  *
  21  * $HEADER$
  22  */
  23 /** @file:
  24  *
  25  * The Open RTE Resource Allocation Subsystem (RAS)
  26  *
  27  * The resource allocation subsystem is responsible for determining
  28  * what (if any) resources have been allocated to the specified job
  29  * (via some prior action), and to obtain an allocation (if possible)
  30  * if resources have NOT been previously allocated. It is anticipated
  31  * that ORTE users will execute an "mpirun" or other command that
  32  * invokes ORTE through one of two channels:
  33  *
  34  * 1. the user will login to the computing resource they intend
  35  * to use, request a resource allocation from that system, and then
  36  * execute the mpirun or other command. Thus, the allocation has
  37  * already been obtained prior to ORTE's initialization.  In most
  38  * cases, systems pass allocation information via environmental
  39  * parameters.  Thus, the RAS components must know the correct
  40  * environmental parameter to look for within the environment they
  41  * seek to support (e.g., an LSF component should know that LSF passes
  42  * allocation parameters as a specific LSF-named entity).
  43  *
  44  * 2. the user issues an mpirun command or an application that uses
  45  * ORTE without obtaining an allocation in advance. Thus, the associated
  46  * RAS component must know how to request an allocation from the
  47  * designated resource. If it doesn't, or it cannot obtain the allocation,
  48  * then it shall indicate this by setting the system to an appropriate
  49  * state.
  50  */
  51 
  52 #ifndef ORTE_MCA_RAS_H
  53 #define ORTE_MCA_RAS_H
  54 
  55 #include "orte_config.h"
  56 #include "orte/constants.h"
  57 #include "orte/types.h"
  58 
  59 #include "orte/mca/mca.h"
  60 #include "opal/mca/event/event.h"
  61 #include "opal/class/opal_list.h"
  62 
  63 #include "orte/runtime/orte_globals.h"
  64 
  65 BEGIN_C_DECLS
  66 
  67 /* allocation event - the event one activates to schedule resource
  68  * allocation for pending jobs
  69  */
  70 ORTE_DECLSPEC extern opal_event_t orte_allocate_event;
  71 
  72 /*
  73  * ras module functions - these are not accessible to the outside world,
  74  * but are defined here by convention
  75  */
  76 
  77 /* init the module */
  78 typedef int (*orte_ras_base_module_init_fn_t)(void);
  79 
  80 /**
  81  * Allocate resources to a job.
  82  */
  83 typedef int (*orte_ras_base_module_allocate_fn_t)(orte_job_t *jdata,
  84                                                   opal_list_t *nodes);
  85 
  86 /* deallocate resources */
  87 typedef void (*orte_ras_base_module_dealloc_fn_t)(orte_job_t *jdata,
  88                                                   orte_app_context_t *app);
  89 
  90 /**
  91  * Cleanup module resources.
  92  */
  93 typedef int (*orte_ras_base_module_finalize_fn_t)(void);
  94 
  95 /**
  96  * ras module
  97  */
  98 struct orte_ras_base_module_2_0_0_t {
  99     /** init */
 100     orte_ras_base_module_init_fn_t          init;
 101     /** Allocation function pointer */
 102     orte_ras_base_module_allocate_fn_t      allocate;
 103     orte_ras_base_module_dealloc_fn_t       deallocate;
 104     /** Finalization function pointer */
 105     orte_ras_base_module_finalize_fn_t      finalize;
 106 };
 107 /** Convenience typedef */
 108 typedef struct orte_ras_base_module_2_0_0_t orte_ras_base_module_2_0_0_t;
 109 /** Convenience typedef */
 110 typedef orte_ras_base_module_2_0_0_t orte_ras_base_module_t;
 111 
 112 /*
 113  * ras component
 114  */
 115 
 116 /**
 117  * Component init / selection
 118  * ras component
 119  */
 120 struct orte_ras_base_component_2_0_0_t {
 121     /** Base MCA structure */
 122     mca_base_component_t base_version;
 123     /** Base MCA data */
 124     mca_base_component_data_t base_data;
 125 };
 126 /** Convenience typedef */
 127 typedef struct orte_ras_base_component_2_0_0_t orte_ras_base_component_2_0_0_t;
 128 /** Convenience typedef */
 129 typedef orte_ras_base_component_2_0_0_t orte_ras_base_component_t;
 130 
 131 
 132 /**
 133  * Macro for use in components that are of type ras
 134  */
 135 #define ORTE_RAS_BASE_VERSION_2_0_0 \
 136     ORTE_MCA_BASE_VERSION_2_1_0("ras", 2, 0, 0)
 137 
 138 
 139 END_C_DECLS
 140 
 141 #endif
 142 

/* [<][>][^][v][top][bottom][index][help] */