2013-07-04 29 views
5

Karmaşık sayılar ile çalışmak ve çekirdek içinde bu karmaşık çift sayılar için basit matematik işlemleri (toplama ve çoğaltma) yapmak istiyorsanız, CUDA başlıklarını programıma dahil etmeliyim?CUDA - Karmaşık sayılarla nasıl çalışılır?

C++ 'da, karmaşık bir çift ile sabit bir sayıyı çarpıtabilirler> her ikisi de iki katı olduğu sürece. Ancak, CUDA'da, karmaşık matematiksel işlemleri, karmaşık bir çiftle karşılaştırmaya çalıştığımda, başka bir karmaşık çiftle karşılaşmadığımda çok fazla hata alıyorum>. Neyi kaçırıyorum?

Teşekkür ederiz! içerecek şekilde

cevap

10

başlık budur:

standart Linux CUDA On
#include <cuComplex.h> 

yüklemek, bu bulunur:

/usr/local/cuda/include 

Sen tanımlanan işlevleri bu başlık dosyasını incelemek ve kullanmak gerekecektir cihazdaki karmaşık sayıları işlemek için.

gerçek sayısına göre bir (çift) kompleks sayı çarpın, isterim:

#include <cuComplex.h> 
... 
double cr = 1; 
double ci = 2; 
double r = 3; 
cuDoubleComplex c = make_cuDoubleComplex(cr, ci); 
cuDoubleComplex result = cuCmul(c, make_cuDoubleComplex(r, 0)); 

DÜZENLEME: CUDA 7 RC son yayınlanan İtme v1.8 ile, itme kullanmak mümkündür :: itme kodunda veya CUDA aygıt kodunda karmaşık. Bu, daha doğal görünümlü işlemlerin yazılmasını sağlar:

#include <thrust/complex.h> 
... 
thrust::complex<float> c = thrust::complex<float>(2.0f, 5.0f); 
thrust::complex<float> c2 = c*c; 
float r = c2.real(); 
+0

Hızlı yanıt için teşekkürler. Hala kafamı bulamaya çalışıyorum. Bu muhtemelen gerçekten aptalca bir soru ama farklı başlıkların işlevleri hakkında daha fazla bilgiyi nereden bulabilirim? Örneğin, cuCmul'den bahsetmemiş olsaydınız, http://graphics.im.ntu.edu.tw/~bossliaw adresinde cuComplex.h Dosya Başvurusu'ndan geçerek ne yaptığını anlayamazdım. /nvCuda_doxygen/html/cu_complex_8h.html#ace9e79c66b2bfc9a8adeb1d641b12df4 – user2550888

+0

Bu üstbilginin veya başka başlıkların ek belgelerinin olduğunu bilmiyorum. Neyse farkında değilim. 'CuCmul' işlevi aslında oldukça basittir ve karmaşık matematik çarpımlarını [matematiğin temel prensiplerinde tanımlanmıştır] olarak çoğaltır (http://en.wikipedia.org/wiki/Complex_numbers#Multiplication_and_division). Bu formülün dönüşümünü 'cuCmul'daki gibi C koduna uygulayamazsanız, C dili de dahil olmak üzere temel bilgisayar programlaması hakkında daha fazla bilgi edinmenizi öneririz. –

+0

Şimdi cuCmul işlevini anlıyorum, ama söylemek istediğim şey, eğer cuCmul'un temel karmaşık sayı çarpımı için bir işlev olduğunu söylememiş olsaydınız, sadece başlık dosyası referansına bakarak bunu bilmezdim. ne yaptıklarına dair bir gösterge yok. Ya da çağrı grafiğinin ne olduğunu anlayamadığım için doğru şekilde kullanmıyorum. Gelecekte, ihtiyacım olan belirli bir işlemin zaten bir işlevi olup olmadığını nasıl anlarım? – user2550888

İlgili konular