Почему cufftPlanMany () вызывает ошибку сегментации? - PullRequest
0 голосов
/ 28 июня 2018

Я пытаюсь выполнить 1D БПФ 2D-массива в измерении строки, используя функцию cuPt MakePlanMany (). К сожалению, когда я звоню cufftMakePlanMany, это вызывает ошибку сегментации. Я новичок в программировании на C и CUDA, поэтому я мог совершить глупую ошибку. Я пытаюсь следовать примеру кода в этом ответе StackOverflow . Мои данные (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 голосов
/ 28 июня 2018

Значение n должно быть массивом, и я не объявлял его как таковой. Вместо этого я установил n равным размеру БПФ, который, конечно, не является допустимым указателем. CufftPlanMany попытался получить доступ к неверному указателю и вернул ошибку сегментации.

...