具有相同签名的函数
Posted
技术标签:
【中文标题】具有相同签名的函数【英文标题】: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
错误而中止。
【问题讨论】:
【参考方案1】:CUDA/C++不支持这种函数重载,因为最终没有不同的函数签名。同时拥有host
和device
版本的常用方法是将__host__
与__device__
与#ifdef
结合使用,例如
__host__ __device__ double stdinvcdf(float x)
#ifdef __CUDA_ARCH__
/* DEVICE CODE */
#else
/* HOST CODE */
#endif
在 NVIDIA 开发者论坛中,in this thread 也讨论了此解决方案。
【讨论】:
谢谢,真的很有帮助。 多么不幸。让您希望 nVIDIA 有一个功能申请表。以上是关于具有相同签名的函数的主要内容,如果未能解决你的问题,请参考以下文章