0

作为我研究工作的一部分,我需要测量不同 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);

看到您的评论,我将不胜感激。提前致谢。

4

0 回答 0