#ifndef _BPBASIC0_CUDA_H_ #define _BPBASIC0_CUDA_H_ #include #include #include #include #include "BaseConstVariable.h" //#define cudaCheckError(ans) { gpuAssert((ans), __FILE__, __LINE__); } //inline void gpuAssert(cudaError_t code, const char* file, int line) { // if (code != cudaSuccess) { // fprintf(stderr, "CUDA Error: %s %s %d\n", cudaGetErrorString(code), file, line); // exit(code); // } //} // //#define c LIGHTSPEED struct GPUDATA { long Nfft, K, Np, nx, ny; // 傅里叶点数、频点数、脉冲数、图像列、图像行 double* AntX, * AntY, * AntZ, * minF; // 天线坐标、起始频率 double* x_mat, * y_mat, * z_mat,*R_mat;// 地面坐标 double* r_vec; // 坐标范围 double* Freq;// 频率 cuComplex* phdata;// 回波 cuComplex* im_final;// 图像 double R0; // 参考斜距 double deltaF; // 频点范围 }; struct GPUDATA_single { long Nfft, K, Np, nx, ny; // 傅里叶点数、频点数、脉冲数、图像列、图像行 float* AntX, * AntY, * AntZ, * minF; // 天线坐标、起始频率 float* x_mat, * y_mat, * z_mat;// 地面坐标 float* r_vec; // 坐标范围 float* Freq;// 频率 cuComplex* phdata;// 回波 cuComplex* im_final;// 图像 float R0; // 参考斜距 float deltaF; // 频点范围 }; extern "C" { void bpBasic0CUDA(GPUDATA& data, int flag,double* h_R=nullptr); void initGPUData(GPUDATA& h_data, GPUDATA& d_data); void freeGPUData(GPUDATA& d_data); void freeHostData(GPUDATA& d_data); void BPBasic0(GPUDATA& h_data); }; extern "C" { // 函数废弃,因为这个成像精度不够 void bpBasic0CUDA_single(GPUDATA_single& data, int flag, float* h_R = nullptr); void initGPUData_single(GPUDATA_single& h_data, GPUDATA_single& d_data); void freeGPUData_single(GPUDATA_single& d_data); void freeHostData_single(GPUDATA_single& d_data); void BPBasic0_single(GPUDATA_single& h_data); void copy_Host_Single_GPUData(GPUDATA_single& h_data, GPUDATA& d_data); }; #endif