我是靠谱客的博主 听话睫毛,这篇文章主要介绍编写kernel,现在分享给大家,希望可以做个参考。

1、kernel以关键字__kernel开始,返回类型必须为void。
2、像c函数一样要求必须制定指针所指向的地址空间。
3、buffer可以声明为全局内存或者常量内存。
4、image被分配到全局内存,可以选择性的访问限定符( _ _read_only , _ _write_only , 以及 __read_write).
5、__local限定符用来声明一段内存,供workgroup中所有work-item共享。
6、当kernel参数声明为局部指针时,如__local float* shareData , 它所指向的数组将有整个workgroup共享。
也就是说,每个workgroup将新建一个具有64个元素的数组,workgroup中所有work-item都可以访问它。
7、声明本地内存分配的另一种方法是在kernel范围级别声明一个变量:

复制代码
1
2
3
4
5
__kernel void akernel(...){ __local float shareData[32]; ... }

8、针对Opencl设备(尤其是GPU)进行编程时,将单个work-item或同一个workgroup内多个work-item中多次使用的数据缓存到本地内存(具有时间局部性的数据)可能会提高性能。

9、开发某个kernel时,我们通过显示的将全局内存指针赋给本地内存指针来实现

复制代码
1
2
3
4
5
6
7
8
9
__kernel void cache( __global float* data, __local float* sharedData){ int globalId = get_global_id(0); int localId = get_local_id(0); shareData[localId] = data[globalId]; .... }

一旦work-item执行完成,其状态信息和使用的本地内存都是临时的,如果需要报讯计算结果,必须将结果传回到全局内部。

最后

以上就是听话睫毛最近收集整理的关于编写kernel的全部内容,更多相关编写kernel内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部