【发布时间】:2012-02-01 12:41:05
【问题描述】:
这些是我在 4 个 GPU 上运行 cublas DGEMM 的结果,每个 GPU 使用 2 个流(Tesla M2050):
我已经测试了我的结果,它们没问题;与使用默认流的版本相比,我担心我得到的高 Gflops 值。我正在使用以下公式计算 Gflops:
Gflops = {2.0*10^-9*(N^3+N^2)}/elapsed_time_in_s
对于使用多个流的版本,我需要以任何方式修改这个公式吗?
HtoD-ker-DtoH 是主机到设备数据传输、内核执行和设备到主机数据传输所花费的时间,以秒为单位(这是上面公式的分母)。
Crosspost 到 Nvidia 论坛 - http://forums.nvidia.com/index.php?showtopic=219910&st=0#entry1350908
编辑:在@talonmies的评论之后,我在计算时间之前添加了一个cudaStreamSynchronize,结果如下:
谢谢,
萨彦
【问题讨论】:
-
您说“在 4 个 GPU 上运行”是什么意思,这对 DGEMM 操作意味着什么。您是将 DGEMM 拆分为 4 台设备还是其他设备?
-
我将每个 GPU 的数据分成 4 个部分,然后在块(在每个 GPU 上)上运行
cublasdgemm... -
单个 C2050 提供约 550 GFLOP/s peak,或约 2200 GFLOP/s for 4 peak 双精度,DGEMM 相当低于峰值),所以我猜你在流情况下的时间是错误的(可能在默认流情况下同步的东西现在是异步的)。无论您如何进行计算,FLOP/s 计算都不应改变。
-
谢谢,我在计算时间之前添加了一个 cudaStreamSynchronize 并且得到了合理的结果(在 EDIT 中添加)。
标签: performance cuda blas cublas