title: IBM XL C/C++ Compiler: "No valid target devices available"
body: <p>I'm compiling some OpenMP 4.5 code with the IBM XL C/C++ compiler with the intention of offloading some of its work to a GPU, like so:</p>
  
  <pre><code>xlc++ mycode.cpp -qsmp=omp -qreport -qoffload -std=c++11 -Wall
  </code></pre>
  
  <p>Compilation seems to be successful, giving me only the following messages:</p>
  
  <pre><code>mycode.cpp:
  "mycode.cpp", line 284: 1586-358 (I) Loop was parallelized.
  "mycode.cpp", line 293: 1586-358 (I) Loop was parallelized.
  "mycode.cpp", line 309: 1586-358 (I) Loop was parallelized.
  "mycode.cpp", line 324: 1586-358 (I) Loop was parallelized.
  "mycode.cpp", line 126: 1586-674 (I) Remark: Simd or nested parallel directive requires OpenMP runtime
  "" 1586-671 (I) GPU OpenMP Runtime is required for offloaded kernel '__xl__Z9MyCodeiii_l123_h44039046689_OL_1'
  </code></pre>
  
  <p>However, when I run the code, I get the following unpleasant message:</p>
  
  <blockquote>
    <p>1587-169 No valid target devices available.</p>
  </blockquote>
  
  <p>Using <code>nvidia-smi</code>, I have verified that target devices are, in fact, available:</p>
  
  <pre><code>+-----------------------------------------------------------------------------+
  | NVIDIA-SMI 384.59                 Driver Version: 384.59                    |
  |-------------------------------+----------------------+----------------------+
  | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
  | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
  |===============================+======================+======================|
  |   0  Tesla P100-SXM2...  Off  | 00000002:01:00.0 Off |                    0 |
  | N/A   33C    P0    29W / 300W |     10MiB / 16276MiB |      0%   E. Process |
  +-------------------------------+----------------------+----------------------+
  |   1  Tesla P100-SXM2...  Off  | 00000003:01:00.0 Off |                    0 |
  | N/A   29C    P0    30W / 300W |     10MiB / 16276MiB |      0%   E. Process |
  +-------------------------------+----------------------+----------------------+
  |   2  Tesla P100-SXM2...  Off  | 00000006:01:00.0 Off |                    0 |
  | N/A   31C    P0    28W / 300W |     10MiB / 16276MiB |      0%   E. Process |
  +-------------------------------+----------------------+----------------------+
  |   3  Tesla P100-SXM2...  Off  | 00000007:01:00.0 Off |                    0 |
  | N/A   27C    P0    29W / 300W |     10MiB / 16276MiB |      0%   E. Process |
  +-------------------------------+----------------------+----------------------+
  </code></pre>
  
  <p>My thought is that XL is somehow targeting the wrong accelerator, but I can't find an option to set this.</p>
  
  <p>How can I get my code to recognize and utilize the available GPUs?</p>