9

Thrust は、CUDA のプログラミングを開始するための素晴らしいラッパーです。NVIDIA CUFFT を推力でカプセル化する何かがあるのだろうか、それとも自分で実装する必要があるのでしょうか?

4

1 に答える 1

9

これは、未回答リストからこの質問を削除するためだけに、非常に遅い回答です。

スラストで cuFFT を使用するのは非常に簡単で、行うべき唯一のことはthrust::device_vector、 を生のポインターにキャストすることです。非常に単純な例を次に示します。

#include <iostream>
#include <cufft.h>
#include <stdlib.h>
#include <thrust/host_vector.h>
#include <thrust/device_vector.h>
#include <thrust/generate.h>
#include <thrust/transform.h>

int main(void){

    int N=4;

    // --- Setting up input device vector    
    thrust::device_vector<cuFloatComplex> d_in(N,make_cuComplex(1.f,2.f)), d_out(N);

    cufftHandle plan;
    cufftPlan1d(&plan, N, CUFFT_C2C, 1);

    cufftExecC2C(plan, thrust::raw_pointer_cast(d_in.data()), thrust::raw_pointer_cast(d_out.data()), CUFFT_FORWARD);

    // --- Setting up output host vector    
    thrust::host_vector<cuFloatComplex> h_out(d_out);

    for (int i=0; i<N; i++) printf("Element #%i; Real part = %f; Imaginary part: %f\n",i,h_out[i].x,h_out[i].y);

    getchar();
}
于 2014-03-18T21:10:01.933 に答える