2017-11-22 14 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

thrust::transformようなアルゴリズムに操作を渡すために、動作はファンクタまたはa lambdaの形で表現されなければなりません。 thrust::norm<thrust::complex<T> >()はこれらのどちらでもないので、推力complex.h template headerによって提供される「裸の」機能です。

したがって、推力アルゴリズムopとして使用するには、何らかの形でそれをラップする必要があります。ファンクタにラップする簡単な例があります。基本的なファンクタの使用方法の詳細については

$ 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

ありがとうございました! –

関連する問題