/* for pmi2_job_info_t definition */ #include "setup.h" /* allocate resources to track PMIX_Ring state */ int pmix_ring_init(const pmi2_job_info_t* job, char*** env); /* free resources allocated to track PMIX_Ring state */ int pmix_ring_finalize(); /* given a global rank in stepd/srun tree for message received * from one of our stepd children, compute corresponding child index */ int pmix_ring_id_by_rank(int rank); /* ring_out messages come in from our parent nodes, * we process this and send ring_out messages to each of our children: * count - starting rank for our leftmost application process * left - left value for leftmost application process in our subtree * right - right value for rightmost application process in our subtree */ int pmix_ring_out(int count, char* left, char* right); /* we get a ring_in message from each child (stepd and application tasks), * once we've gotten a message from each child, we send a ring_in message * to our parent * ring_id - index of child (all app procs first, followed by stepds) * count - count value from child * left - left value from child * right - right value from child * * upon receiving ring_in messages from all children, sends message to * parent consisting of: * count = sum of counts from all children * left = left value from leftmost child that specified a left value * right = right value from rightmost child that specified a right value */ int pmix_ring_in(int ring_id, int count, char* left, char* right);