咨询热线:13534118111 联系人:谭忠伦 地址:安徽省合肥市金寨路92号
OpenCL的buffer以及sub-buffer
来源:澳门百乐门娱乐成 发布时间:2019-11-16 点击量:180
buffer,sub-buffer和image对比
相同点:都是OCL memory对象
维度 | 特性关键词 | |
---|---|---|
buffer | 一维 | array of bytes |
sub-buffer | 一维 | views into buffer |
image | 二维或者三维 | 读写操作、可选的format、sampler及clamp |
关于buffer的释放问题
在OpenCL中,对于cl_mem
对象都是采用reference-counted的模式来控制对相应资源的释放的。OpenCL中增加某个cl_mem
的方法为cl_int clRetainMemObject ( cl_mem memobj)
,而clCreateBuffer, clCreateSubBuffer, clCreateImage2D, and clCreateImage3D都会执行一个 implicit retain。clCreateSubBuffer also performs an implicit retain on the memory object used to create the sub-buffer or image object. 所以,如果一个cl_men对象创建了多个sub-buffer,那么应该对每个sub-buffer都进行clRelaseMemObject
. 降低引用计数的方法为cl_int clReleaseMemObject ( cl_mem memobj)
. 当一个cl_mem
的引用计数变为0,且相关的命令也已经执行完毕,那么OCL就会释放相关资源。另外,clSetKernelArg并不会retain相关的cl_mem。
查询cl_mem对象的相关信息
可以使用clGetMemObjectInfo
查询到cl_mem
对象的各种相关信息。如下的代码查询cl_mem
对象是何种类型:
cl_int errNum;cl_mem memory;cl_mem_object_type type;// initialize memory object and so onerrNum = clGetMemObjectInfo( memory, CL_MEM_TYPE, sizeof(cl_mem_object_type), &type, NULL);switch(type){ case CL_MEM_OBJECT_BUFFER: { // handle case when object is buffer or sub-buffer break; } case CL_MEM_OBJECT_IMAGE2D: case CL_MEM_OBJECT_IMAGE3D: { // handle case when object is a 2D or 3D image break; } default // something very bad has happened break;}
buffer的读写
OpenCL中,host可以使用command来执行对buffer的读写。值得一提的是,在创建buffer的时候,比如使用clCreateBuffer
,使用合适的参数,比如CLK_MEM_COPY_HOST
,也可以实现对buffer资源的写入操作。但是,这种做法起码有三个明显的局限性:
- 只能在创建buffer的时候执行写入,而无法对已经存在的
cl_mem
对象执行写入只能写,而不能读只能写全部的数据,而不能只写部分片段的数据而OCL提供的相关command则可以十分自由的进行各种操作。
clEnqueueWriteBuffer:把host的内容写入的buffer regionclEnqueueReadBuffer:把buffer的内容复制到host内存中clEnqueueReadBufferRect:把一个二维或者三维的buffer的部分区域数据复制到host内存clEnqueueWriteBufferRect:把host上的数据写入到二维或者三维buffer的局部区域clEnqueueCopyBuffer:从一个buffer拷贝数据到另一个buffer,适用于一维的clEnqueueCopyBufferRect:从一个buffer拷贝片段数据到另一个buffer片段,适用于二维或者三维的map buffer and sub-buffer
mapping一个buffer或者sub-buffer可以得到一个host指针,这个指针可以直接在host上使用,比如作为参数传给其他函数,但这些函数不会感知到这些内存实际是由OCL管理并利用的。map使用clEnqueueMapBuffer
,使用完之后需要unmap,使用clEnqueueUnmapMemObject
.
参考:OpenCL Programming Guide
相关产品
-
1日中午,新华社受权发布消息:习近平指示中共中央台办、国务院台办负责人向台湾有关方面转达他和大陆人民对在本次事件中不幸遇难同胞的深切哀悼、对遇难者家属及受伤同胞的诚挚慰问。
-
根据IT之家此前报道,海信2015年出资2370万美元收购夏普位于墨西哥工厂全部股权及资产,并获得夏普电视美洲地区品牌使用权(巴西除外)。2016年开始在北美地区使用夏普授权的品牌,现在夏普称海信违反契约,销售低品质产品,极大地影响了夏普的品牌形象。
-
比赛采用世界杯赛制,各项目排名前列的顶尖选手齐聚此间。其中,参加本次比赛的中国射箭队“新老结合”,女队由安琦轩、齐玉红、曹慧和孔肖蕊组成,男队由丁倚亮、孙权、王大鹏、王岩组成。
-
“苏炳添在男子百米不仅突破10秒,更历史性杀入决赛,展现了中国速度。这是亚洲田径的第一次,也是黄种人的第一次。”杜兆才对这名广东短跑小伙青睐有加,连续两天,他在公开场合点名表扬苏炳添,并希望苏炳添再接再厉,把这个成绩当做新的起点。
-
赛后点评比赛,里皮表示:“我们开场进入了状态,创造了几次机会,但我的队员之后似乎有一些紧张,上半场的表现不尽如人意。下半场,我们还是成功打入了两粒进球,赢下了比赛。”对于未来他说,“我们的目标将着眼于未来,国足成长和进步的空间还有许多,在下一届亚洲杯,我们要争取成为主角。”
-
德国民调机构在佛罗萨进行调查显示,超过八成德国人使用过中草药。中医的科研上,德国也领先欧洲其他国家。目前有10余个中医研究机构,几十所学校开设了中医专业。
-
“光明行”是海航集团“一带一路”建设系列公益行动的典型活动之一。2016年7月,海航正式启动“海南柬埔寨光明行”活动,计划在2018年12月之前,派出义诊医疗队,为柬埔寨1000名白内障患者实施免费白内障手术。截至目前,海航先后开展三次“光明行”活动,为柬埔寨371名患有白内障的贫困民众带来了光明。
-
2012年12月,习主席将“强国梦”引申为“强军梦”,强调努力建设巩固国防和强大军队。2013年3月,习近平在出席十二届全国人大一次会议解放军代表团全体会议时提出“建设一支听党指挥、能打胜仗、作风优良的人民军队,是党在新形势下的强军目标。”强国梦离不开强军梦,强军梦靠强军目标来落实。实现强军目标,则需要一支世界一流军队。而一流军队,怎么能没有一个一流军事人才的高地?
热点资讯
- 深渊海沟科学之谜知多少2019-11-07
- 20年来土地管理法的第一次重大改革:清除土地改革、土地管理法、土地改革和建设用地的障碍2019-10-31
- 《痛苦地狱》公告称取消未分级版开发,原因是缺钱2019-11-08
- 华为PSmart2019渲染图曝光:配麒麟710,水滴屏+渐变色机身2019-11-05
- V社就辱华事件回复Burning,不支持种族主义歧视与侮辱2019-11-16
- 亚马逊仓储员工计划组建工会:工资低就不说了还把我们当“机器人”2019-07-09
- 地皮菜都有哪些功效呢?怎么才能清洗干净呢?2019-11-16
- 摩拜实施全国免押:退押金时易误操作买成“半年卡”2019-07-09