当前位置:   article > 正文

OpenCL——OpenCL设备信息_cl::device

cl::device

OpenCL设备

每个平台可能关联不同的设备,在把内核程序发送到OpenCL设备上执行前,编程人员需要指定执行该内核代码的计算设备。OpenCL中设备对象的类型为cl_device_id,我们可以通过以下函数来查询支持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)
  • 1
  • 2
  • 3
  • 4
  • 5

该函数的调用与clGetPlatformIDs函数类似,第一次调用时,devices参数设置为NULL,num_devices返回指定平台中的设备数。第二次调用,根据第一次调用得到的设备数量分配控件,调用该函数来初始化可用设备。
在这里插入图片描述

OpenCL设备类型

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

OpenCL设备信息
#include <stdio.h>
#include <stdlib.h>
#include <CL/cl.h>

void checkErr(cl_int err, int num) {
	if (CL_SUCCESS != err) {
		printf("OpenCL error(%d) at %d\n", err, num - 1);
	}
}

int main(int argc,char ** argv) {
	cl_device_id* device;
	cl_platform_id platform;
	cl_int err;
	cl_uint NumDevice;
	//选择第一个平台
	err = clGetPlatformIDs(1, &platform, NULL);
	checkErr(err, __LINE__);
	err = clGetDeviceIDs(platform, CL_DEVICE_TYPE_GPU, 0, NULL, &NumDevice);
	checkErr(err, __LINE__);
	device = (cl_device_id*)malloc(sizeof(cl_device_id) * NumDevice);
	//选择GPU设备
	err = clGetDeviceIDs(platform, CL_DEVICE_TYPE_GPU, NumDevice, device, NULL);

	checkErr(err, __LINE__);
	for (int i = 0; i < NumDevice; i++) {
		//查询设备的名称
		char buffer[110];
		err = clGetDeviceInfo(device[i], CL_DEVICE_NAME, 100, buffer, NULL);
		checkErr(err, __LINE__);
		printf("Device Name:%s\n", buffer);
		//查询设备计算单元最大数目
		cl_uint UnitNum;
		err = clGetDeviceInfo(device[i], CL_DEVICE_MAX_COMPUTE_UNITS, sizeof(cl_uint), &UnitNum, NULL);
		checkErr(err, __LINE__);
		printf("Compute Units Number: %d\n", UnitNum);
		//查询设备核心频率
		cl_uint frequency;
		err = clGetDeviceInfo(device[i], CL_DEVICE_MAX_CLOCK_FREQUENCY, sizeof(cl_uint), &frequency, NULL);
		checkErr(err, __LINE__);
		printf("Device Frequency: %d(MHz)\n", frequency);
		//查询设备全局内存大小
		cl_ulong GlobalSize;
		err = clGetDeviceInfo(device[i], CL_DEVICE_GLOBAL_MEM_SIZE, sizeof(cl_ulong), &GlobalSize, NULL);
		checkErr(err, __LINE__);
		printf("Device Global Size: %0.0f(MB)\n", (float)GlobalSize/1024/1024);
		//查询设备全局内存缓存行
		cl_uint GlobalCacheLine;
		err = clGetDeviceInfo(device[i], CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE, sizeof(cl_uint), &GlobalCacheLine, NULL);
		checkErr(err, __LINE__);
		printf("Device Global CacheLine: %d(Byte)\n", GlobalCacheLine);
		//查询设备支持的OpenCL版本
		char DeviceVersion[110];
		err = clGetDeviceInfo(device[i], CL_DEVICE_VERSION, 100, DeviceVersion, NULL);
		checkErr(err, __LINE__);
		printf("Device Version:%s\n", DeviceVersion);
		//查询设备扩展名
		char* DeviceExtensions;
		cl_uint ExtenNum;
		err = clGetDeviceInfo(device[i], CL_DEVICE_EXTENSIONS, 0, NULL, &ExtenNum);
		checkErr(err, __LINE__);
		DeviceExtensions = (char*)malloc(ExtenNum);
		err = clGetDeviceInfo(device[i], CL_DEVICE_EXTENSIONS, ExtenNum, DeviceExtensions, NULL);
		checkErr(err, __LINE__);
		printf("Device Extensions: %s\n", DeviceExtensions);
		free(DeviceExtensions);

	}
	free(device);
	return 0;
	
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
Device Name:Intel(R) HD Graphics 5500
Compute Units Number: 24
Device Frequency: 950(MHz)
Device Global Size: 1489(MB)
Device Global CacheLine: 64(Byte)
Device Version:OpenCL 2.0
Device Extensions: cl_intel_accelerator cl_intel_advanced_motion_estimation cl_intel_ctz cl_intel_d3d11_nv12_media_sharing cl_intel_dx9_media_sharing cl_intel_motion_estimation cl_intel_simultaneous_sharing cl_intel_subgroups cl_khr_3d_image_writes cl_khr_byte_addressable_store cl_khr_d3d10_sharing cl_khr_d3d11_sharing cl_khr_depth_images cl_khr_dx9_media_sharing cl_khr_gl_depth_images cl_khr_gl_event cl_khr_gl_msaa_sharing cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics cl_khr_gl_sharing cl_khr_icd cl_khr_image2d_from_buffer cl_khr_local_int32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_mipmap_image cl_khr_mipmap_image_writes cl_khr_spir
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/644282
推荐阅读
相关标签
  

闽ICP备14008679号