作为我研究工作的一部分,我需要测量不同 CUDA 版本(即特别是 CUDA 4 和 CUDA 5.5)中 CUFFT 库的规划时间。让我们看看一维FFT大小为4096的结果之一,如下图,
CUDA 5.5 和 GeForede GTX 770
FFT 大小:4096
计划时间:96322.7 us(微秒)
加载数据:36.6 us(微秒)
执行时间:135.9 us(微秒)
获取数据:42.5 us(微秒)
CUDA 4 和 GeForce GTX 560
FFT 大小:4096
规划时间:102.7 us(微秒)
加载数据:26.4 us(微秒)
执行时间:72.0 us(微秒)
获取数据:27.3 us(微秒)
看到CUDA 5.5 和 GeForede GTX 770上的 CUFFT 计划时间比CUDA 4 和 GeForce GTX 560上的计划时间慢了将近 900 倍,我真的很震惊。
相反,它应该在CUDA 5.5 和 GeForede GTX 770中更快,因为以下两个原因,1)CUDA 5.5 是最新版本,通常最新版本更快,2)GPU GTX 770 的规格比 GTX 更好560。
我的问题是,为什么计划时间会有这种差异?
有关更多详细信息,请参阅下面的代码,关于我如何使用 cuda 事件测量时间,
/* creates 1D FFT plan */
cudaEventRecord(start0, 0);
cufftPlan1d(&plan, NX, CUFFT_C2C, BATCH);
cudaEventRecord(stop0, 0);
cudaEventSynchronize(stop0);
/* transfer to GPU memory */
cudaEventRecord(start1, 0);
cudaMemcpy(devPtr, data, sizeof(cufftComplex)*NX*BATCH, cudaMemcpyHostToDevice);
cudaEventRecord(stop1, 0);
cudaEventSynchronize(stop1);
cudaEventRecord(start2, 0);
/* executes FFT processes */
cufftExecC2C(plan, devPtr, devPtr, CUFFT_FORWARD);
cudaEventRecord(stop2, 0);
cudaEventSynchronize(stop2);
/* transfer results from GPU memory */
cudaEventRecord(start3, 0);
cudaMemcpy(data, devPtr, sizeof(cufftComplex)*NX*BATCH, cudaMemcpyDeviceToHost);
cudaEventRecord(stop3, 0);
cudaEventSynchronize(stop3);
看到您的评论,我将不胜感激。提前致谢。