В настоящее время я пытаюсь запустить несколько своих FFT в цикле, чтобы преодолеть 128 миллионов элементов max плана cuFFT. Так, например, я бы выполнил 128 миллионов прогонов элементов в цикле.cuFFT зацикленные вызовы FFT для больших размеров партии
Моя программа работает нормально только для одного вызова FFT, но цикл, похоже, не работает. Я думаю, возможно, это из-за того, как я компенсировал БПФ. Вот фрагмент того, как я это сделал:
cufftComplex *d_signal;
checkCudaErrors(cudaMalloc((void **)&d_signal, mem_size));
cufftComplex *d_filter_kernel;
checkCudaErrors(cudaMalloc((void **)&d_filter_kernel, mem_size));
int rankSize = 2;
int rank[2];
rank[0] = TempSearchSizeY; rank[1] = TempSearchSizeX;
int FFTPlanSize = 500;
cufftHandle planinitial;
cufftResult r;
r = cufftPlanMany(&planinitial, rankSize, rank, NULL, 1, 0, NULL, 1, 0, CUFFT_C2C, FFTPlanSize);
int NrOfFFTRuns = ceil(loadsize/FFTPlanSize);
int FFTOffset = 0;
checkCudaErrors(cudaMemcpy(d_signal, imageNew, sizeof(Complex)*TempSearchArea*loadsize, cudaMemcpyHostToDevice));
checkCudaErrors(cudaMemcpy(d_filter_kernel, tempNew, sizeof(Complex)*TempSearchArea*loadsize, cudaMemcpyHostToDevice));
for (int a = 0; a < NrOfFFTRuns; a++){
FFTOffset = FFTPlanSize*a;
r = cufftExecC2C(planinitial, (cufftComplex *)&d_signal[FFTOffset], (cufftComplex *)&d_signal[FFTOffset], CUFFT_FORWARD);
PrintFFTPlanStatus(r);
r = cufftExecC2C(planinitial, (cufftComplex *)&d_filter_kernel[FFTOffset], (cufftComplex *)&d_filter_kernel[FFTOffset], CUFFT_FORWARD);
PrintFFTPlanStatus(r);
cout << "Run inital" << endl;
{
Приведенный выше код возвращает неправильный результат. Может ли кто-нибудь помочь мне разобраться с проблемой?
Где вы инициализации ранг? Пожалуйста, укажите [mcve]. – havogt
Извините, что снят с гораздо большего кода. Я редактировал инициализацию рангов в коде. Я увижу, могу ли я изолировать код в одном файле и редактировать отсутствующие части, если они есть. Хотя я надеялся, что это просто синтаксическая ошибка где-то, что заставило ее потерпеть неудачу. – LukaK