我正在使用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,花了太长时间,我该怎么做才能减少时间?
答案 0 :(得分:0)
第一次调用cuda命令时,会进行大量初始化。这是因为cuda使用懒惰初始化,请参阅talonmies以前的答案here如何捕获它。
CUDA使用延迟初始化。如果你想确保函数xyz完成所有必要的初始化,唯一的方法是调用函数xyz。之后,如果再次调用xyz,则不应该有初始化开销。
对于CUDA,在第一次调用设备内存分配器(如cudaMalloc)后,应完成大量初始化。
对于像CUFFT这样的库,在调用任何调用设备内核的库函数(例如任何cufft exec调用)之后,应该完成大量的初始化。