cuda - 计算 CUFFT 的性能

标签 cuda fft cufft

我在分成多个 GPU 的 block (N*N/p) 上运行 CUFFT,我有一个关于计算性能的问题。首先,介绍一下我是如何做的:

  1. 向每个 GPU 发送 N*N/p 个 block
  2. 对 p 个 GPU 中的每一行进行批量 1-D FFT
  3. 将 N*N/p 个 block 返回给主机 - 对整个数据集执行转置
  4. 同上第 1 步
  5. 同上第 2 步

Gflops = ( 1e-9 * 5 * N * N *lg(N*N) )/执行时间

执行时间计算如下:

执行时间 = Sum(memcpyHtoD + kernel + memcpyDtoH times for row and col FFT for each GPU)

这是在多个 GPU 上评估 CUFFT 性能的正确方法吗?有没有其他方法可以表示 FFT 的性能?

谢谢。

最佳答案

如果您正在进行复杂的变换,则操作计数是正确的(对于实值变换,它应该是 2.5 N log2(N)),但 GFLOP 公式不正确。在并行的多处理器操作中,通常的吞吐量计算是

operation count / wall clock time

在您的情况下,假设 GPU 并行运行,或者测量执行时间的挂钟时间(即整个操作花费的时间),或者使用这个:

execution time = max(memcpyHtoD + kernel + memcpyDtoH times for row and col FFT for each GPU)

就目前而言,您的计算代表串行执行时间。考虑到多 GPU 方案的开销,我预计您获得的计算性能数字将低于在单个 GPU 上完成的等效转换。

关于cuda - 计算 CUFFT 的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11392418/

相关文章:

CUDA:主机到设备的带宽大于 PCIe 的峰值带宽?

windows - "No NVENC capable devices found"使用 ffmpeg 进行屏幕捕获和 RTP 流

c++ - 程序在这个有效缓冲区的 delete[] 上崩溃..我认为

pandas - 查找 fft 给出 keyerror :'Aligned ' pandas

cuda - 是否可以在设备函数中调用 cufft 库调用?

c++ - 为什么 std::sin() 在 CUDA 内核中工作?

iphone - ios上的录音和波形绘制

iphone - 你知道一个好的、高效的FFT吗?

c - 如何使用 cuFFT 执行实数到复数的转换

c++ - CUDA cuFFT 架构 x86_64 的 undefined symbol