【问题标题】:CUBLAS dgemm performance queryCUBLAS dgemm 性能查询
【发布时间】: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


【解决方案1】:

单个 C2050 提供约 550 GFLOP/s 峰值,或约 2200 GFLOP/s 用于双精度的 4 个峰值,并且 DGEMM 远低于峰值),所以我猜你在流情况下的时间是错误的(可能在默认流情况下同步的东西现在是异步的)。无论您如何进行计算,FLOP/s 计算都不应改变。

我会检查您的代码,以确保您使用的任何计时机制都与您启动的所有流同步,要么通过所有流的cudaStreamWaitEvent 机制,要么通过每个流的cudaStreamSynchronize。在 GPU 完成 CUBLAS 操作之前,您尝试计时的代码可能会超出计时。

【讨论】:

  • 添加了答案以将其从未回答的问题列表中删除。有人可以投票或接受答案吗?
猜你喜欢
  • 2016-10-09
  • 2016-02-19
  • 1970-01-01
  • 1970-01-01
  • 2018-07-09
  • 1970-01-01
  • 2013-04-29
  • 1970-01-01
  • 2011-05-06
相关资源
最近更新 更多