1

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

以下是翻牌率和假设:

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

2 . GPU 能够执行 8 个单精度 TFLOPs/秒。

3 . CPU 能够执行 400 单精度 GFLOPs/秒。

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

5 . 计算可以与数据传输重叠。

6 . 数据最初放置在 CPU 中。

这样的问题如何一步步解决?

4

1 回答 1

0

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

通过不考虑假设 5,问题变得更加有趣。假设在将数据从 CPU 传输到 GPU 时,CPU 无法计算,我们得出以下结论:我认为您正在寻找计算强度 (=:ci) FLOP/byte,在该值处让 CPU 停止其计算是有益的传输数据,以便 GPU 可以参与。假设您有d字节数据要使用计算强度算法进行处理ci。您将数据拆分d_cpud_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
于 2016-06-01T12:53:21.340 回答