FPGAはどのようにCPUを上回ることができますか?


55

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

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


13
FPGAはすべてを一度に実行します。
イグナシオバスケス-アブラムス14年

回答:


48

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

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

上記を念頭に置いて、FPGAは、全体的なクロックレートが低くても、少ないクロックティックで同じタスクを実行できるため、特定のタスクを実行するCPUを上回ることができます。達成できるゲインはアルゴリズムに大きく依存しますが、FFTのようなものの場合、少なくとも1桁は非定型ではありません。

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

利点のために支払う価格は、電力消費と$$$です。


2
+1; FPGAは、しかし、CPUが通常のPCに適している理由であるCPUを、のようにダイナミックではありません
ニック・ウィリアムズ

17
「あなたが利点のために支払う価格は、電力消費と$$$です。」-これは多くの場合真実ですが、多くのアルゴリズムでハイエンドのマルチ$ 1000 Intel Xeonマシンと50ドルのローエンドXilinx Spartan-6を真っ向勝負することができます。しかし、通常、これには多くのエンジニアリング時間がかかり、1つのアプリケーションでのみ機能し、変更が困難な非常にカスタムなデザインになる可能性があります。そのため、トレードオフは電力とお金だけではなく、アルゴリズムの開発時間、再利用性、柔軟性です。(ただし、時間==お金を議論することができます。)
wjl 14年

あなたの最後の文について、マルクトは、FPGAはCPUよりもはるかに低電力ではありませんか?CPUとFPGAの両方に幅広いデバイスがありますが、ビットコインマイニングなどに使用されるデバイスを見ると、これらのタスクに使用されるCPUは、FPGAよりも消費電力が多くありません中古?
デビッドガードナー14年

4
@David:ビットコインのマイニングについて話すとき、関連するメトリックはワットあたりのハッシュ数です。Marktは全体的な電力消費について話している。つまり、特定のFPGAは通常のCPUの3倍の電力を消費しますが、ビットコインマイニングでは3倍以上高速です。ビットコインにとっては勝利です。
ビリーONeal 14年

2
@Billy:ワットごとではなく、ワット・秒あたりのハッシュ数。
パエロエベルマン14

34

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では、これをラッチのペアとして単純に配線できます。データを何らかのレジスターに入れてから、逆ビット順で異なるレジスターに配線します。これは、FPGAで1クロックサイクルで操作が完了することを意味します。したがって、FPGSは1サイクルで、汎用CPUを何千サイクルも完了する操作を完了しました!さらに、これらのレジスタをおそらく数百個並列に接続できます。そのため、FPGAに数百の番号を移動できる場合、1サイクルで、数千回の操作をすべて1 FPGAクロックサイクルで完了します。

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

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

並列性は、marktが指摘したもう1つの部分であり、それも重要ですが、主なことは、操作を実行するために必要なサイクルの観点からCPUですでに高価なものをFPGAが並列化するときです。「10個のFPGAサイクルでCPU 100,000サイクルを要するタスクを実行でき、一度に4つのアイテムを並行して実行できるタスク」と言い始めると、FPGAが非常に多くなる理由を簡単に理解できます。 CPUよりも速い!

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


2
ビットを反転する例(および他のすべてのビットスワップ/選択タスク)の場合、実際には1クロックサイクルはかかりません。0がかかります。例では、ラッチデータ格納するのに1クロックサイクルかかります。同じ操作。ビットを反転するかどうかにかかわらず、1クロックサイクルかかります。ビットを反転する操作は0クロックサイクルです。オーバーヘッドなし、異なるルーティングのみ。違いは、特に物事を追加し始めたときのセマンティクスだけではありません。たとえば、32ビットワードを3ビットシフトダウンし、ニブルを1つずつ交換してから逆にするにはどれくらいかかりますか?
wjl 14年

1
「ハイブリッドFPGA-CPUモジュール」-これらは長い間市場に出回っています(最新の成功したモジュールについてはxilinx.com/products/silicon-devices/soc/zynq-7000/index.htmを参照)。特別なサポート、ソフトウェアとHDLの組み合わせは、通常、ファブリック上のFPGA内にソフトCPUを実装することにより行われます。
wjl 14年

@wjl操作自体を実行するために技術的にサイクルを必要としないのはあなたです。ただし、主にこれらの3つの操作を行うと固定ビットパターンに変換されるため(つまり、b1b2b3b4で始まりb3b1b4b2で終わるため)、例は意味的に異なるだけだと主張します。これは全体の答えの中で私のポイントのようなものでした。操作を一連のステップとして説明することは、固定の命令セット/ゲート配置がある場合にのみ必要になることが多いことを指摘しようとしました。
キットスカズ14年

@wjl:david-gardnerが質問した方法で、彼は「CPU」はIntelまたはAMD x86 / x86_64の高度にクロックされ、パイプライン化され、最適化されたCPUと同等だと言っているようです。多くのソフトな「CPU」がありますが、FPGAに搭載するように設計されたものはどれもi7のようにクロックできません。:ハイブリッドに関しては、私はより多くのこのような何か意味newsroom.intel.com/docs/DOC-1512明らかに存在しない
キットScuzz

1
Zynqは実際にはプロセッサ(ARM Cortex-A9-タブレットコンピューターなどを実行するのと同じもの)ほど悪くはありませんが、高速x86_64を備えた統合されたFPGAを使用する方がはるかに素晴らしいことに同意します。=)
wjl 14

25

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

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

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

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

  1. まず、シリコンからトランジスタを作成する方法を知っているエンジニアがいます。彼らは、10ギガヘルツまたは100ギガヘルツの速度で電力を消費してスイッチングする小さなトランジスタを設計する方法を知っており、ICパッケージからPCBに送信するのに十分な電力で信号を駆動できる強力なトランジスタを設計する方法を知っています別のチップに。

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

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

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

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

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

そして、抽象化レイヤーはそこから進むことができます。ここで重要な点は、これらの抽象化レイヤーが組み合わされて、大規模にスケーリングし、カスタムシリコンデザインのごく一部しかコストをかけない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は多くの異なる種類の電気デバイスで構成された複雑なデバイスですが、FPGAは少数で構成されています。CPUはショットガンであり、FPGAはライフルです。
AbstractDissonance

21

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

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

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

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


3
これは、シリコンの利用に関する非常に良い点です。
マルクト14年

しかし、多分(意図せず!)FPGAは多くの物理ゲートを備えたやや複雑なセルで構成されているため、一般的なアプリケーションでは一部のみを使用するため、メーカーは同等のゲートカウントを宣伝して、そのことを「典型的な」アプリケーション...で価値があるかもしれません
ピラミッド

3

上記の答えは正しいですが、FPGA(およびカスタムASIC)がビットコインの計算に特に適している理由についての見落としがあります。

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

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

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

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


Moneroハッシュアルゴリズム(別名cryptonight)を見ると、大量のメモリにランダムにアクセスする必要があるため(2MB)、FPGA実装はほぼ不可能であることがわかります。この場合、CPUには利点があります。
lucas92
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.