你可以这样做:
#ifdef MY_USE_DOUBLE_PRECISION
typedef double Real;
#else
typedef float Real;
#endif
....
thrust::device_vector<Real> myVec;
用于MY_USE_DOUBLE_PRECISION
控制浮点类型的定义Real
。如果您有自己的内核,您也可以使用Real
其中之一float
或double
即。:
__global__ void kernel (Real *input, Real *output)
{
...
}
如果您想编译内核代码的单精度和双精度版本,并选择在定义它们的编译单元之外使用哪一个(例如,在库中),您可以对内核进行模板化:
template<typename T>
__global__ void kernel (T *input, T *output)
{
...
}
template __global__ void kernel<float>(float *, float *);
template __global__ void kernel<double>(double *, double *);
然后在另一个源文件中
#ifdef MY_USE_DOUBLE_PRECISION
typedef double Real;
#else
typedef float Real;
#endif
....
kernel<Real><<<griddim, blockdim>>>(....);