我想编写一些兼容主机和设备的函数,并根据代码是在设备上执行还是在主机上执行来更改执行。我正在尝试编写一个将在设备和主机上使用的类,并隐藏与用户的区别。
如果无法做到这一点,是否有人就如何实现这一目标提出建议?
即
__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
}
答案 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