在CUDA中获取浮点特殊值的方法?

Way to get floating-point special values in CUDA?

CUDA中是否有任何设备功能可以获得IEEE 754特殊值,如inf,NaN? 我的意思是稳定的方式,而不是一些可以由编译器优化的数学运算。

我只设法找到一个名为nan()的设备函数,它必须采用一些未知的字符串参数。


如何在/usr/local/cuda/include/math_constants.h中定义CUDART_NAN(double)和CUDART_NAN_F(float):

1
2
#define CUDART_NAN_F            __int_as_float(0x7fffffff)
#define CUDART_NAN              __longlong_as_double(0xfff8000000000000ULL)

和:

1
2
#define CUDART_INF_F            __int_as_float(0x7f800000)
#define CUDART_INF              __longlong_as_double(0x7ff0000000000000ULL)


CUDA现在在数学库中有nanf指令。

device float nanf(const char * tagp)

1
Returns"NaN"