我的 OpenCL 内核中有很多控制内存分配、循环迭代次数等的常量。使用全局 __constants 或 #defines 更快吗?
与“普通”C 编译器相同的规则也适用于 OpenCL 编译器:A被实际编译之前的#define值替换,因此它们被烘焙到内核中。
根据定义,__constant变量在全局内存中分配,并且必须在使用前进行传输。这比使用#defined 文字慢。然而,NVIDIA 和 AMD 的 GPU 架构会缓存这些值,并且读取速度比普通全局内存更快。
故事结束和我个人的建议:使用#defines常量值以及“神奇”数字和__constant更大的快速但只读的内存块(例如查找表)。