cufftPlan2d异常花了很长时间才能执行

时间:2017-08-01 07:18:16

标签: cuda

我正在使用cufft库。我正在使用cufftPlan2d函数来创建我需要的计划。以下是我的代码:

cudaEvent_t start1,stop1;
    cudaEventCreate(&start1);
    cudaEventCreate(&stop1);
    cudaEventRecord(start1, 0);

    cufftHandle plan1;
    cufftPlan2d(&plan1,HEIGHT2,WIDTH2,CUFFT_C2C);
    cudaEventRecord(stop1,0);
    cudaEventSynchronize(stop1);
    float etime;
    cudaEventElapsedTime(&etime,start1,stop1);

其中HEIGHT2 = 1080 * 2,WIDTH2 = 1920 * 2。但是etime = 919.542419ms,花了太长时间,我该怎么做才能减少时间?

1 个答案:

答案 0 :(得分:0)

第一次调用cuda命令时,会进行大量初始化。这是因为cuda使用懒惰初始化,请参阅talonmies以前的答案here如何捕获它。

引自Nvidia forums

  

CUDA使用延迟初始化。如果你想确保函数xyz完成所有必要的初始化,唯一的方法是调用函数xyz。之后,如果再次调用xyz,则不应该有初始化开销。

     

对于CUDA,在第一次调用设备内存分配器(如cudaMalloc)后,应完成大量初始化。

     

对于像CUFFT这样的库,在调用任何调用设备内核的库函数(例如任何cufft exec调用)之后,应该完成大量的初始化。