-
Notifications
You must be signed in to change notification settings - Fork 22
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
PMIx_Connect/PMIx_Disconnect process array ordering #414
Comments
Summary of the discussion during the July 11, 2022 IAWG teleconf
|
Identical means identical - wildcard matches wildcard and order counts. That has always been our definition - can/should add verbiage if required. You will probably find it elsewhere where arrays of procs are passed - I know we were explicit somewhere |
Here it is - from the
It is provided as an |
Yeah, I think that's sufficiently clear as is. Does this same note apply to some of the other places that take process arrays? |
Yes - probably worth a look. Might also need to consider moving from advice to something stronger |
Some high-level notes from the July 14, 2022 PMIx Standard Meeting
|
List of APIs that take a process array:
IAWG was going to go through this list on Monday (July 25). |
Of those, only the "fence", "connect/disconnect", and "group" functions involve collectives and are therefore currently order sensitive. The rest pay no attention to order as they are not collective operations. Probably should distinguish those somehow so that is clear. |
Some notes on the APIs from above. Document references from 'master' built today. PMIx Abort
PMIx Fence
PMIx Connect
PMIx Disconnect
PMIx Job Control
PMIx Group Construct
PMIx Group Invite
PMIx IO Forwarding Pull
PMIx IO Forwarding Push
|
Per IAWG July 25, 2022:
|
Per OpenPMIx ticket below, they now sort the array before the collective operation. |
Yeah, I made the change after checking with Cray/HPE (who sorts the arrays prior to use) and Slurm (who does not sort, but only supports the "fence" operation across the primary job - which means that there is only one entry in the array anyway). It seems that others have been encountering the problem, and so a scenario is emerging where libraries are sorting their arrays prior to calling PMIx collectives, and then backend support is also sorting the arrays prior to using them - both doing so to avoid the problem of mistakenly thinking that two separate collectives were being executed. Seems that the common element is use of a PMIx collective operation, so it is probably more efficient for PMIx to do the sort and simply guarantee order independence to both sides (the client and the host). |
Per discussion in 3Q 2022 meeting notes link
|
Should the restriction that processes be specified in the same way (RANK_WILDCARD vs listing individual procs) be associated with PMIx_Group_construct? It seems that for this operation, the grp name is the ultimate determination of matching, not the list of processes? Perhaps the standard should say what should happen if two or more processes call PMIX_Group_construct[_nb] with the same grp name, but incompatible proc arrays, but that is another issue. However, the argument that the server needs the processes specified in exactly the same way seems to lack motivation for PMIX_Group_construct where the grp name can be used to determine matching. Not sure though... any thoughts? |
You don't need to specify them in the same way, but the list needs to include the same procs. A participant can add procs that are not in the list (e.g., that only this participant knows about) using the |
Will create PR for this shortly based on @rhc54 comment above (the rest of the PR has been finished). Will not make next quarterly. I recommend that we do not hold up 4.2 specifically for this issue though. |
Getting off topic here, but do the group identifiers need to be globally unique across the whole PMIx session or do they only need to be unique for the given set of processes included. I.e. if my namespace FOO decided to create a group including all members of FOO and BAR and calls it "mygroup" and then another user has two namespaces BIZ and BAZ and they decide to create a group called "mygroup", is that allowed? |
See pr #490 |
It's a tough question. We "hold" group membership at the client library level - i.e., the client translates any group references to the corresponding namespace/rank before passing the ID on to whatever API has been called. So one could argue that so long as a given client sees a unique groupID-to-membership correlation, then all is good. The problem comes when a given process belongs to two different groups, both named "mygroup" - now there is no clear way to translate that membership when someone refers to [mygroup, grprank]. This is why we originally required the groupID be unique across a session. However, this presumed that "groups" could not be formed across sessions - which people were quick to point out as an undesirable limitation! So we actually broadened the requirement to state that the ID must be unique in the "universe" - i.e., within the view of the host environment. Kinda tricky as you don't know (and cannot control) what some other user in some other session is doing. An org could set a policy that everyone prefix (or suffix) a group name with their sessionID(s) to gain some protection - but that requires a policy, which obviously lies outside the province of PMIx. Also requires that apps doing cross-session connections agree on how the final groupID gets constructed (e.g., which sessionID goes first). Not perfect, but at least something. To be sure, we haven't hit any cases where that strategy wasn't sufficient as we aren't seeing cross-session group formation (at least, so far as anyone has reported). I'm sure one could imagine a corner case that would encounter a problem, but it is hard to come up with something that is (a) absolutely safe and (b) not overly burdensome. One possibility was to use the group membership (expressed as a string) as the ID, but that's somewhat klunky and not all that attractive. |
The
PMIx_Connect
andPMIx_Disconnect
operations take an array ofprocs
. Does theprocs
array need to be:PMIx Standard v4.1 Section 11.3.1 (page 183 lines 14-16)
References
The text was updated successfully, but these errors were encountered: