RISCVの掛け算テクニックを理解する
RISCVの乗算方法とそれに必要なハードウェアの概要。
― 1 分で読む
RISCVの掛け算入門
RISCVプロセッサのアーキテクチャの掛け算は、他の命令とはちょっと違うんだ。ほとんどの命令はサクッと動いて1クロックサイクルで終わるけど、掛け算はもっとリソースを使って時間もかかるから、特定のコンピュータ設計では問題になることもあるよ。基本的なRISCVの設定には掛け算命令がないから、シンプルなバージョンのプロセッサには楽なんだ。大きめのバージョンにはM拡張っていう機能を追加して、符号付き、符号なし、混合の掛け算ができるんだ。
掛け算の種類
一見、いろんな掛け算の方法があるのは変に思えるかもしれないけど、例えば32ビットの数を掛けるとき、数が符号付きか符号なしかは、掛け算の下半分の結果には影響しないんだ。でも、上半分の結果には符号のデータが関係してくるよ。
今のところ、掛け算の設計はロングマルチプリーションっていう方法に依存してて、これには2つの主要なステップがあるんだ。
- 部分積を計算する。
- その部分積を全部足す。
最初のステップは簡単で並行処理できるけど、2つ目のステップはもうちょっと複雑。スピードとスペースのバランスをとるために、いろんなアプローチがあるよ。
効率的な掛け算の方法
論文では、最初のステップに小さな変更を加えることで、すべての掛け算の形式(符号付き、符号なし、混合)に一つのプロセスが使えるって話してるんだ。
ロングマルチプリーションの基本
2進数のロングマルチプリーションは基本的なプロセスに従っていて、まずは掛ける数(マルチプライヤー)の最下位ビット(右端のビット)から始める。ビットが1なら被乗数(マルチカンド)を書き出す。ビットが0ならゼロを書く。これをすべてのビットに対して繰り返して、被乗数を左にシフトしながら進めると、いくつかの部分積ができる。最終的な結果は、すべての部分積を足すことで得られる。
ハードウェアのニーズ
ハードウェアでロングマルチプリーションを行うには二つのタスクがあるんだ:
- 部分積を計算する、これは同時にできる。
- すべての部分積の合計を計算する、これはアダー木を使うことが多いよ。
各部分積について、固定されたビット数で掛けることに焦点を当てて、ベクタ形式の特定の操作で効率的に行うことができるんだ。
符号付きの掛け算
符号付きの数はちょっと違った方法で格納されてる。符号付きの数は、正と負の値の両方を扱える形式で、そのサイズによって持てる最小値と最大値が決まるんだ。
加算や減算は普通に動くけど、符号付きの掛け算は難しい。バウとウーリーが開発した方法を使えば、符号なしの掛け算の方法が符号付きの数にも簡単に使えるんだ。これは負の数の2の補数を見つけて、正しく足せるようにするアプローチだよ。
符号付き掛け算のステップ
符号付きの掛け算では、正の数はそのまま足せる。負の数は、その表現を調整してから足す必要があるんだ。符号なしの掛け算の方式と似てるから、これはやりやすいよ。両方の方式の下位ビットは同じ結果になるからね。
混合の掛け算
RISCVの命令セットには、マルチプライヤーに符号なしの数を、マルチカンドに符号付きの数を使う独自の命令がある。このタイプの掛け算では、正しく足すために符号付きの数の2の補数を見つける必要があるんだ。
このプロセスは符号付きの掛け算と似ていて、最後のステップではハードウェアでの追加アクションに対応するために微調整が必要なこともあるよ。
掛け算のタイプを統合する
これらの異なる掛け算のタイプを統合するのは簡単にできる。符号付き、符号なし、混合掛け算を表すためにバイナリ信号を使えば、すべての実装を1つのマルチプライヤーにまとめることが可能なんだ。
部分積には3種がある:
- 最初のやつ
- 最後のやつ
- その間のやつ
最初の部分積は特定のビットに対して同じで、他の部分は符号付きか混合かによって調整が必要になることがあるよ。
中間および最後の部分積
中間の部分積はその特定の位置によるし、シフトされることもある。ほとんどのビットは変更なしだけど、符号付きと混合の操作にはいくつかの変更が必要だよ。
最後の部分積はもっと複雑になることがある。符号付き掛け算のために特定のビットを反転させる必要があって、最上位ビットも掛け算が混合かどうかで調整が必要なことがあるんだ。
まとめ
部分積の扱い方にちょっとした変更を加えることで、RISCVのすべての掛け算タイプを1つのマルチプライヤーで管理できるようになる。これにより設計が大幅にシンプルになって、複雑さも減り、特にマルチコアやベクタのような操作を扱うシステムでは実装が楽になるんだ。これらのプロセスを効率化することで、現代のコンピューティング環境では特に価値がある効率的な実装が可能になるよ。
タイトル: Baugh-Wooley Multiplication for the RISCV Processor
概要: This article describes an efficient way to implement the multiplication instructions for a RISCV processor. Instead of using three predefined IP blocks for signed, unsigned and mixed multiplication, this article presents a novel extension to the Baugh-Wooley multiplication algorithm which reduces area and power consumption with roughly a factor three.
著者: Franc Grootjen, Nikolai Schauer
最終更新: 2023-04-19 00:00:00
言語: English
ソースURL: https://arxiv.org/abs/2304.09952
ソースPDF: https://arxiv.org/pdf/2304.09952
ライセンス: https://creativecommons.org/licenses/by-nc-sa/4.0/
変更点: この要約はAIの助けを借りて作成されており、不正確な場合があります。正確な情報については、ここにリンクされている元のソース文書を参照してください。
オープンアクセスの相互運用性を利用させていただいた arxiv に感謝します。