FPGAはマルチコアPCを実行できますか?


20

FPGAを使用してアルゴリズムを高速化する方法がわかりません。現在、4つの計算を並行して実行できるように、クアッドコアラップトップで時間のかかるリアルタイムアルゴリズムを実行しています。

FPGAのパフォーマンスがさらに向上する可能性があることに最近気付きました。私はそれがどのように機能するか理解していません。FPGAがアルゴリズムを高速化する方法と、ザイリンクスまたはアルテラのFPGAソリューションに切り替えるか、クアッドコアラップトップで計算を実行する必要があるかを説明してください。

追加の詳細:アルゴリズムは、ウェーブレットパケット変換を介して入力された入力を使用して20の人工ニューラルネットワークを実行します

すばらしい回答をありがとうございました。


1
デスクトップ(またはサーバー)CPUでアルゴリズムを実行することを検討しましたか?通常、これらはラップトップCPUよりも高速です。(一定の要因によって、それでも高速です。)
ntoskrnl 14年

1
ニューラルネットワーク処理にGPUを使用することを検討してください。GPUには、浮動小数点数を並列に乗算できる多くのユニットがあります。
カミル14年

@ntoskrnl私は彼がi5以上のCPU(4コア)を持っていると思いますので、デスクトップやサーバーのパフォーマンスはクロック速度に比例します。Xeonでは、巨大なキャッシュとより良いメモリ帯域幅のおかげで、パフォーマンスをほとんど(20%?)向上させることはできませんが、それほどではありません。
カミル14年

使用しているCPU
カミル14年

質問の興味深い時期、我々は持って同様の質問 networkengineering.SEに
マイク・ペニントン

回答:


23

私の同僚はこれをベンチマークし、FPGAに収まる約100以上の独立した整数タスクがあれば、FPGAはPCよりも優れているという結論に達しました。浮動小数点タスクの場合、GPGPUはFPGA全体に勝っています。狭いマルチスレッドまたはSIMD操作の場合、CPUは非常に最適化され、FPGAが通常達成するよりも高いクロック速度で実行されます。

その他の注意事項:タスクは独立している必要があります。タスク間にデータの依存関係がある場合、計算のクリティカルパスが制限されます。FPGAはブール評価と整数演算、およびハードウェアの低レイテンシインターフェイスには適していますが、メモリ依存のワークロードや浮動小数点には適していません。

ワークロードをDRAMに保持する必要がある場合、それはプロセッサではなくボトルネックになります。


3
DRAMが制限であるかどうかを判断するには、FPGAに多数の小さな分散RAM(たとえば、500個の独立した9kbit RAMブロック)があり、同じクロックサイクルですべて読み取り/書き込みができることも知っておく必要があります。
maxy 14年

19

FPGAは、プロセッサとはまったく異なる動作をします。

プロセッサの場合、ハードウェアに何をすべきかを伝えるソフトウェアを作成します。FPGAでは、「ハードウェアの外観」を内部的に記述します。それはまるであなたのアルゴリズムのために特別に作られたチップを作っているかのようです。

これにより、多くのことが高速化され、消費電力を削減できます。ただし、欠点もあります。開発に時間がかかり、さらに複雑になります。あなたは完全に異なる方法で考える必要があり、ソフトウェアで直接動作するアルゴリズムを使用することはできません。

人工ニューラルネットワークの場合、FPGAは最適な選択肢です。この分野では多くの進行中の研究があります。


実際、FPGA開発は、実装ではなく動作を記述するVerilogやVHDLのような言語を使用して行われることがよくあります。これは、非同期シーケンシャルロジックの設計を有用にする場合もありますが、複雑にする場合があります。実装を指定している場合、伝播遅延はある程度一貫していますが、動作言語では正であることが保証されていません。FPGA設計の重要な点は、言語によって、チップのさまざまな部分(数百または数千)が簡単な動作を同時に実行できるようにすることです。
supercat

13

アルゴリズムに大きく依存しますが、原理は非常に簡単に説明できます。

アルゴリズムで多くの8ビット数を合計する必要があるとします。CPUは、各命令をフェッチし、RAMまたはキャッシュメモリからオペランドを取得し、合計を実行し、結果をキャッシュに保存し、次の操作を続行する必要があります。パイプラインは役立ちますが、コアと同じ数の同時操作しか実行できません。

FPGAを使用する場合、並列で動作する単純な加算器を多数実装し、おそらく数千の合計を並列処理できます。単一の操作には時間がかかる場合がありますが、並列度は非常に高くなります。

GPGPUを使用して同様のタスクを実行することもできます。これらのタスクは、より単純なコアで構成されているためです。


GPGPUは、ニューラルネットワークを使用するための優れた入力です!
ボトニック14年

ニューラルネットワークASICもあります。Intelは、80年代に16個のニューロンを実装したものを製造していました。
リオールビリア14年

@LiorBiliaよく私はそれらについて何も知らない:)。ニューラルネットワークを扱ったことがなく、FPGAをほとんど使っていませんでした
clabacchio

@clabacchio Softwareニューラルネットワークは、主に浮動小数点数の乗算と比較を行うプログラムです。ほとんどの場合、95%以上です。
カミル14年

従来のCPUは、たくさんの8ビット数を合計するという非常に良い仕事をすることができます。高速マシンでは、実行時間はメモリからデータをフェッチするコストに左右されます(コードフェッチの99%はcatchから取得されます)。より興味深い例は、ビットのかなり「異常な」配置または置換を必要とするスキームを使用してエンコードされたデータを処理することです。たとえば、ビデオサンプリングデータが赤、緑、青のインターリーブビットを返す場合、FPGAはビットを簡単に再配置できます。従来のCPUにはさらに多くの問題があります。
supercat

6

コンピューティング機器の専門化には、おおよそ3つのレベルがあります。

CPU(ラップトップのように)は、それらの中で最も一般的です。それはすべてを行うことができますが、この汎用性は低速と高電力消費という代償を伴います。CPUは外出先でプログラムされ、命令はRAMから取得されます。CPU用のプログラムは、迅速で安価で、作成が簡単で、変更も非常に簡単です。

FPGA(Field Programmable Gate Arrayを意味します)は中間層です。その名前が示すように、「現場で」、つまり工場の外でプログラムできます。FPGAは通常1回プログラムされますが、このプロセスは内部構造のセットアップとして説明できます。このプロセスの後、選択した1つのタスクに特化した小さなコンピューターのように動作します。これが汎用CPUよりも優れている理由です。FPGAのプログラミングは非常に困難で高価であり、FPGAのデバッグは非常に困難です。

ASIC(特定用途向け集積回路を意味します)は究極のスペシャリストです。これは、たった1つのタスクのために設計および製造されたチップです-非常に高速かつ効率的に実行するタスクです。ASICを再プログラムする可能性はありません。工場が完全に定義されたままであり、仕事が不要になった場合は役に立ちません。ASICの設計は大企業だけが行うことができるものであり、それらをデバッグすることは非常に困難です。

「コア」で考える場合は、次のように見てください。CPUには4、6、または8個の大きなコアがあり、すべてを実行できます。ASICSには多くの場合、数千のコアがありますが、非常に小さなもので、1つのことしかできません。

あなたはビットコインマイニングコミュニティを見ることができます。SHA256ハッシュを実行します。

  • CPUコアi7:0.8-1.5 Mハッシュ/秒
  • FPGA:5-300Mハッシュ/秒
  • ASIC:1つの小さなチップあたり12000Mハッシュ/秒、1つの160チップデバイスに対して2000000M(そう、2T)ハッシュ/秒

もちろん、これらのASICの赤ちゃんは、大量生産された場合にほぼ2000ドルかかりますが、専門家との取引がどのように行われるかについてのアイデアを与えてくれます。

唯一の質問は、FPGAを使用すると、設計にかかるコストよりも多くのコストを削減できるかどうかです。もちろん、1台のラップトップで実行する代わりに、20台のPCで実行してみてください。


ただし、ハッシュは非常に特殊なケースです。暗号化ベースのコインは、(意図的に)特殊なハードウェアによってあまり高速化できないことに注意してください。
pjc50 14年

1
&ASICデバッグは、通常、製造に出荷する前にシミュレーションで処理されます。そのため、仕様から製造まで通常6か月以上かかります。製造後のバグの診断は、高価ですが不可能ではありません。
pjc50 14年

それは難しいですが、実際には非常に難しい場合があります。バウンダリスキャン、JTAGテスト、FIBを使用した直接テクニックなどがあります。したがって、デバッグすることは不可能ではありません。 。現在、ほとんどのデバイスはARMプロセッサなどを含むASICであるため、ASICは設計フロー(HDL、合成、P&R)を実際に参照するようになりました。
プレースホルダー14年

@ pjc50ええ、それが私のポイントでした-特別な場合には、速度の差は途方もないです。しかし、scrypt asicsはまだCPUとGPUを搭載しています。ない百万倍(SHAのように)、それでも十分に100を超える
Agent_L

@placeholder yeah、しかしバグを見つけたとしても、すでに製造されているすべてのチップにはあまり使用されません。私は、「ここにある」だけでなく、「バグを取り除く」などの「デバッグ」を意味しました。
Agent_L 14年

5

はい、FPGAは特定のタスクで最新のCPU(Intel i7など)を上回ることができますが、ニューラルネットワークのパフォーマンスを向上させる簡単で安価な方法があります。

安いということは、FPGA ICのコストではなく、FPGAの非常に高速なメモリ(ニューラルネットワークに必要)と開発プロセス全体の合計努力を意味します。

  1. SSEを使用する -パフォーマンスが2〜3倍の非常に単純なニューラルネットワークの実装を見てきました。ラップトップに専用GPUがない場合、これは良い考えかもしれません。

    Vincent VanhouckeとAndrew SeniorによるCPU上のニューラルネットワークの速度の改善

  2. つかいます GPGPU(単位グラフィックス処理の汎用コンピューティングは) -私はあなたがのGeForce 730M状媒体クラスのノートパソコンのGPU上100-200xパフォーマンスの向上をarchieveことができると思います。

    ここは ニューラルネットワークの実装(およびフリーコード)をます。Nvidia CUDAを使用します。

    GPGPUアプローチは非常にスケーラブルです。ある時点でより多くのコンピューティングパワーが必要であることに気付いた場合-より強力なGPUを備えたデスクトップコンピューターまたは4992コア(高価な)を備えたNvidia Tesla K80さえ使用できます。


1
ここでの問題は、パフォーマンスを定義することです。「はい」よりも速いという場合、fpgaは通常のcpusよりも高速です。ただし、fpgaはCPUほど柔軟ではありません。事前定義されたタスクのみを効率的に実行するように設計されています。別のタスクを実行すると、実際には別のFPGAを実装し、内部の配線を変える意味します
GianlucaさんGhettini
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.