2

我在分成多个 GPU 的块 (N*N/p) 上运行 CUFFT,我对计算性能有疑问。首先,关于我是如何做到的:

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

Gflops = ( 1e-9 * 5 * N * N *lg(N*N) ) / execution time

执行时间计算如下:

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

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

谢谢。

4

1 回答 1

2

如果您正在执行复杂变换,则操作计数是正确的(对于实值变换,它应该是 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)

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

于 2012-02-18T06:18:12.213 回答