2013-07-04 4 views
5

복소수로 작업하고 커널 내에서 복잡한 복소수에 대해 간단한 수학 연산 (더하기 및 곱하기)을 수행하려면 어떤 CUDA 헤더를 프로그램에 포함시켜야합니까?CUDA - 복소수 사용법?

C++에서 상수에 double을 곱하면 복잡한 상수에 상수를 곱할 수 있습니다. 그러나 CUDA에서 다른 복잡한 double>이 없을 때마다 복잡한 double 연산에 간단한 연산을 시도 할 때 많은 오류가 발생합니다. 내가 뭘 놓치고 있니?

감사합니다. 포함하는

답변

10

헤더는 다음과 같습니다

표준 리눅스 CUDA에
#include <cuComplex.h> 

설치, 그것은에 있습니다

/usr/local/cuda/include 

당신은에 정의 된 함수를 해당 헤더 파일을 검사하고 사용해야합니다 장치의 복소수를 조작 할 수 있습니다.

이 실수하여 (더블) 복소수를 곱하면, 나는 것 :

#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)); 

편집 : CUDA 7 RC에서 최근에 출시 된 추력 V1.8로, 추력을 사용할 수 있습니다 :: 추력 코드 또는 CUDA 장치 코드의 복합체. 따라서 다음과 같은 자연스러운 작업을 작성할 수 있습니다.

#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

빠른 응답 감사합니다. 나는 여전히 이것에 대한 내 머리를 얻으려고하고있다. 이것은 아마 정말로 어리석은 질문이지만 다른 헤더에 대한 함수에 대한 더 많은 정보는 어디에서 찾을 수 있는가? 예를 들어 cuCmul에 대해 언급하지 않았다면 http://graphics.im.ntu.edu.tw/~bossliaw에있는 cuComplex.h File Reference를 살펴봄으로써 무엇을하는지 알 수 없었을 것입니다. /nvCuda_doxygen/html/cu_complex_8h.html#ace9e79c66b2bfc9a8adeb1d641b12df4 – user2550888

+0

해당 헤더 또는 다른 헤더에 대한 추가 문서가 있는지 모르겠습니다. 어쨌든 나는 그것을 모르고있다. 'cuCmul' 함수는 실제로 매우 간단하며 [수학의 기본 원리에 정의 된] (http://en.wikipedia.org/wiki/Complex_numbers#Multiplication_and_division)과 같은 복소 곱셈을 복제합니다. 'cuCmul'처럼 그 수식을 C 코드로 변환 할 수 없다면, C 언어를 포함한 기본적인 컴퓨터 프로그래밍에 대해 더 배우는 것이 좋습니다. –

+0

지금 cuCmul 함수를 이해합니다.하지만 cuCmul이 기본 복소수 곱셈을위한 함수라고 말하지 않았다면, 헤더 파일 참조를 보면 알 수 없었을 것입니다. 그것은 무엇을하는지에 대한 표시가 아닙니다. 아니면 콜 그래프가 보여주고있는 것을 실제로 이해할 수 없기 때문에 제대로 사용하지 않을 수도 있습니다. 미래에 내가 필요로하는 특정 작업에 이미 기능이 있는지 어떻게 알 수 있습니까? – user2550888