27

私の人生のほとんどの間、私は CPU をプログラミングしてきました。ほとんどのアルゴリズムでは、ビッグオーの実行時間は CPU / FPGA で同じままですが、定数はまったく異なります (たとえば、多くの CPU パワーがデータのシャッフルに浪費されますが、FPGA では多くの場合、計算が制限されます)。

これについてもっと知りたいです。次の問題を扱っている優れた本/参考書/チュートリアルを知っている人は誰でも:

FPGA が CPU を支配するタスク (純粋な速度の点で) FPGA が CPU を支配するタスク (ジュールあたりの作業の点で)

注: マークされたコミュニティ wiki

4

4 に答える 4

37

[リンクはありません。ただの思いつきです]

FPGA は本質的にハードウェアのインタプリタです。アーキテクチャは専用の ASIC に似ていますが、迅速な開発を行うには、周波数で約 10 倍、電力効率で [わからない、少なくとも 10 倍?] の係数が必要です。

したがって、専用ハードウェアが CPU よりもはるかに優れたパフォーマンスを発揮できるタスクを、FPGA の 10/[?] 係数で除算しても、おそらく勝者が得られるでしょう。そのようなタスクの典型的な性質:

  • きめの細かい並列処理の大きな可能性
    (一度に 4 つの操作を行うことはカウントされません。128 はカウントされます。)
  • 深いパイプライン処理の機会。これも一種の並列処理ですが、1 つのタスクに適用するのは難しいため、多くの個別のタスクを並行して処理
    できると役立ちます。
  • (ほとんど)固定データ フローパス。
    一部のマルチプレクサは問題ありませんが、大規模なランダム アクセスは不適切です。並列化できないためです。ただし、思い出については以下を参照してください。
  • 多くの小さなメモリへの高い総帯域幅。
    FPGA には何百もの小さな (O(1KB)) 内部メモリ (ザイリンクスの用語ではブロック RAM) があるため、メモリ使用量を多数の独立したバッファに分割できれば、CPU が夢にも思わなかったデータ帯域幅を利用できます。
  • 小さな外​​部帯域幅(内部作業と比較して)。理想的な FPGA タスクは、小さな入力と出力を持ちますが、多くの内部作業を必要とします。こうすることで、FPGA が I/O を待って枯渇することはありません。(CPU はすでに不足に悩まされており、FPGA では比類のない非常に洗練された (そして大きな) キャッシュによって軽減されます。)巨大な I/O 帯域幅を FPGA に接続することは完全に可能です。 SERDESes) - ただし、それを行うには、そのような帯域幅用に設計されたカスタム ボードが必要です。ほとんどのシナリオでは、外部 I/O がボトルネックになります。
  • ハードウェアには十分にシンプルです (別名、優れたSW/HW パーティショニング)。
    多くのタスクは、90% の不規則なグルー ロジックとわずか 10% のハードワーク (DSP の意味での「カーネル」) で構成されています。これらすべてを FPGA に配置すると、ほとんどの場合機能しないロジックで貴重な領域が無駄になります。理想的には、すべての泥を SW で処理し、カーネルの HW を十分に活用する必要があります。(実際の CPU にオフロードできない場合、FPGA 内の「ソフトコア」CPUは、多くの低速で不規則なロジックを中程度の領域にパックする一般的な方法です。)
  • 奇妙なビット操作はプラスです。
    従来の CPU 命令セットにうまくマッピングされないもの (パックド ビットへのアライメントされていないアクセス、ハッシュ関数、コーディングと圧縮など)。ただし、これによって得られる要因を過大評価しないでください。 meet はすでに CPU 命令セットで簡単に使えるように設計されており、CPU はマルチメディア専用の命令を追加し続けています。CPUとGPUの両方が非常に最適化された専用シリコンで処理するため、
    多くの浮動小数点は特にマイナスです. (いわゆる「DSP」FPGAにも専用のmul / addユニットがたくさんありますが、知る限り、これらは整数しか行いませんか?)
  • 低遅延/リアルタイムの要件はプラスです。
    ハードウェアは、このような要求の下で真価を発揮します。

編集:これらの条件のいくつか—特に。固定されたデータ フローと多くの個別のタスクを実行できます。また、CPU でビット スライスを有効にすることもできます。

于 2010-05-26T17:41:38.213 に答える
9

最新世代のザイリンクス製品は、自慢の 4.7TMACS と 600MHz での汎用ロジックを発表したばかりです。(これらは基本的に、より小さなプロセスで製造された Virtex 6 です。)

このような野獣では、主に乗算、加算、減算などの固定小数点演算でアルゴリズムを実装し、ワイド並列処理とパイプライン並列処理の両方を利用できる場合、電力と処理の両方の点で、ほとんどの PC を食い尽くすことができます。

これらでフローティングを行うことはできますが、パフォーマンスが低下します。DSP ブロックには、合計 48 ビットの 25x18 ビット MACC が含まれています。変則的なフォーマットを避けて、通常発生する浮動小数点の正規化の一部をバイパスできる場合でも、これらからトラック ロードのパフォーマンスを引き出すことができます。(つまり、通常の 24 ビットではなく、17 ビットの仮数部を持つ単純な固定小数点または浮動小数点数として 18 ビット入力を使用します。) 倍精度浮動小数点数は多くのリソースを消費するので、それが必要な場合は、おそらく PC の方がうまくいくでしょう。

アルゴリズムを加算演算と減算演算の観点から表現できる場合、これらの汎用ロジックを使用して膨大な数の加算器を実装できます。Bresenham の line/circle/yadda/yadda/yadda アルゴリズムのようなものは、FPGA 設計に非常に適しています。

除算が必要な場合...ええと...それは苦痛であり、除算を乗算として実装できない限り、おそらく比較的遅くなるでしょう。

多くの高精度の三角関数が必要な場合は、それほど多くはありません...これも可能ですが、きれいでも高速でもありません。(ちょうど 6502 でできるのと同じように。) 限られた範囲でルックアップ テーブルを使用するだけで対処できる場合は、ゴールデンです!

6502 といえば、6502 デモ コーダーは、これらのいずれかを歌わせることができます。プログラマーがそのような古い学校のマシンで使用していたすべての古い数学のトリックに精通している人なら誰でも適用できます. 現代のプログラマーが「ライブラリに任せてください」と言うすべてのトリックは、これらに数学を実装するために知っておく必要がある種類のものです。68000 ベースの Atari または Amiga で 3D を行うことについて説明している本を見つけることができれば、整数のみで実装する方法について多くのことを議論するでしょう。

実際、ルックアップ テーブルを使用して実装できるアルゴリズムは、FPGA に非常に適しています。ブロックラムをパーツ全体に分散させるだけでなく、ロジック セル自体をさまざまなサイズの LUT およびミニ RAM として構成できます。

固定ビット操作などが無料で見れる!ルーティングによる単純な処理です。固定シフトまたはビット反転は無料です。可変量によるシフトのような動的なビット操作は、最小限のロジックを消費し、牛が家に帰るまで実行できます!

最大の部分は 3960 乗数です! 142,200 個のスライスがあり、それぞれが 8 ビットの加算器になります。(構成に応じて、スライスあたり 4 つの 6 ビット Lut またはスライスあたり 8 つの 5 ビット Lut)。

于 2010-07-15T23:19:46.093 に答える
7

危険なSWアルゴリズムを選択してください。弊社ではSWアルゴのハードウェアアクセラレーションを生計を立てています。

最大10Gb/秒の速度で数千のルールセットを並行して実行する正規表現エンジンのHW実装を実行しました。そのターゲット市場は、ルーターの速度を低下させることなくデータがストリーミングされているときに、アンチウイルスとips/idsをリアルタイムで実行できるルーターです。

HWでHDビデオエンコーディングを行いました。以前は、フィルムをHDに変換するのに1秒あたり数時間の処理時間がかかりました。今ではほぼリアルタイムでそれを行うことができます...1秒のフィルムを変換するのにほぼ2秒の処理が必要です。Netflixは、ビデオオンデマンド製品にほぼ独占的にHWを使用していました。

HWでは、RSA、3DES、AESの暗号化と復号化などの簡単な作業も行っています。HWで簡単なzip/unzipを実行しました。そのターゲット市場はセキュリティビデオカメラです。政府には、リアルタイムデータの膨大なストリームを生成する大量のビデオカメラがあります。ネットワーク経由で送信する前にリアルタイムで圧縮し、もう一方の端でリアルタイムに解凍します。

私が働いていた別の会社であるHeckは、FPGAを使用してレーダー受信機を使用していました。彼らは、デジタル化された敵のレーダーデータをいくつかの異なるアンテナに直接サンプリングし、到着の時間デルタから、敵の送信機がどの方向にどれだけ離れているかを把握します。ちなみに、FPGAの信号のパルスの意図しない変調をチェックして、特定の送信機のフィンガープリントを把握することもできたので、この信号は、別の国境に配置されていた特定のロシアのSAMサイトからのものであることがわかりました。 、武器の動きと販売を追跡できるようになりました。

ソフトウェアでやってみてください!! :-)

于 2010-08-01T21:00:03.827 に答える
1

純粋な速度の場合: - パラメータ化可能なもの - ビデオ フィルタなどの DSP - DMA などの移動データ

于 2010-05-26T17:38:36.843 に答える