CUDA中是否有设备函数来获得IEEE 754特殊值,如inf,NaN?我的意思是稳定的方式,而不是一些可以通过编译器进行优化的数学运算。在CUDA中获取浮点特殊值的方法?
我只能设法找到一个名为nan()的设备函数,它必须带有一些未知的字符串参数。
CUDA中是否有设备函数来获得IEEE 754特殊值,如inf,NaN?我的意思是稳定的方式,而不是一些可以通过编译器进行优化的数学运算。在CUDA中获取浮点特殊值的方法?
我只能设法找到一个名为nan()的设备函数,它必须带有一些未知的字符串参数。
如何在/usr/local/cuda/include/math_constants.h
定义约CUDART_NAN
(双)和CUDART_NAN_F
(浮动):
#define CUDART_NAN_F __int_as_float(0x7fffffff)
#define CUDART_NAN __longlong_as_double(0xfff8000000000000ULL)
和:
#define CUDART_INF_F __int_as_float(0x7f800000)
#define CUDART_INF __longlong_as_double(0x7ff0000000000000ULL)
CUDA如今在数学库中的nanf指令。
设备浮动nanf(为const char * tagp)
Returns "NaN"
非常感谢,那正是我所期待的。 – user0002128 2013-03-20 04:09:04
您在CUDA中找到的nan()函数是由ISO C99标准指定的nan()函数。我相信现在相同的功能是C++ 11的一部分。请注意,标准数学函数的双精度版本比使用Robert指出的解决方案要慢很多,因为它需要解析一个字符串参数来构造NaN的数值。单精度版本nanf()的速度非常快,因为NVIDIA GPU只支持一个规范的单精度NaN,所以这就是函数返回的结果。 – njuffa 2013-03-20 07:41:01