1
1
openmpi/ompi/mca/io/base/base.h
2016-11-22 15:03:20 -08:00

176 строки
7.3 KiB
C

/*
* 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 Cisco Systems, Inc. All rights reserved.
* Copyright (c) 2015 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
*
* $HEADER$
*/
/**
* @file
*
* MCA io base framework public interface functions.
*/
#ifndef MCA_IO_BASE_H
#define MCA_IO_BASE_H
#include "ompi_config.h"
#include "mpi.h"
#include "opal/class/opal_list.h"
#include "opal/mca/base/base.h"
#include "ompi/mca/io/io.h"
/*
* Global functions for MCA overall io open and close
*/
BEGIN_C_DECLS
/**
* Create list of available io components.
*
* @param allow_multi_user_threads Will be set to true if any of the
* available components will allow multiple user threads
* @param have_hidden_threads Will be set to true if any of the
* available components have hidden threads.
*
* @retval OMPI_SUCCESS If one or more io components are available.
* @retval OMPI_ERROR If no io components are found to be available.
*
* This function is invoked during ompi_mpi_init() to query all
* successfully opened io components and create a list of all
* available io components.
*
* This function traverses the (internal global variable)
* mca_io_base_components_opened list and queries each component to see
* if it ever might want to run during this MPI process. It creates
* another internal global variable list named
* mca_io_base_components_available, consisting of a list of components
* that are available for selection when file handles are created.
* This variable should \em only be used by other io base
* functions -- it is not considered a public interface member --
* and is only mentioned here for completeness.
*/
OMPI_DECLSPEC int mca_io_base_find_available(bool enable_progress_threads,
bool enable_mpi_threads);
/**
* Select an available component for a new file handle.
*
* @param file File Handle that the component will be selected for.
* @param preferred The component that is preferred for this
* file handle (or NULL).
*
* @return OMPI_SUCCESS Upon success.
* @return OMPI_ERROR Upon failure.
*
* Note that the types of the parameters have "struct" in them
* (e.g., ompi_file_t" vs. a plain "ompi_file_t") to
* avoid an include file loop. All similar types (e.g., "struct
* ompi_file_t *", "ompi_file_t *", and "MPI_File")
* are all typedef'ed to be the same, so the fact that we use struct
* here in the prototype is ok.
*
* This function is invoked when a new file handle is created and a
* io component needs to be selected for it. It should be invoked
* near the end of the file handle creation process such that
* almost everything else is functional on the file handle.
*
* This function invokes the selection process for io components,
* which works as follows:
*
* - If the \em preferred argument is NULL, the selection set is
* defined to be all the components found during
* mca_io_base_find_available().
* - If \em preferred is not NULL, then the selection set is just
* that component. (However, in this mode, we may make 2 passes
* through the selection process -- more on this below).
* - All components in the selection set are queried to see if they
* want to run with that file handle. All components that want to
* run are ranked by their priority and the highest priority
* component is selected. All non-selected components have their
* "unquery" function invoked to let them know that they were not
* selected.
* - The selected module will have its "init" function
* invoked to let it know that it was selected. All unselected
* components will have their file_unselect function invoked.
* - If we fall through this entire process and no component is
* selected \em and the \em preferred argument is not NULL, then
* run the entire process again as if the \em preferred argument
* was NULL (i.e., use the entire available set of components).
*
* At the end of this process, we'll either have a single
* component/module pair that is selected and initialized for the
* file handle, or no component was selected and an error is
* returned up the stack.
*/
OMPI_DECLSPEC int mca_io_base_file_select(struct ompi_file_t *file,
mca_base_component_t *preferred);
/**
* Finalize a io component on a specific file handle.
*
* @param file The file handle that is being destroyed.
*
* @retval OMPI_SUCCESS Always.
*
* Note that the type of the parameter is only a "struct
* ompi_file_t" (vs. a plain "ompi_file_t") to avoid an include file
* loop. The types "struct ompi_file_t *", "ompi_file_t *", and
* "MPI_File" are all typedef'ed to be the same, so the fact that we
* use struct here in the prototype is ok.
*
* This function is invoked near the beginning of the destruction of
* a file handle. It finalizes the io component associated with the
* file handle (e.g., allowing the component to clean up and free any
* resources allocated for that file handle). Note that similar to
* mca_io_base_select(), as result of this function, other
* file handles may also be destroyed.
*/
OMPI_DECLSPEC int mca_io_base_file_unselect(struct ompi_file_t *file);
/**
* Invoke a back-end component to delete a file.
*
* @param filename Name of the file to be deleted
* @param info MPI_Info for additional information
*
* This function is a bit different than most other MPI_File_*
* functions -- it does not take a MPI_File handle. As such, this
* function function invokes appropriate delete handlers on all
* the available components (rather than some pre-selected
* module). See io.h for details.
*/
OMPI_DECLSPEC int mca_io_base_delete(const char *filename,
struct ompi_info_t *info);
OMPI_DECLSPEC int mca_io_base_register_datarep(const char *,
MPI_Datarep_conversion_function*,
MPI_Datarep_conversion_function*,
MPI_Datarep_extent_function*,
void*);
/*
* Globals
*/
OMPI_DECLSPEC extern mca_base_framework_t ompi_io_base_framework;
END_C_DECLS
#endif /* MCA_BASE_IO_H */