Object attributes

# Normal attributes

hwloc objects have many attributes. The hwloc_obj structure contains a common set of attributes that are available for object types, for instance their `type` or `logical_index`.

Each object also contains an `attr` field that, if non NULL, points to a union hwloc_obj_attr_u of type-specific attribute structures. For instance, a Cache object `obj` contains cache-specific information in `obj->attr->cache`, such as its size and associativity. See hwloc_obj_attr_u for details.

# Custom string infos

Aside from the `name` field of each object, hwloc annotates many objects with string attributes that are made of a key and a value. Each object contains a list of such pairs that may be consulted manually (looking at the object `infos` array field) or using the hwloc_obj_get_info_by_name(). The user may additionally add new key-value pairs to any object using hwloc_obj_add_info() or the hwloc-annotate program.

Here is a non-exhaustive list of attributes that may be automatically added by hwloc (with the usual corresponding object in parentheses). Note that these attributes heavily depend on the ability of the operating system to report them. Many of them will therefore be missing on some OS.

OSName, OSRelease, OSVersion, HostName, Architecture (Machine object)
  The operating system name, release, version, the hostname and the architecture name, as reported by the Unix `uname` command.
Backend (Machine object or topology root object)
  The name of the hwloc backend/component that filled the topology. If several components were combined, multiple Backend keys may exist, with different values, for instance `x86`, `Linux` and `pci`.
LinuxCgroup (Machine object)
  The name the Linux control group where the calling process is placed.
SyntheticDescription (topology root object)
  The description string that was given to hwloc to build this synthetic topology.
CPUModel, CPUType (Socket or Machine)
  The processor model name, and a more-general processor type name when applicable (Solaris/Sparc). These attributes are usually added to Socket objects. However, when hwloc cannot detect the number of sockets but still knows their (same) model, the attribute may be added to the Machine object instead.
PCIVendor, PCIDevice (PCI devices and bridges)
  The vendor and device names of the PCI device.
CoProcType (Co-Processor OS devices)
  The type of co-processor, for instance `"MIC"`, `"CUDA"` or `"OpenCL"`.
GPUVendor, GPUModel (GPU or Co-Processor OS devices)
  The vendor and model names of the GPU device.
OpenCLDeviceType, OpenCLPlatformIndex,
OpenCLPlatformName, OpenCLPlatformDeviceIndex (OpenCL GPU OS devices)
  The type of OpenCL device, the OpenCL platform index and name, and the index of the device within the platform.
NVIDIAUUID, NVIDIASerial (NVML GPU OS devices)
  The UUID and Serial of NVIDIA GPUs.
MICFamily, MICSKU, MICSerialNumber, MICActiveCores, MICMemorySize
  The family, SKU (model), serial number, number of active cores, and memory size (in kB) of an Intel Xeon Phi (MIC) coprocessor.
DMIBoardVendor, DMIBoardName, etc. (Machine object)
  DMI hardware information such as the motherboard and chassis models and vendors, the BIOS revision, etc., as reported by Linux under `/sys/class/dmi/id/`.
Address, Port (Network interface OS devices)
  The MAC address and the port number of a software network interface, such as `eth4` on Linux.
NodeGUID, SysImageGUID, Port1State, Port2LID, Port2LMC, Port3GID1 (OpenFabrics OS devices)
  The node GUID and GUID mask, the state of a port #1 (value is 4 when active), the LID and LID mask count of port #2, and GID #1 of port #3.