在主机代码中,宏似乎__CUDA_ARCH__
不会生成不同的代码路径,而是会生成与当前设备的代码路径完全相同的代码。
但是,如果__CUDA_ARCH__
在设备代码中,它将为编译选项 (/arch) 中指定的不同设备生成不同的代码路径。
谁能确认这是正确的?
__CUDA_ARCH__
当在设备代码中使用时,将携带一个定义的数字,反映当前正在编译的代码架构。
它不打算在主机代码中使用。从nvcc手册:
该宏可用于 GPU 函数的实现,以确定当前正在为其编译的虚拟架构。主机代码(非 GPU 代码)不能依赖它。
因此,在主机代码中的使用__CUDA_ARCH__
是未定义的(至少由 CUDA 定义)。正如@tera 在评论中指出的那样,由于宏在主机代码中未定义,它可用于区分主机/设备路径,例如,在__host__ __device__
函数定义中。
#ifndef __CUDA_ARCH__
//host code here
#else
//device code here
#endif