2013-03-20 21 views
8

, inf gibi NaN IEEE 754 özel değerleri elde etmek için CUDA herhangi cihaz fonksiyonları var mı? Dürüstlükleri kastediyorum, derleyiciler tarafından en iyi duruma getirilebilecek bazı matematik operasyonları değil.CUDA'da kayan noktalı özel değerler elde etmenin yolu nedir?

sadece bazı bilinmeyen dize argümanı almalıdır nan (adında bir cihaz fonksiyonunu) bulmak için yönetmek.

cevap

16

Nasıl /usr/local/cuda/include/math_constants.h tanımlanan yaklaşık (çift) CUDART_NAN ve CUDART_NAN_F (şamandıra):

#define CUDART_NAN_F   __int_as_float(0x7fffffff) 
#define CUDART_NAN    __longlong_as_double(0xfff8000000000000ULL) 

ve:

#define CUDART_INF_F   __int_as_float(0x7f800000) 
#define CUDART_INF    __longlong_as_double(0x7ff0000000000000ULL) 
+0

Çok teşekkürler, aradığım tam olarak ne bu. Eğer CUDA bulundu – user0002128

+3

nan() işlevi ISO C99 standardında belirtildiği şekilde nan() fonksiyonudur. Aynı işlevin şimdi C++ 11'in parçası olduğuna inanıyorum. Bu standart matematik fonksiyonunun çift duyarlıklı versiyonunun, Robert'in işaret ettiği çözümden çok daha yavaş olacağını unutmayın, çünkü NaN'nin sayısal değerini oluşturmak için bir dizge argümanını ayrıştırması gerekir. Tek hassasiyetli sürüm olan nanf() çok hızlıdır çünkü NVIDIA GPU'lar yalnızca tek bir tek duyarlıklı NaN'yi desteklemektedir, böylece işlev ne döndürür. – njuffa

0

CUDA şimdi matematik kütüphanede nanf talimatı vardır.

cihaz şamandıra nanf (const char * tagp)

Returns "NaN" 
İlgili konular