Ita*_*chi 2 cuda overloading nvcc
我想在主机和设备端有一个类的相同成员函数的两个版本.让我们说
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);
}
};
Run Code Online (Sandbox Code Playgroud)
但是当我使用nvcc编译此代码时,它会中止function redefinition
错误.
CUDA/C++不支持这种函数重载,因为最终没有不同的函数签名.常用的方法有两种,即host
和device
版本是使用__host__
结合__device__
一起用#ifdef
,如
__host__ __device__ double stdinvcdf(float x)
{
#ifdef __CUDA_ARCH__
/* DEVICE CODE */
#else
/* HOST CODE */
#endif
}
Run Code Online (Sandbox Code Playgroud)
此解决方案也在NVIDIA开发人员论坛的这个主题中讨论过.