首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenCL __constant vs #define

OpenCL __constant vs #define
EN

Stack Overflow用户
提问于 2013-02-27 23:56:31
回答 2查看 5.9K关注 0票数 2

在我的OpenCL内核中,我有相当多的常量来管理内存分配、循环迭代次数等。使用全局定义和# __constants哪个更快?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-28 00:23:02

与“普通”C编译器相同的规则也适用于OpenCL编译器:#define在实际编译之前被替换为值,因此它们被嵌入到内核中。

根据定义,__constant变量是在全局内存中分配的,在使用之前必须传输该变量。这比使用#defined文本要慢。然而,NVIDIA和AMD的GPU架构缓存了这些值,并且读取速度比普通全局内存更快。

故事的结尾和我个人的建议:使用#defines存储常量值,使用“魔术”数字和__constant内存存储更大、快速但只读的内存块(例如查找表)。

票数 4
EN

Stack Overflow用户

发布于 2013-03-07 17:38:02

define的工作方式与C语言相同,一个例外是AMD APP SDK v2.8之前的所有版本(没有OpenCL 1.2支持)。

__Constant是cahched的内存空间。请务必阅读有关OpenCL中内存布局的更多信息。

__global是图形处理器的总内存,对所有线程都可见。

__local是图形处理器的本地内存,只对块内的线程可见。

__constant是缓存内存,它比全局内存快得多,但有限,所以只在需要的地方使用它。

__private是图形处理器的私有内存,仅对每个单独的线程可见。

注意:线程,我指的是处理元素。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15116521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档