
complete, but stable enough that it will have no impact on general development, so into the trunk it goes. Changes in this commit include: - Remove the --with option for disabling MPI-2 onesided support. It complicated code, and has no real reason for existing - add a framework osc (OneSided Communication) for encapsulating all the MPI-2 onesided functionality - Modify the MPI interface functions for the MPI-2 onesided chapter to properly call the underlying framework and do the required error checking - Created an osc component pt2pt, which is layered over the BML/BTL for communication (although it also uses the PML for long message transfers). Currently, all support functions, all communication functions (Put, Get, Accumulate), and the Fence synchronization function are implemented. The PWSC active synchronization functions and Lock/Unlock passive synchronization functions are still not implemented This commit was SVN r8836.
113 строки
3.2 KiB
C
113 строки
3.2 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$
|
|
*
|
|
* Additional copyrights may follow
|
|
*
|
|
* $HEADER$
|
|
*/
|
|
|
|
#ifndef OMPI_WIN_H
|
|
#define OMPI_WIN_H
|
|
|
|
#include "ompi_config.h"
|
|
#include "mpi.h"
|
|
|
|
#include "opal/class/opal_object.h"
|
|
#include "opal/class/opal_hash_table.h"
|
|
#include "ompi/errhandler/errhandler.h"
|
|
#include "ompi/info/info.h"
|
|
#include "ompi/communicator/communicator.h"
|
|
#include "ompi/group/group.h"
|
|
#include "ompi/mca/osc/osc.h"
|
|
|
|
#if defined(c_plusplus) || defined(__cplusplus)
|
|
extern "C" {
|
|
#endif
|
|
|
|
#define OMPI_WIN_FREED 0x00000001
|
|
#define OMPI_WIN_INVALID 0x00000002
|
|
#define OMPI_WIN_NO_LOCKS 0x00000004
|
|
#define OMPI_WIN_ACCESS_EPOCH 0x00000008
|
|
#define OMPI_WIN_EXPOSE_EPOCH 0x00000010
|
|
#define OMPI_WIN_POSTED 0x00000020
|
|
#define OMPI_WIN_STARTED 0x00000040
|
|
|
|
struct ompi_win_t {
|
|
opal_object_t w_base;
|
|
|
|
opal_mutex_t w_lock;
|
|
|
|
char w_name[MPI_MAX_OBJECT_NAME];
|
|
|
|
ompi_group_t *w_group;
|
|
|
|
/* Attributes */
|
|
opal_hash_table_t *w_keyhash;
|
|
|
|
/* index in Fortran <-> C translation array */
|
|
int w_f_to_c_index;
|
|
|
|
/* Error handling. This field does not have the "w_" prefix so that
|
|
the OMPI_ERRHDL_* macros can find it, regardless of whether it's a
|
|
comm, window, or file. */
|
|
ompi_errhandler_t *error_handler;
|
|
ompi_errhandler_type_t errhandler_type;
|
|
|
|
/* displacement factor */
|
|
int w_disp_unit;
|
|
|
|
uint32_t w_flags;
|
|
|
|
void *w_baseptr;
|
|
long w_size;
|
|
|
|
/* one sided interface */
|
|
ompi_osc_base_module_t *w_osc_module;
|
|
};
|
|
typedef struct ompi_win_t ompi_win_t;
|
|
|
|
OMPI_DECLSPEC OBJ_CLASS_DECLARATION(ompi_win_t);
|
|
|
|
int ompi_win_init(void);
|
|
int ompi_win_finalize(void);
|
|
|
|
int ompi_win_create(void *base, long size, int disp_unit,
|
|
ompi_communicator_t *comm, ompi_info_t *info,
|
|
ompi_win_t **newwin);
|
|
|
|
int ompi_win_free(ompi_win_t *win);
|
|
|
|
int ompi_win_set_name(ompi_win_t *win, char *win_name);
|
|
int ompi_win_get_name(ompi_win_t *win, char *win_name, int *length);
|
|
|
|
int ompi_win_group(ompi_win_t *win, ompi_group_t **group);
|
|
|
|
static inline int ompi_win_invalid(ompi_win_t *win) {
|
|
if (NULL == win || (OMPI_WIN_INVALID & win->w_flags)) return true;
|
|
return false;
|
|
}
|
|
|
|
static inline int ompi_win_peer_invalid(ompi_win_t *win, int peer) {
|
|
if (win->w_group->grp_proc_count <= peer) return true;
|
|
return false;
|
|
}
|
|
|
|
static inline int ompi_win_rank(ompi_win_t *win) {
|
|
return win->w_group->grp_my_rank;
|
|
}
|
|
|
|
#if defined(c_plusplus) || defined(__cplusplus)
|
|
}
|
|
#endif
|
|
#endif
|