OpenCL编程指南-10.1C++包装器API

C++包装器API概述

C++API划分为多个类,分别映射到一个OpenCL C类型,例如,cl::Memory类就映射到OpenCL C中的cl_mem。不过,C++ API会尽可能使用继承提供额外的一层类型抽象;例如,类cl::Buffer派生自基类cl::Memory,表示所有可能的OpenCL内存对象的1维内存子类。类层次体系结构见图12-1。
在这里插入图片描述
一般地,C++类类型到底层OpenCL C类型有直接的映射,在这种情况下,底层C类型可以通过操作符()访问。例如,以下代码可以得到第一个OpenCL平台,查询底层OpenCL C类型cl_platform,并把它赋给变量platform:

extern void someFunction(cl_program);cl_platform platform;
{std::vector<cl::Platform> platformList;cl::Platform::get(&platformList);platform = platformList[0]();someFunction(platform); //safe call
}
someFunction(platform); //not safe

这个例子中的最后一行是不安全的,因为矢量platform-List在退出基本代码块时已经撤销,因此,会对platformList中的各个平台做一个隐式的clReleasePlatform调用,从而允许底层OpenCL实现释放所有相关联的内存。

C++包装器API异常

最后,在深入介绍一个详细的例子之前,我们介绍OpenCL C++异常。为了跟踪应用程序中由于OpenCL操作错误而产生的错误,C API使用了cl_int类型错误值。这些错误值会作为一个API函数的结果返回,或者,如果这个API函数返回一个OpenCL对象,错误码会作为函数的最后一个参数返回。C++API支持以这种形式跟踪错误,不过也可以使用C++异常。默认情况下并没有启用异常,会根据底层CAPI设置并返回OpenCL错误码。

要使用异常,必须显式地启用异常,在包含cl.hpp之前定义以下预处理器宏:

__CL_ENABLE_EXCEPTIONS

一旦启用,由OpenCLC调用报告的非CL_SUCCESS错误值将抛出异常类cl::Error。默认情况下,方法cl::Error::what()会返回指向一个串的const指针,指示报告错误的特定C API调用,例如clGetDeviceInfo。可以覆盖cl::Error::what()的默认行为,为此在包含cl.hpp之前要定义以下预处理器宏:

__CL_USER_OVERRIDE_ERROR_STRINGS
//表12-1 预处理器错误宏及其默认值
预处理器宏名                                       默认值
__GET_DEVICE_INFO_ERR                             clCetDeviceInfo
__GET_PLATPORM_INEO_ERR                           clGetPlatformInfo
__GET_DEVICE_IDS_ERR                              clGetDeviceIds
__GET_CONTEXT_INFO_ERR                            clGetContextInfo
__GET_EVENT_INFO_ERR                              clGetEventInfo
__GET_EVENT_PROFILE_INFO_ERR                      clGetEventProfileInfo
__GET_MEM_OBJECT_INPO_ERR                         clGetMemmObjectInfo
__GET_IMAGE_INFO_ERR                              clCetImageInfo
__GET_SAMPLER_INFO_ERR                            clGetSampleInfo
__GET_KERNEL_INFO_ERR                             clGetKernelInfo
__GET_KERNEL_WORK_GROUP_INPO_ERR                  clGetKernelWorkGroupInfo
__GET_PROGRAM_INPO_ERR                            clGetProgramInfo
__GET_PROGRAM_BUILD_INFO_ERR                      clGetProgramBuildInfo
__GET_CONAND_QUEUE_INFO_ERR                       clGetCommandQueueInfo
__CREATE_CONTEXT_FROM_TYPE_ERR                    clCreateContextFromType
__GET_SUPPORTED_IMAGE_FORMATS_ERR                 clGetSupportedImageFormats
__CREATE_BUFEER_ERR                               clCreateBuffer
__CREATE_SUBBUFFER_ERR                            clCreateSubBuffer
__CREATE_GL_BUFFER_ERR                            clCreateGLBuffer
__CREATE_IMAGE2D_ERR                              clCreateImage2D
__CREATE_IMAGE3D_ERR                              clCreateImage3D
__SET_MEM_OBJECT_DESTRUCTOR_CALLBACK_ERR          clSetMemmObjectDestructorCallback
__CREATE_USER_EVENT_ERR                           clCreateUserEvent
__SET_USER_EVENT_STATUS_ERR                       clSetUserEventStatus
__SET_EVENT_CALLBACK_ERR                          clSetEventCallback
__WAIT_FOR_EVENTS_ERR                             clWaitForEvents
__CREATE_KERNEL_ERR                               clCreateKernel
__SET_KERNEL_ARGS_ERR                             clSetKernelArgs
__CREATE_PROGRAM_WITH_SOURCE_ERR                  clCreateProgramWithSource
__CREATE_PROGRAM_WITH_BINARY_ERR                  clCreateProgramWithBinary
__BUILD_PROGRAM_ERR                               clBuildProgram
__CREATE_KERNELS_IN_PROGRAM_ERR                   clCreateKernelsInProgram
__CREATE_COMMAND_OUEUE_ERR                        clCreateCommandQueue
__SET_CONMAND_QUEUE_PROPERTY_ERR                  clSetCommandQueueProperty
__ENQUEUE_READ_BUFEER_ERR                         clEnqueueReadBuffer
__ENQUEUE_READ_BUFEER_RECT_ERR                    clEnqueueReadBufferRect
__ENQUEUE_WRITE_BUFFER_ERR                        clEnqueueWriteBuffer
__ENQUEUE_WRITE_BUEFER_RECT_ERR                   clEnqueueWriteBufferRect
__ENQEUE_COPY_BUFEER_ERR                          clEnqueueCopyBuffer
__ENQEUE_COPY_BUFFER_RECT_ERR                     clEnqueueCopyBufferRect
__ENQUEUE_READ_IMAGE_ERR                          clEnqueueReadImage
__ENQUEUE_WRITE_IMAGE_ERR                         clEnqueueWriteImage
__ENQUEUE_COPY_IMAG_ERR                           clEnqueueCopyImage
__ENQUEUE_COPY_IMAGE_TO_BJFEER_ERR                clEnqueueCopyImageToBuffer
__ENQUEUE_COPY_BUFEER_TO_IMAGE_ERR                clEnqueueCopyBufferToImage
__ENQUEUE_MAP_BUFFER_ERR                          clEnqueueMapBuffer
__ENQUEUE_MAP_IMAGE_ERR                           clEnqueueMapImage
__ENQUEUE_UNNAP_MEM_OBJECT_ERR                    clEnqueueUnmapMemObject
__ENQUEUE_NDRANGE_KERNEL_ERR                      clEnqueueNDRangeKernel
__ENQUEUE_TASK_ERR                                clEnqueueTask
__ENQUEUE_NATIVE_KERNEL                           clEnqueueNativeKernel
__ENQUEUE_MARKER_ERR                              clEnqueueMarker
__ENQUEUE_WAIT_FOR_EVENTS_ERR                     clEnqueueWaitForEvents
__ENRQUEUE_BARRIER_ERR                            clEnqueueBarriers
__UNLOAD_COMPILER_ERR                             clUnloadCompiler
__FLUSH_ERR                                       clFlush
__FINISH_ERR                                      clFinish

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/123804.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

h5开发网站-使用jquery来实现二层嵌套的左侧列表,点击后显示右侧内容的效果

一、需求&#xff1a; 使用jquery来实现二层嵌套的左侧列表&#xff0c;点击后显示右侧内容的效果。 二、思路&#xff1a; 为一级列表项和二级子列表项分别添加了点击事件处理程序。当一级列表项被点击时&#xff0c;使用.slideToggle()方法展开或收起对应的二级子列表项。…

Unity项目包体优化经验方法论(Android平台)

前言 本篇文章主要讲解对于Unity Android平台也就是APK包体的优化经验&#xff0c;使用哪些工具能够更加便利的定位资源重灾区。本篇讲解的方法中对于Unity资源使用的AssetBundle的方式&#xff0c;如果使用addressable或其他资源管理方式&#xff0c;我还不是很清楚是否适用&…

Midjourney学习(四)光源类型prompt

序号类别光线名称英文名称描述用途示例1光线质地硬光Hard Light直接照射在主题上&#xff0c;产生明显的阴影和高对比度。强调轮廓&#xff0c;增加照片的戏剧性2光线质地软光/柔光Soft Light光线经过散射或扩散&#xff0c;产生柔和的阴影和低对比度。平滑细节&#xff0c;适合…

SQL注入案例

目录 一、简介 二、案例 1.发现注入点 2.寻找注入类型 3.寻找字段数 4.将传参值设为超出数据量的大值&#xff0c;联合查询找到回显位置 5.找到数据库 6.寻找库中的表 7.寻找表中列 8.查看表中数据 附&#xff1a;SQLMap注入 1.输入指令查数据库 2.输入指令查表 3…

物联网智慧种植农业大棚系统

一、项目背景 智慧农业是是将物联网技术和农业生产箱管理的新型农业&#xff0c;依托部署在农业生产现场的各种传感节点&#xff0c;以物联网网关为通道形成数据传输网络&#xff0c;可以实现控制柜、环境监测传感器、气象监测机器等设备的远程监控&#xff0c;达到及时高校的…

git:亲测体验rebase与merge

rebase与merge异同与最佳使用场景[1] 这个dev-cui分支从devlop分支切出后,一直都只有我一个人在开发&维护. 假如还有一位同事张三, 在devlop分支切出的分支dev-zhangsan上进行开发,他添加了一个glossary.md,而后进行了add & commit 此时项目开发完成,需要将两个分支合并…

kubernetes 之 minikube折腾记

参考官网教程&#xff0c;链接&#xff1a; https://minikube.sigs.k8s.io/docs/start/ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 sudo install minikube-linux-amd64 /usr/local/bin/minikube安装完启动minikube&#xff1a;…

使用vue-pdf出现的卡顿,空白,报错,浏览器崩溃解决办法

如果想直接知道解决办法&#xff0c;请翻到最下面 今天&#xff0c;接到了一个新的需求&#xff0c;我们公司的PDF展示卡住了&#xff0c;导致浏览器直接奔溃。我也刚来公司不久&#xff0c;就去看看是怎么发生的&#xff0c;公司前同事用的vue-pdf&#xff0c;刚开始以为是文…

2023高教社杯 国赛数学建模B题思路 - 多波束测线问题

1 赛题 B 题 多波束测线问题 单波束测深是利用声波在水中的传播特性来测量水体深度的技术。声波在均匀介质中作匀 速直线传播&#xff0c; 在不同界面上产生反射&#xff0c; 利用这一原理&#xff0c;从测量船换能器垂直向海底发射声波信 号&#xff0c;并记录从声波发射到信…

基于Java+SpringBoot+Vue前后端分离精简博客系统设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

JVM调优记录

因为大量数据备份&#xff1b;导致在备份过程出现堆溢出的情况 当前情况 总内存&#xff1a;7.92G 已使用&#xff1a;3.7G jvm总内存最大&#xff1a;3.06G jvm非堆内存&#xff1a;最大1.23G&#xff0c;使用<170M jvm堆内存&#xff1a;最大1.83G 计算 如果预留2G扩展…

Redis 高可用及持久化

Redis 高可用 在web服务器中&#xff0c;高可用是指服务器可以正常访问的时间&#xff0c;衡量的标准是在多长时间内可以提供正常服务&#xff08;99.9%、99.99%、99.999%等等&#xff09;。但是在Redis语境中&#xff0c;高可用的含义似乎要宽泛一些&#xff0c;除了保证提供…

IGES在线查看与转换

IGES 格式最初由美国空军开发并于 1980 年发布。该格式是集成计算机辅助制造 (ICAM) 项目的产品,该项目旨在通过集成操作来降低制造成本。 IGES 文件旨在允许航空航天相关设计在不同平台上传输,同时将数据丢失降至最低。 在 IGES 格式出现之前,不同公司创建的 CAD 和计算机…

把握市场潮流,溯源一流品质:在抖in新风潮 国货品牌驶过万重山

好原料、好设计、好品质、好服务……这个2023&#xff0c;“国货”二字再度成为服饰行业的发展关键词。以消费热潮为翼&#xff0c;越来越多代表性品类、头部品牌展现出独特价值&#xff0c;迎风而上&#xff0c;在抖音电商掀起一轮轮生意风潮。 一个设问是&#xff1a;在抖音…

【HttpRunnerManager】搭建接口自动化测试平台操作流程

一、需要准备的知识点 1. linux: 安装 python3、nginx 安装和配置、mysql 安装和配置 2. python: django 配置、uwsgi 配置 二、我搭建的环境 1. Centos7 &#xff08;配置 rabbitmq、mysql 、Supervisord&#xff09; 2. python 3.6.8 &#xff08;配置 django、uwsgi&am…

这些国外客户真直接

最近在某平台上遇到的客户&#xff0c;很大一部分都是非英语国家的客户&#xff0c;然而他们也有很多共性的习惯。 第一种&#xff1a;直接表达自己对这个产品感兴趣&#xff0c;然后接下来就没有下文了&#xff0c;而之所以可以看得懂&#xff0c;则是借助平台本身的翻译系统&…

自动化运维工具—Ansible

一、Ansible概述1.1 Ansible是什么1.2 Ansible的特性1.3 Ansible的特点1.4 Ansible数据流向 二、Ansible 环境安装部署三、Ansible 命令行模块&#xff08;1&#xff09;command 模块&#xff08;2&#xff09;shell 模块&#xff08;3&#xff09;cron 模块&#xff08;4&…

SourceTree 使用技巧

参考资料 SourceTree使用教程&#xff08;一&#xff09;—克隆、提交、推送SourceTree的软合并、混合合并、强合并区别SourceTree 合并分支上的多个提交&#xff0c;一次性合并分支的多次提交至另一分支&#xff0c;主分支前进时的合并冲突解决git创建补丁和打补丁 目录 一. …

Java:Springboot和React中枚举值(数据字典)的使用

目录 1、开发中的需求2、实现效果3、后端代码4、前端代码5、接口数据6、完整代码7、参考文章 1、开发中的需求 开发和使用过程中&#xff0c;通常会涉及四个角色&#xff1a;数据库管理员、后端开发人员、前端开发人员、浏览者 数据库使用int类型的数值进行存储&#xff08;e…

Mac不想用iTerm2了怎么办

这东西真是让人又爱又恨&#xff0c;爱的是它的UI还真不错&#xff0c;恨的是它把我的环境给破坏啦&#xff01;让我每次启动终端之后都要重新source激活我的python环境&#xff0c;而且虚拟环境前面没有括号啦&#xff01;这怎么能忍&#xff01;在UI和实用性面前我断然选择实…