OpenCL:更好地使用宏或函数?
在OpenCL(即C-99)中,我们有两个选项来创建类似以下功能:OpenCL:更好地使用宏或函数?,opencl,Opencl,在OpenCL(即C-99)中,我们有两个选项来创建类似以下功能: 宏 功能 [编辑:或者使用模板语言,新选项3:-)] 我在某个地方听说过(在任何地方都找不到任何官方的引用,只是在stackoverflow的某个地方的评论中看到过一次),函数在实践中几乎总是内联的,因此使用函数在性能方面还可以吗 但根据宏的性质,基本上保证宏是内联的。但是容易受到bug的影响,例如,如果不在所有内容周围添加括号,并且不具有类型安全性 在实践中,什么效果好?最标准的是什么?什么可能是最便携的 我想我的要求是以
- 宏
- 功能
- [编辑:或者使用模板语言,新选项3:-)]
- 尽快
- 尽可能少的注册压力
- 当与编译时常量一起使用时,理想情况下应保证优化到另一个常量
- 易于维护
- 标准的,不太奇怪,因为我正在考虑将其用于一个开源项目,我希望其他人能对此做出贡献
- 尽快
- 尽可能少的注册压力
- 当与编译时常量一起使用时,理想情况下应保证优化到另一个常量
- 易于维护
- 标准的,不太奇怪,因为我正在考虑将其用于一个开源项目,我希望其他人能对此做出贡献
我认为这是非常主观的。我个人非常讨厌宏,就像躲避瘟疫一样。但我知道一些非常成功的项目广泛使用它们(例如)。这取决于您。函数在GPU上是内联的,但在OpenCL的CPU实现上可能不是这样。保证内联吗?这是否意味着如果我将#define常量传递到一个没有非#define输入的函数中,编译器会在编译时处理这个,并用一个常量替换函数调用?这不是保证,但根据我的经验,GPU实现了内联函数。酷。我更喜欢使用函数,如果我有信心的话,它们将被内联,积极地优化,你所说的是非常令人放心的。是否有任何官方来源/声明支持这一点?是适用于所有平台,还是仅适用于如nvidia?