cuFFT und Streams

Ich versuche, mehrere CUDA-FFT-Kernel mithilfe von Streams asynchron zu starten. Dafür erstelle ich meine Streams, cuFFT Forward und Inverse Pläne wie folgt:

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

In demmain Funktion starte ich Forward-FFTs wie folgt:

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

Ich habe auch andere Kernel, die ich asynchron mit denselben Streams starte.

Wenn ich meine Anwendung mit Visual Profiler 5.0 profiliere, werden alle Kernel mit Ausnahme der CUDA-FFT (vorwärts und rückwärts) parallel ausgeführt und überlappen sich. FFT-Kernel werden in verschiedenen Streams ausgeführt, überlappen sich jedoch nicht, da sie tatsächlich nacheinander ausgeführt werden. Kann mir jemand sagen, was mein Problem ist?

Meine Umgebung ist VS 2008, 64 Bit, Windows 7.

Vielen Dank.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage