ビットコインマイニング、電子取引、タンパク質フォールディングなどを行うシステムのパフォーマンスを向上させるためにFPGAを使用している人の話を聞いています。

CPUが通常少なくとも1桁高速(クロック速度の観点から)で実行されている場合、FPGAはパフォーマンスに関してCPUとどのように競合できますか?

コメント

  • FPGAはすべてを一度に実行します。

回答

CPU 「sは順次処理デバイスです。アルゴリズムを一連の操作に分割し、一度に1つずつ実行します。

FPGA」は並列処理デバイスです(または並列処理デバイスとして構成できます)。アルゴリズム全体は、クロックの1ティックで実行される場合があります。最悪の場合、シーケンシャルプロセッサよりもはるかに少ないクロックティックで実行されます。ロジックの複雑さが増すコストの1つは、通常、デバイスのクロックを記録できる下限です。

上記を念頭に置くと、FPGAは特定のタスクを実行するCPUよりもパフォーマンスが優れている可能性があります。全体的なクロックレートは低くなりますが、同じタスクをより少ないクロックティックで実行できます。達成できるゲインはアルゴリズムに大きく依存しますが、FFTのようなものでは少なくとも1桁は異例ではありません。

さらに、FPGAに複数の並列実行ユニットを組み込むことができるため、同じアルゴリズムを通過させたい大量のデータがある場合は、並列実行ユニット間でデータを分散し、マルチコアCPUでさえ達成できるよりもさらに数桁高いスループットを得ることができます。

利点に対して支払う代償は、消費電力と$$$です。

コメント

  • +1;ただしFPGA CPUほど動的ではないため、CPUは通常PCに適しています
  • “利点に対して支払う代償は、消費電力と$$$です。 ‘ s。”-これはよくあることですが、ハイエンドのマルチ$ 1000インテルXeonマシンをローエンドの50ドルのザイリンクスSpartan-6for多くのアルゴリズム。ただし、これには通常、エンジニアリングに多くの時間がかかり、1つのアプリケーションでのみ機能し、変更が難しい非常にカスタムな設計になってしまう可能性があります。したがって、トレードオフは、電力とお金だけでなく、アルゴリズムの開発時間、再利用性、および柔軟性です。 (時間==お金について議論することはできますが。)
  • 最後の文について、’ FPGAはCPUよりもはるかに低電力ではありませんか? CPUとFPGAの両方に幅広いデバイスがありますが、ビットコインマイニングなどに使用されるデバイスを見ると、それらに使用されるCPUは’使用されるFPGAよりもはるかに多くの電力を必要とするタスク?
  • @David:ビットコインマイニングについて話すとき、関連するメトリックはワットあたりのハッシュ数です。マルクトは全体的な電力消費について話している。つまり、特定のFPGAは通常のCPUの3倍の電力を消費する可能性がありますが、ビットコインマイニングでは3倍以上高速です。したがって、ビットコインの場合、’が勝ちます。
  • @Billy:ワットあたりのハッシュ数·秒ではなく、ワットあたり。

回答

Marktはこれでほぼ正しいですが、2を投入します。ここにセント:

32ビット整数内のビットの順序を逆にするプログラムを書きたいと言ったと想像してみてください。次のようなものです:

int reverseBits(int input) { output = 0; for(int i = 0;i < 32;i++) { // Check if the lowest bit is set if(input & 1 != 0) { output = output | 1; // set the lowest bit to match in the output! } input = input >> 1; output = output << 1; } return output; } 

私の実装は洗練されていませんが、これを行うにはいくつかの操作が必要であり、おそらく何らかのループが発生することに同意するはずです。これは、CPUでは、この操作を実装するために1サイクル以上を費やしたことを意味します。

FPGAでは、これを1対のラッチとして配線するだけです。データをあるレジスタに入れてから、逆のビット順序で別のレジスタに配線します。これは、FPGAでは操作が1クロックサイクルで完了することを意味します。したがって、単一のサイクルで、FPGSは、汎用CPUが完了するまでに数千サイクルかかる操作を完了しました。さらに、おそらくこれらのレジスタの数百を並列に配線することができます。したがって、FPGAに数百の数で移動できる場合、1つのサイクルで数千の操作が数百回にわたってすべて1つのFPGAクロックサイクルで完了します。

汎用CPUで実行できますが、制限として、いくつかのタスクを完了するために必然的に単純な命令のリストに拡張する必要がある、一般化された単純な命令を設定します。したがって、汎用CPUに「32ビットレジスタの逆ビット順序」のような命令を持たせて、CPUに先ほど作成したFPGAと同じ機能を与えることができますが、そのような有用な命令は無数にあります。人気のあるCPUのコストを保証するものだけを入れてください。

FPGA、CPLD、およびASICはすべて、生のハードウェアへのアクセスを提供します。これにより、「キーでAES256暗号化バイトを復号化」や「h.264ビデオのフレームを復号化」などのクレイジーな操作を定義できます。これらはFPGAで1クロックサイクル以上のレイテンシを持っていますが、数百万行の汎用アセンブリコードで操作を書き出すよりもはるかに効率的な方法で実装できます。これには、これらの操作の多くで固定目的のFPGA / ASICをより電力効率の高いものにするという利点もあります。これは、余分な作業をそれほど行う必要がないためです。

並列処理は、他の部分です。指摘され、それも重要ですが、主なことは、FPGAが、操作の実行に必要なサイクルの点でCPUですでに高価なものを並列化するときです。「10FPGAサイクルで実行できます。 CPUに100,000サイクルかかるタスクで、一度に4つの項目を並行して実行できます。」FPGAがCPUよりもはるかに高速である理由を簡単に理解できます。

なぜFPGA、CPLD、ASICをすべてに使用しないのですか?一般的には、1回の操作しか行わないチップ全体だからです。つまり、FPGA / ASICでプロセスを何桁も高速に実行することはできますが、その操作が役に立たなくなったときに後で変更することはできません。(通常)FPGAを一度変更できない理由回路内では、インターフェイスの配線が固定されており、通常、回路にはFPGAをより有用な構成に再グログラムできるコンポーネントが含まれていません。 FPGAのように再配線/再プログラムできるCPUのセクションがあり、CPUの有効なセクションを「ロード」できる、ハイブリッドFPGA-CPUモジュールを構築しようとしている研究者もいますが、これらはいずれもありません。市場に出たことがあります(私が知っている限り)。

コメント

  • ビット(および他のすべてのビット)を反転する例スワップ/選択タスク)’実際には1クロックサイクルかかりません。0かかります。この例では、データをラッチに格納するのに1クロックサイクルかかります、これは同じ操作ではありません。ビットを反転するかどうかに関係なく、1クロックサイクルかかります。ビットを反転する操作は0クロックサイクルで、オーバーヘッドはなく、ルーティングが異なります。違いは、セマンティクスだけではありません。たとえば、32ビットワードを3ビット下にシフトし、1つおきのニブルを交換してから、逆にするのにどのくらい時間がかかりますか?
  • “ハイブリッドFPGA-CP Uモジュール”-これらは長い間市場に出回っています( xilinx.com/products/silicon-devices/を参照してください。 soc / zynq-7000 / index.htm (最新の成功例)。ただし、特別なサポートがなくても、ソフトウェア& HDLの組み合わせは、通常、内部にソフトCPUを実装することによって行われます。ファブリック上のFPGA。
  • @wjl ‘は、操作自体を実行するのに技術的にサイクルを必要としないことは間違いありません。ただし、これらの3つの操作を実行すると、論理的に固定ビットパターンに変換されるため(つまり、b1b2b3b4で始まり、b3b1b4b2で終わる)、あなたの例は意味的にのみ異なると私は主張します。これは、全体の答えの中で私のポイントのようなものでした。操作を一連のステップとして説明する必要があるのは、命令セット/ゲートの配置が固定されている場合のみであることが多いことを指摘しようとしていました。
  • @wjl:david-gardnerが質問した方法、彼” CPU “は、IntelまたはAMD x86 / x86_64の高度にクロックされ、パイプライン化され、最適化されたCPUと同等であると言っているようです。多くのソフト” CPU “がありますが、FPGAに搭載するように設計されたものはどれもi7のようにクロックできません。それらはほぼ最適化されているか、機能します。ハイブリッドに関しては、私はもっと次のような意味を持っていました: newsroom.intel.com/docs/DOC-1512 これは明らかに存在します
  • Zynqは実際には’プロセッサ(ARM Cortex-A9-タブレットコンピュータを実行するのと同じものなど)としてはそれほど悪くはありませんが、持っている方がはるかに素晴らしいと思います高速x86_64を備えた統合FPGA。 =)

回答

ここに示されている他の一般的な回答はすべて、FPGAとCPUの文字通りの違いについて説明しています。彼らは、FPGAの並列性とCPUの順次性を指摘したり、特定のアルゴリズムがFPGAでうまく機能する理由の例を示したりします。これらはすべて適切で真実ですが、CPUとFPGAの間にはもっと根本的な違いがあることをお勧めします。

FPGAとCPUの共通の分母は何ですか?それは、両方ともシリコンの上に構築されているということです。そして場合によっては、文字通り同じシリコンプロセスです。

根本的な違いは、そのシリコンの上に積み重ねる抽象化です。シリコンからパッケージICまで、1つの最新のCPU設計の詳細を1人の人間が完全に理解することは不可能です。そのため、エンジニアリングプロセスの一環として、その複雑な問題を、人間が頭を包み込むことができる、より小さな管理可能な問題に分割します。

そのシリコンを機能するCPUに変えるために何が必要かを考えてください。その目標に必要な抽象化レイヤーのやや簡略化されたビューを次に示します。

  1. 最初に、シリコンからトランジスタを作成する方法を知っているエンジニアがいます。彼らは、電力を吸い込み、数十ギガヘルツまたは数百ギガヘルツの速度で切り替わる小さなトランジスタを設計する方法を知っています。また、ICパッケージからPCBを介して信号を送信するのに十分な電力で信号を駆動できる強力なトランジスタを設計する方法を知っています。

  2. 次に、これらのトランジスタを数百の異なるロジックセルを備えたライブラリにまとめる方法を知っているデジタルロジック設計者がいます。いくつか例を挙げると、論理ゲート、フリップフロップ、マルチプレクサ、および加算器。すべてさまざまな構成で。

  3. 次に、これらのデジタル(場合によってはアナログ)ブロックを組み合わせて、高速トランシーバー、メモリコントローラーなどの高レベルの機能ブロックを形成する方法を知っているエンジニアのさまざまなグループがいます。分岐予測器、ALUなど。

  4. 次に、CPU設計者が、これらの機能ユニットを1つの完全なシステムにまとめることで、ハイエンドのCPU設計を設計します。

そしてそれだけではありません。この時点で、アセンブリコードを実行するCPUが機能していますが、これは最近のほとんどのプログラマーが作成する言語ではありません。

  1. アセンブリにコンパイルするCコンパイラーがあるかもしれません。コード(おそらく中間表現による)
  2. Cの上に別の抽象化を追加して、オブジェクト指向の言語を取得することもできます
  3. CまたはC ++の上に仮想マシンを作成することもできます。 Javaバイトコードのようなものを解釈できるように

そしてそこから抽象化レイヤーを続けることができます。ここで重要な点は、これらの抽象化レイヤーが組み合わさって、大規模に拡張し、カスタムシリコン設計のごく一部のコストがかかるCPUベースのシステムを生み出すことです。

ただし、ここで重要な点は、各抽象化にはコストもかかるということです。トランジスタの設計者は、すべてのユースケースに最適なトランジスタを構築できるわけではありません。彼は妥当なライブラリを構築しているため、手元の仕事に実際に必要な電力よりも少し多くの電力または少し多くのシリコンを消費するトランジスタが使用されることがあります。同様に、ロジック設計者はすべての可能なロジックセルを構築するわけではありません。彼らは4入力NANDゲートと8入力NANDゲートを構築するかもしれませんが、別のエンジニアが6入力NANDを必要とする場合はどうなりますか?彼は8入力NANDゲートを使用し、2つの未使用入力を結び付けるため、シリコンリソースが失われ、電力が無駄になります。そして、それは抽象化の連鎖を上っていきます。各レイヤーは複雑さを処理する方法を提供しますが、同時にシリコンと電力の点で追加の増分コストを請求します。

次に、これらの抽象化をFPGAに必要なものと比較します。基本的に、FPGAの抽象化は上記のリストの2番目で停止します。 FPGAを使用すると、開発者はデジタルロジックレイヤーで作業できます。 CPUはこのレイヤーで「ハードコーディング」されており、FPGAは実行時に構成する必要があるため(これがCPUが通常はるかに高い周波数を実行する理由です)、それよりもいくらか洗練されていますが、本質的な重要な真実はそれがはるかに遠いということですCPUよりもFPGAの抽象化はほとんどありません。

では、なぜFPGAはCPUよりも高速なのですか?本質的にはFPGAはCPUよりもはるかに少ない抽象化を使用します。つまり、設計者はシリコンの近くで作業します。彼は、CPUに必要な多くの抽象化レイヤーすべてのコストを支払っていません。彼はより低いレベルでコーディングし、特定の機能を実現するために一生懸命努力する必要がありますが、より高いパフォーマンスが得られます。

しかし、もちろんあります。抽象化が少ないという欠点もあります。これらすべてのCPU抽象化は、正当な理由で存在します。それらは、はるかに単純なコーディングパラダイムを提供します。つまり、より多くの人々が簡単に開発できるということです。つまり、CPUの設計がさらに多く存在するため、CPUの価格、規模、市場投入までの時間に大きなメリットがあります。

これで完了です。 FPGAは抽象化が少ないため、より高速で電力効率が高くなりますが、プログラミングが困難になります。 CPUには多くの抽象化設計があり、開発が容易で、スケーラブルで、安価です。しかし、それらはそれらの利点と引き換えにスピードとパワーを放棄します。

コメント

  • また、FPGA ‘は、単純な論理タスクを実行するための単純な反復ブロックを使用して設計されています。これらは、特定のタイプのタスクに合わせて作成されています。CPU ‘、OTOHには、さまざまなことを行う多くの複雑な機能部分があります。 CPUは、デバイスのようなさまざまなFPGAのグループであると考えることができます(結局のところ、CPUはすべてシリコン、電子機器、数学だけです)。’つまり、’は抽象化だけではなく、’複雑さについてです。 CPU ‘は、さまざまな種類の電気デバイスで構成される複雑なデバイスですが、FPGAはいくつかで構成されています。 CPUはショットガンであり、FPGAはライフルです。

回答

他の回答はすべて正しいですが、それらのどれもまだあなたの質問からのビットコインマイニングの例に対処していません、それは確かにまともな例です。ビットコインマイニングでは、結果のハッシュに特定のプロパティが含まれるまで、単一の32ビット整数のみが変更されるデータの暗号化ハッシュ関数SHA-256を別のSHA-256計算の結果から繰り返し計算します。各SHA-256は、32ビットの追加、ビットシフト、およびその他のビットマングリング操作を含む同じアルゴリズムの64回の繰り返しで構成されています。

このループを32ビット(またはそれ以上)のCPUでプログラムする場合、その命令セットはタスクに非常に適していることがわかります— SHA-256はCPU上で効率的に実行するように設計されています。それでも、キャッシュ、乗算、除算、浮動小数点演算、分岐、分岐予測など、まったく使用されていないか、使用できない領域を集中的に使用する機能を備えた、最新のCPUのシリコン領域の2%しか使用しません。この特定のタスクのパフォーマンスを大幅に向上させます。

FPGAなどの構成可能なハードウェアでは、これらの2%のみを実装し、コードの実行をすべて忘れてさらに最適化し、それぞれを直接計算するゲートを設計します。それらの頻繁に繰り返されるサブ関数。それぞれが結果を次のすべてのクロックサイクルに渡すようにパイプライン化され、128回繰り返されます(そして各SHA-256が開始および終了する特別な追加ロジックを使用して)、すべての結果を取得することになりますクロックサイクル(これよりも単純なロジックで300 MHzをサポートすると宣伝されているFPGAでは1秒あたり1億回のハッシュ)、最新のCPUでは、コアあたり数千クロックサイクルごとに1つの結果、たとえば1秒あたり1,000万回のキャッシュが期待できます。マルチコアマルチGHzCPUでオンド。

この特定の例に関心がある場合は、関連するをご覧ください。多くのFPGAマイナーはカスタムメイドのハードウェアではなく構成可能なハードウェアを使用して同じように動作するため、bitcoin.stackexchangeのASICマイナーの内部について回答します。完全を期すために」:複数の独立したSHA-256ハッシャーを使用して、より簡単な並列化を優先して説明したパイプラインを制限または回避するなど、他の可能性があります。FPGAの内部とその合計サイズによって与えられる制約に依存します。 、FPGAの構成だけでなく、チップ全体の設計に完全な自由があれば、ゲート数とルーティングオーバーヘッドの点で効率は低下しますが、パフォーマンスを向上させることもできます。

コメント

  • その’シリコンの利用についての非常に良い点です。
  • しかし、おそらく(意図せずに!)誤解を招く可能性があります。 FPGAが多くの物理ゲートを備えたやや複雑なセルで構成されていることを考えると、その典型的なアプリケーションでも一部しか使用されないため、メーカーは同等のゲート数をアドバタイズして、そのすべてが”典型的な”アプリケーション…

回答

上記の回答は正しいですが、 FPGA(およびカスタムASIC)がビットコイン計算に特に適している理由

本当の利点は、SHA-256計算の大部分が論理演算(ビットシフトなど)であり、配線。このようにすると、0クロックサイクルが必要になります。

もう1つの重要な利点は、FPGAがCPUよりもはるかに電力効率が高い(つまり、ワットあたりのMIPS)ため、計算に必要なエネルギー量が非常に多いことです。もっと少なく。ビットコインのマイニングのコストは、ビットコインを作成するために使用する電力量に依存するため、これは重要です。

ASICチップはFPGAよりもエネルギー効率が高いため、同じコードをはるかに安価に実行できます。さらに多くの実行ユニットを搭載して、実行ユニットを高速化することもできます。欠点は、カスタムASICの作成コストが非常に高いため、製造コストをカバーするためにかなりの数のチップを販売する必要があることです。

GPUはビットコインの作成にも使用されますが、エネルギー効率がはるかに低く、FPGAやカスタムASICに負けています。

コメント

  • Moneroハッシュアルゴリズム(別名cryptonight)を見ると、FPGAの実装は、大量のデータが原因でほぼ不可能であることがわかります。 メモリはランダムにアクセスする必要がありました(2MB)。 この場合、CPUには利点があります。
  • @ lucas92必要なメモリ量に対応するためにRAMをFPGAに統合できませんか?
  • おそらく’ FPGAには十分なロジックエレメントがありません。

コメントを残す

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