1. Dictionary for each PSet: - MPI_Session_get_PSet_info - MPI_Session_set_PSet_info 2. Processes need to know if they are dynamic: 1a) get_default_PSet(&main_pset) 1b) get_default_PSet(&main_pset, &dynamic_flag) 1c) MPI_Session_get_default_PSet(&main_pset) + MPI_Session_get_PSet_info -> info field provided by RTE 2) MPI_Session_Get_Info(...) 3. Processes need to know if they are responsible for managing resource changes related to the provided pset. - //primary_process is set to True if we're the primary process for this main_pset MPI_Session_get_primary_process(&main_pset, &primary_process); 4. Processes need to get info about Resource Changes: - MPI_Session_Dyn_Test_res_change(session, pset_name, &flag); // Is there a resource change related to the provided pset? - MPI_Session_Dyn_Recv_res_change( session, // session handler main_pset, // PSet related to this resource change &rc_type, // OUT: Type of resource change &rc_change_pset, // OUT: Delta PSet related to resources (can be also multiple psets) &rc_status // OUT: Status information ); 5. Processes need to know PSet name to be used for communication: - MPI_Session_set/get_PSet_info(&info) -> info.main_pset -> use PSet dictionary to provide this info to dynamic processes - MPI_Session_bcast_PSet_info -> use out-of-band Bcast of the pset name for non-dynamic processes (for performance/scalability reasons) 6. Processes need to perform pset operations: - MPI_Session_Dyn_pset_create_op( session, // session handler MPI_PSET_OP_UNION, // operation to execute {main_pset, rc_change_pset, 0}, // IN: main and delta pset new_main_pset // OUT: New PSet(s) );