2013-02-11 83 views
1

我正在通过CUDA移植可在图形卡上调用的小型C++代码库。 CUDA要求所有函数都要与__host__ __device__一起作为前缀,以便可以在CPU和GPU内核代码中调用。例如,自动为C++函数添加函数前缀

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

这是一个繁琐的,但简单的任务添加__host__ __device__功能在我的代码库,但我想知道:是否有前面加上预选赛C/C++函数的有效方法?

我很高兴能够使用检测所有函数声明或编译器功能的文本编辑器技术。但是,我并不知道涉及的解决方案。

想法?

回答

1

我不知道任何这样的编译器功能。尽管如此,我仍然谨慎地广泛应用这些指令,因为调用约定和堆栈管理在不需要时可能与普通主机约定有很大不同(例如,速度较慢?)。我可能会把我自己的宏放在一起,例如#define HDFN __host__ __device__,这样很容易添加/更改。

这且不说,你也许能够挖掘出一个正则表达式的检测方法和编写宏简单...

+0

是啊,现在我的手都标注了宏。你认为这个正则表达式是什么样的? – alexbw 2013-02-11 20:40:23

+0

这里有人的C++方法的开始:[链接](http://stackoverflow.com/questions/3409210/regex-to-parse-cc-functions-declarations)你必须修改返回类型以匹配你看到的东西... – mark 2013-02-11 21:40:53