cuFFT e fluxos

Eu estou tentando lançar vários kernels CUFT FFT de forma assíncrona usando fluxos. Para isso, estou criando meus streams, cuFFT forward e inverse plans da seguinte forma:

streams = (cudaStream_t*) malloc(sizeof(cudaStream_t)*streamNum);
plansF = (cufftHandle *) malloc(sizeof(cufftHandle)*streamNum);
plansI = (cufftHandle *) malloc(sizeof(cufftHandle)*streamNum);
for(int i=0; i<streamNum; i++)  
{
    cudaStreamCreate(&streams[i]);
    CHECK_ERROR(5)
    cufftPlan1d(&plansF[i], ticks, CUFFT_R2C,1);
    CHECK_ERROR(5)
    cufftPlan1d(&plansI[i], ticks, CUFFT_C2R,1);
    CHECK_ERROR(5)
    cufftSetStream(plansF[i],streams[i]);
    CHECK_ERROR(5)
    cufftSetStream(plansI[i],streams[i]);
    CHECK_ERROR(5)
}

Nomain função, estou lançando FFTs para a frente da seguinte forma:

for(w=1;w<q;w++)
  {
    cufftExecR2C(plansF[w], gpuMem1+k,gpuMem2+j);
    CHECK_ERROR(8)
    k += rect_small_real;
    j += rect_small_complex;
  }

Eu também tenho outros kernels que eu inicio de forma assíncrona com os mesmos fluxos.

Quando eu perfil meu aplicativo usando o Visual Profiler 5.0, vejo que todos os kernels, exceto o FFT CUDA (tanto para frente quanto para inverso), são executados em paralelo e se sobrepõem. Os kernels FFT são executados em diferentes streams, mas eles não se sobrepõem, já que eles são executados sequencialmente. Alguém pode me dizer qual é o meu problema?

Meu ambiente é o VS 2008, de 64 bits, o Windows 7.

Obrigado.

questionAnswers(3)

yourAnswerToTheQuestion