2013-03-20 54 views
8

CUDA中是否有设备函数来获得IEEE 754特殊值,如inf,NaN?我的意思是稳定的方式,而不是一些可以通过编译器进行优化的数学运算。在CUDA中获取浮点特殊值的方法?

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

回答

16

如何在/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) 
+0

非常感谢,那正是我所期待的。 – user0002128 2013-03-20 04:09:04

+3

您在CUDA中找到的nan()函数是由ISO C99标准指定的nan()函数。我相信现在相同的功能是C++ 11的一部分。请注意,标准数学函数的双精度版本比使用Robert指出的解决方案要慢很多,因为它需要解析一个字符串参数来构造NaN的数值。单精度版本nanf()的速度非常快,因为NVIDIA GPU只支持一个规范的单精度NaN,所以这就是函数返回的结果。 – njuffa 2013-03-20 07:41:01

0

CUDA如今在数学库中的nanf指令。

设备浮动nanf(为const char * tagp)

Returns "NaN"