-2
현재 cuFFT 계획의 최대 128 백만 요소를 극복하기 위해 루프에서 다중 FFT를 실행하려고합니다. 그래서, 예를 들어 루프에서 1 억 2 천 8 백만 요소 실행을 실행합니다.cuFFT 더 큰 일괄 처리 크기를위한 FFT 호출을 반복합니다.
내 프로그램은 단일 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