我正在尝试使用袖口 MakePlanMany(( 函数在行维度中执行 2D 数组的一维 FFT。 不幸的是,当我调用cufftMakePlanMany时,它会导致分段错误。 我是 C 编程和 CUDA 的新手,所以我可能会犯一个愚蠢的错误。 我正在尝试遵循此堆栈溢出答案中的代码示例。 我的数据 (phd( 存储在行主连续内存中。 下面是我的代码:
void bpGPU (float *phd, float *complex_image, int Nfft, int NumSamples){
cufftHandle plan;
cufftComplex *d_in, *d_out;
int ds = sizeof(cufftComplex);
ds = Nfft * NumSamples;
cuMemAlloc((void**)&d_in, ds);
cuMemAlloc((void**)&d_out, ds);
int rank=1;
int n = { Nfft };
int inembed[] = {0};
int onembed[] = {0};
int istride = 1, ostride = 1;
int idist = NumSamples, odist = NumSamples;
int batch = Nfft * NumSamples;
cufftPlanMany(&plan, rank, n, inembed, istride, idist, onembed, ostride, odist, CUFFT_C2C, batch);
...
}
我在袖口计划之前和之后放置了打印语句,所以我知道这是发生分段错误的地方。 任何帮助将不胜感激。
值 n 应该是一个数组,我没有这样声明它。 相反,我将 n 设置为等于 FFT 的大小,这当然不是一个有效的指针。 CufftPlan许多人试图访问无效的指针,并返回分段错误。