Thrust è un incredibile wrapper per iniziare a programmare CUDA. Mi chiedo che ci sia qualche cosa da incapsulare con NVIDIA CUFFT o che dobbiamo implementare noi stessi?Esecuzione di Fourier Transform with Thrust
7
A
risposta
6
Questa è una risposta molto tarda, solo per rimuovere questa domanda dalla lista senza risposta.
L'uso di cuFFT con la spinta dovrebbe essere molto semplice e l'unica cosa da fare dovrebbe essere il cast di thrust::device_vector
in un puntatore raw. Un esempio molto semplice è riportato di seguito:
#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();
}
Perché non utilizzare ArrayFire che ha tutto in una libreria? –
Un altro post era su come calcolare il prodotto esterno usando la spinta .. Mi aspetto che il prossimo sia come implementare l'algoritmo di Dijkstra in spinta)) perché la gente continua a chiederglielo? –
Voglio anche usare ArrayFire e in realtà devo usarlo per confrontarlo con altre librerie. C'è qualche approccio? –