【问题标题】:restrict OpenCL access to Intel CPU?限制 OpenCL 访问 Intel CPU?
【发布时间】:2014-10-23 19:14:20
【问题描述】:

目前可以使用 CUDA_VISIBLE_DEVICES 环境变量限制 OpenCL 访问 Linux 上的 NVIDIA GPU。有谁知道限制 OpenCL 访问 Intel CPU 设备的类似方法? (动机:我试图强制计算服务器的用户通过 SLURM 专门运行他们的 OpenCL 程序。)

【问题讨论】:

  • 可能有一个英特尔 OpenCL 驱动程序组件可以从您的编译/登录节点中删除,这会导致 OpenCL 代码在编译/登录节点上以交互方式启动时失败。
  • 似乎是一个值得追求的想法 - 我想可以从编译节点上动态链接到它的二进制文件中隐藏 ICD 加载程序库。
  • 英特尔 CPU 是指至强融核还是至强?
  • 是 - 主机有多个 Xeon CPU。

标签: cuda opencl intel restrict slurm


【解决方案1】:

一种可能性是直接链接到英特尔 OpenCL 库(我的系统上的 libintelocl.so),而不是通过 OpenCL ICD 加载器。

【讨论】:

  • 我的阅读是 OP 不希望用户的程序能够交互地访问登录/编译节点中的 Intel CPU,但只能从作业环境中(在计算节点上)。
  • 是的 - 这就是我想要做的。
【解决方案2】:

在纯 OpenCL 中,避免将任务分配给 CPU 的方法是不选择它(作为平台或设备)。 clGetDeviceIDs 可以使用 device_type 参数来做到这一点(不要设置 CL_DEVICE_TYPE_CPU 位)。

在 ICD 级别,如果是 Intel 的实现,我想您可以排除 CPU 驱动程序;对于 AMD,它变得有点棘手,因为他们有一个适用于两个平台的驱动程序(似乎 CPU_MAX_COMPUTE_UNITS 环境变量可以将其限制为一个核心,但不能禁用它)。

如果目标是将 OpenCL 程序限制为通过特定启动器运行,例如 slurm,一种方法可能是为该启动器添加一个组,并在 /etc/OpenCL 中创建 OpenCL ICD 供应商文件(可能还有驱动程序)设备节点)只能由该组使用。

这些都不会阻止用户拥有自己的 OpenCL 实现以在 CPU 上运行,但足以引导他们不要错误地在 CPU 上运行。

【讨论】:

    猜你喜欢
    • 2018-07-21
    • 2015-04-16
    • 2014-08-03
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 2021-09-03
    • 1970-01-01
    相关资源
    最近更新 更多