1
1
openmpi/ompi/mca/fbtl/fbtl.h
2015-06-23 20:59:57 -07:00

164 строки
6.4 KiB
C

/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
/*
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
* University Research and Technology
* Corporation. All rights reserved.
* Copyright (c) 2004-2005 The University of Tennessee and The University
* of Tennessee Research Foundation. All rights
* reserved.
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
* University of Stuttgart. All rights reserved.
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
* Copyright (c) 2008-2014 University of Houston. All rights reserved.
* Copyright (c) 2015 Los Alamos National Security, LLC. All rights
* reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
*
* $HEADER$
*/
#ifndef OMPI_MCA_FBTL_H
#define OMPI_MCA_FBTL_H
#include "ompi_config.h"
#include "mpi.h"
#include "ompi/mca/mca.h"
#include "opal/mca/base/base.h"
#include "ompi/request/request.h"
#ifdef HAVE_SYS_UIO_H
#include <sys/uio.h>
#endif
BEGIN_C_DECLS
struct mca_io_ompio_file_t;
struct mca_ompio_request_t;
/*
* Macro for use in components that are of type coll
*/
#define MCA_FBTL_BASE_VERSION_2_0_0 \
OMPI_MCA_BASE_VERSION_2_1_0("fbtl", 2, 0, 0)
/*
* The file byte transfer layer (fbtl) framework provides the abstraction
* for individual blocking and non-blocking read and write operations.
* The functionality provided by the interfaces in this module
* can be used to implement the corresponding operations in MPI I/O.
* Note however, that the interfaces are not a one-to-one mapping
* of the MPI individual read and write operations, since the fbtl framework
* avoids using derived MPI datatypes. The step mapping/unrolling the MPI
* derived data types into a vector of (offset into file, memory address, length)
* is done in the OMPIO module of the IO framework.
*
* These are the component function prototypes. These function pointers
* go into the component structure. These functions (query() and finalize()
* are called during fbtl_base_select(). Each component is query() ied
* and subsequently, all the unselected components are finalize() 'ed
* so that any *stuff* they did during query() can be undone. By
* similar logic, finalize() is also called on the component which
* was selected when the communicator is being destroyed.
*
* So, to sum it up, every component carries 4 functions:
* 1. open() - called during MPI_INIT
* 2. close() - called during MPI_FINALIZE
* 3. query() - called to select a particular component
* 4. finalize() - called when actions taken during query have
* to be undone
*/
/*
* **************** component struct *******************************
* *********** These functions go in the component struct **********
* **************** component struct *******************************
*/
typedef int (*mca_fbtl_base_component_init_query_1_0_0_fn_t)
(bool enable_progress_threads,
bool enable_mpi_threads);
typedef struct mca_fbtl_base_module_1_0_0_t *
(*mca_fbtl_base_component_file_query_1_0_0_fn_t) (struct mca_io_ompio_file_t *file,
int *priority);
typedef int (*mca_fbtl_base_component_file_unquery_1_0_0_fn_t)
(struct mca_io_ompio_file_t *file);
/*
* ****************** component struct ******************************
* Structure for fbtl v2.0.0 components.This is chained to MCA v2.0.0
* ****************** component struct ******************************
*/
struct mca_fbtl_base_component_2_0_0_t {
mca_base_component_t fbtlm_version;
mca_base_component_data_t fbtlm_data;
mca_fbtl_base_component_init_query_1_0_0_fn_t fbtlm_init_query;
mca_fbtl_base_component_file_query_1_0_0_fn_t fbtlm_file_query;
mca_fbtl_base_component_file_unquery_1_0_0_fn_t fbtlm_file_unquery;
};
typedef struct mca_fbtl_base_component_2_0_0_t mca_fbtl_base_component_2_0_0_t;
typedef struct mca_fbtl_base_component_2_0_0_t mca_fbtl_base_component_t;
/*
* ***********************************************************************
* ************************ Interface function definitions **************
* These are the typedefbtl for the function pointers to various fbtl
* backend functions which will be used by the various fbtl components
* ***********************************************************************
*/
typedef int (*mca_fbtl_base_module_init_1_0_0_fn_t)
(struct mca_io_ompio_file_t *file);
typedef int (*mca_fbtl_base_module_finalize_1_0_0_fn_t)
(struct mca_io_ompio_file_t *file);
typedef ssize_t (*mca_fbtl_base_module_preadv_fn_t)
(struct mca_io_ompio_file_t *file );
typedef ssize_t (*mca_fbtl_base_module_pwritev_fn_t)
(struct mca_io_ompio_file_t *file );
typedef ssize_t (*mca_fbtl_base_module_ipreadv_fn_t)
(struct mca_io_ompio_file_t *file,
ompi_request_t *request);
typedef ssize_t (*mca_fbtl_base_module_ipwritev_fn_t)
(struct mca_io_ompio_file_t *file,
ompi_request_t *request);
typedef bool (*mca_fbtl_base_module_progress_fn_t)
( struct mca_ompio_request_t *request);
typedef void (*mca_fbtl_base_module_request_free_fn_t)
( struct mca_ompio_request_t *request);
/*
* ***********************************************************************
* *************************** module structure *************************
* ***********************************************************************
*/
struct mca_fbtl_base_module_1_0_0_t {
/*
* Per-file initialization function. This is called only
* on the module which is selected. The finalize corresponding to
* this function is present on the component struct above
*/
mca_fbtl_base_module_init_1_0_0_fn_t fbtl_module_init;
mca_fbtl_base_module_finalize_1_0_0_fn_t fbtl_module_finalize;
/* FBTL function pointers */
mca_fbtl_base_module_preadv_fn_t fbtl_preadv;
mca_fbtl_base_module_ipreadv_fn_t fbtl_ipreadv;
mca_fbtl_base_module_pwritev_fn_t fbtl_pwritev;
mca_fbtl_base_module_ipwritev_fn_t fbtl_ipwritev;
mca_fbtl_base_module_progress_fn_t fbtl_progress;
mca_fbtl_base_module_request_free_fn_t fbtl_request_free;
};
typedef struct mca_fbtl_base_module_1_0_0_t mca_fbtl_base_module_1_0_0_t;
typedef mca_fbtl_base_module_1_0_0_t mca_fbtl_base_module_t;
END_C_DECLS
#endif /* OMPI_MCA_FBTL_H */