c++ - 根据 GPU 计算能力定义 MACRO

标签 c++ cuda compilation

我通过生成所有 PTX 汇编代码(1.x , 2.x , 3.x , 5.0) 为所有 GPU 计算能力编译了我的 CUDA/C++ 项目。 问题是我的给定 CC 的内核效率取决于 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/

相关文章:

c++ - 检查外部应用程序是否可用的最佳方法是什么?

c++ - 为什么在 C 中允许对 int * arr[] 进行以下赋值?

cuda - Parallel NSight for Visual studio 2010 支持在服务器上调试吗?

cuda - 使用 CUDA Profiler nvprof 进行内存访问

vb.net 编译错误 'abc' 在命名空间 'xyz' 中不明确

c++ - 包含 line_descriptor.hpp,但 KeyLine 和 BinaryDescriptor 仍未定义

c++ - 内容类型 : application/x-www-form-urlencoded in curl

cuda - CUDA 是否具有向量操作内在函数?

使用 stdprn 时出现 C 编译错误

java - 有没有办法让netbeans在编译时自动重启tomcat?