1
1
openmpi/oshmem/mca/spml/yoda/spml_yoda.h
Mike Dubman 6fb0dbdab5 OSHMEM: port 6 patches from git mirror to svn
Subject: [PATCH 1/6] OSHMEM: mkey refactoring
mkey can be either shared memory style id or it can be
arbitrary byte string
removed hack that used spml_context to store generic keys
coding style fixes

Subject: [PATCH 2/6] OSHMEM: added support of MXM 2.0 rc transport
coding style fixed, typos, check error condition

Subject: [PATCH 3/6] OSHMEM: mxm2.0: remove PTL_SELF
There is no need to have special case for 'self'
connection in mxm 2.0. It also solves the problem
of passing incorrect mkey when doing put/get to
self

Subject: [PATCH 4/6] OSHMEM: fixes mxm fadd
give a dummy buffer if doing atomic add

Subject: [PATCH 5/6] OSHMEM: mxm2.0: do not use MXM_REQ_FLAG_SEND_LAZY
Subject: [PATCH 6/6] OSHMEM: remove unused include, causes compilation fail on ubuntu

Refs trac:3763

This commit was SVN r30129.

The following Trac tickets were found above:
  Ticket 3763 --> https://svn.open-mpi.org/trac/ompi/ticket/3763
2014-01-07 11:56:36 +00:00

135 строки
3.9 KiB
C

/*
* Copyright (c) 2013 Mellanox Technologies, Inc.
* All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
*
* $HEADER$
*/
/**
* @file
*/
#ifndef MCA_SPML_YODA_H
#define MCA_SPML_YODA_H
#include "oshmem_config.h"
#include "oshmem/request/request.h"
#include "oshmem/mca/spml/spml.h"
#include "oshmem/mca/spml/base/spml_base_putreq.h"
#include "oshmem/proc/proc.h"
#include "oshmem/mca/spml/base/spml_base_request.h"
#include "oshmem/mca/spml/base/spml_base_getreq.h"
#include "orte/runtime/orte_globals.h"
#include "ompi/mca/bml/base/base.h"
#include "ompi/mca/btl/btl.h"
#include "ompi/class/ompi_free_list.h"
/* Turn ON/OFF debug output from build (default 0) */
#ifndef OSHMEM_WAIT_COMPLETION_DEBUG
#define OSHMEM_WAIT_COMPLETION_DEBUG 0
#endif
#define MCA_SPML_YODA_PUT (MCA_BTL_TAG_USR + 0x0A)
#define MCA_SPML_YODA_GET (MCA_BTL_TAG_USR + 0x0B)
#define MCA_SPML_YODA_GET_RESPONSE (MCA_BTL_TAG_USR + 0x0C)
#define SPML_YODA_SEND_CONTEXT_SIZE (sizeof(size_t) + 3*sizeof(void*) + sizeof(int))
BEGIN_C_DECLS
/**
* YODA SPML module
*/
enum {
YODA_BTL_UNKNOWN = -1,
YODA_BTL_SELF = 0,
YODA_BTL_SM,
YODA_BTL_OPENIB,
YODA_BTL_MAX
};
struct yoda_btl {
mca_btl_base_module_t *btl;
int btl_type;
int use_cnt;
};
struct mca_spml_yoda_t {
mca_spml_base_module_t super;
int priority;
int free_list_num; /* initial size of free list */
int free_list_max; /* maximum size of free list */
int free_list_inc; /* number of elements to grow free list */
/* lock queue access */
opal_mutex_t lock;
/* free lists */
ompi_free_list_t rdma_frags;
/* number of outstanding put requests */
int32_t n_active_puts;
int32_t n_active_gets;
bool enabled;
struct yoda_btl *btl_type_map;
int n_btls;
};
typedef struct mca_spml_yoda_t mca_spml_yoda_module_t;
struct mca_spml_yoda_context_t {
mca_btl_base_descriptor_t* btl_src_descriptor;
mca_mpool_base_registration_t* registration;
};
typedef struct mca_spml_yoda_context_t mca_spml_yoda_context_t;
extern mca_spml_yoda_module_t mca_spml_yoda;
extern int mca_spml_yoda_enable(bool enable);
extern int mca_spml_yoda_get(void* dst_addr,
size_t size,
void* src_addr,
int src);
extern int mca_spml_yoda_put(void* dst_addr,
size_t size,
void* src_addr,
int dst);
extern int mca_spml_yoda_put_nb(void* dst_addr,
size_t size,
void* src_addr,
int dst,
void **handle);
extern int mca_spml_yoda_recv(void* buf, size_t size, int src);
extern int mca_spml_yoda_send(void* buf,
size_t size,
int dst,
mca_spml_base_put_mode_t mode);
extern mca_spml_mkey_t *mca_spml_yoda_register(void* addr,
size_t size,
uint64_t shmid,
int *count);
extern int mca_spml_yoda_deregister(mca_spml_mkey_t *mkeys);
extern int mca_spml_yoda_add_procs(oshmem_proc_t** procs,
size_t nprocs);
extern int mca_spml_yoda_del_procs(oshmem_proc_t** procs,
size_t nprocs);
extern int mca_spml_yoda_fence(void);
extern void* mca_spml_yoda_get_remote_context(void*);
extern void mca_spml_yoda_set_remote_context(void**, void*);
extern int mca_spml_yoda_get_remote_context_size(void*);
extern void mca_spml_yoda_set_remote_context_size(void**, int);
extern int mca_spml_yoda_wait_gets(void);
#if OSHMEM_WAIT_COMPLETION_DEBUG == 1
extern void condition_dbg_init(void);
extern void condition_dbg_finalize(void);
#endif
END_C_DECLS
#endif