我在我的OpenCL内核中有相当多的常量来管理内存分配,循环迭代次数等。使用全局__constants或#define会更快吗?OpenCL __constant vs #define
2
A
回答
4
同样的规则作为用于“正常的” C编译器应用到OpenCL编译:甲#define
之前实际编译替换为值,因此它们烘烤到内核中。
根据定义,一个__constant
变量被分配在全局内存中,并且必须在使用前传输。这比使用#define
d文字要慢。然而,NVIDIA和AMD的GPU架构缓存这些值,并且比普通全局内存读取速度更快。故事的
末和我个人的建议是:使用#defines
恒定值,以及“魔术”号和__constant
内存大速度快,但只读存储器模块(例如查找表)。
1
define的工作方式与C相同。此例外是AMD APP SDK v2.8之前的所有版本(不支持OpenCL 1.2)。
__Constant是cahched内存空间。请阅读关于OpenCL内存布局的更多信息。
__global是GPU的总内存,对所有线程都可见。
__local是GPU的本地内存,仅可由块内的线程看到。
__constant是高速缓存的内存,它比全球的要快得多,但是有限,所以只有在需要时才使用它。
__private是GPU的私有内存,仅由每个单独的线程可见。
注:线程,我的意思是处理元素。
相关问题
- 1. OpenCL:__constant vs. __local?
- 2. OpenCL:__constant内存和const之间的区别__global内存
- 3. RequireJs - Define vs Require
- 4. OpenCL enqueTask vs enqueNDRangeKernel
- 5. OpenCL vs OpenMP性能
- 6. #define vs self.method检查分配
- 7. DEFINE VS变量在PHP
- 8. ANSI C#define VS函数
- 9. 内联函数VS的#define
- 10. CUDA vs OpenCL性能对比
- 11. OpenCL的标VS矢量
- 12. OpenCL的,半浮VS性能
- 13. OpenCL的固定内存VS堆内存
- 14. const vs #define(奇怪的行为)
- 15. #define vs const并链接框架
- 16. 的#define MY_INT VS const int的MY_INT
- 17. 并行编程模式:Scala vs OpenCL
- 18. OpenCL CPU设备vs GPU设备
- 19. OpenCL编译选项ATI vs NVIDIA
- 20. OpenCL版本的cudaMemcpyToSymbol&优化
- 21. PyOpenCL vs Clyther vs纯OpenCL和C99:新手最适合什么?
- 22. #define
- 23. OpenCL全球阵列
- 24. OpenCL的数组索引好像断
- 25. OpenCL内核没有矢量化
- 26. 的#define远,近的#define WINDEF.H
- 27. Scheme define-macro和/或define-syntax
- 28. openCL CL_OUT_OF_RESOURCES错误
- 29. #ifndef #define
- 30. “static const”vs“#define”为了提高效率C
我同意你的看法,除了必须传递常量内存这一事实。我从来没有设法做到这一点。对我来说,使用常量内存的唯一方法是使用#define定义大型常量数组的值... – 2013-02-28 18:52:05
您可以像设置了CL_MEM_READ_ONLY标志一样创建一个常量内存缓冲区,就像其他任何内存缓冲区一样。要传输它,你可以使用'CL_MEM_COPY_HOST_PTR'标志或像往常一样拷贝'clEnqueueWriteBuffer'。 – matthias 2013-03-01 08:47:38
如果您正在使用__constant缓冲区,请记住检查设备信息属性CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE以获取最大恒定缓冲区大小。 – 2013-03-02 03:09:21