5

在主机代码中,宏似乎__CUDA_ARCH__不会生成不同的代码路径,而是会生成与当前设备的代码路径完全相同的代码。

但是,如果__CUDA_ARCH__在设备代码中,它将为编译选项 (/arch) 中指定的不同设备生成不同的代码路径。

谁能确认这是正确的?

4

1 回答 1

12

__CUDA_ARCH__当在设备代码中使用时,将携带一个定义的数字,反映当前正在编译的代码架构。

它不打算在主机代码中使用。从nvcc手册

该宏可用于 GPU 函数的实现,以确定当前正在为其编译的虚拟架构。主机代码(非 GPU 代码)不能依赖它。

因此,在主机代码中的使用__CUDA_ARCH__是未定义的(至少由 CUDA 定义)。正如@tera 在评论中指出的那样,由于宏在主机代码中未定义,它可用于区分主机/设备路径,例如,在__host__ __device__函数定义中。

#ifndef __CUDA_ARCH__
//host code here
#else
//device code here
#endif
于 2013-04-18T02:22:12.907 回答