blob: 945c0e00cc5d09d95015895753d1dc29d1d5f473 [file] [log] [blame]
/* 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);