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