問題

CPU / GPU FLOPSのパフォーマンスを計算しようとしていますが、正しく実行しているかどうかわかりません。 。

次のようにしましょう:

  • Kaby Lake CPU(クロック:2.8 GHz、コア:4、スレッド:8)
  • Pascal GPU(クロック:1.3 GHz、コア:768)。

このWikiページには、Kaby LakeCPUが計算すると記載されています。 32 FLOPS(単一精度FP32)およびPascalカードは2 FLOPS(単一精度FP32)を計算します。つまり、次の式を使用して合計FLOPSパフォーマンスを計算できます。

CPU:

TOTAL_FLOPS = 2.8 GHz * 4 cores * 32 FLOPS = 358 GFLOPS 

GPU:

TOTAL_FLOPS = 1.3 GHz * 768 cores * 2 FLOPS = 1996 GFLOPS 

質問

  1. [解決済み] 私が見たほとんどのガイド(これなど)フォーミュラで物理コアを使用しています。私が理解していないのは、その理由です。代わりにスレッド(論理コア)を使用しませんか?浮動小数点計算のパフォーマンスを2倍にするために特別に作成されたスレッドではありませんか?なぜそれらを無視するのですか?

  2. [SOLVED] 正しく実行していますか?FLOPSを計算するための信頼できるソースが1つも見つかりませんでした。インターネット上のすべての情報は、矛盾しています。 i7 7700HQ Kaby Lake CPUの場合、上記の式では358 GFLOPSが得られますが、FLOPS値は 29 GFLOPS と低いことがわかりました。何を信じたらいいのかわからない。

  3. Node.js / Python / C ++にクロスプラットフォーム(Win、Mac、Linux)ライブラリがあり、すべてを返すだけです。シェーディングコア、クロック、使用可能な命令セット(またはFP32、FP64 FLOPS値)などのGPU統計を使用して、理論上の最大パフォーマンスを自分で計算できますか?CPU / GPUから直接FLOPS統計を取得できないのは非常にばかげていますが、代わりに値を取得するには、Wikiページをダウンロードして解析する必要があります。 C ++を使用している場合でも、コアの量などの基本的なNvidia GPU情報にアクセスするためだけに、2 GB CUDAツールキットをダウンロードする必要があるようです(実際にはわかりません)。これにより、アプリを作成することは事実上不可能になります。誰も2GBのアプリをダウンロードしないため、他のユーザーも利用できます。

コメント

  • 部分的な回答としてI "スレッド"は、コアが一度に2つのスレッドのように見えるものをホストできるようにするトリックです(ハイパー-スレッディング)実際に計算する物理コアが1つしかないのですが、Intelがこれをどのように行ったかの詳細については完全にはわかりませんが、パイプラインなどの穴を埋めることに関係していると思います。これは原則として発生しません。重いものを計算しているが、デスクトップOSのより一般的な使用例の多くでは、これは理にかなっています。実際の計算スループットに関心がある場合、これは通常は共同ではありません。
  • @KyleMandli明確化に感謝します、それは理にかなっていると思います
  • 提案された計算の一部は頻度です。最新のハードウェアでは、 の頻度がないことをご存知だと思います。動作周波数は、温度と消費電力(たとえば、ほとんどのGPU)、または命令セットの使用と使用率(たとえば、ほとんどのx86 CPU)、および場合によっては上記のすべての要因によって異なります。
  • You 'どこでもMHzをGHzに置き換える必要があります。
  • '単一の"実際の"パフォーマンス。たとえば、Volta GPUで大きな行列を乗算する場合、私の"実際の"のパフォーマンスは、理論上の90トップ/秒に近くなります。一方、resnet-50のトレーニングでは、'は20トップ/秒のようになります- medium.com/@yaroslavvb/ …

回答

GFLOPレートは次のように計算できます方法ですが、今日のハードウェアでは数値はまったく意味がありません。

  • 浮動小数点演算には可変数のクロックサイクルが必要です。加算は一般に乗算よりも安価ですが、それぞれが一般的にかなりの28億サイクルのうち1クロックサイクル以上かかります。

  • ハイパースレッドを使用している場合、1つのコアで2つのスレッドが実行されますが、コアには1つしかありません。浮動小数点加算ユニットであるため、2つのスレッドは浮動小数点加算を同時に実行できません。

  • 浮動小数点演算はエネルギーを大量に消費し、エネルギーは熱に変換されます。多くのFLOPを実行すると、プロセッサが過熱してクロック周波数が低下します。

  • 適切な命令を使用すると、浮動小数点乗算加算(FMA)演算を実行できます。これにより、これらの演算を個別に実行するよりも乗算と加算が高速になります。

  • 同様に、SIMD命令を使用すると、コアは複数のデータに対して同時に同じ操作を実行できます。たとえば、4組の浮動小数点数を加算すると、4つのFLOPが生成されます。同時に。ただし、これには、2番目の加算で最初の加算の結果を使用するのではなく、アルゴリズムが実際にこれを実行する必要があるという問題が必要です。結果として、SIMD命令は、一部のアルゴリズムを実行できる速度にのみ寄与し、他のアルゴリズムは実行できません。

  • 最も重要なことは、一般的にはメモリからのデータに対して操作を実行したいが、メインメモリからプロセッサへのデータの移動には、実際にデータに対して操作を実行するよりもはるかに長い時間がかかります。たとえば、100倍(桁違い)長くなります。したがって、実際のアプリケーションでは、プロセッサの理論上の浮動小数点パフォーマンスのごく一部でも見られません。通常、理論上のピークパフォーマンスの10%未満です。

言い換えると、ピークパフォーマンスの計算は、一種の無意味なビジネスになりました。プロセッサの実際のパフォーマンスとはあまり関係がありません。

コメント

  • SIMD浮動小数点ユニットが理論上のピークパフォーマンスをどのように向上させるかについても話し合うことができます。
  • ご意見ありがとうございます。これらの点を理解し、高度な手順を理解しています。セットは浮動小数点のパフォーマンスに影響します。私は'今のところ理論上の最大値に固執すると思います。少なくとも、その時点から実際のFLOPSパフォーマンスを概算する式があればいいのにと思います。 CPUが特定の関数を計算するのに必要です。
  • @AlekseyHoffman式はなく、測定値だけです。'トップ500リストが理論上のトップパフォーマンスではなく実際のパフォーマンス測定に基づいている理由
  • @BrianBorchersはい、良い考えです。

回答

ロシア語で読むことができます-フロップスの計算方法

GHzはFLOPSを表示しません。同じGHzの一方のプロセッサは、同じGHzのもう一方のプロセッサよりもはるかに高速になる可能性があります。

P.S。 gpu-s " rx 590 "および非常に古い" r7 250x "のGHzはほぼ同じです。しかし…これは彼らのパフォーマンスを比較するのにさえ正しくありません)

コメント

  • こんにちは、scicompへようこそ! stackexchangeでは、投稿を自己完結型にすることをお勧めします(こちらを参照)。投稿を改善するために、記事のコア情報を使用して回答を編集してみてください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です