1
1
openmpi/ompi/win/win.h
Brian Barrett 0d507ad970 * Fix a bunch of checks for proper access / exposure epochs
* Add implementation of Post/Wait/Start/Complete synchronization

This commit was SVN r8848.
2006-01-31 02:44:08 +00:00

122 строки
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-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
/* flags */
#define OMPI_WIN_FREED 0x00000001
#define OMPI_WIN_INVALID 0x00000002
#define OMPI_WIN_NO_LOCKS 0x00000004
/* mode */
#define OMPI_WIN_ACCESS_EPOCH 0x00000001
#define OMPI_WIN_EXPOSE_EPOCH 0x00000002
#define OMPI_WIN_POSTED 0x00000010
#define OMPI_WIN_STARTED 0x00000020
#define OMPI_WIN_LOCK_ACCESS 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;
uint16_t w_flags;
uint16_t w_mode;
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;
}
static inline bool ompi_win_allow_locks(ompi_win_t *win) {
return (0 != (win->w_flags & OMPI_WIN_NO_LOCKS));
}
#if defined(c_plusplus) || defined(__cplusplus)
}
#endif
#endif