为什么cufftPlanMany()会导致分段错误?

时间:2018-06-27 21:55:54

标签: cuda segmentation-fault cufft

我正在尝试使用cufft MakePlanMany()函数对行维度中的2D数组执行1D FFT。不幸的是,当我调用cufftMakePlanMany时,它导致了分段错误。我是C编程和CUDA的新手,所以我可能会犯一个愚蠢的错误。我正在尝试遵循此StackOverflow answer.中的代码示例,我的数据(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);
   ...
}

我在cufftPlanMany之前和之后放置了打印语句,所以我知道这是发生分段错误的地方。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

值n应该是一个数组,我没有这样声明。相反,我将n设置为FFT的大小,这当然不是有效的指针。 CufftPlanMany尝试访问无效的指针并返回分段错误。