2005-09-13 02:28:23 +04:00
|
|
|
/*
|
2005-11-05 22:57:48 +03:00
|
|
|
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
|
|
|
* University Research and Technology
|
|
|
|
* Corporation. All rights reserved.
|
2006-08-24 20:38:08 +04:00
|
|
|
* Copyright (c) 2004-2006 The University of Tennessee and The University
|
2005-11-05 22:57:48 +03:00
|
|
|
* of Tennessee Research Foundation. All rights
|
|
|
|
* reserved.
|
2005-09-13 02:28:23 +04:00
|
|
|
* 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$
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
|
|
|
|
|
|
|
#include "ompi_config.h"
|
2006-02-12 04:33:29 +03:00
|
|
|
#include "ompi/constants.h"
|
2005-10-04 03:29:26 +04:00
|
|
|
#include "orte/util/proc_info.h"
|
2006-02-12 04:33:29 +03:00
|
|
|
#include "ompi/mca/pml/pml.h"
|
|
|
|
#include "ompi/mca/btl/btl.h"
|
|
|
|
#include "ompi/mca/bml/bml.h"
|
|
|
|
#include "orte/mca/ns/ns_types.h"
|
|
|
|
#include "ompi/mca/mpool/mpool.h"
|
2005-09-13 02:28:23 +04:00
|
|
|
#include "pml_ob1.h"
|
|
|
|
#include "pml_ob1_rdma.h"
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Check to see if memory is registered or can be registered. Build a
|
|
|
|
* set of registrations on the request.
|
|
|
|
*/
|
|
|
|
|
|
|
|
size_t mca_pml_ob1_rdma_btls(
|
|
|
|
mca_bml_base_endpoint_t* bml_endpoint,
|
|
|
|
unsigned char* base,
|
|
|
|
size_t size,
|
|
|
|
mca_pml_ob1_rdma_btl_t* rdma_btls)
|
|
|
|
{
|
|
|
|
size_t num_btls = mca_bml_base_btl_array_get_size(&bml_endpoint->btl_rdma);
|
2005-10-04 03:29:26 +04:00
|
|
|
size_t num_btls_used = 0;
|
2005-09-13 02:28:23 +04:00
|
|
|
size_t n;
|
2005-12-22 19:32:12 +03:00
|
|
|
|
2005-09-13 02:28:23 +04:00
|
|
|
/* shortcut when there are no rdma capable btls */
|
|
|
|
if(num_btls == 0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* check to see if memory is registered */
|
2006-12-17 15:26:41 +03:00
|
|
|
for(n = 0; n < num_btls && num_btls_used < MCA_PML_OB1_MAX_RDMA_PER_REQUEST;
|
|
|
|
n++) {
|
|
|
|
mca_bml_base_btl_t* bml_btl =
|
|
|
|
mca_bml_base_btl_array_get_index(&bml_endpoint->btl_rdma, n);
|
|
|
|
mca_mpool_base_registration_t* reg = NULL;
|
|
|
|
mca_mpool_base_module_t *btl_mpool = bml_btl->btl_mpool;
|
2005-09-13 02:28:23 +04:00
|
|
|
|
|
|
|
/* btl is rdma capable and registration is not required */
|
|
|
|
if(NULL == btl_mpool) {
|
2006-12-17 15:26:41 +03:00
|
|
|
reg = NULL;
|
|
|
|
} else {
|
|
|
|
if(!mca_pml_ob1.leave_pinned) {
|
|
|
|
/* look through existing registrations */
|
|
|
|
btl_mpool->mpool_find(btl_mpool, base, size, ®);
|
|
|
|
} else {
|
|
|
|
/* register the memory */
|
|
|
|
btl_mpool->mpool_register(btl_mpool, base, size, 0, ®);
|
2005-09-13 02:28:23 +04:00
|
|
|
}
|
2006-12-17 15:26:41 +03:00
|
|
|
|
|
|
|
if(NULL == reg)
|
|
|
|
bml_btl = NULL; /* skip it */
|
2005-09-13 02:28:23 +04:00
|
|
|
}
|
|
|
|
|
2006-12-17 15:26:41 +03:00
|
|
|
if(bml_btl != NULL) {
|
2005-09-13 02:28:23 +04:00
|
|
|
rdma_btls[num_btls_used].bml_btl = bml_btl;
|
2006-12-17 15:26:41 +03:00
|
|
|
rdma_btls[num_btls_used].btl_reg = reg;
|
2005-09-13 02:28:23 +04:00
|
|
|
num_btls_used++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return num_btls_used;
|
|
|
|
}
|