在OpenCL编程中,获取到Platform的ID后,第二步就是要获取device的ID,异构计算中主要的执行单元就是这些device。下面介绍device的相关API。
1.获取可用device列表的API clGetDeviceIDs:
cl_int clGetDeviceIDs( cl_platform_id platform,
cl_device_type device_type,
cl_uint num_entries,
cl_device_id* devices,
cl_uint* num_devices)
参数解释:
1.platform:是由clGetPlatformIDs:获取到的platform id。注意跟平台获取时参数的不同,一个是指针一个是普通变量。
2.device_type:指定要获取的设备的类型,可以使某种特定的,也是是全部OpenCL可用设备。
3.num_entries:指可被加入到设备组中的设备id的数目,即第四个参数cl_device_id* devices的数目。如果第二个参数devices不为NULL,则此参数num_entries一定要大于0。此处的返回值可以用来识别一个特定device,如果其值为NULL,此参数被忽略。
4.devies:返回发现的OpenCL devices的列表。
3.num_platforms:返回可用的OpenCL devices的数目。其值设为NULL时,此参数被忽略。
返回值为错误码,含义参考opencl规范。
简单说来,一般这样使用:当不确定自己使用的硬件有多少可用的OpenCL devices时,使用cl_int status = clGetDeviceIDs( platform, device_type, 0, NULL, &num_devices) 即可在第五个参数中获取到该硬件下可用的OpenCL devices的数目;然后再次使用该函数status = clGetDeviceIDs( platform, device_type, num_devices, &devices, NULL)即可在devices中得到num_devices个可用平台的id。
2.平台信息获取API clGetDeviceInfo:
cl_int clGetDeviceInfo( cl_device_id device,
cl_device_info param_name,
size_t param_value_size,
void* param_value,
size_t* param_value_size_ret)
此API用来获取OpenCL device的特定信息。
参数解释:
1.device:即device ID,由clGetDeviceIDs获取,也可为NULL。
2.param_name:是一个枚举常量,用来指定要查询的device信息。每个常量只代表一种信息,因此,查询不同信息时要多次调用此函数。有哪些信息可查询请参见OpenCL规范。
3.param_value_size:指定返回值空间的内存大小。其大小应该>=实际返回值大小。
4.param_value:指向存放查询信息返回内存空间的指针。
5.param_value_size_ret:实际的返回信息大小。
一般应用中用不到这个信息获取的函数。
1.获取可用device列表的API clGetDeviceIDs:
cl_int clGetDeviceIDs( cl_platform_id platform,
cl_device_type device_type,
cl_uint num_entries,
cl_device_id* devices,
cl_uint* num_devices)
参数解释:
1.platform:是由clGetPlatformIDs:获取到的platform id。注意跟平台获取时参数的不同,一个是指针一个是普通变量。
2.device_type:指定要获取的设备的类型,可以使某种特定的,也是是全部OpenCL可用设备。
3.num_entries:指可被加入到设备组中的设备id的数目,即第四个参数cl_device_id* devices的数目。如果第二个参数devices不为NULL,则此参数num_entries一定要大于0。此处的返回值可以用来识别一个特定device,如果其值为NULL,此参数被忽略。
4.devies:返回发现的OpenCL devices的列表。
3.num_platforms:返回可用的OpenCL devices的数目。其值设为NULL时,此参数被忽略。
返回值为错误码,含义参考opencl规范。
简单说来,一般这样使用:当不确定自己使用的硬件有多少可用的OpenCL devices时,使用cl_int status = clGetDeviceIDs( platform, device_type, 0, NULL, &num_devices) 即可在第五个参数中获取到该硬件下可用的OpenCL devices的数目;然后再次使用该函数status = clGetDeviceIDs( platform, device_type, num_devices, &devices, NULL)即可在devices中得到num_devices个可用平台的id。
2.平台信息获取API clGetDeviceInfo:
cl_int clGetDeviceInfo( cl_device_id device,
cl_device_info param_name,
size_t param_value_size,
void* param_value,
size_t* param_value_size_ret)
此API用来获取OpenCL device的特定信息。
参数解释:
1.device:即device ID,由clGetDeviceIDs获取,也可为NULL。
2.param_name:是一个枚举常量,用来指定要查询的device信息。每个常量只代表一种信息,因此,查询不同信息时要多次调用此函数。有哪些信息可查询请参见OpenCL规范。
3.param_value_size:指定返回值空间的内存大小。其大小应该>=实际返回值大小。
4.param_value:指向存放查询信息返回内存空间的指针。
5.param_value_size_ret:实际的返回信息大小。
一般应用中用不到这个信息获取的函数。