GPGPU OpenCL 获取设备信息
在使用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
#include <stdio.h>
#include <stdlib.h>
#include "tool.h"
#include <CL/cl.h> int main()
{
///Get first available Platform
cl_platform_id platform;
getPlatform(platform); ///get first available GPU
cl_device_id *devices=getCl_device_id(platform); char *value;
size_t valueSize;
size_t maxWorkItemPerGroup;
cl_uint maxComputeUnits=;
cl_ulong maxGlobalMemSize=;
cl_ulong maxConstantBufferSize=;
cl_ulong maxLocalMemSize=; ///print the device name
clGetDeviceInfo(devices[], CL_DEVICE_NAME, , NULL, &valueSize);
value = (char*) malloc(valueSize);
clGetDeviceInfo(devices[], CL_DEVICE_NAME, valueSize, value, NULL);
printf("Device Name: %s\n", value);
free(value); /// print parallel compute units(CU)
clGetDeviceInfo(devices[], CL_DEVICE_MAX_COMPUTE_UNITS,sizeof(maxComputeUnits), &maxComputeUnits, NULL);
printf("Parallel compute units: %u\n", maxComputeUnits); ///maxWorkItemPerGroup
clGetDeviceInfo(devices[], CL_DEVICE_MAX_WORK_GROUP_SIZE,sizeof(maxWorkItemPerGroup), &maxWorkItemPerGroup, NULL);
printf("maxWorkItemPerGroup: %zd\n", maxWorkItemPerGroup); /// print maxGlobalMemSize
clGetDeviceInfo(devices[], CL_DEVICE_GLOBAL_MEM_SIZE,sizeof(maxGlobalMemSize), &maxGlobalMemSize, NULL);
printf("maxGlobalMemSize: %lu(MB)\n", maxGlobalMemSize//); /// print maxConstantBufferSize
clGetDeviceInfo(devices[], CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE,sizeof(maxConstantBufferSize), &maxConstantBufferSize, NULL);
printf("maxConstantBufferSize: %lu(KB)\n", maxConstantBufferSize/); /// print maxLocalMemSize
clGetDeviceInfo(devices[], CL_DEVICE_LOCAL_MEM_SIZE,sizeof(maxLocalMemSize), &maxLocalMemSize, NULL);
printf("maxLocalMemSize: %lu(KB)\n", maxLocalMemSize/); free(devices);
return ;
}
执行结果:

3.其他
在安装了OpenCL的平台,可以使用命令:clinfo
The OpenCL Specification : https://www.khronos.org/registry/cl/specs/opencl-1.2.pdf
GPGPU OpenCL 获取设备信息的更多相关文章
- Android 获取设备信息 异常
/**获取设备信息 * @param c * @return */ public static void setDeviceInfo(Context c,RequestParams params){ ...
- React Native(五)——获取设备信息react-native-device-info
心酸史: 自从接触rn开始后,越来越多的引入第三方组件而开始的配置文件,让自己一再头疼: 明明是按照官方文档一步一步的配置,为什么别人可以做到的自己却屡屡出错,真是哭笑不得--从微信分享react-n ...
- 微信小程序 --- 获取设备信息
获取设备信息: wx.getSystemInfo model:手机型号 pixelRatio:设备像素比 windowWidth:窗口宽度 windowHeight:窗口高度 language:语言 ...
- PhoneGap获取设备信息
一. 获取设备信息的方法列表(如果没有或者检测不出来就显示undefined) 1.device.name 设备名称(一些国产机检测不出来) 2.device.model ...
- appium自动化测试框架——封装获取设备信息类
在上一节中,我们已经解决了如何在python中执行cmd,并获取执行结果.下面就小小实战一下,获取设备信息. 一.思路 1.windows上获取设备信息的方法 输入dos命令“adb devices” ...
- 小白学phoneGap《构建跨平台APP:phoneGap移动应用实战》连载五(使用PhoneGap获取设备信息)
除了能够将HTML页面打包成可以直接安装运行的APP外,PhoneGap的一个最大优势在于可以通过JavaScript调用设备来访问设备上的硬件信息,从而实现一些原本只有依靠原生SDK才能够达到的目的 ...
- 微信小程序把玩(三十八)获取设备信息 API
原文:微信小程序把玩(三十八)获取设备信息 API 获取设备信息这里分为四种, 主要属性: 网络信息wx.getNetWorkType, 系统信息wx.getSystemInfo, 重力感应数据wx. ...
- 测试成长记录:python调adb无法获取设备信息bug记录
背景介绍: 一直在负责公司Android自动化的编写工作,采用的是uiautomator2,需要获取设备id来连接设备,就是 adb devices 问题描述: 之前一直用 subprocess.ch ...
- ios获取设备信息总结
1.获取设备的信息 UIDevice *device = [[UIDevice alloc] int]; NSString *name = device.name; //获取设备所有者的名 ...
随机推荐
- ImportError: No module named yum
[root@localhost]# yum-complete-transactionTraceback (most recent call last): File "/usr/sbin/y ...
- cordova 使用WKWebView 适配iphoneX及解决不能拨打电话问题
先安装插件 cordova-plugin-wkwebview-engine 然后修改插件中CDVWKWebViewEngine.m文件,下面是全部代码,修改部分已经进行注释 /* Licens ...
- 初探Java字符串
转载: 初探Java字符串 String印象 String是java中的无处不在的类,使用也很简单.初学java,就已经有字符串是不可变的盖棺定论,解释通常是:它是final的. 不过,String是 ...
- Linux下c++常用调试
进程调试 自己写的代码,直接gdb r/bt就可以了. 正在运行的进程,先ps ax找到进程id.然后gdb进入之后attach 进程id.stop/continue暂停和继续进程. core了,有c ...
- MySQL笔记(二)之数据检索常用关键字
SELECT 用于数据的选择 语法: SELECT 列 FROM 表; #从表中选择某些列,也可以是*,代表全部列 DISTINCT 当某些列包含重复值的时候,DISTINCT用于过滤掉重复值,使重复 ...
- Hibernate lazy(延迟加载)
Hibernat加载策略有两种,分别为即时加载和延迟加载(懒加载或者lazy),get使用的是即时加载,使用get获取数据时会立即查找(会先去缓存查找,如果缓存中没有找到,才会去数据库中查找),而lo ...
- 【BZOJ 3229】 3229: [Sdoi2008]石子合并 (GarsiaWachs算法)
3229: [Sdoi2008]石子合并 Description 在一个操场上摆放着一排N堆石子.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合 ...
- android intent 传递 二进制数据
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 实现序列化.
- BZOJ1226 SDOI2009学校食堂
这题状压DP太神了. g[i][j][k]表示前i-1个人都已打到饭,自己和后七个人打饭的情况是j,当前最后一个打饭的与i的关系是k 如果j&1==1说明当前这个人也打了饭,那么可以转移到g[ ...
- POJ1226 Substrings
后缀数组. 求多个字符串翻转与否中最长公共子串长. 二分答案,反过来多建一倍的字符串,二分时特判一下即可. By:大奕哥 #include<cstring> #include<cst ...