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

12

CUDA 中是否有获取 IEEE 754 特殊值(例如:inf,NaN)的设备函数?我的意思是稳定的方式,不是通过某些可能被编译器优化掉的数学操作。

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

2个回答

18

您好,/usr/local/cuda/include/math_constants.h 中定义的 CUDART_NAN(double)和 CUDART_NAN_F(float)如何?

#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)

3
你在CUDA中找到的nan()函数是ISO C99标准规定的nan()函数。我相信同样的函数现在也包含在C++11中。请注意,使用此标准数学函数的双精度版本比使用Robert提出的解决方案慢得多,因为它需要解析一个字符串参数来构造NaN的数值。单精度版本nanf()非常快,因为NVIDIA GPU仅支持一种规范化的单精度NaN,因此该函数返回的就是这个值。 - njuffa

1
CUDA现在在数学库中添加了nanf指令。 device float nanf(const char *tagp)
Returns "NaN"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接