1
1

* checkpoint so Galen can move the bmi tree

This commit was SVN r6216.
Этот коммит содержится в:
Brian Barrett 2005-06-29 21:52:00 +00:00
родитель 212183ba5c
Коммит 611e09d749
6 изменённых файлов: 174 добавлений и 154 удалений

Просмотреть файл

@ -151,58 +151,54 @@ AC_DEFUN([MCA_CONFIGURE_STUB],[
[Use the Red Storm implementation or Portals])
AM_CONDITIONAL([BMI_PORTALS_REDSTORM], [test "$BMI_PORTALS_REDSTORM" = "1"])
MCA_BMI_PORTALS_CONFIG_VAL([frag-table-id],
[BMI_PORTALS_FRAG_TABLE_ID], [1],
[Portals table id to use for fragment receive queue])
#
# User configuration options
#
MCA_BMI_PORTALS_CONFIG_VAL([send-table-id],
[BMI_PORTALS_SEND_TABLE_ID], [1],
[Portals table id to use for send/recv ])
MCA_BMI_PORTALS_CONFIG_VAL([retrans-table-id],
[BMI_PORTALS_RETRANS_TABLE_ID], [2],
[Portals table id to use for retransmit request queue])
MCA_BMI_PORTALS_CONFIG_VAL([rdma-table-id],
[BMI_PORTALS_RDMA_TABLE_ID], [2],
[Portals table id to use for RDMA request])
MCA_BMI_PORTALS_CONFIG_VAL([debug-level],
[BMI_PORTALS_DEFAULT_DEBUG_LEVEL], [100],
[debugging level for portals bmi])
MCA_BMI_PORTALS_CONFIG_VAL([request-cache-size],
[BMI_PORTALS_DEFAULT_REQUEST_CACHE_SIZE], [1],
[request cache size for portals bmi])
MCA_BMI_PORTALS_CONFIG_VAL([eager-limit],
[BMI_PORTALS_DEFAULT_EAGER_LIMIT], [16384],
[max size for eager sends])
MCA_BMI_PORTALS_CONFIG_VAL([first-frag-size],
[BMI_PORTALS_DEFAULT_FIRST_FRAG_SIZE], [16384],
[first frag size for portals bmi])
MCA_BMI_PORTALS_CONFIG_VAL([min-send-size],
[BMI_PORTALS_DEFAULT_MIN_SEND_SIZE], [0],
[min size for send fragments])
MCA_BMI_PORTALS_CONFIG_VAL([max-send-size],
[BMI_PORTALS_DEFAULT_MAX_SEND_SIZE], [0],
[max size for send fragments])
MCA_BMI_PORTALS_CONFIG_VAL([first-frag-num-entries],
[BMI_PORTALS_DEFAULT_FIRST_FRAG_NUM_ENTRIES], [3],
[number of memory descriptors for first fragments])
MCA_BMI_PORTALS_CONFIG_VAL([first-frag-entry-size],
[BMI_PORTALS_DEFAULT_FIRST_FRAG_ENTRY_SIZE], [2098152],
[size of memory associeted with first fag md])
MCA_BMI_PORTALS_CONFIG_VAL([min-rdma-size],
[BMI_PORTALS_DEFAULT_MIN_RDMA_SIZE], [0],
[min size for rdma fragments])
MCA_BMI_PORTALS_CONFIG_VAL([max-rdma-size],
[BMI_PORTALS_DEFAULT_MAX_RDMA_SIZE], [0],
[max size for rdma fragments])
MCA_BMI_PORTALS_CONFIG_VAL([max-sends-pending],
[BMI_PORTALS_MAX_SENDS_PENDING], [0],
[max number of sends pending at any time])
MCA_BMI_PORTALS_CONFIG_VAL([recv-queue-size],
[BMI_PORTALS_DEFAULT_RECV_QUEUE_SIZE], [512],
[size of event queue for receiving frags])
MCA_BMI_PORTALS_CONFIG_VAL([send-queue-size],
[BMI_PORTALS_DEFAULT_SEND_QUEUE_SIZE], [128],
[Max number of send fragmenst pending])
MCA_BMI_PORTALS_CONFIG_VAL([rndv-frag-min-size],
[BMI_PORTALS_DEFAULT_RNDV_FRAG_MIN_SIZE], [0],
[minimum size of rndv fragments])
MCA_BMI_PORTALS_CONFIG_VAL([rndv-frag-max-size],
[BMI_PORTALS_DEFAULT_RNDV_FRAG_MAX_SIZE], [16384],
[maximum size of rndv fragments])
MCA_BMI_PORTALS_CONFIG_VAL([free-list-init-num],
[BMI_PORTALS_DEFAULT_FREE_LIST_INIT_NUM], [256],
[BMI_PORTALS_DEFAULT_FREE_LIST_INIT_NUM], [8],
[starting size of free lists])
MCA_BMI_PORTALS_CONFIG_VAL([free-list-max-num],
[BMI_PORTALS_DEFAULT_FREE_LIST_MAX_NUM], [-1],
[BMI_PORTALS_DEFAULT_FREE_LIST_MAX_NUM], [1024],
[maximum size of free lists])
MCA_BMI_PORTALS_CONFIG_VAL([free-list-inc-num],
[BMI_PORTALS_DEFAULT_FREE_LIST_inc_NUM], [256],
[BMI_PORTALS_DEFAULT_FREE_LIST_INC_NUM], [32],
[grow size for freelists])
#

Просмотреть файл

@ -33,12 +33,16 @@
mca_bmi_portals_module_t mca_bmi_portals_module = {
{
&mca_bmi_portals_component.super,
/* NOTE: All these default values are set in
component_open() */
0, /* max size of first frag */
0, /* min send size */
0, /* max send size */
0, /* min rdma size */
0, /* max rdma size */
60, /* exclusivity - higher than sm, lower than self */
0, /* exclusivity - higher than sm, lower than self */
0, /* latency */
0, /* bandwidth */
0, /* bmi flags */
@ -130,11 +134,13 @@ mca_bmi_portals_finalize(struct mca_bmi_base_module_t *bmi_base)
(struct mca_bmi_portals_module_t *) bmi_base;
int ret;
ret = PtlNIFini(bmi->ni_handle);
if (PTL_OK != ret) {
ompi_output_verbose(20, mca_bmi_portals_component.portals_output,
"PtlNIFini returned %d", ret);
return OMPI_ERROR;
if (PTL_INVALID_HANDLE != bmi->ni_handle) {
ret = PtlNIFini(bmi->ni_handle);
if (PTL_OK != ret) {
ompi_output_verbose(20, mca_bmi_portals_component.portals_output,
"PtlNIFini returned %d", ret);
return OMPI_ERROR;
}
}
ompi_output_verbose(20, mca_bmi_portals_component.portals_output,
"successfully finalized module");

Просмотреть файл

@ -58,7 +58,7 @@ struct mca_bmi_portals_component_t {
locked */
uint32_t portals_num_modules;
/* List of currently available modules */
struct mca_bmi_portals_module_t **portals_modules;
struct mca_bmi_portals_module_t *portals_modules;
/* initial size of free lists */
int portals_free_list_init_num;
@ -75,35 +75,40 @@ typedef struct mca_bmi_portals_component_t mca_bmi_portals_component_t;
#define MCA_BMI_PORTALS_EQ_RECV 0
#define MCA_BMI_PORTALS_EQ_SEND 1
#define MCA_BMI_PORTALS_EQ_SIZE 2
#define MCA_BMI_PORTALS_EQ_RDMA 2
#define MCA_BMI_PORTALS_EQ_SIZE 3
struct mca_bmi_portals_module_t {
/* base BMI module interface */
mca_bmi_base_module_t super;
/* number of mds for first frags */
int first_frag_num_entries;
/* registered callbacks */
mca_bmi_base_recv_reg_t portals_reg[MCA_BMI_TAG_MAX];
ompi_free_list_t portals_frag_eager;
ompi_free_list_t portals_frag_max;
ompi_free_list_t portals_frag_user;
/* number of mds for recv frags */
int portals_recv_mds_num;
/* size of each md for first frags */
int first_frag_entry_size;
int portals_recv_mds_size;
/* size for event queue */
int eq_sizes[MCA_BMI_PORTALS_EQ_SIZE];
int portals_eq_sizes[MCA_BMI_PORTALS_EQ_SIZE];
/* frag receive event queue */
ptl_handle_eq_t eq_handles[MCA_BMI_PORTALS_EQ_SIZE];
ptl_handle_eq_t portals_eq_handles[MCA_BMI_PORTALS_EQ_SIZE];
/* our portals network interface */
ptl_handle_ni_t ni_handle;
ptl_handle_ni_t portals_ni_h;
/* the limits returned from PtlNIInit for interface */
ptl_ni_limits_t limits;
ptl_ni_limits_t portals_ni_limits;
/* number of dropped messages */
ptl_sr_value_t dropped;
ptl_sr_value_t portals_sr_dropped;
};
typedef struct mca_bmi_portals_module_t mca_bmi_portals_module_t;
struct mca_bmi_portals_recv_frag_t;
struct mca_bmi_portals_send_frag_t;
/*
* Component functions (bmi_portals_component.c)
*/

Просмотреть файл

@ -44,7 +44,7 @@ int
mca_bmi_portals_init(mca_bmi_portals_component_t *comp)
{
ptl_process_id_t info;
int ret;
int ret, i;
#if 0
FILE *output;
char *tmp;
@ -77,19 +77,23 @@ mca_bmi_portals_init(mca_bmi_portals_component_t *comp)
/* with the utcp interface, only ever one "NIC" */
comp->portals_num_modules = 1;
comp->portals_modules = calloc(comp->portals_num_modules,
sizeof(mca_bmi_portals_module_t *));
sizeof(mca_bmi_portals_module_t));
if (NULL == comp->portals_modules) {
ompi_output_verbose(10, mca_bmi_portals_component.portals_output,
"malloc failed in mca_bmi_portals_init");
return OMPI_ERR_TEMP_OUT_OF_RESOURCE;
}
comp->portals_modules[0] = malloc(sizeof(mca_bmi_portals_module_t));
if (NULL == comp->portals_modules) {
ompi_output_verbose(10, mca_bmi_portals_component.portals_output,
"malloc failed in mca_bmi_portals_init");
return OMPI_ERR_TEMP_OUT_OF_RESOURCE;
/* compat code is responsible for copying over the "template" onto
each module instance. The calling code will create the free
lists and the like - we're only responsible for the
Portals-specific entries */
for (i = 0 ; i < comp->portals_num_modules ; ++i) {
memcpy(&(comp->portals_modules[i]),
mca_bmi_portals_module,
sizeof(mca_bmi_portals_module_t));
/* the defaults are good enough for the rest */
}
*(comp->portals_modules[0]) = mca_bmi_portals_module;
return OMPI_SUCCESS;
}
@ -201,8 +205,8 @@ mca_bmi_portals_add_procs_compat(struct mca_bmi_portals_module_t* bmi,
ret = PtlNIInit(PTL_IFACE_DEFAULT, /* interface to initialize */
PTL_PID_ANY, /* let library assign our pid */
NULL, /* no desired limits */
&(bmi->limits), /* save our limits somewhere */
&(bmi->ni_handle) /* our interface handle */
&(bmi->portals_limits), /* save our limits somewhere */
&(bmi->portals_ni_h) /* our interface handle */
);
if (PTL_OK != ret) {
ompi_output_verbose(10, mca_bmi_portals_component.portals_output,
@ -211,7 +215,7 @@ mca_bmi_portals_add_procs_compat(struct mca_bmi_portals_module_t* bmi,
}
#if 0
PtlNIDebug(bmi->ni_handle, PTL_DBG_ALL | PTL_DBG_NI_ALL);
PtlNIDebug(bmi->portals_ni_h, PTL_DBG_ALL | PTL_DBG_NI_ALL);
#endif
return OMPI_SUCCESS;

Просмотреть файл

@ -107,84 +107,77 @@ mca_bmi_portals_component_open(void)
{
int i;
/* initialize state */
/* initialize component state */
mca_bmi_portals_component.portals_num_modules = 0;
mca_bmi_portals_component.portals_modules = NULL;
/* initialize objects */
#if 0
OBJ_CONSTRUCT(&mca_bmi_portals_component.portals_send_frags,
ompi_free_list_t);
OBJ_CONSTRUCT(&mca_bmi_portals_component.portals_recv_frags,
ompi_free_list_t);
OBJ_CONSTRUCT(&mca_bmi_portals_component.portals_pending_acks,
ompi_list_t);
#endif
OBJ_CONSTRUCT(&mca_bmi_portals_component.portals_lock,
/* initalize component objects */
OBJ_CONSTRUCT(&mca_bmi_portals_component.portals_lock,
ompi_mutex_t);
/* register portals module parameters */
#if BMI_PORTALS_UTCP
mca_bmi_portals_component.portals_ifname =
/* get configured state for component */
#if PTL_PORTALS_UTCP
mca_ptl_portals_component.portals_ifname =
param_register_string("ifname", "eth0");
#endif
portals_output_stream.lds_verbose_level =
param_register_int("debug_level",
BMI_PORTALS_DEFAULT_DEBUG_LEVEL);
PTL_PORTALS_DEFAULT_DEBUG_LEVEL);
mca_bmi_portals_component.portals_free_list_init_num =
mca_ptl_portals_component.portals_free_list_init_num =
param_register_int("free_list_init_num",
BMI_PORTALS_DEFAULT_FREE_LIST_INIT_NUM);
mca_bmi_portals_component.portals_free_list_max_num =
PTL_PORTALS_DEFAULT_FREE_LIST_INIT_NUM);
mca_ptl_portals_component.portals_free_list_max_num =
param_register_int("free_list_max_num",
BMI_PORTALS_DEFAULT_FREE_LIST_MAX_NUM);
mca_bmi_portals_component.portals_free_list_inc_num =
PTL_PORTALS_DEFAULT_FREE_LIST_MAX_NUM);
mca_ptl_portals_component.portals_free_list_inc_num =
param_register_int("free_list_inc_num",
BMI_PORTALS_DEFAULT_FREE_LIST_inc_NUM);
PTL_PORTALS_DEFAULT_FREE_LIST_INC_NUM);
#if 0
mca_bmi_portals_module.super.bmi_cache_size =
param_register_int("request_cache_size",
BMI_PORTALS_DEFAULT_REQUEST_CACHE_SIZE);
mca_bmi_portals_module.super.bmi_first_frag_size =
param_register_int("first_frag_size",
BMI_PORTALS_DEFAULT_FIRST_FRAG_SIZE);
mca_bmi_portals_module.super.bmi_min_frag_size =
param_register_int("rndv_frag_min_size",
BMI_PORTALS_DEFAULT_RNDV_FRAG_MIN_SIZE);
mca_bmi_portals_module.super.bmi_max_frag_size =
param_register_int("rndv_frag_max_size",
BMI_PORTALS_DEFAULT_RNDV_FRAG_MAX_SIZE);
#endif
mca_bmi_portals_module.first_frag_num_entries =
param_register_int("first_frag_num_entries",
BMI_PORTALS_DEFAULT_FIRST_FRAG_NUM_ENTRIES);
mca_bmi_portals_module.first_frag_entry_size =
param_register_int("first_frag_entry_size",
BMI_PORTALS_DEFAULT_FIRST_FRAG_ENTRY_SIZE);
mca_bmi_portals_module.eq_sizes[MCA_BMI_PORTALS_EQ_RECV] =
param_register_int("recv_queue_size",
BMI_PORTALS_DEFAULT_RECV_QUEUE_SIZE);
mca_bmi_portals_module.eq_sizes[MCA_BMI_PORTALS_EQ_SEND] =
(param_register_int("send_queue_size",
BMI_PORTALS_DEFAULT_SEND_QUEUE_SIZE)) * 3;
/* finish with objects */
/* start up debugging output */
asprintf(&(portals_output_stream.lds_prefix),
"bmi: portals (%5d): ", getpid());
mca_bmi_portals_component.portals_output =
ompi_output_open(&portals_output_stream);
/* fill in remaining defaults for module data */
for (i = 0 ; i < MCA_BMI_PORTALS_EQ_SIZE ; ++i) {
mca_bmi_portals_module.eq_handles[i] = PTL_EQ_NONE;
/* fill default module state */
mca_ptl_portals_module.super.bmi_flags = MCA_BMI_FLAGS_RDMA;
for (i = 0 ; i < MCA_BMI_TAG_MAX ; ++i) {
mca_bmi_portals_module.portals_reg = NULL;
}
mca_bmi_portals_module.ni_handle = PTL_INVALID_HANDLE;
mca_bmi_portals_module.dropped = 0;
for (i = 0 ; i < MCA_BMI_PORTALS_EQ_SIZE ; ++i) {
mca_bmi_portals_module.portals_eq_sizes[i] = 0;
mca_bmi_portals_module.portals_eq_handles[i] = PTL_EQ_NONE;
}
mca_bmi_portals_module.portals_ni_h = PTL_INVALID_HANDLE;
mca_bmi_portals_module.portals_sr_dropped = 0;
/* get configured state for default module */
mca_ptl_portals_module.super.bmi_eager_limit =
param_register_int("eager_limit",
PTL_PORTALS_DEFAULT_EAGER_LIMIT);
mca_ptl_portals_module.super.bmi_min_send_size =
param_register_int("min_send_size",
PTL_PORTALS_DEFAULT_MIN_SEND_SIZE);
mca_ptl_portals_module.super.bmi_max_send_size =
param_register_int("max_send_size",
PTL_PORTALS_DEFAULT_MAX_SEND_SIZE);
mca_ptl_portals_module.super.bmi_min_rdma_size =
param_register_int("min_rdma_size",
PTL_PORTALS_DEFAULT_MIN_RDMA_SIZE);
mca_ptl_portals_module.super.bmi_max_rdma_size =
param_register_int("max_rdma_size",
PTL_PORTALS_DEFAULT_MAX_RDMA_SIZE);
mca_ptl_portals_module.super.bmi_exclusivity =
param_register_int("exclusivity", 60);
mca_ptl_portals_module.super.bmi_latency =
param_register_int("latency", 0);
mca_ptl_portals_module.super.bmi_bandwidth =
param_register_int("bandwidth", 1000);
return OMPI_SUCCESS;
}
@ -193,16 +186,12 @@ mca_bmi_portals_component_open(void)
int
mca_bmi_portals_component_close(void)
{
/* print out debugging if anything is pending */
/* BWB - implement me, if possible */
/* release resources */
OBJ_DESTRUCT(&mca_bmi_portals_component.portals_lock);
#if 0
OBJ_DESTRUCT(&mca_bmi_portals_component.portals_recv_frags);
OBJ_DESTRUCT(&mca_bmi_portals_component.portals_pending_acks);
OBJ_DESTRUCT(&mca_bmi_portals_component.portals_lock);
#endif
if (NULL != mca_bmi_portals_component.portals_modules) {
free(mca_bmi_portals_component.portals_modules);
}
if (NULL != mca_bmi_portals_component.portals_ifname) {
free(mca_bmi_portals_component.portals_ifname);
@ -226,6 +215,8 @@ mca_bmi_portals_component_init(int *num_bmis,
{
mca_bmi_base_module_t** bmis;
*num_bmis = 0;
int i;
uint32_t length;
if (enable_progress_threads) {
ompi_output_verbose(20, mca_bmi_portals_component.portals_output,
@ -233,24 +224,6 @@ mca_bmi_portals_component_init(int *num_bmis,
return NULL;
}
#if 0
ompi_free_list_init(&mca_bmi_portals_component.portals_send_frags,
sizeof(mca_bmi_portals_send_frag_t),
OBJ_CLASS(mca_bmi_portals_send_frag_t),
mca_bmi_portals_component.portals_free_list_init_num,
mca_bmi_portals_component.portals_free_list_max_num,
mca_bmi_portals_component.portals_free_list_inc_num,
NULL); /* use default allocator */
ompi_free_list_init(&mca_bmi_portals_component.portals_recv_frags,
sizeof(mca_bmi_portals_recv_frag_t),
OBJ_CLASS(mca_bmi_portals_recv_frag_t),
mca_bmi_portals_component.portals_free_list_init_num,
mca_bmi_portals_component.portals_free_list_max_num,
mca_bmi_portals_component.portals_free_list_inc_num,
NULL); /* use default allocator */
#endif
/* initialize portals bmi. note that this is in the compat code because
it's fairly non-portable between implementations */
if (OMPI_SUCCESS != mca_bmi_portals_init(&mca_bmi_portals_component)) {
@ -259,15 +232,42 @@ mca_bmi_portals_component_init(int *num_bmis,
return NULL;
}
/* return array of bmis */
bmis = malloc(mca_bmi_portals_component.portals_num_modules *
sizeof(mca_bmi_base_module_t*));
if (NULL == bmis) return NULL;
bmis = malloc(mca_bmi_portals_component.portals_num_modules *
sizeof(mca_bmi_portals_module_t*));
for (i = 0 ; i < mca_bmi_portals_component.portals_num_modules ; ++i) {
bmis[i] = (mca_bmi_base_module_t*)
(mca_bmi_portals_component.portals_modules + i);
memcpy(bmis,
mca_bmi_portals_component.portals_modules,
mca_bmi_portals_component.portals_num_modules *
sizeof(mca_bmi_base_module_t*));
OBJ_CONSTRUCT(&bmis[i]->portals_frag_eager, ompi_free_list_t);
OBJ_CONSTRUCT(&bmis[i]->portals_frag_max, ompi_free_list_t);
OBJ_CONSTRUCT(&bmis[i]->portals_frag_user, ompi_free_list_t);
/* eager frags */
ompi_free_list_init(&(bmis[i].send_free_eager),
sizeof(mca_bmi_portals_bmis[i].super.bmi_eager_limit,
OBJ_CLASS(mca_bmi_portals_send_frag_eager_t),
mca_bmi_portals_component.portals_free_list_init_num,
mca_bmi_portals_component.portals_free_list_max_num,
mca_bmi_portals_component.portals_free_list_inc_num);
/* send frags */
ompi_free_list_init(&(bmis[i].send_free_eager),
bmis[i].super.bmi_max_sender_size,
OBJ_CLASS(mca_bmi_portals_send_frag_eager_t),
mca_bmi_portals_component.portals_free_list_init_num,
mca_bmi_portals_component.portals_free_list_max_num,
mca_bmi_portals_component.portals_free_list_inc_num);
/* user frags */
ompi_free_list_init(&(bmis[i].send_free_eager),
bmis[i].super.bmi_max_sender_size,
OBJ_CLASS(mca_bmi_portals_send_frag_eager_t),
mca_bmi_portals_component.portals_free_list_init_num,
mca_bmi_portals_component.portals_free_list_max_num,
mca_bmi_portals_component.portals_free_list_inc_num);
}
*num_bmis = mca_bmi_portals_component.portals_num_modules;
ompi_output_verbose(20, mca_bmi_portals_component.portals_output,

Просмотреть файл

@ -36,6 +36,7 @@ mca_bmi_portals_register(struct mca_bmi_base_module_t* bmi,
mca_bmi_base_module_recv_cb_fn_t cbfunc,
void* cbdata)
{
printf("bmi register\n");
return OMPI_SUCCESS;
}
@ -44,6 +45,8 @@ mca_bmi_base_descriptor_t*
mca_bmi_portals_alloc(struct mca_bmi_base_module_t* bmi,
size_t size)
{
printf("bmi alloc: %d\n", size);
return NULL;
}
@ -51,6 +54,7 @@ int
mca_bmi_portals_free(struct mca_bmi_base_module_t* bmi,
mca_bmi_base_descriptor_t* des)
{
printf("bmi free\n");
return OMPI_ERR_NOT_IMPLEMENTED;
}
@ -63,6 +67,7 @@ mca_bmi_portals_prepare_src(struct mca_bmi_base_module_t* bmi,
size_t reserve,
size_t* size)
{
printf("bmi prepare src\n");
return NULL;
}
@ -75,6 +80,7 @@ mca_bmi_portals_prepare_dst(struct mca_bmi_base_module_t* bmi,
size_t reserve,
size_t* size)
{
printf("bmi prepare dst\n");
return NULL;
}
@ -85,6 +91,7 @@ mca_bmi_portals_send(struct mca_bmi_base_module_t* bmi,
struct mca_bmi_base_descriptor_t* descriptor,
mca_bmi_base_tag_t tag)
{
printf("bmi send\n");
return OMPI_ERR_NOT_IMPLEMENTED;
}
@ -94,6 +101,7 @@ mca_bmi_portals_put(struct mca_bmi_base_module_t* bmi,
struct mca_bmi_base_endpoint_t* bmi_peer,
struct mca_bmi_base_descriptor_t* decriptor)
{
printf("bmi put\n");
return OMPI_ERR_NOT_IMPLEMENTED;
}
@ -103,5 +111,6 @@ mca_bmi_portals_get(struct mca_bmi_base_module_t* bmi,
struct mca_bmi_base_endpoint_t* bmi_peer,
struct mca_bmi_base_descriptor_t* decriptor)
{
printf("bmi get\n");
return OMPI_ERR_NOT_IMPLEMENTED;
}