自动为C ++函数添加函数前缀

时间:2013-02-11 20:02:15

标签: c++ cuda metaprogramming

我正在通过CUDA将一个小的C ++代码库移植到显卡上。 CUDA要求所有函数都以__host__ __device__为前缀,以便在CPU和GPU内核代码中都可以调用。如,

void foo() {} // callable on CPU, not on GPU
__host__ __device__ foo() {} // callable on CPU and on GPU

在我的代码库中将__host__ __device__添加到每个函数是一项单调乏味但却很直接的任务,但我想知道:是否有一种有效的方法可以将限定符添加到C / C ++中功能?

我会对使用文本编辑器技术感到满意,该技术检测所有函数声明或编译器功能。但是,我不知道任何涉及的解决方案。

想法?

1 个答案:

答案 0 :(得分:1)

我不知道任何这样的编译器功能。尽管如此,我仍然对广泛应用这些指令持谨慎态度,因为调用约定和堆栈管理可能与不需要时的常规主机约定明显不同(例如,更慢?)。我可能把我自己的宏放在一起,例如#define HDFN __host__ __device__这样可以轻松添加/更改。

除此之外,你可能能够挖掘一个用于检测方法的正则表达式并编写一个简单的宏...