RISC-Vの設計批判(dmitry.gr)
組み込み向けRISCプロセッサの設計者であるDmitry.GRが、自身のブログで発表したRISC-Vアーキテクチャに対する技術的批判記事「RISC-V: They Should Have Known Better」の内容。低価格な組み込みコア市場では成功するが、設計上の欠陥により高性能コンピューティング用途には不向きだと主張している。
相反する設計目標
安価なマイクロコントローラ向けの特性と、高性能CPUに必要な特性は根本的に対立していると指摘する。具体例として割り込み処理のレイテンシを挙げており、Cortex-M0が27サイクルで完了する処理にRISC-Vは38〜44サイクルを要するとしている。
過度なオプション性
乗算・除算・ユーザーモード・スーパーバイザーモードといった基本的な機能までもが仕様上オプション扱いになっている点を、「すべてがオプションでは標準としての意味がない」と批判している。
明らかな機能の欠落
- レジスタシフトを伴うアドレッシングモードが存在しない。
- ビット分岐命令(特定ビットの値によって分岐する命令)が存在しない。著者がaarch64カーネルを解析したところ、この種の命令が35,393個使用されていたとしている。
- ビットフィールド操作命令が不足している。
不可解な命令エンコーディング
「同じビットが同じ場所から来る」という設計上の主張を詭弁だと評しており、J形式命令の即値ビット順序(ビット20, 10, 9, 8, 7…という並び)が特に支離滅裂だとしている。圧縮命令セット(RVC)は9種類もの異なるフォーマットを持ち、将来の拡張によってエンコーディングが衝突する危険性があるとも指摘する。具体例として、0xA002という命令バイト列が、コアの実装によってC.FSDSP(浮動小数点ストア)とCM.JT(ジャンプテーブル)という全く異なる意味を持ちうるとし、これがデバッグを著しく困難にすると述べている。
失敗の原因への見立て
著者はこうした設計上の問題の主因を「Not Invented Here症候群」だとしている。既存のOpenRISCを改良する道を取らず、白紙から新規に設計したことが根本的な選択ミスだったという立場を取る(この経緯についてはRISC-V設計者自身の記述もあり、OpenRISCのノートで詳しく触れている)。
結論
RISC-Vは低価格を武器に8051の後継として組み込みコア市場では成功するだろうが、それは「設計が優れているから選ばれる」のではなく「安価だから選ばれる」結果だと述べている。デスクトップやハイエンドSBC市場ではaarch64に対抗できないだろうと予測している。