【问题标题】:Function with same signature具有相同签名的函数
【发布时间】:2013-12-31 09:21:21
【问题描述】:

我想在主机端和设备端有两个版本的类的相同成员函数。 让我们说

class A {  
public:  
    double stdinvcdf(float x) {  
        static normal boostnormal(0, 1);  
        return boost::math::cdf(boostnormal,x);  
    }

    __device__ double stdinvcdf(float x) {  
        return normcdfinvf(x);
    }  
};

但是当我使用 nvcc 编译这段代码时,它会因function redefinition 错误而中止。

【问题讨论】:

    标签: cuda overloading nvcc


    【解决方案1】:

    CUDA/C++不支持这种函数重载,因为最终没有不同的函数签名。同时拥有hostdevice 版本的常用方法是将__host____device__#ifdef 结合使用,例如

    __host__ __device__ double stdinvcdf(float x)
    {
    #ifdef __CUDA_ARCH__
        /* DEVICE CODE */
    #else
        /* HOST CODE */
    #endif
    }
    

    在 NVIDIA 开发者论坛中,in this thread 也讨论了此解决方案。

    【讨论】:

    • 谢谢,真的很有帮助。
    • 多么不幸。让您希望 nVIDIA 有一个功能申请表。
    猜你喜欢
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-29
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多