GPGPU OpenCL 获取设备信息

简介: 在使用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

 

相关实践学习
在云上部署ChatGLM2-6B大模型(GPU版)
ChatGLM2-6B是由智谱AI及清华KEG实验室于2023年6月发布的中英双语对话开源大模型。通过本实验,可以学习如何配置AIGC开发环境,如何部署ChatGLM2-6B大模型。
相关文章
|
11月前
|
机器学习/深度学习 算法
Proximal SFT:用PPO强化学习机制优化SFT,让大模型训练更稳定
本文介绍了一种改进的监督微调方法——Proximal Supervised Fine-Tuning (PSFT),旨在解决传统SFT易过拟合、泛化能力差及导致“熵坍塌”的问题。受PPO强化学习算法启发,PSFT通过引入参数更新的稳定性机制,防止模型在训练中变得过于确定,从而提升探索能力与后续强化学习阶段的表现。实验表明,PSFT在数学推理、模型对齐及泛化能力方面均优于传统SFT。
990 3
Proximal SFT:用PPO强化学习机制优化SFT,让大模型训练更稳定
|
SQL 人工智能 自然语言处理
DataV Note:让Jupyter Notebook绽放新活力
分享阿里云旗下的一款基于Jupyter底座的工具(DataV Note,智能分析文档)给大家。这是一款以Notebook文档形式为基础、由强大AI模型驱动的智能分析、允许多人协作的数据可视分析平台。
912 155
|
人工智能 自然语言处理 算法
GPT-4 Turbo 和 GPT-4 的区别
GPT-4 vs GPT-4 Turbo: 探索OpenAI的顶级模型,GPT-4以其出色的文本生成和理解闻名,适合高端内容需求,但成本高;GPT-4 Turbo,优化版,提供相似性能但更高效、经济,适用于大规模商业应用,尤其在速度和资源效率上展现优势。用户可根据质量、效率和成本需求选择合适模型。
762 4
|
消息中间件 Linux RocketMQ
在Red Hat Enterprise Linux 9上使用Docker快速安装并部署
通过以上步骤,你可以在Red Hat Enterprise Linux 9上使用Docker快速安装并部署RocketMQ。这种方法不仅简化了安装过程,还提供了一个灵活的环境来管理和扩展消息队列系统。RocketMQ作为一款高性能的分布式消息系统,通过Docker可以实现快速部署和高效管理。
984 3
|
人工智能 安全 Android开发
手机也能跑通义Qwen3大模型,手把手教你部署!
全球开源模型冠军Qwen3与端到端全模态模型Qwen2.5-Omni现已成功在手机上跑通!借助MNN支持,适配Android、iOS及桌面端,实现低延迟、本地化、高安全的AI体验。用户可通过自定义Sampler设置、System Prompt和Max New Tokens调节模型输出风格与长度。
6273 11
|
数据可视化 Java 大数据
Java 大视界 -- 基于 Java 的大数据可视化在城市规划决策支持中的交互设计与应用案例(164)
本文围绕基于 Java 的大数据可视化在城市规划决策支持中的应用展开,分析决策支持现状与挑战,阐述技术应用方法,结合实际案例和代码,提供实操性强的技术方案。
|
缓存 小程序 前端开发
使用 Snapdragon Profiler 分析 Android 应用的 GPU 内存泄露
前几天同事发现一个正在开发的小程序在反复进入退出时,应用的 GPU 内存占用会一直上涨直到触发 OOM,因为小程序使用了内核作为渲染引擎,所以怀疑是内核发生内存泄露,让我帮忙分析看看。 > Snapdragon Profiler Snapshot Capture 进入小程序后,使用 [Snapdragon Profiler][1] Snapshot Capture 抓取了当前帧的
3644 0
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
机器学习/深度学习 人工智能 算法
【AI】从零构建深度学习框架实践
【5月更文挑战第16天】 本文介绍了从零构建一个轻量级的深度学习框架tinynn,旨在帮助读者理解深度学习的基本组件和框架设计。构建过程包括设计框架架构、实现基本功能、模型定义、反向传播算法、训练和推理过程以及性能优化。文章详细阐述了网络层、张量、损失函数、优化器等组件的抽象和实现,并给出了一个基于MNIST数据集的分类示例,与TensorFlow进行了简单对比。tinynn的源代码可在GitHub上找到,目前支持多种层、损失函数和优化器,适用于学习和实验新算法。
731 2
|
NoSQL Linux Redis
Centos7 安装和配置 Redis 5 教程
在Centos上安装Redis 5,如果是 Centos8,那么 yum 仓库中默认的 redis 版本就是 5,直接 yum install 即可。
2046 0