Cuda 限制OpenCL对英特尔CPU的访问?

Cuda 限制OpenCL对英特尔CPU的访问?,cuda,opencl,intel,restrict,slurm,Cuda,Opencl,Intel,Restrict,Slurm,目前可以使用CUDA_VISIBLE_DEVICES env变量在Linux上限制OpenCL对NVIDIA GPU的访问。有人知道有类似的方法限制OpenCL访问英特尔CPU设备吗?(动机:我试图强制计算服务器的用户只通过SLURM运行OpenCL程序。)一种可能是直接链接到英特尔OpenCL库(libintelocl.so,在我的系统上),而不是通过OpenCL ICD加载程序。在纯OpenCL中,避免将任务分配给CPU的方法是不要选择它(作为平台或设备)。CLGetDeviceID可以使用

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

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

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

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

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


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

我的理解是OP不希望用户的程序能够交互访问登录/编译节点中的Intel CPU,而只能从作业环境中(在计算节点上)访问。是的-这就是我想做的。可能有一个Intel OpenCL驱动程序组件可以从编译/登录节点中删除,这会导致OpenCL代码在编译/登录节点上以交互方式启动时失败。这似乎是一个值得追求的想法-我想可以将ICD加载程序库隐藏在动态更新的二进制文件中在编译节点上链接到它。Intel CPU指的是Xeon Phi或Xeon?是-主机有多个Xeon CPU。