gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 15:18:35 25 4
gpt4 key购买 nike

我通过生成所有 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com