是否存在限制AMD OpenCL平台使用的GPU数量的解决方案?对于NVIDIA平台,可以简单地设置环境变量CUDA_VISIBLE_DEVICES
以限制OpenCL可用的GPU集。
答案 0 :(得分:6)
jprice@nowai:~/benchmark$ python benchmark.py -clinfo
Platform 0: AMD Accelerated Parallel Processing
-> Device 0: Tahiti
-> Device 1: Tahiti
-> Device 2: Intel(R) Core(TM) i5-3550 CPU @ 3.30GHz
jprice@nowai:~/benchmark$ export GPU_DEVICE_ORDINAL=0
jprice@nowai:~/benchmark$ python benchmark.py -clinfo
Platform 0: AMD Accelerated Parallel Processing
-> Device 0: Tahiti
-> Device 1: Intel(R) Core(TM) i5-3550 CPU @ 3.30GHz
更详细的描述可以在AMD APP OpenCL编程指南中找到(目前在第2.4.3节“屏蔽可见设备”中): http://developer.amd.com/wordpress/media/2013/07/AMD_Accelerated_Parallel_Processing_OpenCL_Programming_Guide-rev-2.7.pdf
答案 1 :(得分:0)
OpenCL主机API允许您指定获取设备ID列表时的设备数量
_int clGetDeviceIDs(
cl_platform_id platform,
cl_device_type device_type,
cl_uint num_entries, // Controls the minimum number of devices
cl_device_id *devices,
cl_uint *num_devices)
设备ID指针*设备可用于创建具有特定数量设备的上下文。
这是规范所说的
num_entries是可以添加到的cl_device条目数 设备。如果devices不为NULL,则num_entries必须大于 零。 devices返回找到的OpenCL设备列表。 cl_device_id 设备中返回的值可用于标识特定的OpenCL 设备。如果devices参数为NULL,则忽略此参数。该 返回的OpenCL设备数量是该值的最小值 由num_entries指定的类型或OpenCL设备的数量 匹配device_type。 num_devices返回OpenCL设备的数量 可用的匹配device_type。如果num_devices为NULL,则为此 参数被忽略
cl_context clCreateContext(
const cl_context_properties *properties,
cl_uint num_devices, // Number of devices
const cl_device_id *devices,
(voidCL_CALLBACK *pfn_notify) (
const char *errinfo,
const void *private_info, size_t cb,
void *user_data
),
void *user_data,
cl_int *errcode_ret)
然后通过自己的设备队列寻址每个设备。
答案 2 :(得分:-1)
OpenCL规范没有定义可移植解决方案。
NVIDIA拥有您提到的解决方案。我不认为AMD有标准;您的OpenCL程序必须提供一种共享可用设备的方法。
请注意,AMD确实有OpenCL扩展(其中一些在OpenCL 1.2中已经变得更加正式)用于“设备分裂”,用于在多个程序中拆分单个设备(但这与您要求的不同)