64ビットの乗算または除算はFPGAでどれくらい速く実行されますか?


8

ザイリンクスSpartan 3やVirtex 5などの通常のFPGAを使用している場合、倍精度浮動小数点64ビット乗算または除算を実行するには何サイクルかかりますか。

私が理解している限り、FPGAにはハードFPUがなく、標準のIEEEライブラリまたはその他の素材を使用して作成する必要があります。つまり、1サイクルでは実行されないため、100 Mhz CPUと100 MHz Spartan / Virtex FPGAのパフォーマンスを比較するための大まかな見積もりを探しています。

私は主に浮動小数点演算子に興味がありますが、整数演算の経験があれば、それも評価されます。


3
まず、質問を明確にする価値があります。64ビット整数の乗算/除算を意味する64ビットMPY /除算について話します。次に、倍精度浮動小数点を意味するFPUについて言及します。答えの詳細はそれぞれ異なります...
ブライアンドラモンド

2
一度に1つの乗算の場合、時間はおそらく同等か、CPUにわずかに有利です。明らかにFPGAの利点は、それらの多くを並行して使用できることです。
pjc50

回答:


12

私はこれを倍精度FPで実行していませんが、単精度の場合と同じ原理が適用され、除算を実装しています(逆数による乗算として)。

これらのFPGAにはFPUの代わりにハードワイヤードDSP /乗算器ブロックがあり、18 * 18または(Virtex-5)18 * 25乗算を1サイクルで実装できます。そして、より大きなデバイスには、Spartan-3またはSpartan-6ファミリのトップエンドに、これらの約1000、またはさらに126または180があります。

したがって、DSPの加算器またはFPGAファブリックを使用してこれらのいくつか(Virtex-5が単精度を実行する場合は2つ)を使用して、部分積を合計することにより、大きな乗算を小さな演算に分解できます。

数サイクルで回答が得られます。SPの場合は3または4、DPの場合は5です。加算器ツリーの構成方法によって異なります(シンセツールがパイプラインレジスタの追加を要求する場合もあります)。

ただし、これはレイテンシです。パイプライン化されているため、スループットはクロックサイクルごとに1結果になります。

除算では、ルックアップテーブルとそれに続く2次補間を使用して、逆演算子を近似しました。これは単精度よりも正確で、必要に応じて(より多くのハードウェアを使用して)DPに拡張されます。Spartan-6では、2つのBlockRamsと4つのDSP /乗算器、および数百のLUT / FFペアが必要です。

レイテンシは8サイクルですが、スループットは1サイクルであるため、上記の乗数と組み合わせると、クロックサイクルごとに1分周が得られます。Spartan-3では100MHzを超える必要があります。Spartan-6では、合成の見積もりは185MHzですが、これは単一のルーティングパスで1.6nsなので、200MHzは妥当な範囲です。

Virtex-5では、平方根ツインと同様に、200MHzに到達しました。私は夏の学生にそれを再パイプライン化するように試みました-12サイクル未満のレイテンシで400MHzに近くなりました-平方根で2.5 ns。

しかし、おそらく100から1000のDSPユニットがあることを覚えていますか?これにより、単一のFPユニットよりも1桁または2桁大きい処理能力が得られます。


答えをありがとう、ブライアン、しかし整数の乗算/除算についての完全な答えではありませんか?私は主に浮動小数点に興味があります。
TheFlash

2
いいえ、私が言ったように、32ビット浮動小数点を意味する単精度。同じ原則がダブルスにも適用されますが、リソースの使用量は明らかに高くなります。
ブライアンドラモンド

5

ザイリンクスSpartan 3やVirtex 5などの通常のFPGAを使用している場合、倍精度浮動小数点64ビット乗算または除算を実行するには何サイクルかかりますか。

答えは:はい!

しかし真剣に、それは数を考え出すことは非常に困難です。複雑なロジックを設計する場合、さまざまなものの間で常にトレードオフがあり、すべての設計に1つのアプローチが適しているわけではありません。大きなものをカバーしようと思います。

ロジック設計では、サイズと速度のトレードオフが1つあります。この簡単な例は、単一の浮動小数点乗算器が遅すぎるとしましょう。それをスピードアップするには、2番目の乗数を追加するだけです。ロジックサイズは2倍になりますが、1秒あたりの乗算数は2倍になります。しかし、単一の乗数だけを見ても、数値を乗算する方法はいくつかあります。速くて大きいものもあれば、小さくて遅いものもあります。

別のトレードオフは、クロック速度と乗算あたりのクロック数です。1つのクロックで単一の浮動小数点乗算を行うロジックを設計できます。ただし、その場合はクロックを遅くする必要があります-おそらく10 MHzほど遅くなります。または、100 MHzクロックで動作するように設計することもできますが、乗算ごとに10クロックが必要です。全体の速度は同じ(1つは100 nsで乗算)ですが、1つはより速いクロックを持っています。

前の段落に関連するのは、クロック速度と乗算遅延のトレードオフです。ロジックデザインにはパイプラインと呼ばれる手法があります。基本的に、ロジックのチャンクを取り、それを小さなステージに分割します。各ステージは、完了するまでに1クロックサイクルかかります。ここでの利点は、他のステージが他の乗算を処理している間に、各ステージが乗算を処理できることです。たとえば、10ステージのパイプラインを使用して100 MHzで実行しているとします。これは、乗算ごとに10クロックかかることを意味しますが、ロジックは同時に10の異なる乗算に対しても機能します。クールなことは、すべてのクロックサイクルで乗算を完了することです。したがって、乗算ごとの有効なクロックは1で、これらの乗算が完了するまでに10クロックかかります。

したがって、FPGAがどれだけ速く乗算を実行できるかという質問への答えは、実際にはあなた次第です。FPGAにはさまざまなサイズと速度があり、必要に応じてそのロジックを手元のタスクに割り当てることができます。しかし、特定のシナリオを見てみましょう...

最大のSpartan-3Aを使用したいとし、32ビットの浮動小数点乗算のみを対象とするとします。32ビット浮動小数点乗算には、24x24整数乗算器と8ビット加算器が必要です。これには、4つの専用の乗算器ブロックといくつかの一般的なスライスが必要です(少なすぎると問題になります)。XC3S1400Aには32の専用乗算器があるため、8つの浮動小数点乗算器を並列に実行できます。クロック速度の大まかな推測は約100 MHzになります。このデザインを完全にパイプライン化して、クロックサイクルごとに4つの32ビット浮動小数点乗算を完了することができ、1秒間に8億の浮動小数点乗算の実効速度を実現できます。

倍精度乗算では、浮動小数点乗算ごとに9つの専用乗算器ブロックが必要なので、並列処理は3つしか実行できません。その結果、毎秒約3億の64ビット浮動小数点乗算の速度が得られます。

比較のために、新しいザイリンクスVirtex-7シリーズを検討してみましょう。その中の専用乗算器は大きいので、64ビット浮動小数点乗算には6つの専用乗算器ブロックしか必要ありません。最大の部分には1,920の専用乗算器もあります。したがって、320倍の倍精度浮動小数点乗算を並列に実行できます。これらのパーツもはるかに高速です。これらの部品を200 MHzで実行できると私は見積もっており、合計速度は毎秒64億の倍精度浮動小数点乗算です。もちろん、これらのチップの価格はそれぞれ約10,000米ドルです。

浮動小数点除算は、すばやく行うのがはるかに困難です。ロジックは特にFPGAではるかに大きく、実行速度は非常に遅くなります。同じことがほとんどのCPUにも当てはまり、除算命令(浮動小数点と固定小数点)の実行速度が大幅に低下します。速度が重要な場合は、できるだけ多くの分割を排除する必要があります。たとえば、5で割るのではなく、0.2を掛ける必要があります。実際、多くのシステムでは、単に除算を行うよりも、逆数を計算して乗算を行う方が高速です。

除算にも乗算と同じトレードオフが適用されます。除算は乗算よりもずっと遅く、はるかに大きくなるだけです。


TI DSPまたはRasberry Pi 3のGPUは、かつてFPGAのALUだったものから魔法の煙を吸い出します。
dhchdhd 2017

3

少なくともアルテラのALT_FP除算コンポーネントでは、倍精度64ビット除算(仮数52ビット)は10、24、または61クロックサイクルかかります(選択可能)。単一の拡張精度は異なる場合があります。たとえば、指数が11ビット、仮数が26ビットである43ビットの除算では、8、18、35などのクロック出力レイテンシオプションを選択できます。ISEを起動して、ザイリンクスで何ができるかを確認します。


1
これらの数値はレイテンシですか、それともスループットですか?
Brian Drummond、

倍精度クロックサイクルは選択可能ですか?どのような要因で?より多く/より少ないブロックを使用するには?そして、乗算についてはどうですか?
TheFlash

1
私はコンポーネントのパラメータと一緒に移動するのではなく、メインウィンドウを起動して、その内容をコピーしました。おそらくドキュメントを読んで、コンポーネントguiが提供する他のパラメーターを確認する必要があります。だから、基本的に、私は両方の質問に今答えることはできません。
ソクラテス

2

単一のサイクルを取ることができない理由はありません。ただし、かなり大きなサイクルになる可能性が高く、多くのリソースを使用します...


1

倍精度、浮動小数点の乗算と除算の実装があります。乗算には13クロックサイクルかかり、除算には109クロックサイクルかかります。どちらもパイプライン化されており、ザイリンクスV5で100%のスループット(クロックごとに1つの結果)と約200MHzの動作を実現します。100MHzでいくつのクロックが得られるかはわかりませんが、2で割ると安全です。

また、同じ状況で10クロックと51クロックを使用する単精度浮動小数点の実装もあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.