我通过生成所有 PTX 汇编代码(1.x , 2.x , 3.x , 5.0) 为所有 GPU 计算能力编译了我的
。
问题是我的给定 CC 的内核效率取决于 CUDA/C++
项目MACRO
的值 X
(在编译时定义)。
那么,有没有办法将 X
的值与特定的 CC 相关联?
我试过如下使用 __CUDA_ARCH__
但它说 identifier MACRO is undefined
谢谢。
#ifdef __CUDA_ARCH__
#if (__CUDA_ARCH__ >= 500)
#define MACRO 10
#elseif (__CUDA_ARCH__ < 500)
#define MACRO 32
#endif
#endif
__global__ kernel ()
{
// some device code using MACRO
}
int main()
{
// some host code using MACRO
kernel <<< >>> ();
return 0;
}
最佳答案
编译 GPU 程序时有两个 channel :主机 channel 和设备 channel 。
host pass编译一次所有的host代码,在这个pass中__CUDA_ARCH__
没有定义。
设备 channel 为每个目标计算能力编译所有设备代码(__global__
和__device__
)。在这种情况下,定义了 __CUDA_ARCH__
。
您的问题是在您的主机代码 (int main()
) 中您试图使用 MACRO
。由于主机通行证 __CUDA_ARCH__
未定义,MACRO
也未定义。您不能在主机代码中使用任何依赖于 __CUDA_ARCH__
的东西。相反,对于主机代码,您必须使用 cudaGetDeviceProporties以确定您当前的计算能力。
关于c++ - 根据 GPU 计算能力定义 MACRO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25304518/