我们应该将宏放在CUDA的_全局函数的外部还是内部?

我们应该将宏放在CUDA的_全局函数的外部还是内部?,cuda,Cuda,我的CUDA内核看起来像这样 #define MY_AWESOME_MACRO(foo, bar) (foo * bar * 123 + 456) __global__ void my_CUDA_kernel(int* cool, float* beans) { // Some computation. } 我应该将宏放在函数内部还是外部?我在谷歌上到处搜索,有些人两者都做了。这样做有害还是有害?从概念上讲,没有区别。可以在文件中的任何位置定义宏 当我使用ComputeVisualPr

我的CUDA内核看起来像这样

#define MY_AWESOME_MACRO(foo, bar) (foo * bar * 123 + 456)
__global__ void my_CUDA_kernel(int* cool, float* beans) {
    // Some computation.
}

我应该将宏放在函数内部还是外部?我在谷歌上到处搜索,有些人两者都做了。这样做有害还是有害?

从概念上讲,没有区别。可以在文件中的任何位置定义宏


当我使用ComputeVisualProfiler时,在外部定义了宏的代码比其他代码运行得更快。我建议您对这两种方法都使用探查器,并检查哪种方法适合您的需求。

只要宏在代码中某个地方被引用或扩展之前已定义,任何一种方法都可以。预处理器处理宏,因此当宏被定义和展开时,实际上没有任何代码处理(无论是由nvcc还是由您正在使用的任何c编译器)完成。在源文件顶部或头文件中定义宏更方便。使代码更具可读性。