CPU-GPU FLOP速率

时间:2016-02-25 21:29:35

标签: kernel gpu cpu cpu-architecture flops

我需要计算代码应提供的每个传输值的触发器数量,以便在GPU上运行代码足以提高性能。

以下是失败率和假设:

1 即可。 PCIe 16x v3.0总线能够以15.75 GB / s的速率将数据从CPU传输到GPU。

2 即可。 GPU能够执行8个单精度TFLOP /秒。

第3 即可。 CPU能够执行400单精度GFLOP /秒。

4 即可。单精度浮点数为4个字节。

5 即可。计算可能与数据传输重叠。

6 即可。数据最初放在CPU中。

这样的问题将如何逐步解决?

1 个答案:

答案 0 :(得分:0)

解释假设5意味着CPU不会以任何方式将数据传输到GPU。显然没有理由不使用GPU,你只能获得。

通过不考虑假设5,问题变得更有趣。 假设在将数据从CPU传输到GPU时,CPU无法计算,我们得出: 我认为你正在寻找计算强度(=:ci)FLOP / byte,在这种情况下让CPU停止计算以传​​输数据是有益的,这样GPU就可以参与。 假设您使用计算强度d的算法处理ci个字节的数据。您使用d_cpu将数据拆分为d_gpud_cpu+d_gpu=d。 传输数据需t_1 = d_gpu / (15.75 GB/s)。然后你让两者都计算t_2。含义t_2 = ci * d_gpu / (8 TFLOP/s) = ci * d_cpu / (400 GFLOP/s)。总时间为t_3 = t_1 + t_2

如果CPU单独完成,则需要t_4 = ci * d / (400 GFLOP/s)

因此两个选项需要同一时间的点是

t_3 = t_4
t_1 + t_2 = t_4
d_gpu / (15.75 GB/s) + ci * d_gpu / (8 TFLOP/s) = ci * (d_cpu + d_gpu) / (400 GFLOP/s)

d_gpu / (8 TFLOP/s) = d_cpu / (400 GFLOP/s)

导致

ci ~= 1.2 FLOP/byte