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

ダンダン

次のCPUとGeekBenchスコアが与えられます。

  • Amazon EC2 z1d.largeインスタンス:Intel Xeon Platinum 8151 4061 MHz(1コア)シングルコアスコア:1094、マルチコアスコア:1300

  • Macbook Proラップトップ:Intel Core i5-8259U 2300 MHz(4コア)シングルコアスコア:1002、マルチコアスコア:4104

Xeonは、シングルスレッドベンチマークスコアで9.1%高速です。

ただし、両方のデバイスでJavaScriptアプリケーションコード(シングルスレッド)をコンパイルすると、Xeonはタスクを60%速く完了します。どうして?ベンチマークスコアによると、Xeonの方がわずか9%高速です。

どちらもNVMEドライブを備えているため、ボトルネックになることはありません。MacはLinuxベースなので、MacとLinuxOSの問題もあるとは思いません。

これは、Xeonがサーバー/デスクトップCPUであるためですか?Macbook Pro CPUはフルパワーで動作しておらず、Intel Turbo Boostが立ち上がるのを待たなければならないのに対し、100%の速度とパワーで動作していますか?

slebetman

あなたが説明するタスク、Bableプロジェクトのコンパイル、および関連するCPUを考えると、パフォーマンスの違いの原因はわかっていると思います。私はもっ​​と早く答えたかったのですが、私の予感を確認するために少し調査をしなければなりませんでした。

まず、システムにかかる負荷を特徴づけましょう。

Babel.jsは、並列処理のために非同期I / Oを主に活用するシングルスレッドのシングルプロセスコンパイラとして記述されています(少なくとも、私がグーグルで調べたところ、ワーカースレッドを使用していることは示されていません)。ディスクからファイルをコンパイルするコンパイラであるため、その実行の大部分はディスクからのデータを待つことを伴います。これにより、次のワークロードが得られます。

  1. シングルスレッドなので、複数のコアまたはハイパースレッディングはコンパイルに大きな影響を与えませんが、1つの注意点があります。

  2. Node.jsはワーカースレッドを使用してディスクI / Oを処理しますが、2つまたは4つのハードウェアスレッドを超えると、複数のコアに追加の利点はありません(https://nodejs.org/en/docs/guides/dont-block-theを参照)。-event-loop /

  3. 並列処理のほとんどは、I / Oレベルで行われます。Babelは、できるだけ多くのファイルを並行して読み取ろうとします。

i5とXeonはどちらも、ポイント1と2に関してかなり同等です。それでは、CPUがポイント3を処理する方法を見てみましょう。Babelの並列ファイル読み取り要求を処理します。

2つのシステムの最初の大きな違いは次のとおりです。

  • Core i58259には16個のPCIレーンがあります

  • Xeon8151には48のPCIレーンがあります

したがって、Xeonはi5よりも多くの並列I / O操作を処理できることは明らかです。使用可能なメモリ転送レーンの数よりも多くのI / Oがある場合、OSは、使用可能なハードウェアスレッドの数よりも多くのタスクがある場合と同じように処理します。つまり、それらをキューに入れ、順番に実行します。

次に、NVMEが実際に複数のレーンを使用できるかどうかを知りたいと思いました。これは私が別の興味深い事実にぶつかったところです。NVME標準では、カードは最大4つのPCIレーンを使用できます(物理的には多くの接続が割り当てられています)が、一部のカードは2つしか使用せず、他のカードは4つを使用します。したがって、すべてのNVMEカードが同じように作成されるわけではありません。これだけで、BabelがRAMに並行してコピーできるファイルの数がほぼ2倍の帯域幅で2倍になります。

また、NVMEスロットがCPUにどのように接続されているかによっても異なります。16個のPCIレーンしかないCorei5は、間違いなく少なくとも8個のPCIレーンをGPU用に予約します。他のデバイス間で共有できるのは8つだけです。これは、NVMEカードがWifiまたは他のハードウェアと帯域幅を共有しなければならない場合があることを意味します。これにより、速度が少し遅くなります。

また、NVMEがCPUのPCIレーンに直接接続されていない場合もあります。Macbookは、実際にはGPU用に16レーンすべてを予約し、サウスブリッジ(追加のPCIレーンがある場合があります)を介してNVMEに接続する場合があります。Macbookがこれを行うかどうかはわかりませんが、これもパフォーマンスを少し低下させる可能性があります。

対照的に、Xeonには多数のレーンがあるため、マザーボードの設計者は非常に高速なI / Oプラットフォームをより自由に作成できます。さらに、AWSサーバーには通常GPUがインストールされていないため、GPU用にレーンを予約する必要はありません。繰り返しになりますが、AWSサーバーの実際のアーキテクチャは個人的にはわかりませんが、Babelプロジェクトのコンパイル時にMacbookよりも優れたアーキテクチャを作成することは可能です。

したがって、最終的にEC2インスタンスがMacbookよりも優れたパフォーマンスを発揮できるようにする主な要因は次のとおりです。

  1. CPUによって直接サポートされるPCIレーンの数

  2. NVMEドライブでサポートされているPCIレーンの数

  3. NVMEレーンがCPUに接続されている方法

寄与する可能性のある追加の要因は次のとおりです。

  1. I / Oバスの速度(PCI2とPCI3など)

  2. RAMの速度

  3. 使用可能なDMAチャネルの数(これだけでも長い回答が必要なので、スキップしましたが、理由はPCIレーンと同様です)

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

CPUよりも多くの同時スレッドを実行できるのはなぜですか?

分類Dev

プロセスの数がPythonのCPUのスレッドの総数よりも多い場合、アプリケーションをより高速に実行できるのはなぜですか?

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

100の非同期タスクを実行すると、100のスレッドを実行するよりも時間がかかるのはなぜですか?

分類Dev

配列を入力として使用するサブルーチンが、自動ローカル配列を使用する同じサブルーチンよりも高速なパフォーマンスを提供するのはなぜですか?

分類Dev

ブールマスクによるDataFrameのフィルタリングがapply()よりもはるかに高速なのはなぜですか?

分類Dev

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

分類Dev

1つのワーカーを持つThreadPoolExecutorが通常の実行よりも高速なのはなぜですか?

分類Dev

単純なアクセスでは、リストがベクターよりも高速なのはなぜですか?

分類Dev

スケジュールされたタスクをCeleryで実行することがcrontabよりも望ましいのはなぜですか?

分類Dev

スケジュールされたタスクをCeleryで実行することがcrontabよりも望ましいのはなぜですか?

分類Dev

ifstream :: readがイテレータを使用するよりもはるかに高速なのはなぜですか?

分類Dev

Hiveのフェッチタスクがマップのみのタスクよりも高速に動作するのはなぜですか?

分類Dev

より高速なディスクでデータベースのベンチマーク結果が悪化する可能性はありますか?

分類Dev

Pythonスクリプトの実行がHeapSort実装よりも遅くなるのはなぜですか?

分類Dev

Androidのokhttp3がデスクトップコンピューターよりもリクエストの実行が遅いのはなぜですか?

分類Dev

私のi5ラップトップは、Xeon40コアサーバーのCPUUbuntu 18.04よりも高速にPythonスクリプトを実行しています。なぜですか?

分類Dev

Google の Octane 2.0 ベンチマークで、Google Chromium が Mozilla Firefox よりもはるかに高速なのはなぜですか?

分類Dev

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

分類Dev

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

分類Dev

memcmpがforループチェックよりもはるかに高速なのはなぜですか?

分類Dev

同じプロセスの2つのユーザーレベルのスレッドをマルチコアCPUで同時に実行できますか?

分類Dev

同じプロセスの2つのユーザーレベルのスレッドをマルチコアCPUで同時に実行できますか?

Related 関連記事

  1. 1

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

  2. 2

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

  3. 3

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

  4. 4

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

  5. 5

    CPUよりも多くの同時スレッドを実行できるのはなぜですか?

  6. 6

    プロセスの数がPythonのCPUのスレッドの総数よりも多い場合、アプリケーションをより高速に実行できるのはなぜですか?

  7. 7

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

  8. 8

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

  9. 9

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

  10. 10

    100の非同期タスクを実行すると、100のスレッドを実行するよりも時間がかかるのはなぜですか?

  11. 11

    配列を入力として使用するサブルーチンが、自動ローカル配列を使用する同じサブルーチンよりも高速なパフォーマンスを提供するのはなぜですか?

  12. 12

    ブールマスクによるDataFrameのフィルタリングがapply()よりもはるかに高速なのはなぜですか?

  13. 13

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

  14. 14

    1つのワーカーを持つThreadPoolExecutorが通常の実行よりも高速なのはなぜですか?

  15. 15

    単純なアクセスでは、リストがベクターよりも高速なのはなぜですか?

  16. 16

    スケジュールされたタスクをCeleryで実行することがcrontabよりも望ましいのはなぜですか?

  17. 17

    スケジュールされたタスクをCeleryで実行することがcrontabよりも望ましいのはなぜですか?

  18. 18

    ifstream :: readがイテレータを使用するよりもはるかに高速なのはなぜですか?

  19. 19

    Hiveのフェッチタスクがマップのみのタスクよりも高速に動作するのはなぜですか?

  20. 20

    より高速なディスクでデータベースのベンチマーク結果が悪化する可能性はありますか?

  21. 21

    Pythonスクリプトの実行がHeapSort実装よりも遅くなるのはなぜですか?

  22. 22

    Androidのokhttp3がデスクトップコンピューターよりもリクエストの実行が遅いのはなぜですか?

  23. 23

    私のi5ラップトップは、Xeon40コアサーバーのCPUUbuntu 18.04よりも高速にPythonスクリプトを実行しています。なぜですか?

  24. 24

    Google の Octane 2.0 ベンチマークで、Google Chromium が Mozilla Firefox よりもはるかに高速なのはなぜですか?

  25. 25

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

  26. 26

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

  27. 27

    memcmpがforループチェックよりもはるかに高速なのはなぜですか?

  28. 28

    同じプロセスの2つのユーザーレベルのスレッドをマルチコアCPUで同時に実行できますか?

  29. 29

    同じプロセスの2つのユーザーレベルのスレッドをマルチコアCPUで同時に実行できますか?

ホットタグ

アーカイブ