root/ompi/mca/fbtl/fbtl.h

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

INCLUDED FROM


   1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
   2 /*
   3  * Copyright (c) 2004-2005 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) 2008-2014 University of Houston. All rights reserved.
  14  * Copyright (c) 2015      Los Alamos National Security, LLC. All rights
  15  *                         reserved.
  16  * Copyright (c) 2018      Research Organization for Information Science
  17  *                         and Technology (RIST). All rights reserved.
  18  * $COPYRIGHT$
  19  *
  20  * Additional copyrights may follow
  21  *
  22  * $HEADER$
  23  */
  24 
  25 #ifndef OMPI_MCA_FBTL_H
  26 #define OMPI_MCA_FBTL_H
  27 
  28 #include "ompi_config.h"
  29 #include "mpi.h"
  30 #include "ompi/mca/mca.h"
  31 #include "opal/mca/base/base.h"
  32 #include "ompi/request/request.h"
  33 #ifdef HAVE_SYS_UIO_H
  34 #include <sys/uio.h>
  35 #endif
  36 
  37 BEGIN_C_DECLS
  38 
  39 struct ompio_file_t;
  40 struct mca_ompio_request_t;
  41 
  42 /*
  43  * Macro for use in components that are of type coll
  44  */
  45 #define MCA_FBTL_BASE_VERSION_2_0_0 \
  46     OMPI_MCA_BASE_VERSION_2_1_0("fbtl", 2, 0, 0)
  47 
  48 /*
  49  * The file byte transfer layer (fbtl) framework provides the abstraction
  50  * for individual blocking and non-blocking read and write operations.
  51  * The functionality provided by the interfaces in this module
  52  * can be used to implement the corresponding operations in MPI I/O.
  53  * Note however, that the interfaces are not a one-to-one mapping
  54  * of the MPI individual read and write operations, since the fbtl framework
  55  * avoids using derived MPI datatypes. The step mapping/unrolling the MPI
  56  * derived data types into a vector of (offset into file, memory address, length)
  57  * is done in the OMPIO module of the IO framework.
  58  *
  59  * These are the component function prototypes. These function pointers
  60  * go into the component structure. These functions (query() and finalize()
  61  * are called during fbtl_base_select(). Each component is query() ied
  62  * and subsequently, all the unselected components are finalize() 'ed
  63  * so that any *stuff* they did during query() can be undone. By
  64  * similar logic, finalize() is also called on the component which
  65  * was selected when the communicator is being destroyed.
  66  *
  67  * So, to sum it up, every component carries 4 functions:
  68  * 1. open() - called during MPI_INIT
  69  * 2. close() - called during MPI_FINALIZE
  70  * 3. query() - called to select a particular component
  71  * 4. finalize() - called when actions taken during query have
  72  *                 to be undone
  73  */
  74 
  75 /*
  76  * **************** component struct *******************************
  77  * *********** These functions go in the component struct **********
  78  * **************** component struct *******************************
  79  */
  80 
  81 typedef int (*mca_fbtl_base_component_init_query_1_0_0_fn_t)
  82     (bool enable_progress_threads,
  83      bool enable_mpi_threads);
  84 
  85 typedef struct mca_fbtl_base_module_1_0_0_t *
  86 (*mca_fbtl_base_component_file_query_1_0_0_fn_t) (struct ompio_file_t *file,
  87                                                   int *priority);
  88 
  89 typedef int (*mca_fbtl_base_component_file_unquery_1_0_0_fn_t)
  90     (struct ompio_file_t *file);
  91 
  92 /*
  93  * ****************** component struct ******************************
  94  * Structure for fbtl v2.0.0 components.This is chained to MCA v2.0.0
  95  * ****************** component struct ******************************
  96  */
  97 struct mca_fbtl_base_component_2_0_0_t {
  98     mca_base_component_t fbtlm_version;
  99     mca_base_component_data_t fbtlm_data;
 100 
 101     mca_fbtl_base_component_init_query_1_0_0_fn_t fbtlm_init_query;
 102     mca_fbtl_base_component_file_query_1_0_0_fn_t fbtlm_file_query;
 103     mca_fbtl_base_component_file_unquery_1_0_0_fn_t fbtlm_file_unquery;
 104 };
 105 typedef struct mca_fbtl_base_component_2_0_0_t mca_fbtl_base_component_2_0_0_t;
 106 typedef struct mca_fbtl_base_component_2_0_0_t mca_fbtl_base_component_t;
 107 
 108 /*
 109  * ***********************************************************************
 110  * ************************  Interface function definitions **************
 111  * These are the typedefbtl for the function pointers to various fbtl
 112  * backend functions which will be used by the various fbtl components
 113  * ***********************************************************************
 114  */
 115 
 116 typedef int (*mca_fbtl_base_module_init_1_0_0_fn_t)
 117     (struct ompio_file_t *file);
 118 
 119 typedef int (*mca_fbtl_base_module_finalize_1_0_0_fn_t)
 120     (struct ompio_file_t *file);
 121 
 122 
 123 typedef ssize_t (*mca_fbtl_base_module_preadv_fn_t)
 124     (struct ompio_file_t *file );
 125 typedef ssize_t (*mca_fbtl_base_module_pwritev_fn_t)
 126     (struct ompio_file_t *file );
 127 typedef ssize_t (*mca_fbtl_base_module_ipreadv_fn_t)
 128     (struct ompio_file_t *file,
 129      ompi_request_t *request);
 130 typedef ssize_t (*mca_fbtl_base_module_ipwritev_fn_t)
 131     (struct ompio_file_t *file,
 132      ompi_request_t *request);
 133 typedef bool (*mca_fbtl_base_module_progress_fn_t)
 134     ( struct mca_ompio_request_t *request);
 135 
 136 typedef void (*mca_fbtl_base_module_request_free_fn_t)
 137     ( struct mca_ompio_request_t *request);
 138 /*
 139  * ***********************************************************************
 140  * ***************************  module structure *************************
 141  * ***********************************************************************
 142  */
 143 struct mca_fbtl_base_module_1_0_0_t {
 144     /*
 145      * Per-file initialization function. This is called only
 146      * on the module which is selected. The finalize corresponding to
 147      * this function is present on the component struct above
 148      */
 149     mca_fbtl_base_module_init_1_0_0_fn_t fbtl_module_init;
 150     mca_fbtl_base_module_finalize_1_0_0_fn_t fbtl_module_finalize;
 151 
 152     /* FBTL function pointers */
 153     mca_fbtl_base_module_preadv_fn_t        fbtl_preadv;
 154     mca_fbtl_base_module_ipreadv_fn_t       fbtl_ipreadv;
 155     mca_fbtl_base_module_pwritev_fn_t       fbtl_pwritev;
 156     mca_fbtl_base_module_ipwritev_fn_t      fbtl_ipwritev;
 157     mca_fbtl_base_module_progress_fn_t      fbtl_progress;
 158     mca_fbtl_base_module_request_free_fn_t  fbtl_request_free;
 159 };
 160 typedef struct mca_fbtl_base_module_1_0_0_t mca_fbtl_base_module_1_0_0_t;
 161 typedef mca_fbtl_base_module_1_0_0_t mca_fbtl_base_module_t;
 162 
 163 END_C_DECLS
 164 
 165 #endif /* OMPI_MCA_FBTL_H */

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