cuFFT i strumienie

Próbuję uruchomić wiele jąder CUDA FFT asynchronicznie przy użyciu strumieni. W tym celu tworzę moje strumienie, cuFFT do przodu i odwrotnie, w następujący sposób:

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

wmain funkcja, uruchamiam forward FFT w następujący sposób:

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

Mam także inne jądra, które uruchamiam asynchronicznie z tymi samymi strumieniami.

Kiedy profiluję swoją aplikację przy użyciu Visual Profiler 5.0, widzę, że wszystkie jądra z wyjątkiem CUDA FFT (zarówno do przodu, jak i odwrotnie) działają równolegle i nakładają się. Jądra FFT działają w różnych strumieniach, ale nie nakładają się na siebie, ponieważ faktycznie działają sekwencyjnie. Czy ktoś może mi powiedzieć, jaki jest mój problem?

Moje środowisko to VS 2008, 64-bit, Windows 7.

Dzięki.

questionAnswers(3)

yourAnswerToTheQuestion