限制OpenCL访问英特尔CPU?

时间:2014-08-29 18:15:43

标签: cuda opencl intel restrict slurm

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

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

这些都不会阻止用户使用自己的OpenCL实现来在CPU上运行,但它可能足以指导他们不会错误地在那里运行。