Roman,
Before going into explaining the logic, let me state that the memory
is registered (if required/supported) by the BTLs. However, this is
done only at the moment when the memory segment is involved in any
kind of communication.
We do not want to replicate this at the PML level, in order to make
sure that the amount of memory registered at any moment is minimal. In
other words, the PML leave the decision on when to register and when
to unregister to the BTLs. However, in order to speedup the code a
little bit (and to keep things tidy), the PML will help the BTLs to
work around the memory registration issue. And the code you pointed
out is exactly the place where we do it.
We need to register the memory if leave_pinned is TRUE, as registering
will leave a trace. If leave_pinned is FALSE then we only check if
somehow this memory is not already registered (by some BTL). In this
case, there is no need to create a registration in the PML (if
required the BTL will do it when needed).
george.
On Sep 28, 2009, at 13:44 , Roman Cheplyaka wrote:
Hi,
I'm trying to dig into OpenMPI sources but have some problems. Can
anyone explain the logic of the following code from
mca/pml/ob1/pml_ob1_rdma.c please?
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,
®);
}
It seems to me that we should register new memory if leave_pinned is
FALSE (i.e. no existing registrations avaliable) and search through
existing registrations otherwise, but the logic is inversed here.
--
Roman I. Cheplyaka
_______________________________________________
devel mailing list
de...@open-mpi.org
http://www.open-mpi.org/mailman/listinfo.cgi/devel