2

这些是我在 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

1 回答 1

3

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

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

于 2013-11-10T11:58:20.557 回答