[mpich-devel] MPICH memory pools

Archer, Charles J charles.j.archer at intel.com
Tue Jan 20 10:06:44 CST 2015


Hi.

MPICH has some pretty nice functionality for memory pools implemented, but as far as I can tell, it’s a bit limited for internal device use because each pool you implement needs to consume an entry in the handle space.

Looking at the available “kinds” of memory pools already implemented:

typedef enum MPID_Object_kind {
  MPID_COMM       = 0x1,
  MPID_GROUP      = 0x2,
  MPID_DATATYPE   = 0x3,
  MPID_FILE       = 0x4, /* only used obliquely inside MPID_Errhandler objs */
  MPID_ERRHANDLER = 0x5,
  MPID_OP         = 0x6,
  MPID_INFO       = 0x7,
  MPID_WIN        = 0x8,
  MPID_KEYVAL     = 0x9,
  MPID_ATTR       = 0xa,
  MPID_REQUEST    = 0xb,
  MPID_PROCGROUP  = 0xc,               /* These are internal device objects */
  MPID_VCONN      = 0xd,
  MPID_GREQ_CLASS = 0xf
  } MPID_Object_kind;

It looks like only 0xe is available for implementing a new type of memory pool, limiting me to one additional pool.
Furthermore, the internal device objects don’t need publishable handles, right?
It looks like the handle contains 2 bits for (internal, valid, invalid, direct), and 4 bits to contain the object kind.

Are there any memory pool routines that I’m missing somewhere that aren’t restricted to the limits of what we can publish in a handle?
Since my object pools are internal, I don’t need to encode anything into a handle.

Furthermore, if we had a set of non-handle pool routines, internal pools like procgroup, vconn, wouldn’t consume entries in the handle space that could be used for future versions of MPI.

Looking for some guidance here, I don’t want to publish any internal device gorp into the object_kind space…but I want to use memory pools.
I’ve used the mpich pools on internal objects with a garbage kind value (unintentionally set to the wrong enum value), and it appears I get a new pool and everything is working, but just because it works, doesn’t mean it’s correct.

What should I do?  Bracing for "implement your own memory pools, lazy”.


More information about the devel mailing list