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.)

Reply via email to