Révision 3
FFT/FFT2D.c (revision 3) | ||
---|---|---|
45 | 45 |
#define FFTW_EXECUTE fftwf_execute |
46 | 46 |
#define FFTW_DESTROY_PLAN fftwf_destroy_plan |
47 | 47 |
#define FFTW_FREE fftwf_free |
48 |
|
|
49 |
#define CUFFTCOMPLEX cufftComplex |
|
50 |
#define CUFFT_X2X CUFFT_C2C |
|
51 |
#define CUFFTEXECX2X cufftExecC2C |
|
52 |
|
|
48 | 53 |
#elif DOUBLE |
49 | 54 |
#define FFTW_COMPLEX fftw_complex |
50 | 55 |
#define FFTW_PLAN fftw_plan |
... | ... | |
55 | 60 |
#define FFTW_EXECUTE fftw_execute |
56 | 61 |
#define FFTW_DESTROY_PLAN fftw_destroy_plan |
57 | 62 |
#define FFTW_FREE fftw_free |
63 |
|
|
64 |
#define CUFFTCOMPLEX cufftDoubleComplex |
|
65 |
#define CUFFT_X2X CUFFT_Z2Z |
|
66 |
#define CUFFTEXECX2X cufftExecZ2Z |
|
67 |
|
|
58 | 68 |
#endif |
59 | 69 |
|
60 | 70 |
int main(int argc,char **argv) |
... | ... | |
108 | 118 |
|
109 | 119 |
#ifdef CUFFT |
110 | 120 |
cufftHandle plan; |
111 |
cufftComplex *in, *devin;
|
|
121 |
CUFFTCOMPLEX *in, *devin;
|
|
112 | 122 |
|
113 |
size_t arraySize = sizeof(cufftComplex)*size*size;
|
|
123 |
size_t arraySize = sizeof(CUFFTCOMPLEX)*size*size;
|
|
114 | 124 |
cudaMallocHost((void**) &in, arraySize); |
115 | 125 |
cudaMalloc((void**) &devin, arraySize); |
116 | 126 |
|
... | ... | |
126 | 136 |
gettimeofday(&tv1, &tz); |
127 | 137 |
|
128 | 138 |
// Plan & copy to device |
129 |
cufftPlan2d(&plan, size, size, CUFFT_C2C);
|
|
139 |
cufftPlan2d(&plan, size, size, CUFFT_X2X);
|
|
130 | 140 |
cudaMemcpy(devin, in, arraySize, cudaMemcpyHostToDevice); |
131 | 141 |
|
132 | 142 |
// Second timer to end plan |
... | ... | |
139 | 149 |
|
140 | 150 |
// Process |
141 | 151 |
for (i=0;i<nloops;i++) { |
142 |
cufftExecC2C(plan, devin, devin, CUFFT_FORWARD);
|
|
152 |
CUFFTEXECX2X(plan, devin, devin, CUFFT_FORWARD);
|
|
143 | 153 |
} |
144 | 154 |
|
145 | 155 |
cudaMemcpy(in, devin, arraySize, cudaMemcpyDeviceToHost); |
Formats disponibles : Unified diff