在CUDA中获取浮点特殊值的方法?
CUDA中是否有任何设备函数可以获得IEEE 754特殊值,如inf、NaN?我指的是稳定的方法,而不是一些可以由编译器优化的数学运算在CUDA中获取浮点特殊值的方法?,cuda,floating-point,nvidia,nan,Cuda,Floating Point,Nvidia,Nan,CUDA中是否有任何设备函数可以获得IEEE 754特殊值,如inf、NaN?我指的是稳定的方法,而不是一些可以由编译器优化的数学运算 我只找到一个名为nan()的设备函数,该函数必须具有一些未知的字符串参数。在/usr/local/cuda/include/math\u constants.h中定义的CUDART\u nan和CUDART\u nan\u F(float)如何: #define CUDART_NAN_F __int_as_float(0x7fffffff)
我只找到一个名为nan()的设备函数,该函数必须具有一些未知的字符串参数。在
/usr/local/cuda/include/math\u constants.h
中定义的CUDART\u nan
和CUDART\u nan\u F
(float)如何:
#define CUDART_NAN_F __int_as_float(0x7fffffff)
#define CUDART_NAN __longlong_as_double(0xfff8000000000000ULL)
以及:
CUDA现在在数学图书馆有nanf指令 设备浮点nanf(常量字符*tagp) CUDA中的nan()函数是ISO C99标准指定的nan()函数。我相信同样的函数现在是C++11的一部分。请注意,这个标准数学函数的双精度版本将比使用Robert指出的解决方案慢得多,因为它需要解析字符串参数来构造NaN的数值。单精度版本nanf()速度非常快,因为NVIDIA GPU只支持一个规范的单精度NaN,所以函数返回的就是这个。
#define CUDART_INF_F __int_as_float(0x7f800000)
#define CUDART_INF __longlong_as_double(0x7ff0000000000000ULL)
Returns "NaN"