【发布时间】:2012-03-09 08:24:15
【问题描述】:
我在划分为多个 GPU 的块 (N*N/p) 上运行 CUFFT,我对计算性能有疑问。首先,关于我是如何做到的:
- 向每个 GPU 发送 N*N/p 个块
- 对 p 个 GPU 中的每一行进行批处理 1-D FFT
- 将 N*N/p 个块返回主机 - 对整个数据集执行转置
- 同上步骤 1
- 同上步骤 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 的性能?
谢谢。
【问题讨论】:
-
这是一个真实的还是复杂的变换?
-
cufftZ2Z - 我在执行时间中包含 fft 计划创建和销毁时间是否正确?如果我不包括它们,我会看到相当大的差异......
-
对此没有“正确”的答案。您应该准确报告您的时间安排包括哪些内容。计划创建可能包括惰性运行时 API 上下文建立。如果确实如此,您可能不希望这样做。我并没有真正使用 CUFFT,也不太了解它的内部结构。
-
出于好奇,为什么你有 5 * 1e-9 (问题是“5”部分)
-
@CarlodelMundo:长度为 N 的复杂 FFT 的操作计数是
5 N log2(N)(这是 5 的来源)。1e-9是从 FLOP/s 到 GFLOP/s 的转换因子。