#ifdef / #ifndef和#endif

时间:2013-03-28 16:26:24

标签: c++ cuda

我有一段代码必须在CPU和CUDA-GPU上运行,而另一段代码只在CPU上运行。 #define ENABLE_CUDA是我'打开'以在整个应用程序中启用CUDA代码。 这是我的代码看起来像....

# define ENABEL_CUDA is the preprocessor directive to turn ON/OFF CUDA code.

CPU and GPU code --This piece of code has to be executed irrespective of whether CUDA is ON / OFF.

standalone CPU code alone -- This piece of code has to be executed only if CUDA is OFF.

我的解决方案是:

#ifdef ENABLE_CUDA

  CPU AND GPU code
# else
  CPU AND GPU code
  standalone CPU code 
# endif

但这涉及ifdef和else块中的代码复制(CPU和GPU代码),我想避免它。

我怎样才能完成它?为了避免重复代码,必须做些什么?关于此的任何指示赞赏...

3 个答案:

答案 0 :(得分:5)

#ifdef ENABLE_CUDA

  CPU AND GPU code
# else
  CPU AND GPU code
  standalone CPU code 
# endif

相当于:

  CPU AND GPU code
# ifndef ENABLE_CUDA
  standalone CPU code 
# endif

一般情况下,如果代码对ifelse都很常见,则可以将其移出。{/ p>

答案 1 :(得分:1)

为什么不简单地使用:

CPU AND GPU code

#ifndef ENABLE_CUDA
  standalone CPU code 
# endif

答案 2 :(得分:1)

除了其他人已经说过的话,

#ifndef ENABLE_CUDA
# define __device__
#endif
如果存在CUDA,

将很长时间地编写在设备上运行的函数,如果没有,则会在主机上编写,而不会重复代码。