<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
I see that MPI_Get_hw_resource_info() was introduced in MPI-4.1 p445:13.</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
I'm a little confused by the description of this routine.  p445:30-32 says (the PDF won't copy-n-paste this section for some reason, so I'm copy-n-pasting from the corresponding LaTeX source):</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span style="font-family: Menlo; font-size: 13px;"><br>
</span></div>
<div class="elementToProof" style="margin-left: 40px; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span style="font-family: Menlo; font-size: 13px;">This information is stored as (\mpiarg{key},\mpiarg{value}) pairs where each key is the name of a hardware resource type and its value is set to \infoval{true} if the calling \MPI/ process is restricted to
 a single instance of a hardware resource of that type and \infoval{false} otherwise.  The order in which the keys are stored in \mpiarg{hw\_info} is unspecified.  This procedure will return different information for \MPI/ processes that are restricted to different
 hardware resources. Otherwise, info objects with identical (\mpiarg{key}, \mpiarg{value}) pairs are returned.</span></div>
<ol data-editing-info="{"orderedStyleType":1,"unorderedStyleType":1}" style="list-style-type: decimal;">
<li style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; list-style-type: "1. "; color: rgb(0, 0, 0);" class="elementToProof">
I'm not quite sure what the "true" and "false" values mean.</li><ol style="list-style-type: lower-alpha;">
<li style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
<span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">E.g., what -- precisely -- does "a single instance of a hardware resource of that type" mean?</span></li><li style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
<span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">For example, my company makes a piece of hardware that can have thousands of virtual NICs on it, and those virtual
 NICs might even migrate around to different pieces of hardware (e.g., they can migrate between different fiber optic outputs on the same NIC).  MPI processes are assigned to a virtual NIC, not a hardware NIC.  Am I allowed to include a reference to these virtual
 NICs in the keys/values that are returned (since the Linux device name refers to a virtual entity, not necessarily a specific set of hardware)?  If so, how do I determine the true/false value to assign?</span></li><li style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
<span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">The text states that the info keys/values are specific to the point of time when the call is made.  p446:11-12 even
 explicitly states that the process and/or its hardware restrictions may change over time.  So even if I grokked what "restricted to a single instance of a hardware resource of that type" is intended to mean, if things can change -- and they can -- what is
 the point of giving a true or false value to the user? </span></li><li style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<div class="elementToProof"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">Is the intent that keys will include a specific, unique reference to an instance of
 "hardware" (e.g., a PCI address)?  If so, then the value of "true" and "false" becomes even more nebulous (or meaningless).  E.g., if I list a key containing "cisco-nic-12bc83fde9" to indicate a specific NIC, what is the exact "hardware resource of that type",
 and/or how would an application know that </span><span style="letter-spacing: normal; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 16px; font-weight: 400; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">"cisco-nic-12bc83fde9"</span><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> and
</span><span style="letter-spacing: normal; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 16px; font-weight: 400; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">"cisco-nic-bbbbbbbbb" are
 of the same "hardware resource type"?</span></div>
</li><li style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
<span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">I can imagine that there could be many different scenarios here; can someone provide some guidance on what exactly
 an implementation is supposed to do here?  This text seems to be... ambiguous.<br>
</span></li></ol>
<li style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; list-style-type: "2. "; color: rgb(0, 0, 0);" class="elementToProof">
<span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">The AtoI in p445:42-46 says that we should use URIs with a type of "openmpi://" or "hwloc://" or "pmix://" or "openmpi://"
 or "slurm://" or ... </span></li><ol style="list-style-type: lower-alpha;">
<li style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
<span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">All of these are software models (although hwloc's data refers to either hardware or to software devices that correspond
 to some form of hardware -- although that's not always clear, either).</span></li><li style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
<span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">The use of software models in the text is confusing, because the routine has "hw" in its name, strongly implying
 that there's supposed to be a direct tie-in to hardware.</span></li><li style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
<span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">What is the intent here?</span></li></ol>
<li style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; list-style-type: "3. "; color: rgb(0, 0, 0);" class="elementToProof">
<span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">I'm not quite sure what the limitation of "This procedure will return different information for MPI processes that
 are restricted to different hardware resources" means.</span></li><ol style="list-style-type: lower-alpha;">
<li style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">What if a) an MPI implementation returns an Info with a single key denoting the NIC, and b) the NIC is a generic
 Ethernet NIC (there's only one NIC in the node).  </span></li><li style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
<span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">On that NIC, from a fine-grained perspective, the MPI processes use different hardware resources, but from a coarse-grained
 perspective of the identification of "NIC", multiple MPI processes use the "same" NIC.  </span></li><li style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
<span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">Per the text, is an MPI implementation prohibited from returning the same value "blah://the_nic" in multiple MPI
 processes?  Or is an implementation <b>required</b>​ to return the same value "blah://the_nic" in all MPI processes on that node?  I really can't tell which way it's supposed to go.</span></li></ol>
</ol>
<div class="elementToProof"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">In short, I find the text description of this function to be suitably ambiguous such
 that I could put anything I want in the info keys and corresponding values, and be able to justify it with one of a bunch of different interpretations of the text on pages 445-446.</span></div>
<div class="elementToProof"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"><br>
</span></div>
<div id="Signature">
<div style="background-color: rgb(255, 255, 255);"><span style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">-- </span></div>
<div style="background-color: rgb(255, 255, 255);"><span style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">Jeff Squyres</span></div>
</div>
</body>
</html>