Rename all the functions starting with mca_base_modex to mca_pml_base_modex.
Change all the places where they are used to fit the new name. Remove the code to check the remote arch from the PML. We will have a GPR mechanism in ompi_mpi_initialize to do that. This commit was SVN r6750.
Этот коммит содержится в:
родитель
c696603fce
Коммит
8b93cb7661
@ -43,8 +43,8 @@
|
|||||||
* information required by its peers. An example would be the TCP
|
* information required by its peers. An example would be the TCP
|
||||||
* listen port opened by the TCP module for incoming connection
|
* listen port opened by the TCP module for incoming connection
|
||||||
* requests. This information is published to peers via the
|
* requests. This information is published to peers via the
|
||||||
* mca_base_modex_send() interface. Note that peer information is not
|
* mca_pml_base_modex_send() interface. Note that peer information is not
|
||||||
* guaranteed to be available via mca_base_modex_recv() during the
|
* guaranteed to be available via mca_pml_base_modex_recv() during the
|
||||||
* module's init function. However, it will be available during
|
* module's init function. However, it will be available during
|
||||||
* BTL selection (mca_btl_base_add_proc_fn_t()).
|
* BTL selection (mca_btl_base_add_proc_fn_t()).
|
||||||
*
|
*
|
||||||
@ -227,7 +227,7 @@ typedef struct mca_btl_base_header_t mca_btl_base_header_t;
|
|||||||
* the physical devices that are available for the given transport,
|
* the physical devices that are available for the given transport,
|
||||||
* and create a BTL module to represent each device. Any addressing
|
* and create a BTL module to represent each device. Any addressing
|
||||||
* information required by peers to reach the device should be published
|
* information required by peers to reach the device should be published
|
||||||
* during this function via the mca_base_modex_send() interface.
|
* during this function via the mca_pml_base_modex_send() interface.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -295,9 +295,9 @@ typedef int (*mca_btl_base_module_finalize_fn_t)(
|
|||||||
*
|
*
|
||||||
* The mca_btl_base_module_add_procs_fn_t() is called by the PML to
|
* The mca_btl_base_module_add_procs_fn_t() is called by the PML to
|
||||||
* determine the set of BTLs that should be used to reach each process.
|
* determine the set of BTLs that should be used to reach each process.
|
||||||
* Any addressing information exported by the peer via the mca_base_modex_send()
|
* Any addressing information exported by the peer via the mca_pml_base_modex_send()
|
||||||
* function should be available during this call via the corresponding
|
* function should be available during this call via the corresponding
|
||||||
* mca_base_modex_recv() function. The BTL may utilize this information to
|
* mca_pml_base_modex_recv() function. The BTL may utilize this information to
|
||||||
* determine reachability of each peer process.
|
* determine reachability of each peer process.
|
||||||
*
|
*
|
||||||
* For each process that is reachable by the BTL, the bit corresponding to the index
|
* For each process that is reachable by the BTL, the bit corresponding to the index
|
||||||
|
@ -416,7 +416,7 @@ mca_btl_gm_modex_send(void)
|
|||||||
mca_btl_gm_module_t *btl = mca_btl_gm_component.gm_btls[i];
|
mca_btl_gm_module_t *btl = mca_btl_gm_component.gm_btls[i];
|
||||||
addrs[i] = btl->gm_addr;
|
addrs[i] = btl->gm_addr;
|
||||||
}
|
}
|
||||||
rc = mca_base_modex_send (&mca_btl_gm_component.super.btl_version, addrs, size);
|
rc = mca_pml_base_modex_send (&mca_btl_gm_component.super.btl_version, addrs, size);
|
||||||
free (addrs);
|
free (addrs);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
@ -116,13 +116,13 @@ mca_btl_gm_proc_t* mca_btl_gm_proc_create(ompi_proc_t* ompi_proc)
|
|||||||
gm_proc->proc_guid = ompi_proc->proc_name;
|
gm_proc->proc_guid = ompi_proc->proc_name;
|
||||||
|
|
||||||
/* query for the peer address info */
|
/* query for the peer address info */
|
||||||
rc = mca_base_modex_recv(
|
rc = mca_pml_base_modex_recv(
|
||||||
&mca_btl_gm_component.super.btl_version,
|
&mca_btl_gm_component.super.btl_version,
|
||||||
ompi_proc,
|
ompi_proc,
|
||||||
(void*)&gm_proc->proc_addrs,
|
(void*)&gm_proc->proc_addrs,
|
||||||
&size);
|
&size);
|
||||||
if(OMPI_SUCCESS != rc) {
|
if(OMPI_SUCCESS != rc) {
|
||||||
opal_output(0, "[%s:%d] mca_base_modex_recv failed for peer [%d,%d,%d]",
|
opal_output(0, "[%s:%d] mca_pml_base_modex_recv failed for peer [%d,%d,%d]",
|
||||||
__FILE__,__LINE__,ORTE_NAME_ARGS(&ompi_proc->proc_name));
|
__FILE__,__LINE__,ORTE_NAME_ARGS(&ompi_proc->proc_name));
|
||||||
OBJ_RELEASE(gm_proc);
|
OBJ_RELEASE(gm_proc);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -104,11 +104,11 @@ mca_btl_portals_init_compat(mca_btl_portals_component_t *comp)
|
|||||||
"contact info: %u, %u", ntohl(info.nid),
|
"contact info: %u, %u", ntohl(info.nid),
|
||||||
ntohl(info.pid));
|
ntohl(info.pid));
|
||||||
|
|
||||||
ret = mca_base_modex_send(&mca_btl_portals_component.super.btl_version,
|
ret = mca_pml_base_modex_send(&mca_btl_portals_component.super.btl_version,
|
||||||
&info, sizeof(ptl_process_id_t));
|
&info, sizeof(ptl_process_id_t));
|
||||||
if (OMPI_SUCCESS != ret) {
|
if (OMPI_SUCCESS != ret) {
|
||||||
opal_output_verbose(10, mca_btl_portals_component.portals_output,
|
opal_output_verbose(10, mca_btl_portals_component.portals_output,
|
||||||
"mca_base_modex_send failed: %d", ret);
|
"mca_pml_base_modex_send failed: %d", ret);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -185,15 +185,15 @@ mca_btl_portals_add_procs_compat(struct mca_btl_portals_module_t* btl,
|
|||||||
for (i = 0 ; i < nprocs ; ++i) {
|
for (i = 0 ; i < nprocs ; ++i) {
|
||||||
if (proc_self == procs[i]) my_rid = i;
|
if (proc_self == procs[i]) my_rid = i;
|
||||||
|
|
||||||
ret = mca_base_modex_recv(&mca_btl_portals_component.super.btl_version,
|
ret = mca_pml_base_modex_recv(&mca_btl_portals_component.super.btl_version,
|
||||||
procs[i], (void**) &info, &size);
|
procs[i], (void**) &info, &size);
|
||||||
if (OMPI_SUCCESS != ret) {
|
if (OMPI_SUCCESS != ret) {
|
||||||
opal_output_verbose(10, mca_btl_portals_component.portals_output,
|
opal_output_verbose(10, mca_btl_portals_component.portals_output,
|
||||||
"mca_base_modex_recv failed: %d", ret);
|
"mca_pml_base_modex_recv failed: %d", ret);
|
||||||
return ret;
|
return ret;
|
||||||
} else if (sizeof(ptl_process_id_t) != size) {
|
} else if (sizeof(ptl_process_id_t) != size) {
|
||||||
opal_output_verbose(10, mca_btl_portals_component.portals_output,
|
opal_output_verbose(10, mca_btl_portals_component.portals_output,
|
||||||
"mca_base_modex_recv returned size %d, expected %d",
|
"mca_pml_base_modex_recv returned size %d, expected %d",
|
||||||
size, sizeof(ptl_process_id_t));
|
size, sizeof(ptl_process_id_t));
|
||||||
return OMPI_ERROR;
|
return OMPI_ERROR;
|
||||||
}
|
}
|
||||||
|
@ -459,7 +459,7 @@ static int mca_btl_tcp_component_exchange(void)
|
|||||||
addrs[i].addr_port = mca_btl_tcp_component.tcp_listen_port;
|
addrs[i].addr_port = mca_btl_tcp_component.tcp_listen_port;
|
||||||
addrs[i].addr_inuse = 0;
|
addrs[i].addr_inuse = 0;
|
||||||
}
|
}
|
||||||
rc = mca_base_modex_send(&mca_btl_tcp_component.super.btl_version, addrs, size);
|
rc = mca_pml_base_modex_send(&mca_btl_tcp_component.super.btl_version, addrs, size);
|
||||||
free(addrs);
|
free(addrs);
|
||||||
}
|
}
|
||||||
return rc;
|
return rc;
|
||||||
|
@ -99,10 +99,10 @@ mca_btl_tcp_proc_t* mca_btl_tcp_proc_create(ompi_proc_t* ompi_proc)
|
|||||||
OPAL_THREAD_UNLOCK(&mca_btl_tcp_component.tcp_lock);
|
OPAL_THREAD_UNLOCK(&mca_btl_tcp_component.tcp_lock);
|
||||||
|
|
||||||
/* lookup tcp parameters exported by this proc */
|
/* lookup tcp parameters exported by this proc */
|
||||||
rc = mca_base_modex_recv( &mca_btl_tcp_component.super.btl_version,
|
rc = mca_pml_base_modex_recv( &mca_btl_tcp_component.super.btl_version,
|
||||||
ompi_proc,
|
ompi_proc,
|
||||||
(void**)&btl_proc->proc_addrs,
|
(void**)&btl_proc->proc_addrs,
|
||||||
&size);
|
&size );
|
||||||
if(rc != OMPI_SUCCESS) {
|
if(rc != OMPI_SUCCESS) {
|
||||||
BTL_ERROR(("mca_base_modex_recv: failed with return value=%d", rc));
|
BTL_ERROR(("mca_base_modex_recv: failed with return value=%d", rc));
|
||||||
OBJ_RELEASE(btl_proc);
|
OBJ_RELEASE(btl_proc);
|
||||||
|
@ -39,12 +39,12 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* mca_base_modex_module_t
|
* mca_pml_base_modex_module_t
|
||||||
*
|
*
|
||||||
* Data for a specic proc and module.
|
* Data for a specic proc and module.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
struct mca_base_modex_module_t {
|
struct mca_pml_base_modex_module_t {
|
||||||
opal_list_item_t super;
|
opal_list_item_t super;
|
||||||
mca_base_component_t component;
|
mca_base_component_t component;
|
||||||
void *module_data;
|
void *module_data;
|
||||||
@ -52,9 +52,9 @@ struct mca_base_modex_module_t {
|
|||||||
bool module_data_avail;
|
bool module_data_avail;
|
||||||
opal_condition_t module_data_cond;
|
opal_condition_t module_data_cond;
|
||||||
};
|
};
|
||||||
typedef struct mca_base_modex_module_t mca_base_modex_module_t;
|
typedef struct mca_pml_base_modex_module_t mca_pml_base_modex_module_t;
|
||||||
|
|
||||||
static void mca_base_modex_module_construct(mca_base_modex_module_t *module)
|
static void mca_pml_base_modex_module_construct(mca_pml_base_modex_module_t *module)
|
||||||
{
|
{
|
||||||
OBJ_CONSTRUCT(&module->module_data_cond, opal_condition_t);
|
OBJ_CONSTRUCT(&module->module_data_cond, opal_condition_t);
|
||||||
memset(&module->component, 0, sizeof(module->component));
|
memset(&module->component, 0, sizeof(module->component));
|
||||||
@ -63,61 +63,61 @@ static void mca_base_modex_module_construct(mca_base_modex_module_t *module)
|
|||||||
module->module_data_avail = false;
|
module->module_data_avail = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mca_base_modex_module_destruct(mca_base_modex_module_t *module)
|
static void mca_pml_base_modex_module_destruct(mca_pml_base_modex_module_t *module)
|
||||||
{
|
{
|
||||||
OBJ_DESTRUCT(&module->module_data_cond);
|
OBJ_DESTRUCT(&module->module_data_cond);
|
||||||
}
|
}
|
||||||
|
|
||||||
OBJ_CLASS_INSTANCE(
|
OBJ_CLASS_INSTANCE(
|
||||||
mca_base_modex_module_t,
|
mca_pml_base_modex_module_t,
|
||||||
opal_list_item_t,
|
opal_list_item_t,
|
||||||
mca_base_modex_module_construct,
|
mca_pml_base_modex_module_construct,
|
||||||
mca_base_modex_module_destruct
|
mca_pml_base_modex_module_destruct
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* mca_base_modex_t
|
* mca_pml_base_modex_t
|
||||||
*
|
*
|
||||||
* List of modules (mca_base_modex_module_t) for which data has been
|
* List of modules (mca_pml_base_modex_module_t) for which data has been
|
||||||
* received from peers.
|
* received from peers.
|
||||||
*/
|
*/
|
||||||
struct mca_base_modex_t {
|
struct mca_pml_base_modex_t {
|
||||||
opal_object_t super;
|
opal_object_t super;
|
||||||
opal_list_t modex_modules;
|
opal_list_t modex_modules;
|
||||||
};
|
};
|
||||||
typedef struct mca_base_modex_t mca_base_modex_t;
|
typedef struct mca_pml_base_modex_t mca_pml_base_modex_t;
|
||||||
|
|
||||||
static void mca_base_modex_construct(mca_base_modex_t* modex)
|
static void mca_pml_base_modex_construct(mca_pml_base_modex_t* modex)
|
||||||
{
|
{
|
||||||
OBJ_CONSTRUCT(&modex->modex_modules, opal_list_t);
|
OBJ_CONSTRUCT(&modex->modex_modules, opal_list_t);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mca_base_modex_destruct(mca_base_modex_t* modex)
|
static void mca_pml_base_modex_destruct(mca_pml_base_modex_t* modex)
|
||||||
{
|
{
|
||||||
OBJ_DESTRUCT(&modex->modex_modules);
|
OBJ_DESTRUCT(&modex->modex_modules);
|
||||||
}
|
}
|
||||||
|
|
||||||
OBJ_CLASS_INSTANCE(
|
OBJ_CLASS_INSTANCE(
|
||||||
mca_base_modex_t,
|
mca_pml_base_modex_t,
|
||||||
opal_object_t,
|
opal_object_t,
|
||||||
mca_base_modex_construct,
|
mca_pml_base_modex_construct,
|
||||||
mca_base_modex_destruct
|
mca_pml_base_modex_destruct
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* mca_base_modex_subscription_t
|
* mca_pml_base_modex_subscription_t
|
||||||
*
|
*
|
||||||
* Track segments we have subscribed to.
|
* Track segments we have subscribed to.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
struct mca_base_modex_subscription_t {
|
struct mca_pml_base_modex_subscription_t {
|
||||||
opal_list_item_t item;
|
opal_list_item_t item;
|
||||||
orte_jobid_t jobid;
|
orte_jobid_t jobid;
|
||||||
};
|
};
|
||||||
typedef struct mca_base_modex_subscription_t mca_base_modex_subscription_t;
|
typedef struct mca_pml_base_modex_subscription_t mca_pml_base_modex_subscription_t;
|
||||||
|
|
||||||
OBJ_CLASS_INSTANCE(
|
OBJ_CLASS_INSTANCE(
|
||||||
mca_base_modex_subscription_t,
|
mca_pml_base_modex_subscription_t,
|
||||||
opal_list_item_t,
|
opal_list_item_t,
|
||||||
NULL,
|
NULL,
|
||||||
NULL);
|
NULL);
|
||||||
@ -126,29 +126,29 @@ OBJ_CLASS_INSTANCE(
|
|||||||
* Globals to track the list of subscriptions.
|
* Globals to track the list of subscriptions.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static opal_list_t mca_base_modex_subscriptions;
|
static opal_list_t mca_pml_base_modex_subscriptions;
|
||||||
static opal_mutex_t mca_base_modex_lock;
|
static opal_mutex_t mca_pml_base_modex_lock;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize global state.
|
* Initialize global state.
|
||||||
*/
|
*/
|
||||||
int mca_base_modex_init(void)
|
int mca_pml_base_modex_init(void)
|
||||||
{
|
{
|
||||||
OBJ_CONSTRUCT(&mca_base_modex_subscriptions, opal_list_t);
|
OBJ_CONSTRUCT(&mca_pml_base_modex_subscriptions, opal_list_t);
|
||||||
OBJ_CONSTRUCT(&mca_base_modex_lock, opal_mutex_t);
|
OBJ_CONSTRUCT(&mca_pml_base_modex_lock, opal_mutex_t);
|
||||||
return OMPI_SUCCESS;
|
return OMPI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Cleanup global state.
|
* Cleanup global state.
|
||||||
*/
|
*/
|
||||||
int mca_base_modex_finalize(void)
|
int mca_pml_base_modex_finalize(void)
|
||||||
{
|
{
|
||||||
opal_list_item_t *item;
|
opal_list_item_t *item;
|
||||||
while(NULL != (item = opal_list_remove_first(&mca_base_modex_subscriptions)))
|
while(NULL != (item = opal_list_remove_first(&mca_pml_base_modex_subscriptions)))
|
||||||
OBJ_RELEASE(item);
|
OBJ_RELEASE(item);
|
||||||
OBJ_DESTRUCT(&mca_base_modex_subscriptions);
|
OBJ_DESTRUCT(&mca_pml_base_modex_subscriptions);
|
||||||
return OMPI_SUCCESS;
|
return OMPI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -157,14 +157,14 @@ int mca_base_modex_finalize(void)
|
|||||||
* Look to see if there is any data associated with a specified module.
|
* Look to see if there is any data associated with a specified module.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static mca_base_modex_module_t* mca_base_modex_lookup_module(
|
static mca_pml_base_modex_module_t* mca_pml_base_modex_lookup_module(
|
||||||
mca_base_modex_t* modex,
|
mca_pml_base_modex_t* modex,
|
||||||
mca_base_component_t* component)
|
mca_base_component_t* component)
|
||||||
{
|
{
|
||||||
mca_base_modex_module_t* modex_module;
|
mca_pml_base_modex_module_t* modex_module;
|
||||||
for(modex_module = (mca_base_modex_module_t*)opal_list_get_first(&modex->modex_modules);
|
for(modex_module = (mca_pml_base_modex_module_t*)opal_list_get_first(&modex->modex_modules);
|
||||||
modex_module != (mca_base_modex_module_t*)opal_list_get_end(&modex->modex_modules);
|
modex_module != (mca_pml_base_modex_module_t*)opal_list_get_end(&modex->modex_modules);
|
||||||
modex_module = (mca_base_modex_module_t*)opal_list_get_next(modex_module)) {
|
modex_module = (mca_pml_base_modex_module_t*)opal_list_get_next(modex_module)) {
|
||||||
if(mca_base_component_compatible(&modex_module->component, component) == 0) {
|
if(mca_base_component_compatible(&modex_module->component, component) == 0) {
|
||||||
return modex_module;
|
return modex_module;
|
||||||
}
|
}
|
||||||
@ -177,13 +177,13 @@ static mca_base_modex_module_t* mca_base_modex_lookup_module(
|
|||||||
* Create a placeholder for data associated with the specified module.
|
* Create a placeholder for data associated with the specified module.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static mca_base_modex_module_t* mca_base_modex_create_module(
|
static mca_pml_base_modex_module_t* mca_pml_base_modex_create_module(
|
||||||
mca_base_modex_t* modex,
|
mca_pml_base_modex_t* modex,
|
||||||
mca_base_component_t* component)
|
mca_base_component_t* component)
|
||||||
{
|
{
|
||||||
mca_base_modex_module_t* modex_module;
|
mca_pml_base_modex_module_t* modex_module;
|
||||||
if(NULL == (modex_module = mca_base_modex_lookup_module(modex, component))) {
|
if(NULL == (modex_module = mca_pml_base_modex_lookup_module(modex, component))) {
|
||||||
modex_module = OBJ_NEW(mca_base_modex_module_t);
|
modex_module = OBJ_NEW(mca_pml_base_modex_module_t);
|
||||||
if(NULL != modex_module) {
|
if(NULL != modex_module) {
|
||||||
modex_module->component = *component;
|
modex_module->component = *component;
|
||||||
opal_list_append(&modex->modex_modules, (opal_list_item_t*)modex_module);
|
opal_list_append(&modex->modex_modules, (opal_list_item_t*)modex_module);
|
||||||
@ -197,7 +197,7 @@ static mca_base_modex_module_t* mca_base_modex_create_module(
|
|||||||
* Callback for registry notifications.
|
* Callback for registry notifications.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void mca_base_modex_registry_callback(
|
static void mca_pml_base_modex_registry_callback(
|
||||||
orte_gpr_notify_data_t* data,
|
orte_gpr_notify_data_t* data,
|
||||||
void* cbdata)
|
void* cbdata)
|
||||||
{
|
{
|
||||||
@ -209,14 +209,14 @@ static void mca_base_modex_registry_callback(
|
|||||||
size_t new_proc_count = 0;
|
size_t new_proc_count = 0;
|
||||||
char **token;
|
char **token;
|
||||||
orte_process_name_t *proc_name;
|
orte_process_name_t *proc_name;
|
||||||
mca_base_modex_t *modex;
|
mca_pml_base_modex_t *modex;
|
||||||
mca_base_modex_module_t *modex_module;
|
mca_pml_base_modex_module_t *modex_module;
|
||||||
mca_base_component_t component;
|
mca_base_component_t component;
|
||||||
bool isnew = false;
|
bool isnew = false;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
opal_output(0, "[%lu,%lu,%lu] mca_base_modex_registry_callback\n",
|
opal_output(0, "[%lu,%lu,%lu] mca_pml_base_modex_registry_callback\n",
|
||||||
ORTE_NAME_ARGS(orte_process_info.my_name));
|
ORTE_NAME_ARGS(orte_process_info.my_name));
|
||||||
orte_gpr_base_dump_notify_data(data,0);
|
orte_gpr_base_dump_notify_data(data,0);
|
||||||
#endif
|
#endif
|
||||||
@ -256,10 +256,10 @@ orte_gpr_base_dump_notify_data(data,0);
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
OPAL_THREAD_LOCK(&proc->proc_lock);
|
OPAL_THREAD_LOCK(&proc->proc_lock);
|
||||||
if(NULL == (modex = (mca_base_modex_t*)proc->proc_modex)) {
|
if(NULL == (modex = (mca_pml_base_modex_t*)proc->proc_modex)) {
|
||||||
modex = OBJ_NEW(mca_base_modex_t);
|
modex = OBJ_NEW(mca_pml_base_modex_t);
|
||||||
if(NULL == modex) {
|
if(NULL == modex) {
|
||||||
opal_output(0, "mca_base_modex_registry_callback: unable to allocate mca_base_modex_t\n");
|
opal_output(0, "mca_pml_base_modex_registry_callback: unable to allocate mca_pml_base_modex_t\n");
|
||||||
OPAL_THREAD_UNLOCK(&proc->proc_lock);
|
OPAL_THREAD_UNLOCK(&proc->proc_lock);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -337,8 +337,8 @@ orte_gpr_base_dump_notify_data(data,0);
|
|||||||
/*
|
/*
|
||||||
* Lookup the corresponding modex structure
|
* Lookup the corresponding modex structure
|
||||||
*/
|
*/
|
||||||
if(NULL == (modex_module = mca_base_modex_create_module(modex, &component))) {
|
if(NULL == (modex_module = mca_pml_base_modex_create_module(modex, &component))) {
|
||||||
opal_output(0, "mca_base_modex_registry_callback: mca_base_modex_create_module failed\n");
|
opal_output(0, "mca_pml_base_modex_registry_callback: mca_pml_base_modex_create_module failed\n");
|
||||||
OBJ_RELEASE(data);
|
OBJ_RELEASE(data);
|
||||||
OPAL_THREAD_UNLOCK(&proc->proc_lock);
|
OPAL_THREAD_UNLOCK(&proc->proc_lock);
|
||||||
return;
|
return;
|
||||||
@ -348,7 +348,7 @@ orte_gpr_base_dump_notify_data(data,0);
|
|||||||
modex_module->module_data_size = num_bytes;
|
modex_module->module_data_size = num_bytes;
|
||||||
modex_module->module_data_avail = true;
|
modex_module->module_data_avail = true;
|
||||||
#if 0
|
#if 0
|
||||||
opal_output(0, "[%lu,%lu,%lu] mca_base_modex_registry_callback: %s-%s-%d-%d received %d bytes\n",
|
opal_output(0, "[%lu,%lu,%lu] mca_pml_base_modex_registry_callback: %s-%s-%d-%d received %d bytes\n",
|
||||||
ORTE_NAME_ARGS(orte_process_info.my_name),
|
ORTE_NAME_ARGS(orte_process_info.my_name),
|
||||||
component.mca_type_name,
|
component.mca_type_name,
|
||||||
component.mca_component_name,
|
component.mca_component_name,
|
||||||
@ -378,29 +378,29 @@ opal_output(0, "[%lu,%lu,%lu] mca_base_modex_registry_callback: %s-%s-%d-%d rece
|
|||||||
* Make sure we have subscribed to this segment.
|
* Make sure we have subscribed to this segment.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int mca_base_modex_subscribe(orte_process_name_t* name)
|
static int mca_pml_base_modex_subscribe(orte_process_name_t* name)
|
||||||
{
|
{
|
||||||
orte_gpr_trigger_t trig, *trigs;
|
orte_gpr_trigger_t trig, *trigs;
|
||||||
orte_gpr_subscription_t sub, *subs;
|
orte_gpr_subscription_t sub, *subs;
|
||||||
orte_jobid_t jobid;
|
orte_jobid_t jobid;
|
||||||
opal_list_item_t* item;
|
opal_list_item_t* item;
|
||||||
mca_base_modex_subscription_t* subscription;
|
mca_pml_base_modex_subscription_t* subscription;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
/* check for an existing subscription */
|
/* check for an existing subscription */
|
||||||
OPAL_LOCK(&mca_base_modex_lock);
|
OPAL_LOCK(&mca_pml_base_modex_lock);
|
||||||
if (!opal_list_is_empty(&mca_base_modex_subscriptions)) {
|
if (!opal_list_is_empty(&mca_pml_base_modex_subscriptions)) {
|
||||||
for(item = opal_list_get_first(&mca_base_modex_subscriptions);
|
for(item = opal_list_get_first(&mca_pml_base_modex_subscriptions);
|
||||||
item != opal_list_get_end(&mca_base_modex_subscriptions);
|
item != opal_list_get_end(&mca_pml_base_modex_subscriptions);
|
||||||
item = opal_list_get_next(item)) {
|
item = opal_list_get_next(item)) {
|
||||||
subscription = (mca_base_modex_subscription_t*)item;
|
subscription = (mca_pml_base_modex_subscription_t*)item;
|
||||||
if(subscription->jobid == name->jobid) {
|
if(subscription->jobid == name->jobid) {
|
||||||
OPAL_UNLOCK(&mca_base_modex_lock);
|
OPAL_UNLOCK(&mca_pml_base_modex_lock);
|
||||||
return OMPI_SUCCESS;
|
return OMPI_SUCCESS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
OPAL_UNLOCK(&mca_base_modex_lock);
|
OPAL_UNLOCK(&mca_pml_base_modex_lock);
|
||||||
|
|
||||||
/* otherwise - subscribe to get this jobid's ptl contact info */
|
/* otherwise - subscribe to get this jobid's ptl contact info */
|
||||||
if (ORTE_SUCCESS != (rc = orte_ns.get_jobid(&jobid, name))) {
|
if (ORTE_SUCCESS != (rc = orte_ns.get_jobid(&jobid, name))) {
|
||||||
@ -477,7 +477,7 @@ static int mca_base_modex_subscribe(orte_process_name_t* name)
|
|||||||
return ORTE_ERR_OUT_OF_RESOURCE;
|
return ORTE_ERR_OUT_OF_RESOURCE;
|
||||||
}
|
}
|
||||||
/* define the callback function */
|
/* define the callback function */
|
||||||
sub.cbfunc = mca_base_modex_registry_callback;
|
sub.cbfunc = mca_pml_base_modex_registry_callback;
|
||||||
sub.user_tag = NULL;
|
sub.user_tag = NULL;
|
||||||
|
|
||||||
/* setup the trigger definition */
|
/* setup the trigger definition */
|
||||||
@ -498,7 +498,7 @@ static int mca_base_modex_subscribe(orte_process_name_t* name)
|
|||||||
trigs = &trig;
|
trigs = &trig;
|
||||||
rc = orte_gpr.subscribe(1, &subs, 1, &trigs);
|
rc = orte_gpr.subscribe(1, &subs, 1, &trigs);
|
||||||
if(ORTE_SUCCESS != rc) {
|
if(ORTE_SUCCESS != rc) {
|
||||||
opal_output(0, "mca_base_modex_exchange: "
|
opal_output(0, "mca_pml_base_modex_exchange: "
|
||||||
"orte_gpr.subscribe failed with return code %d\n", rc);
|
"orte_gpr.subscribe failed with return code %d\n", rc);
|
||||||
OBJ_DESTRUCT(&sub);
|
OBJ_DESTRUCT(&sub);
|
||||||
OBJ_DESTRUCT(&trig);
|
OBJ_DESTRUCT(&trig);
|
||||||
@ -506,11 +506,11 @@ static int mca_base_modex_subscribe(orte_process_name_t* name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* add this jobid to our list of subscriptions */
|
/* add this jobid to our list of subscriptions */
|
||||||
OPAL_LOCK(&mca_base_modex_lock);
|
OPAL_LOCK(&mca_pml_base_modex_lock);
|
||||||
subscription = OBJ_NEW(mca_base_modex_subscription_t);
|
subscription = OBJ_NEW(mca_pml_base_modex_subscription_t);
|
||||||
subscription->jobid = name->jobid;
|
subscription->jobid = name->jobid;
|
||||||
opal_list_append(&mca_base_modex_subscriptions, &subscription->item);
|
opal_list_append(&mca_pml_base_modex_subscriptions, &subscription->item);
|
||||||
OPAL_UNLOCK(&mca_base_modex_lock);
|
OPAL_UNLOCK(&mca_pml_base_modex_lock);
|
||||||
OBJ_DESTRUCT(&sub);
|
OBJ_DESTRUCT(&sub);
|
||||||
OBJ_DESTRUCT(&trig);
|
OBJ_DESTRUCT(&trig);
|
||||||
return OMPI_SUCCESS;
|
return OMPI_SUCCESS;
|
||||||
@ -524,7 +524,7 @@ static int mca_base_modex_subscribe(orte_process_name_t* name)
|
|||||||
* command.
|
* command.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int mca_base_modex_send(
|
int mca_pml_base_modex_send(
|
||||||
mca_base_component_t *source_component,
|
mca_base_component_t *source_component,
|
||||||
const void *data,
|
const void *data,
|
||||||
size_t size)
|
size_t size)
|
||||||
@ -623,19 +623,19 @@ cleanup:
|
|||||||
* Retreive the data for the specified module from the source process.
|
* Retreive the data for the specified module from the source process.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int mca_base_modex_recv(
|
int mca_pml_base_modex_recv(
|
||||||
mca_base_component_t *component,
|
mca_base_component_t *component,
|
||||||
ompi_proc_t *proc,
|
ompi_proc_t *proc,
|
||||||
void **buffer,
|
void **buffer,
|
||||||
size_t *size)
|
size_t *size)
|
||||||
{
|
{
|
||||||
mca_base_modex_t* modex;
|
mca_pml_base_modex_t* modex;
|
||||||
mca_base_modex_module_t* modex_module;
|
mca_pml_base_modex_module_t* modex_module;
|
||||||
|
|
||||||
/* check the proc for cached data */
|
/* check the proc for cached data */
|
||||||
OPAL_THREAD_LOCK(&proc->proc_lock);
|
OPAL_THREAD_LOCK(&proc->proc_lock);
|
||||||
if(NULL == (modex = (mca_base_modex_t*)proc->proc_modex)) {
|
if(NULL == (modex = (mca_pml_base_modex_t*)proc->proc_modex)) {
|
||||||
modex = OBJ_NEW(mca_base_modex_t);
|
modex = OBJ_NEW(mca_pml_base_modex_t);
|
||||||
if(modex == NULL) {
|
if(modex == NULL) {
|
||||||
OPAL_THREAD_UNLOCK(&proc->proc_lock);
|
OPAL_THREAD_UNLOCK(&proc->proc_lock);
|
||||||
return OMPI_ERR_OUT_OF_RESOURCE;
|
return OMPI_ERR_OUT_OF_RESOURCE;
|
||||||
@ -644,12 +644,12 @@ int mca_base_modex_recv(
|
|||||||
|
|
||||||
/* verify that we have subscribed to this segment */
|
/* verify that we have subscribed to this segment */
|
||||||
OPAL_THREAD_UNLOCK(&proc->proc_lock);
|
OPAL_THREAD_UNLOCK(&proc->proc_lock);
|
||||||
mca_base_modex_subscribe(&proc->proc_name);
|
mca_pml_base_modex_subscribe(&proc->proc_name);
|
||||||
OPAL_THREAD_LOCK(&proc->proc_lock);
|
OPAL_THREAD_LOCK(&proc->proc_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* lookup/create the module */
|
/* lookup/create the module */
|
||||||
if(NULL == (modex_module = mca_base_modex_create_module(modex, component))) {
|
if(NULL == (modex_module = mca_pml_base_modex_create_module(modex, component))) {
|
||||||
OPAL_THREAD_UNLOCK(&proc->proc_lock);
|
OPAL_THREAD_UNLOCK(&proc->proc_lock);
|
||||||
return OMPI_ERR_OUT_OF_RESOURCE;
|
return OMPI_ERR_OUT_OF_RESOURCE;
|
||||||
}
|
}
|
||||||
@ -657,7 +657,7 @@ int mca_base_modex_recv(
|
|||||||
/* wait until data is available */
|
/* wait until data is available */
|
||||||
while(modex_module->module_data_avail == false) {
|
while(modex_module->module_data_avail == false) {
|
||||||
#if 0
|
#if 0
|
||||||
opal_output(0, "[%lu,%lu,%lu] mca_base_modex_registry_callback: waiting for %s-%s-%d-%d\n",
|
opal_output(0, "[%lu,%lu,%lu] mca_pml_base_modex_registry_callback: waiting for %s-%s-%d-%d\n",
|
||||||
ORTE_NAME_ARGS(orte_process_info.my_name),
|
ORTE_NAME_ARGS(orte_process_info.my_name),
|
||||||
component->mca_type_name,
|
component->mca_type_name,
|
||||||
component->mca_component_name,
|
component->mca_component_name,
|
||||||
@ -690,7 +690,7 @@ opal_output(0, "[%lu,%lu,%lu] mca_base_modex_registry_callback: waiting for %s-%
|
|||||||
* to this job.
|
* to this job.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int mca_base_modex_exchange(void)
|
int mca_pml_base_modex_exchange(void)
|
||||||
{
|
{
|
||||||
return mca_base_modex_subscribe(orte_process_info.my_name);
|
return mca_pml_base_modex_subscribe(orte_process_info.my_name);
|
||||||
}
|
}
|
||||||
|
@ -75,7 +75,7 @@ extern "C" {
|
|||||||
* During the selection process, the MCA framework will effectively
|
* During the selection process, the MCA framework will effectively
|
||||||
* perform an "allgather" operation of all modex buffers; every
|
* perform an "allgather" operation of all modex buffers; every
|
||||||
* buffer will be available to every peer process (see
|
* buffer will be available to every peer process (see
|
||||||
* mca_base_modex_recv()).
|
* mca_pml_base_modex_recv()).
|
||||||
*
|
*
|
||||||
* Note that the buffer should not be modified after invoking this
|
* Note that the buffer should not be modified after invoking this
|
||||||
* fuction; the MCA framework may asynchronously send it to a
|
* fuction; the MCA framework may asynchronously send it to a
|
||||||
@ -86,8 +86,8 @@ extern "C" {
|
|||||||
* in some format that peer processes will be able to read it,
|
* in some format that peer processes will be able to read it,
|
||||||
* regardless of pointer sizes or endian bias.
|
* regardless of pointer sizes or endian bias.
|
||||||
*/
|
*/
|
||||||
OMPI_DECLSPEC int mca_base_modex_send(mca_base_component_t *source_component,
|
OMPI_DECLSPEC int mca_pml_base_modex_send(mca_base_component_t *source_component,
|
||||||
const void *buffer, size_t size);
|
const void *buffer, size_t size);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Receive a module-specific buffer from a corresponding MCA module
|
* Receive a module-specific buffer from a corresponding MCA module
|
||||||
@ -108,7 +108,7 @@ OMPI_DECLSPEC int mca_base_modex_send(mca_base_component_t *source_component,
|
|||||||
* @retval OMPI_ERR_OUT_OF_RESOURCE If no corresponding module buffer is found,
|
* @retval OMPI_ERR_OUT_OF_RESOURCE If no corresponding module buffer is found,
|
||||||
* or if an error occurs wil returning the buffer to the caller.
|
* or if an error occurs wil returning the buffer to the caller.
|
||||||
*
|
*
|
||||||
* This is the corresponding "get" call to mca_base_modex_send().
|
* This is the corresponding "get" call to mca_pml_base_modex_send().
|
||||||
* After selection, modules can call this function to receive the
|
* After selection, modules can call this function to receive the
|
||||||
* buffer sent by their corresponding module on the process
|
* buffer sent by their corresponding module on the process
|
||||||
* source_proc.
|
* source_proc.
|
||||||
@ -119,27 +119,27 @@ OMPI_DECLSPEC int mca_base_modex_send(mca_base_component_t *source_component,
|
|||||||
* buffer. size will be filled in with the number of instances in
|
* buffer. size will be filled in with the number of instances in
|
||||||
* the buffer, and count will be filled in with the number of
|
* the buffer, and count will be filled in with the number of
|
||||||
* instances. The total number of bytes in the buffer is (size *
|
* instances. The total number of bytes in the buffer is (size *
|
||||||
* count). See the explanation in mca_base_modex_send() for why the
|
* count). See the explanation in mca_pml_base_modex_send() for why the
|
||||||
* number of bytes is split into two parts.
|
* number of bytes is split into two parts.
|
||||||
*/
|
*/
|
||||||
OMPI_DECLSPEC int mca_base_modex_recv(mca_base_component_t *dest_component,
|
OMPI_DECLSPEC int mca_pml_base_modex_recv(mca_base_component_t *dest_component,
|
||||||
ompi_proc_t *source_proc,
|
ompi_proc_t *source_proc,
|
||||||
void **buffer, size_t *size);
|
void **buffer, size_t *size);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Called to subscribe to registry.
|
* Called to subscribe to registry.
|
||||||
*/
|
*/
|
||||||
OMPI_DECLSPEC int mca_base_modex_exchange(void);
|
OMPI_DECLSPEC int mca_pml_base_modex_exchange(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
OMPI_DECLSPEC int mca_base_modex_init(void);
|
OMPI_DECLSPEC int mca_pml_base_modex_init(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
OMPI_DECLSPEC int mca_base_modex_finalize(void);
|
OMPI_DECLSPEC int mca_pml_base_modex_finalize(void);
|
||||||
|
|
||||||
#if defined(c_plusplus) || defined(__cplusplus)
|
#if defined(c_plusplus) || defined(__cplusplus)
|
||||||
}
|
}
|
||||||
|
@ -58,19 +58,9 @@ static int mca_pml_ob1_add_btls( void );
|
|||||||
int mca_pml_ob1_enable(bool enable)
|
int mca_pml_ob1_enable(bool enable)
|
||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
#if OMPI_ENABLE_HETEROGENEOUS_SUPPORT
|
|
||||||
uint32_t proc_arch;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if( false == enable ) return OMPI_SUCCESS;
|
if( false == enable ) return OMPI_SUCCESS;
|
||||||
|
|
||||||
#if OMPI_ENABLE_HETEROGENEOUS_SUPPORT
|
|
||||||
/* post this processes datatype */
|
|
||||||
proc_arch = ompi_proc_local()->proc_arch;
|
|
||||||
proc_arch = htonl(proc_arch);
|
|
||||||
rc = mca_base_modex_send(&mca_pml_ob1_component.pmlm_version, &proc_arch, sizeof(proc_arch));
|
|
||||||
if (OMPI_SUCCESS != rc) return rc;
|
|
||||||
#endif
|
|
||||||
OBJ_CONSTRUCT(&mca_pml_ob1.lock, opal_mutex_t);
|
OBJ_CONSTRUCT(&mca_pml_ob1.lock, opal_mutex_t);
|
||||||
|
|
||||||
/* requests */
|
/* requests */
|
||||||
@ -263,24 +253,6 @@ int mca_pml_ob1_add_procs(ompi_proc_t** procs, size_t nprocs)
|
|||||||
if(OMPI_SUCCESS != rc)
|
if(OMPI_SUCCESS != rc)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
/* iterate through each of the procs and set the peers architecture */
|
|
||||||
for(p=0; p<nprocs; p++) {
|
|
||||||
#if OMPI_ENABLE_HETEROGENEOUS_SUPPORT
|
|
||||||
uint32_t* proc_arch;
|
|
||||||
size_t size = sizeof(uint32_t);
|
|
||||||
rc = mca_base_modex_recv(&mca_pml_ob1_component.pmlm_version, procs[p],
|
|
||||||
(void**)&proc_arch, &size);
|
|
||||||
if(rc != OMPI_SUCCESS)
|
|
||||||
return rc;
|
|
||||||
if(size != sizeof(uint32_t))
|
|
||||||
return OMPI_ERROR;
|
|
||||||
procs[p]->proc_arch = ntohl(*proc_arch);
|
|
||||||
free(proc_arch);
|
|
||||||
#else
|
|
||||||
procs[p]->proc_arch = ompi_proc_local()->proc_arch;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/* attempt to add all procs to each ob1 */
|
/* attempt to add all procs to each ob1 */
|
||||||
btl_endpoints = (struct mca_btl_base_endpoint_t **)malloc(nprocs * sizeof(struct mca_btl_base_endpoint_t*));
|
btl_endpoints = (struct mca_btl_base_endpoint_t **)malloc(nprocs * sizeof(struct mca_btl_base_endpoint_t*));
|
||||||
for(p_index = 0; p_index < mca_pml_ob1.num_btl_modules; p_index++) {
|
for(p_index = 0; p_index < mca_pml_ob1.num_btl_modules; p_index++) {
|
||||||
|
@ -170,8 +170,7 @@ static int mca_pml_teg_add_ptls(void)
|
|||||||
int mca_pml_teg_enable(bool enable)
|
int mca_pml_teg_enable(bool enable)
|
||||||
{
|
{
|
||||||
size_t i=0;
|
size_t i=0;
|
||||||
int value = enable, rc;
|
int value = enable;
|
||||||
uint32_t proc_arch;
|
|
||||||
|
|
||||||
/* If I'm not selected then prepare for close */
|
/* If I'm not selected then prepare for close */
|
||||||
if( false == enable ) return OMPI_SUCCESS;
|
if( false == enable ) return OMPI_SUCCESS;
|
||||||
@ -185,13 +184,6 @@ int mca_pml_teg_enable(bool enable)
|
|||||||
mca_pml_teg.teg_free_list_inc,
|
mca_pml_teg.teg_free_list_inc,
|
||||||
NULL );
|
NULL );
|
||||||
|
|
||||||
/* I get selected. Publish my information */
|
|
||||||
proc_arch = ompi_proc_local()->proc_arch;
|
|
||||||
proc_arch = htonl(proc_arch);
|
|
||||||
rc = mca_base_modex_send(&mca_pml_teg_component.pmlm_version, &proc_arch, sizeof(proc_arch));
|
|
||||||
if(rc != OMPI_SUCCESS)
|
|
||||||
return rc;
|
|
||||||
|
|
||||||
/* Grab all the PTLs and prepare them */
|
/* Grab all the PTLs and prepare them */
|
||||||
mca_pml_teg_add_ptls();
|
mca_pml_teg_add_ptls();
|
||||||
|
|
||||||
@ -228,20 +220,6 @@ int mca_pml_teg_add_procs(ompi_proc_t** procs, size_t nprocs)
|
|||||||
if(OMPI_SUCCESS != rc)
|
if(OMPI_SUCCESS != rc)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
/* iterate through each of the procs and set the peers architecture */
|
|
||||||
for(p=0; p<nprocs; p++) {
|
|
||||||
uint32_t* proc_arch;
|
|
||||||
size_t size = sizeof(uint32_t);
|
|
||||||
rc = mca_base_modex_recv(&mca_pml_teg_component.pmlm_version, procs[p],
|
|
||||||
(void**)&proc_arch, &size);
|
|
||||||
if(rc != OMPI_SUCCESS)
|
|
||||||
return rc;
|
|
||||||
if(size != sizeof(uint32_t))
|
|
||||||
return OMPI_ERROR;
|
|
||||||
procs[p]->proc_arch = ntohl(*proc_arch);
|
|
||||||
free(proc_arch);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* attempt to add all procs to each ptl */
|
/* attempt to add all procs to each ptl */
|
||||||
ptl_peers = (struct mca_ptl_base_peer_t **)malloc(nprocs * sizeof(struct mca_ptl_base_peer_t*));
|
ptl_peers = (struct mca_ptl_base_peer_t **)malloc(nprocs * sizeof(struct mca_ptl_base_peer_t*));
|
||||||
for(p_index = 0; p_index < mca_pml_teg.teg_num_ptl_modules; p_index++) {
|
for(p_index = 0; p_index < mca_pml_teg.teg_num_ptl_modules; p_index++) {
|
||||||
|
@ -170,8 +170,7 @@ static int mca_pml_uniq_add_ptls( void )
|
|||||||
int mca_pml_uniq_enable( bool enable )
|
int mca_pml_uniq_enable( bool enable )
|
||||||
{
|
{
|
||||||
size_t i;
|
size_t i;
|
||||||
int value = enable, rc;
|
int value = enable;
|
||||||
uint32_t proc_arch;
|
|
||||||
|
|
||||||
/* If I'm not selected then prepare for close */
|
/* If I'm not selected then prepare for close */
|
||||||
if( false == enable ) return OMPI_SUCCESS;
|
if( false == enable ) return OMPI_SUCCESS;
|
||||||
@ -185,14 +184,6 @@ int mca_pml_uniq_enable( bool enable )
|
|||||||
mca_pml_uniq.uniq_free_list_inc,
|
mca_pml_uniq.uniq_free_list_inc,
|
||||||
NULL );
|
NULL );
|
||||||
|
|
||||||
/* I get selected. Publish my informations */
|
|
||||||
proc_arch = ompi_proc_local()->proc_arch;
|
|
||||||
proc_arch = htonl(proc_arch);
|
|
||||||
rc = mca_base_modex_send(&mca_pml_uniq_component.pmlm_version, &proc_arch, sizeof(proc_arch));
|
|
||||||
if( rc != OMPI_SUCCESS )
|
|
||||||
return rc;
|
|
||||||
|
|
||||||
|
|
||||||
/* Grab all the PTLs and prepare them */
|
/* Grab all the PTLs and prepare them */
|
||||||
mca_pml_uniq_add_ptls();
|
mca_pml_uniq_add_ptls();
|
||||||
|
|
||||||
@ -228,20 +219,6 @@ int mca_pml_uniq_add_procs(ompi_proc_t** procs, size_t nprocs)
|
|||||||
if( OMPI_SUCCESS != rc )
|
if( OMPI_SUCCESS != rc )
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
/* iterate through each of the procs and set the peers architecture */
|
|
||||||
for( p = 0; p < nprocs; p++ ) {
|
|
||||||
uint32_t* proc_arch;
|
|
||||||
size_t size = sizeof(uint32_t);
|
|
||||||
rc = mca_base_modex_recv(&mca_pml_uniq_component.pmlm_version, procs[p],
|
|
||||||
(void**)&proc_arch, &size);
|
|
||||||
if(rc != OMPI_SUCCESS)
|
|
||||||
return rc;
|
|
||||||
if(size != sizeof(uint32_t))
|
|
||||||
return OMPI_ERROR;
|
|
||||||
procs[p]->proc_arch = ntohl(*proc_arch);
|
|
||||||
free(proc_arch);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* attempt to add all procs to each ptl */
|
/* attempt to add all procs to each ptl */
|
||||||
ptl_peers = (struct mca_ptl_base_peer_t **)malloc(nprocs * sizeof(struct mca_ptl_base_peer_t*));
|
ptl_peers = (struct mca_ptl_base_peer_t **)malloc(nprocs * sizeof(struct mca_ptl_base_peer_t*));
|
||||||
for( p_index = 0; p_index < mca_pml_uniq.uniq_num_ptl_modules; p_index++ ) {
|
for( p_index = 0; p_index < mca_pml_uniq.uniq_num_ptl_modules; p_index++ ) {
|
||||||
|
@ -223,8 +223,7 @@ mca_ptl_gm_module_store_data_toexchange (void)
|
|||||||
#endif /* GM_API_VERSION > 0x200 */
|
#endif /* GM_API_VERSION > 0x200 */
|
||||||
addrs[i].port_id = ptl->local_addr.port_id;
|
addrs[i].port_id = ptl->local_addr.port_id;
|
||||||
}
|
}
|
||||||
rc = mca_base_modex_send (&mca_ptl_gm_component.super.ptlm_version, addrs,
|
rc = mca_pml_base_modex_send (&mca_ptl_gm_component.super.ptlm_version, addrs, size);
|
||||||
size);
|
|
||||||
free (addrs);
|
free (addrs);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
@ -114,13 +114,13 @@ mca_ptl_gm_proc_create (mca_ptl_gm_module_t * ptl, ompi_proc_t * ompi_proc)
|
|||||||
|
|
||||||
|
|
||||||
/* Extract exposed addresses from remote proc */
|
/* Extract exposed addresses from remote proc */
|
||||||
rc = mca_base_modex_recv (&mca_ptl_gm_component.super.ptlm_version,
|
rc = mca_pml_base_modex_recv (&mca_ptl_gm_component.super.ptlm_version,
|
||||||
ompi_proc, (void **) &ptl_proc->proc_addrs,
|
ompi_proc, (void **) &ptl_proc->proc_addrs,
|
||||||
&size);
|
&size);
|
||||||
|
|
||||||
if (rc != OMPI_SUCCESS) {
|
if (rc != OMPI_SUCCESS) {
|
||||||
opal_output (0,
|
opal_output (0,
|
||||||
"[%s:%d] mca_base_modex_recv failed to recv data \n",
|
"[%s:%d] mca_pml_base_modex_recv failed to recv data \n",
|
||||||
__FILE__, __LINE__);
|
__FILE__, __LINE__);
|
||||||
OBJ_RELEASE (ptl_proc);
|
OBJ_RELEASE (ptl_proc);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -86,7 +86,7 @@ extern int mca_ptl_mx_component_close(void);
|
|||||||
* the physical devices that are available for the given transport,
|
* the physical devices that are available for the given transport,
|
||||||
* and create a PTL instance to represent each device. Any addressing
|
* and create a PTL instance to represent each device. Any addressing
|
||||||
* information required by peers to reach the device should be published
|
* information required by peers to reach the device should be published
|
||||||
* during this function via the mca_base_modex_send() interface.
|
* during this function via the mca_pml_base_modex_send() interface.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -177,9 +177,9 @@ extern int mca_ptl_mx_finalize(
|
|||||||
*
|
*
|
||||||
* The mca_ptl_base_module_add_procs_fn_t() is called by the PML to
|
* The mca_ptl_base_module_add_procs_fn_t() is called by the PML to
|
||||||
* determine the set of PTLs that should be used to reach each process.
|
* determine the set of PTLs that should be used to reach each process.
|
||||||
* Any addressing information exported by the peer via the mca_base_modex_send()
|
* Any addressing information exported by the peer via the mca_pml_base_modex_send()
|
||||||
* function should be available during this call via the corresponding
|
* function should be available during this call via the corresponding
|
||||||
* mca_base_modex_recv() function. The PTL may utilize this information to
|
* mca_pml_base_modex_recv() function. The PTL may utilize this information to
|
||||||
* determine reachability of each peer process.
|
* determine reachability of each peer process.
|
||||||
*
|
*
|
||||||
* For each process that is reachable by the PTL, the bit corresponding to the index
|
* For each process that is reachable by the PTL, the bit corresponding to the index
|
||||||
|
@ -103,8 +103,8 @@ int mca_ptl_mx_module_init(void)
|
|||||||
mx_decompose_endpoint_addr( ptl->mx_endpoint_addr,
|
mx_decompose_endpoint_addr( ptl->mx_endpoint_addr,
|
||||||
&(endpoint_addrs[i].nic_id), &(endpoint_addrs[i].endpoint_id) );
|
&(endpoint_addrs[i].nic_id), &(endpoint_addrs[i].endpoint_id) );
|
||||||
}
|
}
|
||||||
if((rc = mca_base_modex_send( &mca_ptl_mx_component.super.ptlm_version,
|
if((rc = mca_pml_base_modex_send( &mca_ptl_mx_component.super.ptlm_version,
|
||||||
endpoint_addrs, size )) != OMPI_SUCCESS )
|
endpoint_addrs, size )) != OMPI_SUCCESS )
|
||||||
return rc;
|
return rc;
|
||||||
return OMPI_SUCCESS;
|
return OMPI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -104,18 +104,18 @@ mca_ptl_mx_proc_t* mca_ptl_mx_proc_create(ompi_proc_t* ompi_proc)
|
|||||||
OPAL_THREAD_UNLOCK(&mca_ptl_mx_component.mx_lock);
|
OPAL_THREAD_UNLOCK(&mca_ptl_mx_component.mx_lock);
|
||||||
|
|
||||||
/* lookup mx parameters exported by this proc */
|
/* lookup mx parameters exported by this proc */
|
||||||
rc = mca_base_modex_recv(
|
rc = mca_pml_base_modex_recv(
|
||||||
&mca_ptl_mx_component.super.ptlm_version,
|
&mca_ptl_mx_component.super.ptlm_version,
|
||||||
ompi_proc,
|
ompi_proc,
|
||||||
(void**)&ptl_proc->proc_addrs,
|
(void**)&ptl_proc->proc_addrs,
|
||||||
&size);
|
&size);
|
||||||
if(rc != OMPI_SUCCESS) {
|
if(rc != OMPI_SUCCESS) {
|
||||||
opal_output(0, "mca_ptl_mx_proc_create: mca_base_modex_recv: failed with return value=%d", rc);
|
opal_output(0, "mca_ptl_mx_proc_create: mca_pml_base_modex_recv: failed with return value=%d", rc);
|
||||||
OBJ_RELEASE(ptl_proc);
|
OBJ_RELEASE(ptl_proc);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if(0 != (size % sizeof(mca_ptl_mx_endpoint_t))) {
|
if(0 != (size % sizeof(mca_ptl_mx_endpoint_t))) {
|
||||||
opal_output(0, "mca_ptl_mx_proc_create: mca_base_modex_recv: invalid size %d\n", size);
|
opal_output(0, "mca_ptl_mx_proc_create: mca_pml_base_modex_recv: invalid size %d\n", size);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
ptl_proc->proc_addr_count = size / sizeof(mca_ptl_mx_endpoint_t);
|
ptl_proc->proc_addr_count = size / sizeof(mca_ptl_mx_endpoint_t);
|
||||||
|
@ -66,11 +66,11 @@ mca_ptl_portals_init(mca_ptl_portals_component_t *comp)
|
|||||||
"contact info: %u, %u", ntohl(info.nid),
|
"contact info: %u, %u", ntohl(info.nid),
|
||||||
ntohl(info.pid));
|
ntohl(info.pid));
|
||||||
|
|
||||||
ret = mca_base_modex_send(&mca_ptl_portals_component.super.ptlm_version,
|
ret = mca_pml_base_modex_send(&mca_ptl_portals_component.super.ptlm_version,
|
||||||
&info, sizeof(ptl_process_id_t));
|
&info, sizeof(ptl_process_id_t));
|
||||||
if (OMPI_SUCCESS != ret) {
|
if (OMPI_SUCCESS != ret) {
|
||||||
opal_output_verbose(10, mca_ptl_portals_component.portals_output,
|
opal_output_verbose(10, mca_ptl_portals_component.portals_output,
|
||||||
"mca_base_modex_send failed: %d", ret);
|
"mca_pml_base_modex_send failed: %d", ret);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -134,15 +134,15 @@ mca_ptl_portals_add_procs_compat(struct mca_ptl_portals_module_t* ptl,
|
|||||||
for (i = 0 ; i < nprocs ; ++i) {
|
for (i = 0 ; i < nprocs ; ++i) {
|
||||||
if (proc_self == procs[i]) my_rid = i;
|
if (proc_self == procs[i]) my_rid = i;
|
||||||
|
|
||||||
ret = mca_base_modex_recv(&mca_ptl_portals_component.super.ptlm_version,
|
ret = mca_pml_base_modex_recv(&mca_ptl_portals_component.super.ptlm_version,
|
||||||
procs[i], (void**) &info, &size);
|
procs[i], (void**) &info, &size);
|
||||||
if (OMPI_SUCCESS != ret) {
|
if (OMPI_SUCCESS != ret) {
|
||||||
opal_output_verbose(10, mca_ptl_portals_component.portals_output,
|
opal_output_verbose(10, mca_ptl_portals_component.portals_output,
|
||||||
"mca_base_modex_recv failed: %d", ret);
|
"mca_pml_base_modex_recv failed: %d", ret);
|
||||||
return ret;
|
return ret;
|
||||||
} else if (sizeof(ptl_process_id_t) != size) {
|
} else if (sizeof(ptl_process_id_t) != size) {
|
||||||
opal_output_verbose(10, mca_ptl_portals_component.portals_output,
|
opal_output_verbose(10, mca_ptl_portals_component.portals_output,
|
||||||
"mca_base_modex_recv returned size %d, expected %d",
|
"mca_pml_base_modex_recv returned size %d, expected %d",
|
||||||
size, sizeof(ptl_process_id_t));
|
size, sizeof(ptl_process_id_t));
|
||||||
return OMPI_ERROR;
|
return OMPI_ERROR;
|
||||||
}
|
}
|
||||||
|
@ -56,8 +56,8 @@
|
|||||||
* information required by its peers. An example would be the TCP
|
* information required by its peers. An example would be the TCP
|
||||||
* listen port opened by the TCP module for incoming connection
|
* listen port opened by the TCP module for incoming connection
|
||||||
* requests. This information is published to peers via the
|
* requests. This information is published to peers via the
|
||||||
* mca_base_modex_send() interface. Note that peer information is not
|
* mca_pml_base_modex_send() interface. Note that peer information is not
|
||||||
* guaranteed to be available via mca_base_modex_recv() during the
|
* guaranteed to be available via mca_pml_base_modex_recv() during the
|
||||||
* module's init function. However, it will be available during
|
* module's init function. However, it will be available during
|
||||||
* PTL selection (mca_ptl_base_add_proc_fn_t()).
|
* PTL selection (mca_ptl_base_add_proc_fn_t()).
|
||||||
*
|
*
|
||||||
@ -304,7 +304,7 @@ typedef enum {
|
|||||||
* the physical devices that are available for the given transport,
|
* the physical devices that are available for the given transport,
|
||||||
* and create a PTL instance to represent each device. Any addressing
|
* and create a PTL instance to represent each device. Any addressing
|
||||||
* information required by peers to reach the device should be published
|
* information required by peers to reach the device should be published
|
||||||
* during this function via the mca_base_modex_send() interface.
|
* during this function via the mca_pml_base_modex_send() interface.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
typedef struct mca_ptl_base_module_t** (*mca_ptl_base_component_init_fn_t)(
|
typedef struct mca_ptl_base_module_t** (*mca_ptl_base_component_init_fn_t)(
|
||||||
@ -395,9 +395,9 @@ typedef int (*mca_ptl_base_module_finalize_fn_t)(
|
|||||||
*
|
*
|
||||||
* The mca_ptl_base_module_add_procs_fn_t() is called by the PML to
|
* The mca_ptl_base_module_add_procs_fn_t() is called by the PML to
|
||||||
* determine the set of PTLs that should be used to reach each process.
|
* determine the set of PTLs that should be used to reach each process.
|
||||||
* Any addressing information exported by the peer via the mca_base_modex_send()
|
* Any addressing information exported by the peer via the mca_pml_base_modex_send()
|
||||||
* function should be available during this call via the corresponding
|
* function should be available during this call via the corresponding
|
||||||
* mca_base_modex_recv() function. The PTL may utilize this information to
|
* mca_pml_base_modex_recv() function. The PTL may utilize this information to
|
||||||
* determine reachability of each peer process.
|
* determine reachability of each peer process.
|
||||||
*
|
*
|
||||||
* For each process that is reachable by the PTL, the bit corresponding to the index
|
* For each process that is reachable by the PTL, the bit corresponding to the index
|
||||||
|
@ -469,7 +469,7 @@ static int mca_ptl_tcp_component_exchange(void)
|
|||||||
addrs[i].addr_port = mca_ptl_tcp_component.tcp_listen_port;
|
addrs[i].addr_port = mca_ptl_tcp_component.tcp_listen_port;
|
||||||
addrs[i].addr_inuse = 0;
|
addrs[i].addr_inuse = 0;
|
||||||
}
|
}
|
||||||
rc = mca_base_modex_send(&mca_ptl_tcp_component.super.ptlm_version, addrs, size);
|
rc = mca_pml_base_modex_send(&mca_ptl_tcp_component.super.ptlm_version, addrs, size);
|
||||||
free(addrs);
|
free(addrs);
|
||||||
}
|
}
|
||||||
return rc;
|
return rc;
|
||||||
|
@ -107,17 +107,17 @@ mca_ptl_tcp_proc_t* mca_ptl_tcp_proc_create(ompi_proc_t* ompi_proc)
|
|||||||
OPAL_THREAD_UNLOCK(&mca_ptl_tcp_component.tcp_lock);
|
OPAL_THREAD_UNLOCK(&mca_ptl_tcp_component.tcp_lock);
|
||||||
|
|
||||||
/* lookup tcp parameters exported by this proc */
|
/* lookup tcp parameters exported by this proc */
|
||||||
rc = mca_base_modex_recv( &mca_ptl_tcp_component.super.ptlm_version,
|
rc = mca_pml_base_modex_recv( &mca_ptl_tcp_component.super.ptlm_version,
|
||||||
ompi_proc,
|
ompi_proc,
|
||||||
(void**)&ptl_proc->proc_addrs,
|
(void**)&ptl_proc->proc_addrs,
|
||||||
&size);
|
&size);
|
||||||
if(rc != OMPI_SUCCESS) {
|
if(rc != OMPI_SUCCESS) {
|
||||||
opal_output(0, "mca_ptl_tcp_proc_create: mca_base_modex_recv: failed with return value=%d", rc);
|
opal_output(0, "mca_ptl_tcp_proc_create: mca_pml_base_modex_recv: failed with return value=%d", rc);
|
||||||
OBJ_RELEASE(ptl_proc);
|
OBJ_RELEASE(ptl_proc);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if(0 != (size % sizeof(mca_ptl_tcp_addr_t))) {
|
if(0 != (size % sizeof(mca_ptl_tcp_addr_t))) {
|
||||||
opal_output(0, "mca_ptl_tcp_proc_create: mca_base_modex_recv: invalid size %d\n", size);
|
opal_output(0, "mca_ptl_tcp_proc_create: mca_pml_base_modex_recv: invalid size %d\n", size);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
ptl_proc->proc_addr_count = size / sizeof(mca_ptl_tcp_addr_t);
|
ptl_proc->proc_addr_count = size / sizeof(mca_ptl_tcp_addr_t);
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
#include "orte/util/proc_info.h"
|
#include "orte/util/proc_info.h"
|
||||||
#include "ompi/proc/proc.h"
|
#include "ompi/proc/proc.h"
|
||||||
#include "ompi/mca/pml/pml.h"
|
#include "ompi/mca/pml/pml.h"
|
||||||
|
#include "ompi/datatype/dt_arch.h"
|
||||||
#include "ompi/datatype/convertor.h"
|
#include "ompi/datatype/convertor.h"
|
||||||
|
|
||||||
static opal_list_t ompi_proc_list;
|
static opal_list_t ompi_proc_list;
|
||||||
@ -53,9 +54,13 @@ void ompi_proc_construct(ompi_proc_t* proc)
|
|||||||
proc->proc_modex = NULL;
|
proc->proc_modex = NULL;
|
||||||
OBJ_CONSTRUCT(&proc->proc_lock, opal_mutex_t);
|
OBJ_CONSTRUCT(&proc->proc_lock, opal_mutex_t);
|
||||||
|
|
||||||
/* FIX - need to determine remote process architecture */
|
/* By default all processors are supposelly having the same architecture as me. Thus,
|
||||||
proc->proc_convertor = ompi_convertor_create(0, 0);
|
* by default we run in a homogeneous environment. Later when the registry callback
|
||||||
proc->proc_arch = 0;
|
* get fired we will have to set the convertors to the correct architecture.
|
||||||
|
*/
|
||||||
|
proc->proc_convertor = ompi_mpi_local_convertor;
|
||||||
|
OBJ_RETAIN( ompi_mpi_local_convertor );
|
||||||
|
proc->proc_arch = ompi_mpi_local_arch;
|
||||||
|
|
||||||
proc->proc_flags = 0;
|
proc->proc_flags = 0;
|
||||||
|
|
||||||
@ -70,6 +75,11 @@ void ompi_proc_destruct(ompi_proc_t* proc)
|
|||||||
if (proc->proc_modex != NULL) {
|
if (proc->proc_modex != NULL) {
|
||||||
OBJ_RELEASE(proc->proc_modex);
|
OBJ_RELEASE(proc->proc_modex);
|
||||||
}
|
}
|
||||||
|
/* As all the convertors are created with OBJ_NEW we can just call OBJ_RELEASE. All, except
|
||||||
|
* the local convertor, will get destroyed at some point here. If the reference count is correct
|
||||||
|
* the local convertor (who has the reference count increased in the datatype) will not get
|
||||||
|
* destroyed here. It will be destroyed later when the ompi_ddt_finalize is called.
|
||||||
|
*/
|
||||||
OBJ_RELEASE( proc->proc_convertor );
|
OBJ_RELEASE( proc->proc_convertor );
|
||||||
OPAL_THREAD_LOCK(&ompi_proc_lock);
|
OPAL_THREAD_LOCK(&ompi_proc_lock);
|
||||||
opal_list_remove_item(&ompi_proc_list, (opal_list_item_t*)proc);
|
opal_list_remove_item(&ompi_proc_list, (opal_list_item_t*)proc);
|
||||||
@ -94,7 +104,7 @@ int ompi_proc_init(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* find self */
|
/* find self */
|
||||||
for(i=0; i<npeers; i++) {
|
for( i = 0; i < npeers; i++ ) {
|
||||||
ompi_proc_t *proc = OBJ_NEW(ompi_proc_t);
|
ompi_proc_t *proc = OBJ_NEW(ompi_proc_t);
|
||||||
proc->proc_name = peers[i];
|
proc->proc_name = peers[i];
|
||||||
if( i == self ) {
|
if( i == self ) {
|
||||||
@ -113,6 +123,10 @@ int ompi_proc_init(void)
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Here we have to add to the GPR the information about the current architecture.
|
||||||
|
* TODO: george
|
||||||
|
*/
|
||||||
|
|
||||||
return OMPI_SUCCESS;
|
return OMPI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -395,6 +409,11 @@ static int setup_registry_callback(void)
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Here we have to add another key to the registry to be able to get the information
|
||||||
|
* about the remote architectures.
|
||||||
|
* TODO: George.
|
||||||
|
*/
|
||||||
|
|
||||||
sub.cbfunc = callback;
|
sub.cbfunc = callback;
|
||||||
sub.user_tag = NULL;
|
sub.user_tag = NULL;
|
||||||
|
|
||||||
@ -485,6 +504,10 @@ static void callback(orte_gpr_notify_data_t *data, void *cbdata)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* And finally here we have to retrieve the remote architectures and create the convertors
|
||||||
|
* attached to the remote processors depending on the remote architecture.
|
||||||
|
* TODO: George.
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
/* unlock */
|
/* unlock */
|
||||||
|
@ -178,7 +178,7 @@ int ompi_mpi_finalize(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* free module exchange resources */
|
/* free module exchange resources */
|
||||||
if (OMPI_SUCCESS != (ret = mca_base_modex_finalize())) {
|
if (OMPI_SUCCESS != (ret = mca_pml_base_modex_finalize())) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -186,8 +186,8 @@ int ompi_mpi_init(int argc, char **argv, int requested, int *provided)
|
|||||||
|
|
||||||
/* Initialize module exchange */
|
/* Initialize module exchange */
|
||||||
|
|
||||||
if (OMPI_SUCCESS != (ret = mca_base_modex_init())) {
|
if (OMPI_SUCCESS != (ret = mca_pml_base_modex_init())) {
|
||||||
error = "mca_base_modex_init() failed";
|
error = "mca_pml_base_modex_init() failed";
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -284,8 +284,8 @@ int ompi_mpi_init(int argc, char **argv, int requested, int *provided)
|
|||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
/* do module exchange */
|
/* do module exchange */
|
||||||
if (OMPI_SUCCESS != (ret = mca_base_modex_exchange())) {
|
if (OMPI_SUCCESS != (ret = mca_pml_base_modex_exchange())) {
|
||||||
error = "ompi_base_modex_exchange() failed";
|
error = "mca_pml_base_modex_exchange() failed";
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user