目前可以使用CUDA_VISIBLE_DEVICES env变量限制OpenCL对Linux上NVIDIA GPU的访问。是否有人知道限制OpenCL访问英特尔CPU设备的类似方法? (动机:我正试图强迫计算服务器的用户专门通过SLURM运行他们的OpenCL程序。)
答案 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上运行,但它可能足以指导他们不会错误地在那里运行。