__host__ __device__函数可以知道它在执行的位置吗?

时间:2014-05-27 21:23:18

标签: cuda

我想编写一些兼容主机和设备的函数,并根据代码是在设备上执行还是在主机上执行来更改执行。我正在尝试编写一个将在设备和主机上使用的类,并隐藏与用户的区别。

如果无法做到这一点,是否有人就如何实现这一目标提出建议?

__host__ __device__ void foo(){
    bool executingOnHost = // how do I figure this out?

    if( executingOnHost)
        // do stuff using host pointers
    else
        // do stuff with device pointers  
}      

2 个答案:

答案 0 :(得分:5)

最好使用__CUDA_ARCH__宏,如下所示:

__host__ __device__ int myFunc(void) {
#if defined(__CUDA_ARCH__)
 // Device code here
#else
 // Host code here
#endif

有关示例,请参阅http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#host__CUDA_ARCH__宏也可用于有条件地保护不同GPU架构的代码。

答案 1 :(得分:3)

您可以使用__CUDACC__宏来控制编译期间的主机/设备可见性。

#ifdef __CUDACC__

   // Device code

#else

   // Host code

#endif