Thanks for the reply. I kind of understand, but it's rather weird. The
BTL calls mca_mpool_base_module_create() to create a pool of memory, but
the BTL has no say how big of a pool to create? Could you imagine
having a memory allocation routine ("malloc" or something) that didn't
allow you to control the size of the allocation? Instead, the
allocation routine determines the size. That's weird. I must be
missing something about how this is supposed to work.
E.g., I see that there is a "resources" argument
(mca_mpool_base_resources_t). Maybe that structure should be expanded
to include a "size" field?
Or, maybe I should bypass
mca_mpool_base_module_create()/mca_mpool_sm_init() and just call
mca_common_sm_mmap_init() directly, the way mca/coll/sm does things.
That would allow me to specify the size of the file.
George Bosilca wrote:
The simple answer is you can't. The mpool is loaded before the BTLs
and on Linux the loader use the RTLD_NOW flag (i.e. all symbols have
to be defined or the dlopen call will fail).
Moreover, there is no way in Open MPI to exchange information between
components except a global variable or something in the mca/common.
In other words there is no way for you to call from the mpool a
function from the sm BTL.
On Jan 13, 2009, at 19:22 , Eugene Loh wrote:
With the sm BTL, there is a file that each process mmaps in for
shared memory.
I'm trying to get mpool_sm to size the file appropriately. So, I
would like mpool_sm to call some mca_btl_sm function that provides a
good guess of the size. (mpool_sm creates and mmaps the file, but
the size depends on parameters like eager limit and max frag size
that are known by the btl_sm.)