2017-11-22 15 views
0

복잡한 벡터에 thrust :: norm을 사용하고 싶습니다. 그러나 오류가 있습니다. 'thrust :: norm'함수의 인스턴스가 인수 목록과 일치하지 않습니다. 여기 내 코드가있다. fft는 복소수 벡터입니다.복잡한 숫자에 대한 thrust :: norm 사용 방법

thrust::transform(fft.begin(), fft.end(), fft.begin(), thrust::norm<thrust::complex<double>>()); 
+0

감사합니다. 나는 그것을 다른 실제 벡터 psd로 변경했다. 그러나 나는 아직도이 문제가있다. –

답변

1

이 동작은 펑 또는 a lambda의 형태로 표현되어야 thrust::transform 같은 알고리즘에 동작을 전달한다. thrust::norm<thrust::complex<T> >()은 이것들 중 어느 것도 아니며, complex.h template header에 의해 제공되는 "베어"기능입니다.

따라서 추력 알고리즘 op로 사용하려면 어떻게 든 감쌀 필요가 있습니다. 다음은 functor로 감싸는 간단한 예제입니다. 이 특별한 기능은 추력 복합 형 걸리지 만이 아닌 복합 형식을 반환하기 때문에, 우리는 우리의 입력과 출력 벡터가 필요한 유형과 일치하는지 확인해야합니다 : 기본 펑 사용에 대한 자세한 내용은

$ cat t1336.cu 
#include <iostream> 
#include <thrust/device_vector.h> 
#include <thrust/transform.h> 
#include <thrust/functional.h> 
#include <thrust/complex.h> 


struct my_complex_norm { 
    template <typename T> 
    __host__ __device__ 
    T operator()(thrust::complex<T> &d){ 
    return thrust::norm(d); 
    } 
}; 

int main(){ 

    thrust::device_vector<thrust::complex<double> > fft(5); 
    thrust::device_vector<double> out(5); 

    thrust::transform(fft.begin(), fft.end(), out.begin(), my_complex_norm()); 
} 

$ nvcc -arch=sm_35 -o t1336 t1336.cu 
$ 

을, 나는 돌격 quick start guide를 추천한다.

+0

정말 고마워요! –