この操作がGPUよりもCPUで高速に実行されるのはなぜですか?

zihaozhihao

テンソルフローの公式ガイドを読んでいたときに、操作の明示的なデバイス配置を示す1つの例があります。この例では、CPUの実行時間がGPUよりも短いのはなぜですか?より一般的には、GPUでどのような種類の操作がより高速に実行されますか?

import time

def time_matmul(x):
  start = time.time()
  for loop in range(10):
    tf.matmul(x, x)

  result = time.time()-start

  print("10 loops: {:0.2f}ms".format(1000*result))

# Force execution on CPU
print("On CPU:")
with tf.device("CPU:0"):
  x = tf.random.uniform([1000, 1000])
  assert x.device.endswith("CPU:0")
  time_matmul(x)

# Force execution on GPU #0 if available
if tf.test.is_gpu_available():
  print("On GPU:")
  with tf.device("GPU:0"): # Or GPU:1 for the 2nd GPU, GPU:2 for the 3rd etc.
    x = tf.random.uniform([1000, 1000])
    assert x.device.endswith("GPU:0")
    time_matmul(x)


### Output
# On CPU:
# 10 loops: 107.55ms
# On GPU:
# 10 loops: 336.94ms
y.selivonchyk

GPUは、高いメモリ帯域幅と多数の並列計算ユニットを備えています。簡単に並列化できる操作やデータ量の多い操作は、GPU実行の恩恵を受けます。たとえば、行列の乗算には、並行して実行できる多数の乗算と加算が含まれます。

CPUは、メモリレイテンシが低く(一度に大量のデータを読み取る場合は重要性が低くなります)、豊富な命令セットを備えています。順次計算を行う必要がある場合(フィボナッチ数など)、ランダムなメモリ読み取りを頻繁に行う必要がある場合、制御フローが複雑な場合などに役立ちます。

公式ブログの違いは、PRNGアルゴリズムは通常シーケンシャルであり、並列化された操作を効率的に静かに利用できないという事実によるものです。しかし、これは一般的です。最新のCUDAバージョンにはすでにPRNGカーネルがあり、そのようなタスクではCPUよりも優れています。

上記の例になると、私のシステムでは、CPUで65ミリ秒、GPUで0.3ミリ秒かかりました。さらに、サンプリングサイズを[5000、5000]に設定すると、CPU:7500msになりますが、GPUの場合は同じGPU:0.3msのままです。一方、[10、10]の場合、CPU:0.18(最大0.4ms)対GPU:0.25msです。単一の操作パフォーマンスでもデータのサイズに依存することを明確に示しています

答えに戻る。GPUに操作を配置すると、少数のメモリ呼び出しで計算できる並列化が容易な操作に役立つ場合があります。一方、CPUは、多数の低遅延(つまり、少量のデータ)メモリ呼び出しに関しては優れています。さらに、すべての操作をGPUで簡単に実行できるわけではありません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

このコードでCPUがGPUよりも高速に実行されるのはなぜですか?

分類Dev

代わりに、CPUがGPUよりも高速に行列演算を実行するのはなぜですか?

分類Dev

GPUがCPUよりも高速に行列乗算を実行できるのはなぜですか?

分類Dev

ここでJavaがCよりも高速に実行されるのはなぜですか?

分類Dev

GPUがCPUよりも高温で実行できるのはなぜですか?

分類Dev

test1()がtest2()よりもはるかに高速に実行されるのはなぜですか?

分類Dev

scipy線形補間が最近隣補間よりも高速に実行されるのはなぜですか?

分類Dev

C#がC ++よりも高速に実行されるのはなぜですか?

分類Dev

コードのこの部分が他の部分よりも先に実行されるのはなぜですか?

分類Dev

collections.Counterがソースコードを直接実行するよりも高速に実行されるのはなぜですか

分類Dev

EclipseのPyDevPythonコンソールよりもEclipseコンソールの方がコードが高速に実行されるのはなぜですか?

分類Dev

Python印刷がGoのfmt.Printおよびos.Stdout.Writeよりも高速に実行されるのはなぜですか

分類Dev

この単純なループの実行において、PHP7がPython3よりもはるかに高速なのはなぜですか?

分類Dev

バイトコードがネイティブコードよりも高速に実行される可能性があるのはなぜですか

分類Dev

Futureを使用したこの例は、ベンチマークよりも高速に実行されないのはなぜですか?

分類Dev

setImmediate()がシーケンシャルコードよりも高速に実行されるのはなぜですか?

分類Dev

サーバーCPUが同じベンチマークスコアのMacbookPro CPUよりも高速なタスクを実行するのはなぜですか?

分類Dev

ストリームを使用するこのコードがJava 9でJava 8よりもはるかに高速に実行されるのはなぜですか?

分類Dev

コードが想定よりもはるかに多く実行されるのはなぜですか?

分類Dev

この場合、「sed」が「awk」よりもはるかに高速でないのはなぜですか

分類Dev

PythonのこのコードがC ++よりもはるかに高速なのはなぜですか?

分類Dev

Python timeit.timeit-スニペットバージョンのsortは、ラムダを使用するよりも高速に実行されます。なぜですか?

分類Dev

配列がArrayListよりもはるかに高速なのはなぜですか?

分類Dev

any()がinよりもはるかに高速なのはなぜですか?

分類Dev

pandas.grouby.meanが並列実装よりもはるかに高速なのはなぜですか

分類Dev

Pythonがmain()関数を介して独自の関数を実行するC ++よりも高速にC ++関数を実行するのはなぜですか?

分類Dev

CPUでの学習がGPUよりも遅いのはなぜですか

分類Dev

CPUでTensorflowを実行すると、GPUで実行するよりも高速になります

分類Dev

このコードがGPUでCPUよりも10倍遅いのはなぜですか?

Related 関連記事

  1. 1

    このコードでCPUがGPUよりも高速に実行されるのはなぜですか?

  2. 2

    代わりに、CPUがGPUよりも高速に行列演算を実行するのはなぜですか?

  3. 3

    GPUがCPUよりも高速に行列乗算を実行できるのはなぜですか?

  4. 4

    ここでJavaがCよりも高速に実行されるのはなぜですか?

  5. 5

    GPUがCPUよりも高温で実行できるのはなぜですか?

  6. 6

    test1()がtest2()よりもはるかに高速に実行されるのはなぜですか?

  7. 7

    scipy線形補間が最近隣補間よりも高速に実行されるのはなぜですか?

  8. 8

    C#がC ++よりも高速に実行されるのはなぜですか?

  9. 9

    コードのこの部分が他の部分よりも先に実行されるのはなぜですか?

  10. 10

    collections.Counterがソースコードを直接実行するよりも高速に実行されるのはなぜですか

  11. 11

    EclipseのPyDevPythonコンソールよりもEclipseコンソールの方がコードが高速に実行されるのはなぜですか?

  12. 12

    Python印刷がGoのfmt.Printおよびos.Stdout.Writeよりも高速に実行されるのはなぜですか

  13. 13

    この単純なループの実行において、PHP7がPython3よりもはるかに高速なのはなぜですか?

  14. 14

    バイトコードがネイティブコードよりも高速に実行される可能性があるのはなぜですか

  15. 15

    Futureを使用したこの例は、ベンチマークよりも高速に実行されないのはなぜですか?

  16. 16

    setImmediate()がシーケンシャルコードよりも高速に実行されるのはなぜですか?

  17. 17

    サーバーCPUが同じベンチマークスコアのMacbookPro CPUよりも高速なタスクを実行するのはなぜですか?

  18. 18

    ストリームを使用するこのコードがJava 9でJava 8よりもはるかに高速に実行されるのはなぜですか?

  19. 19

    コードが想定よりもはるかに多く実行されるのはなぜですか?

  20. 20

    この場合、「sed」が「awk」よりもはるかに高速でないのはなぜですか

  21. 21

    PythonのこのコードがC ++よりもはるかに高速なのはなぜですか?

  22. 22

    Python timeit.timeit-スニペットバージョンのsortは、ラムダを使用するよりも高速に実行されます。なぜですか?

  23. 23

    配列がArrayListよりもはるかに高速なのはなぜですか?

  24. 24

    any()がinよりもはるかに高速なのはなぜですか?

  25. 25

    pandas.grouby.meanが並列実装よりもはるかに高速なのはなぜですか

  26. 26

    Pythonがmain()関数を介して独自の関数を実行するC ++よりも高速にC ++関数を実行するのはなぜですか?

  27. 27

    CPUでの学習がGPUよりも遅いのはなぜですか

  28. 28

    CPUでTensorflowを実行すると、GPUで実行するよりも高速になります

  29. 29

    このコードがGPUでCPUよりも10倍遅いのはなぜですか?

ホットタグ

アーカイブ