1

I need to calculate how many flops per transferred value a code should provide so that running the code on GPU will be worth enough to increase the performance.

Here are the flop rates and assumptions:

1. PCIe 16x v3.0 bus is able to transfer data from CPU to GPU at a rate of 15.75 GB/s.

2. GPU is able to perform 8 single precision TFLOPs/second.

3. CPU is able to perform 400 single precision GFLOPs/second.

4. Single precision floating point number is 4 bytes.

5. Calculation can overlap with data transfers.

6. Data is originally placed in the CPU.

How would a problem like this be solved step by step?

4

1 に答える 1

0

仮定 5 を解釈すると、データを GPU に転送する際に CPU がまったく混乱していないことを意味します。GPU を使用しない理由はないことは明らかです。

仮定 5 を考慮しないことで、この問題はさらに興味深いものになります。CPU から GPU にデータを転送している間、CPU が計算できないと仮定すると、次のようになります。CPU に計算を停止させることが有益な計算強度 (=:ci) FLOP/byte を探していると思います。 GPU が参加できるようにデータを転送します。d計算強度のアルゴリズムで処理するデータのバイトがあるとしますcid_cpuデータをとd_gpuで分割しますd_cpu+d_gpu=dt_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 に答える