cuFFT y arroyos

Estoy tratando de lanzar varios kernels CUDA FFT de forma asíncrona utilizando flujos. Para eso, estoy creando mis flujos, cuFFT hacia adelante y planes inversos de la siguiente manera:

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)
}

En elmain Función, estoy lanzando FFTs adelante como sigue:

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

También tengo otros núcleos que lanzo de forma asíncrona con los mismos flujos.

Cuando perfilo mi aplicación usando Visual Profiler 5.0, veo que todos los kernels, excepto el FUD de CUDA (tanto hacia delante como hacia atrás), se ejecutan en paralelo y se superponen. Los kernels FFT se ejecutan en diferentes flujos, pero no se superponen, ya que en realidad se ejecutan secuencialmente. ¿Alguien puede decirme cuál es mi problema?

Mi entorno es VS 2008, 64 bit, Windows 7.

Gracias.

Respuestas a la pregunta(3)

Su respuesta a la pregunta