The current trunk creates some OS devices for Cuda, NVML, AMD OpenCL,
and GL objects. All of these use the subtype GPU. For the record, the
other types are Block, Net, OpenFabrics and DMA.
The "mic" branch creates similar objects for each Xeon Phi, but Intel
would kill me if I use the GPU type for them :) So I added a new
Co-Processor type instead (could be Accelerator). But that raises the
question of using that type instead of "GPU" for CUDA devices.
For OpenCL, it's even harder. We currently only support AMD GPUs in our
OpenCL code. But OpenCL also supports some CPUs and Accelerators.
Whenever OpenCL supports the MIC from the host, it will likely be an
accelerator device from the OpenCL point of view. And hwloc would also
call it an coprocessor/accelerator.
(we could have hwloc devices for CPU OpenCL devices too. Having an
accelerator/co-proc inside a socket may look strange...)
hwloc view of all these devices with the current scheme:
* GPU: cuda0, nvml0, opencl0d0 (amd), :0.0
* Co-Proc: mic0, opencl1d0 (mic)
Cons: Tesla is not really a GPU anymore. NVIDIA might release non-GPU
CUDA-capable devices in the future.
Cons: opencl devices have different types, not sure how much it matters
if we change CUDA and OpenCL into Co-Proc:
* GPU: nvml0?, :0.0
* Co-Proc: cuda0, opencl0d0 (amd), opencl1d0 (mic), mic0
Not sure about nvml0 because it may at some point be generalized to
non-GPU NIVIDIA devices. It may deserve a special "Misc" type.