2013-03-20 55 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"