RISC-Vにおける浮動小数点サポートの理解:スカラーからベクトル拡張まで

RISC-V アーキテクチャはそのモジュラリティで広く知られており、実装者は特定のターゲットワークロードに必要な機能だけを組み込むことができます。この思想は浮動小数点(FP)演算へのアプローチに最も顕著に表れています。多くのモノリシックな ISA と異なり、RISC-V のベース ISA(RV32I または RV64I)には浮動小数点命令が含まれていません。その代わり、アプリケーションの精度や性能要件に応じて層状に追加できる豊富な拡張エコシステムが提供されています。

このモジュラリティにより、開発者はソフトフロートライブラリを使用した小型組み込みコントローラから、広いベクトルレジスタと特殊な低精度フォーマットを活用したハイパフォーマンスコンピューティング(HPC)や AI アクセラレータまでスケールさせることができます。

スカラー浮動小数点アーキテクチャ

専用レジスタファイル vs. 統合レジスタファイル

RISC-V における最も重要なアーキテクチャ上の決定の一つは、専用の浮動小数点レジスタファイル(FRF)を使用することです。標準の F 拡張は幅 FLEN の 32 個のレジスタを導入します。

この XRF(汎用レジスタファイル)からの分離は、以下のような利点を提供します:

  • リソース競合の低減: 浮動小数点演算は整数演算と同じアーキテクチャストレージを競合しません。
  • 柔軟なサイズ設定: 汎用レジスタ(XLEN)の幅は浮動小数点レジスタ(FLEN)と異なる場合があります。例えば、RV32 + D 構成では 32 ビット整数レジスタですが、浮動小数点レジスタは 64 ビットです。
  • 割り当ての簡素化: 2 つのデータタイプが分離されていると、コンパイラはレジスタをより効率的に割り当てられます。

しかし、これにはコストが伴い、FRF と XRF 間の専用ロード/ストア命令やデータ転送操作が必要になります。

「In‑X」代替案:Zfinx

追加のレジスタファイルによるハードウェアオーバーヘッドを軽減するため、RISC-V は Zfinx ファミリの拡張を提供します。これにより、浮動小数点演算は汎用レジスタ(XRF)から直接実行できます。

  • ZfinxF 拡張(単精度)に相当します。
  • ZdinxD 拡張(倍精度)に相当します。
  • Zhinx/Zhinxmin は半精度サポートに相当します。

XRF を再利用することで、実装者は浮動小数点専用のロード/ストアが不要になりますが、別々のレジスタ圧迫や柔軟なサイズ設定の利点は失われます。

精度レベルと IEEE 754 準拠

RISC-V は主に IEEE 754-2008 標準に準拠しており、CPU 向けに最も広く受け入れられている算術標準との互換性を確保しています。

標準精度拡張

  • F(単精度): binary32(FP32)をサポートします。これは他の多くの FP 拡張のベースラインです。
  • D(倍精度): binary64 をサポートします。
  • Q(四倍精度): binary128 をサポートしますが、採用は限定的です。
  • Zfh / Zfhmin(半精度): binary16 をサポートします。Zfhmin は最小サブセットで、binary16 を保存形式として使用でき、実際の計算では binary32 に昇格させることでハードウェア面積を削減します。

拡張機能:Zfa

Zfa 拡張は標準フォーマットにユーティリティ操作を追加し、浮動小数点ロード即値(32 の有用な定数を提供)、静かな比較、さまざまな整数への丸め操作などを含みます。

ベクトル浮動小数点と AI 加速

ベースラインのベクトルサポートは RVV 1.0 によって導入され、ほぼすべてのスカラー命令に対するベクトルバリアントが提供されます。特に、ベクトル乗算加算命令は「破壊的」であり、レジスタ使用を最適化するためにオペランドの一つが宛先として上書きされます。

低精度へのシフト

機械学習(ML)の急速な拡大に伴い、極端な精度よりもスループットとエネルギー効率を優先するフォーマットへの需要が高まっています。

  1. BFloat16(BrainFloat16): binary32 を切り捨てた 16 ビットフォーマットです。RISC-V は Zfbfmin(スカラー)と Zvfbfmin/Zvfbfwma(ベクトル)でこれをサポートしています。より包括的な拡張である Zvfbfa は現在開発中で、BFloat16 のほぼ完全なベクトルサポートを提供する予定です。
  2. OFP8 と OFP4: メモリ帯域幅をさらに削減するため、RISC-V は Open Compute の 8 ビット(Zvfofp8min)および 4 ビット(Zvfofp4min)浮動小数点フォーマットを検討しています。
  3. マイクロスケーリング(MX): OpenCompute の MX スケーリングフォーマットに基づき、共有スケーリングファクタでブロックの値を格納することで、テンソル全体のビット数を大幅に削減します。

将来展望と課題

RISC-V が拡大するにつれ、競合する標準という課題に直面しています。Open Compute Project(OCP)は限定的なフォーマット群を提供する一方、IEEE P3109 の取り組みは数百もの小規模フォーマットのための広範なフレームワークを構築しています。RISC-V はエコシステムの分断を防ぐために、特定のプロファイルを定義する必要があるでしょう。

コミュニティの視点

RISC‑V 拡張の命名規則の複雑さとオプションの膨大さは圧倒的です。あるコミュニティメンバーは次のように述べています:

"傍観者の視点から見ると、複数の異なる拡張が混在しているため、すべてを覚えるのは非常に困難です。命名スタイルはその課題を軽減してくれません。"

さらに、IEEE 754 に代わる完全な代替案として Posits などが議論されています。これらは浮動小数点表現の根本的な欠陥を解決しようとしていますが、業界にとっては依然として IEEE 互換性が最優先事項です。

主要拡張の概要

Extension 目的 レジスタファイル
F 単精度 (FP32) Dedicated (FRF)
D 倍精度 (FP64) Dedicated (FRF)
Zfinx 単精度 (FP32) General Purpose (XRF)
Zfh 半精度 (FP16) Dedicated (FRF)
Zvfbfmin BFloat16(ベクトル) Vector Registers
Zve32f ベクトル単精度 Vector Registers

Sources