복잡한 벡터에 thrust :: norm을 사용하고 싶습니다. 그러나 오류가 있습니다. 'thrust :: norm'함수의 인스턴스가 인수 목록과 일치하지 않습니다. 여기 내 코드가있다. fft는 복소수 벡터입니다.복잡한 숫자에 대한 thrust :: norm 사용 방법
thrust::transform(fft.begin(), fft.end(), fft.begin(), thrust::norm<thrust::complex<double>>());
복잡한 벡터에 thrust :: norm을 사용하고 싶습니다. 그러나 오류가 있습니다. 'thrust :: norm'함수의 인스턴스가 인수 목록과 일치하지 않습니다. 여기 내 코드가있다. fft는 복소수 벡터입니다.복잡한 숫자에 대한 thrust :: norm 사용 방법
thrust::transform(fft.begin(), fft.end(), fft.begin(), thrust::norm<thrust::complex<double>>());
이 동작은 펑 또는 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를 추천한다.
정말 고마워요! –
감사합니다. 나는 그것을 다른 실제 벡터 psd로 변경했다. 그러나 나는 아직도이 문제가있다. –