IBM XL C / C ++编译器:“没有可用的有效目标设备”

时间:2018-01-22 18:27:32

标签: gpu openmp xlc

我正在使用IBM XL C / C ++编译器编译一些OpenMP 4.5代码,目的是将其部分工作卸载到GPU,如下所示:

xlc++ mycode.cpp -qsmp=omp -qreport -qoffload -std=c++11 -Wall

编译似乎很成功,只给我以下信息:

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'

然而,当我运行代码时,我收到以下令人不快的消息:

  

1587-169没有有效的目标设备。

使用nvidia-smi,我已经确认目标设备实际上是可用的:

+-----------------------------------------------------------------------------+
| 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 |
+-------------------------------+----------------------+----------------------+

我的想法是XL以某种方式瞄准错误的加速器,但我找不到设置它的选项。

如何让我的代码识别和利用可用的GPU?

1 个答案:

答案 0 :(得分:1)

-qtgtarch指定代码可以运行的GPU架构。如果您希望编译器自动检测正在执行编译器的系统的设备0的体系结构,请尝试-qtgtarch=auto。或者,您可以尝试手动设置,例如-qtgtarch=sm_60

Knowledge Center的更多信息。