1
1
Nathan Hjelm 9d4a26f47d Update OMPI frameworks to use the MCA framework system.
Notes:
  - This commit also eliminates the need for an available components list in use
    in several frameworks. None of the code in question was making use of the
    priority field of the priority component list item so these extra lists were
    removed.
  - Cleaned up selection code in several frameworks to sort lists using opal_list_sort.
  - Cleans up the ompi/orte-info functions. Expose the functions that construct the
    list of params so they can be used elsewhere.

patches for mtl/portals4 from brian

missed a few output variables in openib

This commit was SVN r28241.
2013-03-27 21:17:31 +00:00

100 строки
3.4 KiB
C

/*
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
* University Research and Technology
* Corporation. All rights reserved.
* Copyright (c) 2004-2006 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) 2006 Sun Microsystems, Inc. All rights reserved.
* Copyright (c) 2008-2009 Cisco Systems, Inc. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
*
* $HEADER$
*/
/**
* @file
*
* This framework is for the selection and assignment of "op" modules
* to intrinsic MPI_Op objects. This framework is not used for
* user-defined MPI_Op objects.
*
* The main idea is to let intrinsic MPI_Ops be able to utilize
* functions from multiple op modules, based on the (datatype,
* operation) tuple. Hence, it is possible for specialized hardware
* to be utilized for datatypes and operations that are supported.
*/
#ifndef MCA_OP_BASE_H
#define MCA_OP_BASE_H
#include "ompi_config.h"
#include "opal/mca/base/base.h"
#include "ompi/mca/op/op.h"
BEGIN_C_DECLS
typedef struct ompi_op_base_selected_module_t {
opal_list_item_t super;
ompi_op_base_component_t *op_component;
ompi_op_base_module_t *op_module;
} ompi_op_base_selected_module_t;
/**
* Find all available op components.
*/
OMPI_DECLSPEC int ompi_op_base_find_available(bool enable_progress_threads,
bool enable_mpi_threads);
/**
* Select an available component for a new intrinsice MPI_Op (this
* function is *not* used for user-defined MPI_Ops!).
*
* @param op MPI_Op that the component will be selected for.
*
* @return OMPI_SUCCESS Upon success.
* @return OMPI_ERROR Upon failure.
*
* Note that the types of the parameters have "struct" in them (e.g.,
* ompi_op_t" vs. a plain "ompi_op_t") to avoid an include file loop.
* All similar types (e.g., "struct ompi_op_t *", "ompi_op_t *", and
* "MPI_Op") 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 MPI_Op is created and
* op components need to be selected for it.
*/
int ompi_op_base_op_select(struct ompi_op_t *op);
/**
* Finalize all op modules on a specific (intrinsic) MPI_Op.
*
* @param op The op that is being destroyed.
*
* @retval OMPI_SUCCESS Always.
*
* Note that the type of the parameter is only a "struct ompi_op_t"
* (vs. a plain "ompi_op_t") to avoid an include file loop. The types
* "struct ompi_op_t *", "ompi_op_t *", and "MPI_Op" 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
* an op. It finalizes the op modules associated with the MPI_Op
* (e.g., allowing the component to clean up and free any resources
* allocated for that MPI_Op) by calling the destructor on each
* object.
*/
OMPI_DECLSPEC int ompi_op_base_op_unselect(struct ompi_op_t *op);
OMPI_DECLSPEC extern mca_base_framework_t ompi_op_base_framework;
END_C_DECLS
#endif /* MCA_OP_BASE_H */