节介绍的OpenCL内存模型-android官方培训课程中文版v0.9.7

时间:2024-06-27 13:55:49
【文件属性】:

文件名称:节介绍的OpenCL内存模型-android官方培训课程中文版v0.9.7

文件大小:5.1MB

文件格式:PDF

更新时间:2024-06-27 13:55:49

OpenCL

第三章 OpenCL编程 33 o�set)的情况下就和创建该 bu�er对象时所使用的host内存指针相同,在上面的例子中就是这种情 况,即 outbu�er与hostmap一定为同一指针。 必须要注意的是当用户使用clEnqueueMapBu�er进行写(CL_MAP_WRITE)操作时,必须在相 对应的 clEnqueueUnmapMemObject函数执行完毕之后才能视为映射写操作已经完成,在此过程中 kernel是禁止读 /写该 bu�er对象的。相对而言,在用户使用 clEnqueueMapBu�er进行读(CL_MAP_ READ)操作的过程中,kernel可以同时读取该 bu�er,当然在 kernel中写该 bu�er是被禁止的。同样道 理在 bu�er被映射的过程中,用户是不可以对该 bu�er进行写操作的(clEnqueueWriteBu�er) 3.5 OpenCL内核模块 这一节介绍 OpenCL C程序语言的使用方法。OpenCL C程序语言简称OpenCL C是用来编写运行 在 OpenCL设备上的 kernel程序的一门语言。OpenCL C基于 ISO/IEC 9899:1999 C(以下简称 C)标准 做了一定的扩展和限制。关于 C标准读者可以参考相关文档,本节只着重介绍 OpenCL C对C标准的扩 展和限制。 还是hellocl中的kernel函数作为入门, 首先 OpenCL C比C多出了一些函数限定符,在本例中到了 __kernel(可简写为 kernel),这也是所 有 OpenCL C中必须用到的。函数加注 __kernel表示其只能运行于 OpenCL设备上,并且该函数可以被 host调用,kernel中的其它函数也可以像调用普通函数一样调用含有该前缀的函数。 其次 OpenCL C增加了一些地址空间限定符包括 __global,__local,__constant和 __private。这 些地址限定符可以用来声明变量,以表明该变量对象所使用的内存区域。以上述地址空间限定符声明 的对象会被分配到指定地址空间,否者会被分配到通用地址空间。 对应于2.3节介绍的OpenCL内存模型 __global或简写为 global,表示该声明内存对像使用的是从全局内存空间分配出来的内存,工作 空间内所有工作节点都可以读 /写这块被声明的内存。在上面的例子中 bu�er就被加注了global限定符, 所以 kernel内部可以*访问bu�er。 __constant或简写为 constant,与 global相同,使用从全局内存空间分配出来的内存,可以在所有 1 __kernel void hel locl ( __global uint * buffer ) { 2 size_t gidx = get_global_id (0) ; 3 s ize_t gidy = get_global_id (1) ; 4 buffer [( gidx +4* gidy ) ]=((1<< gidx ) |(0 x10 <


网友评论