1 #include "cuda_runtime.h" 2 #include "device_launch_parameters.h" 3 #include <stdio.h> 4 #include "cufft.h" 5 6 #define Nx 29 // FFT 7 #define Ny 1 // FFT̄Κ 8 9 10 int main(int argc, char* argv[]) 11 { 12 float *h_fk; 13 h_fk =(float*)malloc(sizeof(float)*Nx*Ny); 14 for (int j=0; j< Nx; j++) 15 { 16 h_fk[j] = j; 17 } 18 19 /////cufft 20 int i,j; 21 22 cufftComplex *h_hatCH; 23 h_hatCH=(cufftComplex*)malloc(sizeof(cufftComplex)*(Nx/2+1)*Ny); 24 25 cufftReal *d_fk; 26 cufftComplex *d_cufft_CH; 27 //float *d_hatrvector; 28 29 cudaMalloc((void**)&d_fk, Nx * Ny * sizeof(cufftReal)); 30 cudaMalloc((void**)&d_cufft_CH, (Nx/2+1) * Ny * sizeof(cufftComplex)); 31 //cudaMalloc((void**)&d_hatrvector, (Nx/2+1) * Ny * sizeof(float)); 32 33 cudaMemcpy(d_fk, h_fk, Nx * Ny * sizeof(cufftReal), cudaMemcpyHostToDevice); 34 35 cufftHandle plan; 36 37 cufftPlan1d(&plan, Nx, CUFFT_R2C,Ny); // Real float To Complex 38 39 cufftExecR2C(plan, (cufftReal*)d_fk, (cufftComplex*)d_cufft_CH); 40 41 cudaMemcpy(h_hatCH, d_cufft_CH, sizeof(cufftComplex)*(Nx/2+1)*Ny, cudaMemcpyDeviceToHost); 42 43 FILE *fid_h_hatCH; 44 fid_h_hatCH = fopen("h_hatCH.txt","wt"); 45 if(fid_h_hatCH==NULL) 46 { 47 printf( "Error : file open failed \n " ); 48 system("pause"); 49 } 50 51 for (int j = 0; j < (Nx/2+1)*Ny; j++) 52 { 53 if (h_hatCH[j].y == 0) 54 { 55 fprintf(fid_h_hatCH, "%f\n" , h_hatCH[j].x); 56 } 57 else if (h_hatCH[j].y > 0) 58 { 59 fprintf(fid_h_hatCH, "%f+%fi\n" , h_hatCH[j].x ,h_hatCH[j].y ); 60 } 61 else 62 { 63 fprintf(fid_h_hatCH, "%f%fi\n" , h_hatCH[j].x ,h_hatCH[j].y ); 64 } 65 } 66 67 68 fclose(fid_h_hatCH); 69 70 cufftDestroy(plan); 71 72 cudaFree(d_fk); 73 cudaFree(d_cufft_CH); 74 75 free(h_hatCH); 76 free(h_fk); 77 return 0; 78 79 }
1 CUDA_PATH ?=/usr/local/cuda-7.0 2 NVCC :=$(CUDA_PATH)/bin/nvcc -ccbin g++ 3 INCLUDE :=-I/usr/local/cuda/include/\ 4 -I/usr/local/cuda/samples/common/inc\ 5 -I/usr/include/c++\ 6 -I./ 7 8 LIBRARIES :=-L/usr/local/cuda/lib64 -lcudart -lcufft 9 TARGETS :=kernel 10 OBJECTS :=kernel.o 11 12 .SUFFIXES:.o .cu .cpp 13 .cu.o: 14 $(NVCC) -arch=sm_20 $(INCLUDE) -c -o $@ $< $(LIBRARIES) 15 .cpp.o: 16 $(CXX) $(INCLUDE) -c -o $@ $< $(LIBRARIES) 17 18 all: $(TARGETS) 19 20 $(TARGETS): $(OBJECTS) 21 #sudo cp /usr/local/cuda/lib64/libcufft.so.7.0 /usr/lib 22 ln -s libcudart.so.7.0 libcudart.so 23 ln -s libcudart.so.7.0 libcudart.so.7 24 ln -s libcufft.so.7.0 libcufft.so 25 ln -s libcufft.so.7.0 libcufft.so.7 26 g++ $(INCLUDE) -o $@ $^ $(LIBRARIES) 27 run: 28 ./$(TARGETS) 29 clean: 30 rm -rf *.o kernel libcudart.so libcudart.so.7\ 31 libcufft.so libcufft.so.7 h_hatCH1.txt
$h_hatCH.txt
406.000000+0.000003i
-14.499996+133.325287i
-14.499996+65.874161i
-14.499991+43.034470i
-14.500006+31.341248i
-14.500005+24.099192i
-14.499995+19.074436i
-14.500012+15.307473i
-14.499988+12.316420i
-14.499991+9.831238i
-14.500005+7.687408i
-14.500007+5.777329i
-14.500010+4.025898i
-14.499996+2.377148i
-14.499995+0.786158i