2013-03-20 9 views
8

CUDAにinf、NaNなどのIEEE 754特殊値を得るためのデバイス関数はありますか?私は安定した方法を意味し、コンパイラによって最適化できる数学演算ではありません。CUDAで浮動小数点特殊値を取得する方法は?

nan()というデバイス関数を見つけることができます。この関数は、未知の文字列引数を取る必要があります。

答えて

16

どう/usr/local/cuda/include/math_constants.hで定義されている程度(ダブル)CUDART_NANCUDART_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

多くのおかげで、私が探しています正確に何のthats。 – user0002128

+3

CUDAで見つかったnan()関数は、ISO C99標準で指定されているnan()関数です。私は同じ機能がC++ 11の一部になったと信じています。この標準的な数学関数の倍精度バージョンは、NaNの数値を構成するために文字列引数を解析する必要があるため、Robertが指摘したソリューションを使用するよりもかなり遅くなることに注意してください。単精度バージョンnanf()は非常に高速です。なぜなら、NVIDIA GPUは1つの標準単精度NaNしかサポートしないため、関数が返すものです。 – njuffa

0

CUDAは現在、数学ライブラリでnanf命令を持っています。

デバイスフロートnanf(定数文字* TAGP)

Returns "NaN" 
関連する問題