GPGPU OpenCL 获取设备信息

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介: 在使用OpenCL编程中,需要对GPU设备的底层理解,这样才能更好的进行代码优化。 比如计算单元CU数量,每个CU的执行单元PE数量,每个CU中的共享内存大小等等。只有了解了这些才能更好的使用共享内存,设计核函数的运行参数等。

在使用OpenCL编程中,需要对GPU设备的底层理解,这样才能更好的进行代码优化。

比如计算单元CU数量,每个CU的执行单元PE数量,每个CU中的共享内存大小等等。只有了解了这些才能更好的使用共享内存,设计核函数的运行参数等。

本文:http://www.cnblogs.com/xudong-bupt/p/3586050.html 

1.clGetDeviceInfo

  OpenCL使用clGetDeviceInfo函数获取设备具体,函数原型如下:

  cl_int clGetDeviceInfo (

    cl_device_id device,  //设备id号

    cl_device_info param_name,   //枚举变量,要获取的设备信息名称

     size_t param_value_size,  //参数类型大小

    void *param_value,  //参数值

    size_t *param_value_size_ret  //参数类型大小

  );

  这个函数需要调用两次,第一次获取参数类型大小,第二次获取参数。

2.代码实例

  2.1 tool.h 与tool.cpp

    见:http://www.cnblogs.com/xudong-bupt/p/3582780.html 

  2.2 QueryDeviceInfo.cpp

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include "tool.h"
 4 #include <CL/cl.h>
 5 
 6 int main()
 7 {
 8     ///Get first available Platform
 9     cl_platform_id platform;
10     getPlatform(platform);
11 
12     ///get first available GPU
13     cl_device_id *devices=getCl_device_id(platform);
14 
15     char        *value;
16     size_t      valueSize;
17     size_t      maxWorkItemPerGroup;
18     cl_uint     maxComputeUnits=0;
19     cl_ulong    maxGlobalMemSize=0;
20     cl_ulong    maxConstantBufferSize=0;
21     cl_ulong    maxLocalMemSize=0;
22 
23     ///print the device name
24     clGetDeviceInfo(devices[0], CL_DEVICE_NAME, 0, NULL, &valueSize);
25     value = (char*) malloc(valueSize);
26     clGetDeviceInfo(devices[0], CL_DEVICE_NAME, valueSize, value, NULL);
27     printf("Device Name: %s\n", value);
28     free(value);
29 
30     /// print parallel compute units(CU)
31     clGetDeviceInfo(devices[0], CL_DEVICE_MAX_COMPUTE_UNITS,sizeof(maxComputeUnits), &maxComputeUnits, NULL);
32     printf("Parallel compute units: %u\n", maxComputeUnits);
33 
34     ///maxWorkItemPerGroup
35     clGetDeviceInfo(devices[0], CL_DEVICE_MAX_WORK_GROUP_SIZE,sizeof(maxWorkItemPerGroup), &maxWorkItemPerGroup, NULL);
36     printf("maxWorkItemPerGroup: %zd\n", maxWorkItemPerGroup);
37 
38     /// print maxGlobalMemSize
39     clGetDeviceInfo(devices[0], CL_DEVICE_GLOBAL_MEM_SIZE,sizeof(maxGlobalMemSize), &maxGlobalMemSize, NULL);
40     printf("maxGlobalMemSize: %lu(MB)\n", maxGlobalMemSize/1024/1024);
41 
42     /// print maxConstantBufferSize
43     clGetDeviceInfo(devices[0], CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE,sizeof(maxConstantBufferSize), &maxConstantBufferSize, NULL);
44     printf("maxConstantBufferSize: %lu(KB)\n", maxConstantBufferSize/1024);
45 
46     /// print maxLocalMemSize
47     clGetDeviceInfo(devices[0], CL_DEVICE_LOCAL_MEM_SIZE,sizeof(maxLocalMemSize), &maxLocalMemSize, NULL);
48     printf("maxLocalMemSize: %lu(KB)\n", maxLocalMemSize/1024);
49 
50     free(devices);
51     return 0;
52 }

执行结果:

  

3.其他

  在安装了OpenCL的平台,可以使用命令:clinfo

  The OpenCL Specification :  https://www.khronos.org/registry/cl/specs/opencl-1.2.pdf

 

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
相关文章
|
8月前
|
Linux C语言 SoC
嵌入式linux总线设备驱动模型分析
嵌入式linux总线设备驱动模型分析
95 1
|
8月前
|
存储 算法 编译器
|
3月前
|
传感器 编解码 人工智能
为 NVIDIA Jetson 和其他嵌入式系统选择合适的摄像头
本文详细介绍了为NVIDIA Jetson和其他嵌入式系统选择合适摄像头模块的关键因素,包括传感器类型(CCD和CMOS)、电子快门(全局快门和滚动快门)、彩色或单色传感器、动态范围、分辨率、帧率和接口等。文章还提供了光学器件的选择建议,并列出了NVIDIA摄像头模块合作伙伴,帮助用户完成从概念到生产的整个设计过程。
56 0
为 NVIDIA Jetson 和其他嵌入式系统选择合适的摄像头
|
8月前
|
并行计算 API C++
GPU 硬件与 CUDA 程序开发工具
GPU 硬件与 CUDA 程序开发工具
165 0
|
开发工具
RK3399平台开发系列讲解(内核驱动外设篇)6.19、摄像头OV4689模组驱动代码分析
RK3399平台开发系列讲解(内核驱动外设篇)6.19、摄像头OV4689模组驱动代码分析
215 0
 RK3399平台开发系列讲解(内核驱动外设篇)6.19、摄像头OV4689模组驱动代码分析
|
数据处理 数据安全/隐私保护 SoC
DSP+ZYNQ硬件说明手册-XQTyer【开源】
XQ6657Z35/45-EVM 高速数据处理评估板(XQTyer 评估板)由广州星嵌电子科技有限公司自主研发,包含一片TI DSP TMS320C6657和一片Xilinx ZYNQ-7000 SoC 处理器XC7Z035-2FFG676I。适用于无人机蜂群、软件无线电系统,基带信号处理,无线仿真平台,高速图像采集、处理等领域。
DSP+ZYNQ硬件说明手册-XQTyer【开源】
|
存储 Web App开发 Unix
ARM嵌入式学习笔记——《设备驱动基础》(一)
ARM嵌入式学习笔记——《设备驱动基础》
156 0
|
传感器 网络协议 Linux
ARM嵌入式学习笔记——《设备驱动基础》(三)
ARM嵌入式学习笔记——《设备驱动基础》
231 0
|
Linux C++
ARM嵌入式学习笔记——《设备驱动基础》(二)
ARM嵌入式学习笔记——《设备驱动基础》
108 0
|
数据采集 传感器 监控
SOM-XQ6657Z45工业级核心板DSP+ARM+FPGA C6657 ZYNQ7035/45
一款基于TI KeyStone 架构C6000 系列TMS320C6657 双核C66x定点/浮点DSP以及Xilinx Zynq-7000 系列XC7Z035/045 SoC 处理器设计的工业级核心板。
SOM-XQ6657Z45工业级核心板DSP+ARM+FPGA C6657 ZYNQ7035/45