clCreateBuffer参数说明
来源:互联网 发布:生死狙击刷金币软件 编辑:程序博客网 时间:2024/05/23 19:20
clCreateBuffer第二个参数可以有多种,详情请点击此次,对于前三个比较简单,在此就忽略。
1、CL_MEM_USE_HOST_PTR
对于CL_MEM_USE_HOST_PTR,刚开始buffer object的值是来自于host_ptr,但buffer object处理之后,host_ptr中的值如何变化,这点在OpenCL中没有定义。那就看看A卡对次是如何处理,一个小程序:
data=new float[N]; output=new float[N]; for(int i=0;i<N;i++){ data[i]=1; } b=1; ... bufferA=clCreateBuffer(context,CL_MEM_READ_ONLY|CL_MEM_USE_HOST_PTR,sizeof(float)*N,data,&err); ... err=clEnqueueReadBuffer(cmdQueue,bufferA,CL_TRUE,0,sizeof(float)*N,output,0,NULL,&timing_event); ... for(int i=0;i<N;i++){ cout<<"output:"<<output[i]; cout<<" data:"<<data[i]<<endl; }
对于kernel函数:
__kernel void call_test(__global float* A,const float b){ int index=get_global_id(0); A[index]=b+100;}程序执行结果如下:
output:101 data:101output:101 data:101output:101 data:101output:101 data:101output:101 data:101output:101 data:101output:101 data:101output:101 data:101output:101 data:101output:101 data:101output:101 data:101output:101 data:101output:101 data:101output:101 data:101output:101 data:101output:101 data:101output:101 data:101
可以出,对于A卡OpenCL实现来说,对于buffer object操作完之后的值,也写回到host_ptr主机内存中。
2、CL_MEM_COPY_HOST_PTR
对于CL_MEM_COPY_HOST_PTR来说,buffer object的初始值使用host_ptr,buffer object操作完成后的值也不会写回到host_ptr主机内存中。继续看代码:
(修改上述代码创建buffer object代码)
bufferA=clCreateBuffer(context,CL_MEM_READ_ONLY|CL_MEM_COPY_HOST_PTR,sizeof(float)*N,data,&err);其他代码保持不变,程序结果为:
output:101 data:1output:101 data:1output:101 data:1output:101 data:1output:101 data:1output:101 data:1output:101 data:1output:101 data:1output:101 data:1output:101 data:1output:101 data:1output:101 data:1output:101 data:1output:101 data:1output:101 data:1output:101 data:1output:101 data:1output:101 data:1output:101 data:1
3、CL_MEM_USE_PERSISTENT_MEM_AMD
对于CL_MEM_USE_PERSISTENT_MEM_AMD,创建的buffer object是在设备内存上的zero copy buffer。对于CL_MEM_USE_PERSISTENT_MEM_AMD的使用,请看下列代码:
bufferA=clCreateBuffer(context,CL_MEM_READ_ONLY|CL_MEM_USE_PERSISTENT_MEM_AMD,sizeof(float)*N,0,&err); checkErr(err,"clCreateBuffer",__LINE__); void *mapPtr=clEnqueueMapBuffer(cmdQueue,bufferA,CL_TRUE,CL_MAP_WRITE,0,sizeof(float)*N,0,NULL,NULL,&err); memcpy(mapPtr,data,sizeof(float)*N); err=clEnqueueUnmapMemObject(cmdQueue,bufferA,mapPtr,0,NULL,NULL);把buffer object映射到主机地址空间。
0 0
- clCreateBuffer参数说明
- clCreateBuffer参数说明
- clCreateBuffer中cl_mem_flags参数解释
- clCreateBuffer中cl_mem_flags参数解释
- clCreateBuffer
- GHOST参数详细说明
- jdbc url参数说明
- Tomcat 启动参数说明。
- oracle参数说明
- document.execComand()参数说明
- CreateEvent()的参数说明
- Gentoo emerge 参数说明
- CMPP相关参数说明
- DB2参数说明
- Recordset 参数说明
- MySQL参数说明
- oracle10g初始化参数说明
- oracle参数说明
- AForge学习笔记(5):AForge.Imaging(下)
- c++继承及例子
- Matlab按行读取数据的方法
- AForge学习笔记(8):AForge.Imaging.ColorReduction
- AForge学习笔记(9):AForge.Imaging.ComplexFilters
- clCreateBuffer参数说明
- AForge学习笔记(10):AForge.Imaging.Filters
- telepresence: Open Source SIP Telepresence/MCU
- 大话数据结构之算法 时间复杂度
- 寒假总结
- CYYMysql 源码解读 3
- AForge学习笔记(11):AForge.Imaging.Textures
- Codeforces Round #231 (Div. 2) B Very Beautiful Number
- 日800万访客、20万RPS网站的5个9可用性架构