我需要计算代码应提供的每个传输值的触发器数量,以便在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中。
这样的问题将如何逐步解决?
答案 0 :(得分:0)
解释假设5意味着CPU不会以任何方式将数据传输到GPU。显然没有理由不使用GPU,你只能获得。
通过不考虑假设5,问题变得更有趣。
假设在将数据从CPU传输到GPU时,CPU无法计算,我们得出:
我认为你正在寻找计算强度(=:ci)FLOP / byte,在这种情况下让CPU停止计算以传输数据是有益的,这样GPU就可以参与。
假设您使用计算强度d
的算法处理ci
个字节的数据。您使用d_cpu
将数据拆分为d_gpu
和d_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