# RISC-V
UC Berkeley で開発された5世代目の RISC アーキテクチャで、「プロセッサ向け Linux」を志向したオープンソースの命令セットアーキテクチャ(ISA)。RISC-V Foundation(http://riscv.org/)の下でコミュニティにより管理され、ハードウェアと ソフトウェアの専門家が意思決定前に公開の場で ISA の進化に協働できる点が特徴とされる(Source: [[@2019__CACM__A New Golden Age for Computer Architecture]])。
## 設計上の特徴
- **モジュール性**: 整数演算のみの base ISA(32ビット/64ビットアドレス版)に、M(整数乗除算)・A(アトミックメモリ操作)・F/D(単精度/倍精度浮動小数点)・C(圧縮命令)の標準拡張を任意に追加できる。拡張は完全にオプションであり、ソフトウェアスタックは新拡張を採用しなくても動作し続ける。プロプライエタリ ISA が上位互換性のために全ての機能拡張を将来のプロセッサに含めることを要求するのとは対照的である。
- **単純さ**: base 50命令+標準拡張(M・A・F・D・C)で計137命令、6命令フォーマット。同時代の ARMv8 は500命令超・14命令フォーマット以上であり、RISC-V は設計・検証コストの両面で単純さを追求している。
- **クリーンスレート設計**: 第一世代 RISC アーキテクチャ(RISC-I・MIPS 等)より25年遅く設計されたため、遅延分岐・遅延ロードのようなマイクロアーキテクチャ依存の機能や、レジスタウィンドウのようにコンパイラ技術の進歩で不要になった革新を避けている。
- **カスタムアクセラレータ対応**: 広大なオペコード空間をカスタムアクセラレータ用に予約しており、ドメイン固有アーキテクチャ(DSA)の基盤 ISA としての利用を想定する。→ [[ドメイン固有アーキテクチャ]]
- **セキュリティとの親和性**: オープンな実装はセキュリティ専門家による検証を容易にし、「security through obscurity(隠蔽によるセキュリティ)」に頼らない設計を可能にする。単純さは実装の検証を容易にする効果もあるとされる。
Nvidia も同様の思想でオープンかつ設定可能な DSA である NVDLA(Nvidia Deep Learning Accelerator)を2017年に発表しており、ダイサイズは0.5〜3 mm²、消費電力は20〜300ミリワットの範囲で構成可能とされる(Source: [[@2019__CACM__A New Golden Age for Computer Architecture]])。
*Computer Architecture: A Quantitative Approach* 第6版(2019)は、命令セットの例示にMIPSからRISC-Vへ全面的に切り替えた最初の版である。第1章 [[@2019__MorganKaufmann__Computer Architecture - A Quantitative Approach - Chapter 1 Fundamentals of Quantitative Design and Analysis]] §1.3は、80x86・ARMv8との対比でRISC-VのISA7次元(命令クラス・メモリアドレッシング・アドレッシングモード・オペランドの型とサイズ・演算の種類・制御フロー命令・命令エンコーディング)を説明する例示ISAとして採用し、32個の汎用レジスタと32個の浮動小数点レジスタを持つロードストア型ISAであること、全命令が32ビット固定長であること(圧縮拡張RV64ICを除く)を導入する。2017年時点でAMD・Google・HP Enterprise・IBM・Microsoft・Nvidia・Qualcomm・Samsung・Western Digitalを含む60社超がRISC-V Foundationに参加していたと記録する(Source: [[@2019__MorganKaufmann__Computer Architecture - A Quantitative Approach - Chapter 1 Fundamentals of Quantitative Design and Analysis]] §1.3)。
第2章 [[@2019__MorganKaufmann__Computer Architecture - A Quantitative Approach - Chapter 2 Memory Hierarchy Design]] §2.4は、80x86や第1世代RISCアーキテクチャの多くが仮想マシン(VM)を想定せずに設計されたためVMM実装が複雑化した(80x86には仮想化を阻害する18命令が存在する)のに対し、RISC-Vは設計段階から仮想化支援を明示的に含む点を対比的に挙げている(Source: [[@2019__MorganKaufmann__Computer Architecture - A Quantitative Approach - Chapter 2 Memory Hierarchy Design]] §2.4)。
第4章 [[@2019__MorganKaufmann__Computer Architecture - A Quantitative Approach - Chapter 4 Data-Level Parallelism in Vector, SIMD, and GPU Architectures]] §4.2は、RISC-Vのベクトル拡張**RV64V**(執筆時点で開発中だったRVV拡張の一種)を例に、ベクトルアーキテクチャの機構(vector-length register・ストリップマイニング・述語レジスタ・gather-scatter)を解説する。RV64Vは命令自体にデータ型・幅を持たせず各ベクトルレジスタを事前設定する動的レジスタ型付けを採用しており、これはbase ISAの単純さ・モジュール性という設計思想(第1章で紹介済み)をベクトル拡張にも一貫させたものと位置づけられる。同章はRISC-Vが(x86・AVX系のような)固定幅SIMD拡張ではなくベクトルアーキテクチャを採用したことを明記し、命令セット全体でのvector-length register(mvl)の恩恵——レジスタ幅を拡張しても命令セット自体を変更せずに済む——を強調する(Source: [[@2019__MorganKaufmann__Computer Architecture - A Quantitative Approach - Chapter 4 Data-Level Parallelism in Vector, SIMD, and GPU Architectures]] §4.2, §4.9 Concluding Remarks)。
付録A [[@2019__MorganKaufmann__Computer Architecture - A Quantitative Approach - Appendix A Instruction Set Principles]] §A.9は、RISC-Vをロードストア型ISA設計原則の集大成として提示する。命令セットはA.2〜A.8節の計測ベース推奨——ロードストア・変位/即値アドレッシング(いずれも12ビット)・8〜64ビット整数と64ビット浮動小数点・単純命令・比較付き分岐・固定符号化・16〜32汎用レジスタ——をほぼそのまま満たす設計として説明され、命令フォーマットはR/I/S/U型(実際にはSB・UJを含む6種)に整理される。いずれの型もopcode(0〜6ビット目)とrs1・rd・funct3を固定位置に持つため、命令の種類を判定する前にレジスタフィールドの取得を開始できる。これは付録C(パイプライン)がRISC-Vの5段パイプラインで「ハザード検出とフォワーディング制御をID段に一元化できる」と説明する実装上の単純さと表裏一体の設計判断であり、固定長・固定位置の符号化というISA選択がパイプライン実装の容易さに直結する具体例になっている(Source: [[@2019__MorganKaufmann__Computer Architecture - A Quantitative Approach - Appendix A Instruction Set Principles]] §A.7, §A.9, [[@2019__MorganKaufmann__Computer Architecture - A Quantitative Approach - Appendix C Pipelining - Basic and Intermediate Concepts]] §C.3)。
## 出典
- [[@2019__CACM__A New Golden Age for Computer Architecture]]
- [[@2019__MorganKaufmann__Computer Architecture - A Quantitative Approach - Chapter 1 Fundamentals of Quantitative Design and Analysis]]
- [[@2019__MorganKaufmann__Computer Architecture - A Quantitative Approach - Chapter 2 Memory Hierarchy Design]] §2.4
- [[@2019__MorganKaufmann__Computer Architecture - A Quantitative Approach - Chapter 4 Data-Level Parallelism in Vector, SIMD, and GPU Architectures]](§4.2 RV64V Extension、§4.9 Concluding Remarks)
- [[@2019__MorganKaufmann__Computer Architecture - A Quantitative Approach - Appendix A Instruction Set Principles]] §A.9