2a1cf2ae81
Use it to send the arch. This commit was SVN r21677.
140 строки
3.7 KiB
C
140 строки
3.7 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 (c) 2006-2007 Los Alamos National Security, LLC. All rights
|
|
* reserved.
|
|
* $COPYRIGHT$
|
|
*
|
|
* Additional copyrights may follow
|
|
*
|
|
* $HEADER$
|
|
*/
|
|
|
|
#include "ompi_config.h"
|
|
#include "ompi/constants.h"
|
|
|
|
#include "opal/mca/mca.h"
|
|
#include "opal/mca/base/base.h"
|
|
#include "opal/dss/dss.h"
|
|
|
|
#include "orte/mca/grpcomm/grpcomm.h"
|
|
|
|
#include "orte/util/name_fns.h"
|
|
#include "orte/runtime/orte_globals.h"
|
|
|
|
#include "ompi/proc/proc.h"
|
|
#include "ompi/runtime/ompi_module_exchange.h"
|
|
|
|
|
|
int
|
|
ompi_modex_send(mca_base_component_t * source_component,
|
|
const void *data, size_t size)
|
|
{
|
|
int rc;
|
|
char * name = mca_base_component_to_string(source_component);
|
|
|
|
if(NULL == name) {
|
|
return OMPI_ERR_OUT_OF_RESOURCE;
|
|
}
|
|
|
|
rc = orte_grpcomm.set_proc_attr(name, data, size);
|
|
free(name);
|
|
return rc;
|
|
}
|
|
|
|
|
|
int
|
|
ompi_modex_recv(mca_base_component_t * component,
|
|
ompi_proc_t * proc,
|
|
void **buffer,
|
|
size_t * size)
|
|
{
|
|
int rc;
|
|
char * name = mca_base_component_to_string(component);
|
|
|
|
if(NULL == name) {
|
|
return OMPI_ERR_OUT_OF_RESOURCE;
|
|
}
|
|
|
|
rc = orte_grpcomm.get_proc_attr(proc->proc_name, name, buffer, size);
|
|
free(name);
|
|
return rc;
|
|
}
|
|
|
|
int
|
|
ompi_modex_send_string(const char* key,
|
|
const void *buffer, size_t size)
|
|
{
|
|
return orte_grpcomm.set_proc_attr(key, buffer, size);
|
|
}
|
|
|
|
|
|
int
|
|
ompi_modex_recv_string(const char* key,
|
|
struct ompi_proc_t *source_proc,
|
|
void **buffer, size_t *size)
|
|
{
|
|
return orte_grpcomm.get_proc_attr(source_proc->proc_name, key, buffer, size);
|
|
}
|
|
|
|
int
|
|
ompi_modex_send_key_value(const char* key,
|
|
const void *value,
|
|
opal_data_type_t dtype)
|
|
{
|
|
int rc;
|
|
opal_buffer_t buf;
|
|
opal_byte_object_t bo;
|
|
|
|
OBJ_CONSTRUCT(&buf, opal_buffer_t);
|
|
if (OPAL_SUCCESS != (rc = opal_dss.pack(&buf, value, 1, dtype))) {
|
|
OBJ_DESTRUCT(&buf);
|
|
return rc;
|
|
}
|
|
if (OPAL_SUCCESS != (rc = opal_dss.unload(&buf, (void**)&bo.bytes, &bo.size))) {
|
|
OBJ_DESTRUCT(&buf);
|
|
return rc;
|
|
}
|
|
OBJ_DESTRUCT(&buf);
|
|
|
|
return orte_grpcomm.set_proc_attr(key, bo.bytes, bo.size);
|
|
}
|
|
|
|
|
|
int
|
|
ompi_modex_recv_key_value(const char* key,
|
|
struct ompi_proc_t *source_proc,
|
|
void *value, opal_data_type_t dtype)
|
|
{
|
|
int rc;
|
|
opal_buffer_t buf;
|
|
opal_byte_object_t bo;
|
|
int32_t n;
|
|
size_t bsize;
|
|
|
|
bo.bytes = NULL;
|
|
bo.size = 0;
|
|
if (OMPI_SUCCESS != (rc = orte_grpcomm.get_proc_attr(source_proc->proc_name, key,
|
|
(void**)&bo.bytes, &bsize))) {
|
|
return rc;
|
|
}
|
|
bo.size = bsize;
|
|
OBJ_CONSTRUCT(&buf, opal_buffer_t);
|
|
if (OMPI_SUCCESS != (rc = opal_dss.load(&buf, bo.bytes, bo.size))) {
|
|
OBJ_DESTRUCT(&buf);
|
|
return rc;
|
|
}
|
|
n = 1;
|
|
rc = opal_dss.unpack(&buf, value, &n, dtype);
|
|
OBJ_DESTRUCT(&buf);
|
|
return rc;
|
|
}
|