OpenCL 编程步骤 2. 获取设备

clGetDeviceIDs

查询支持OpenCL设备列表:

cl_int clGetDeviceIDs(cl_platform_id   platform ,
                      cl_device_type   device_type ,
                      cl_uint           num_entries ,
                      cl_device_id    *devices ,
                      cl_uint          *num_devices )

与clGetPlatformIDs函数类似,第一次调用时,devices参数设置为NULL,num_devices返回指定平台中的设备数;

第二次调用时,根据第一次调用得到设备数量分配设备空间,调用该函数来初始化可用设备。

需要注意的是,如果devices不为NULL,num_entries的值必须大于0,num_entries用于指定devices所指向的设备对象列表中最多可存放多少个设备对象,这样此函数所输出的设备对象个数不会超过num_entries的值。而num_devices则输出实际给出的设备对象的个数。

对于函数中的device_type参数,可用类型如下表所示:

clGetDeviceInfo

给定一个OpenCL设备后,使用如下函数可以获得设备的各个属性信息:

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 )

这个函数返回给定设备的属性信息。

第一个参数device指定查询的设备。

第二个参数param_name为查询平台的属性信息,param_name的取值如下表所示。

最后一个参数param_value_size_ret返回属性信息实际的长度。

第四个参数param_value为指向保存平台属性信息的指针。

第三个参数param_value_size指定param_value参数指向的内存空间大小,这个值必须大于第四个参数的返回值。




注意:OpenCL 3.0 增加了不少选项值,上表不全。

我的机器显示:

Device Name:NVIDIA GeForce MX450
Compute Units Number: 14
Device Frequency: 1575(MHz)
Device Global Size: 1864(MB)
Device Global CacheLine: 128(Byte)
Device Version:OpenCL 3.0 CUDA
Device Extensions:cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics cl_khr_local_int32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_fp64 cl_khr_3d_image_writes cl_khr_byte_addressable_store cl_khr_icd cl_khr_gl_sharing cl_nv_compiler_options cl_nv_device_attribute_query cl_nv_pragma_unroll cl_nv_copy_opts cl_nv_create_buffer cl_khr_int64_base_atomics cl_khr_int64_extended_atomics cl_khr_device_uuid cl_khr_pci_bus_info cl_khr_external_semaphore cl_khr_external_memory cl_khr_external_semaphore_opaque_fd cl_khr_external_memory_opaque_fd

posted @ 2024-12-19 18:56  turbinee  阅读(100)  评论(0)    收藏  举报