※本記事はInterface誌2022年9月号に掲載されたものの原稿版になります
なぜか大人気ISA,μA設計
今回はプロセッサ開発の中でも中核であるCPUの開発について述べたいと思います。プロセッサとCPUは同義語として扱われることもありますが、ここではより狭い意味でプロセッサの中に位置する部品の位置づけでCPUを扱い定義の詳細には踏み込まないことにします。
プロセッサ開発においてCPUはコモディティ化しており何処からか導入すれば良いという意見もしばしば耳にすることですが、ターゲットドメインに合わせた特性を持つCPUをタイミング良く開発していくことはプロセッサの競争力につながると考えます。現在のCPU開発事情に触れていきたいと思います。
みんな大好きCPU開発
巷にはCPUおよびその開発に関わる情報として雑誌や書籍、Webでの情報が溢れています。これはひとえにCPUがプロセッサ、ひいてはコンピュータの中核を占める重要部品であることと考えますが、ただそれだけではなくCPU開発そのものが楽しいからではないでしょうか?なぜCPU開発が楽しいあるいは楽しそうに見えるのか。筆者なりの考えを示すと次の点が挙げられます。
- システムを作り上げる達成感が得られる
- 競合との定量的な比較が容易である
1つ目のシステムを作り上げる達成感については、すべての仕事に通じるものと思いますが、自分が作り上げたあるいは携わったCPUが命令を解釈し、実行しながら一つの大きなプログラム処理を行っていく様を見るのは何回開発をしても感動を覚えるものです。こういった達成感をCPU開発は得やすいと考えます。
2つ目の定量的な比較については、CPUは長い歴史の中で役割が明確化されてきており、性能を比較するための指標(ベンチマーク)が潤沢に整備されています。ベンチマークの実行結果を見ながら自分が力を入れたまたは工夫を凝らした箇所の効果が分かりやすい形で見えるというのは、開発をする上でも楽しいものです。
<注釈>CPUの高速化は多岐にわたり命令セットの定義だけではなく大小さまざまな手法が存在(e.g. 分岐予測等)しますが、これらは教科書や論文等通じて広く知られておりこれらの組み合わせや改良方法が試せる点も大きいです。
CPU開発の進め方
理想的にはプロセッサのコンセプト設計からもたらされたCPUへの要件を基に、命令セットアーキテクチャ(ISA)の策定およびISAを実現するためのマイクロアーキテクチャ設計を進めます。一方で商用プロセッサの開発では、CPU開発自体が一つのプロジェクトとなるほどの開発期間・規模となるため、1. 既存CPUのなかから適合しそうなものを選んでくる、2.既存CPUをプロジェクトの要件に合わせてカスタマイズする、3.プロセッサのコンセプトに合わせてロードマップ開発する。この何れかまたは中間が現実的な開発として行われています。
図1 共通の開発フロー図
CPU開発で楽しい事楽しくない事
CPU開発は非常に多岐にわたる要素が存在します。要求性能や電力予算などの制約条件の中で、ターゲットのドメインに合わせた命令セットやμA(マイクロアーキテクチャ)を選択・開発していく必要があり、さらにそのうえで安定的にソフトウェアを動作させる必要があります。
どの開発においてもかげひなたはあります。CPU開発におけるひなた(楽しみ)は何と言ってもISAとμA設計です。ターゲットに合わせた命令セットを定め、命令セットに最適な命令実行・演算パイプライン構造を定めていくことは設計上の醍醐味です。これらはターゲットプログラムの実行性能にも直結し、製品のカタログ上にも大々的に取り上げられます。
一方でかげの部分としては、OS動作に必要となる例外・割込み、デバッグ機能など特権機能に関わる開発があげられます。これらは、実際の製品開発においては重要な役割を果たす機能でありながら、カタログスペック上も大きく記載はされず、書籍等の解説でも少ない記述にとどまります。また、どのような開発にも存在し、時間がコーディングよりも支配的な論理検証についても、CPUは一般的なハードウェア論理検証よりも内部ステートが深く、多くの時間を費やす必要があります。これに加えて、車載制御マイコン等の特定用途向けのCPUでは安全を担保するための安全機構も実装、検証していく必要があります。
このようにCPU開発にはハイライトされない箇所にこそ非常に多くの開発要素が含まれ、商用レベルのCPU開発には多数の困難が待ち構えているのですが、この状況がRISC-Vの登場により変わりつつあります。
図2 CPU開発において楽しい事、楽しくない事
RISC-Vのありがたさ
さて、いよいよRISC-Vについて触れていきます。RISC-Vそのものの位置づけ、特長については既に本誌含め数多くの素晴らしい解説がありますので改めては触れません。オープンアーキテクチャで自由に利用することが可能であり、充実したエコシステムにより設計者が自分の思い描いたプロセッサシステムを開発するのに集中できるというのは広く知られているかと思います。ここではCPU開発者視点で新たにCPUを設計する際にどのような点がRISC-Vによって解決されているかを述べていきます。
CPU開発者視点でのRISC-VのありがたさはRISC-Vが前述の広範な開発アイテムについて一定のベースラインとなる仕様や環境を提供してくれていることに尽きます。
以下の3つのポイントにまとめてRISC-Vのありがたさについて述べていきます。
- 特権モード仕様の充実
- 非ISA仕様の充実
- エコシステムの充実
名 称 | 詳 細 | |
AAPG | IIT Shakti プロジェクト製Pythonベース | https://gitlab.com/sharktiproject/tools/aapg |
RISCV-DV | グーグル製UVMベース | https://gitlab.com/google/riscv-dv |
FORCE-RISCV | Futurewei製C++ベース | https://gitlab.com/openhwgroup/force-riscv |
表1 OSSの検証用ランダム・プログラム・ジェネレータ
特権モード仕様の充実
RISC-VではISA仕様書のVolume II: Privileged Architectureが特権アーキテクチャの仕様に該当します。CSR(Control and Status Registers)仕様の定義を軸に、リセット、割込み・例外、メモリ保護、仮想記憶といった、ターゲットプログラム以外のOS、ハイパーバイザといった高機能なソフトウエアスタックを動作させるに必要な仕様が定義されています。
設計者はこの仕様に従うことで、(特別な要求がある場合でもベース仕様として利用することで仕様面での検討漏れなども排除することが可能となり)、大幅な仕様策定工数の短縮が可能となります。
実際、RISC-V仕様に対応したLinuxや各種RTOS、ハイパーバイザが開発されていることもあり、新規のCPU開発であっても割込みやCPUタイマ仕様などを準拠させることで、OSポーティングなどの手間が軽減されています。
非ISA仕様の充実
当初RISC-V はISA仕様のみを提供していましたが、徐々にISA以外の仕様も充実してきています。文献(1)には非ISAながらRISC-V Internationalが管理する仕様が集められています。特に注目すべき点として2点あげておきます。
1つ目はデバッグ関連の仕様です。JTAG接続によるCPUデバッグ仕様の詳細が定義されており、この仕様に従ってデバッグモジュールを開発することで、GDB等のデバッガをJTAG経由でRISC-Vコアと接続することが可能となります。さらにはNexus Traceのような高度なデバッグトレース機能の仕様も提供されてきており、これらを統一的な仕様で開発することが可能となっています。
2つ目は、アーキテクチャテストプログラム(riscv-arch-test)です。このプログラムは、開発したデザインがアーキテクチャ仕様に準拠しているかをテストします。
こういった仕様やプログラムは従来CPUベンダの中の閉じた世界で開発されていましたが、仕様やプログラムがオープンになり規格化されることで、新規にCPUを開発する際の見えづらい工数が削減できています。
<注釈>実際に筆者の経験でも新規開発したCPUで商用含む複数のデバッガに設計変更なくそのまま接続することが出来ています。</注釈>
エコシステムの充実
RISC-Vのメリットとして、(RISC-V Internationalが管理しない) 3rd partyのエコシステム(ソフトウェア開発環境、ライブラリ、OS)が充実していることが知られていますが、CPU開発視点でも特に論理検証観点でありがたさがあります。
前述のアーキテクチャテストプログラムはRISC-V Internationalが提供するものでしたが、3rd partyとしてリファレンスモデルとしての命令セットシミュレータ、動作一致比較を行う環境の仕様、ランダム検証のためのランダムパタン生成ツール、など商用、OSS含め存在しています。こういったツールを利用することでCPUベンダが全てを1から開発することなくコアの設計に注力することができるのです。
表:OSSの検証用ランダムプログラムジェネレータ
- AAPG: IIT Shaktiプロジェクト製Pythonベース
- riscv-dv: google製 UVMベース
- FORCE-RISCV: Futurewei製C++ベース
RISC-Vでは解決できないこともある
もちろん、RISC-Vは万能ではありません。例えばアーキテクチャとしてVLIWを採用したいなど基本命令の構造からRISC-Vと異なる場合には、そのまま適用することは出来ません。ですが、このRISC-Vが提供する広範なエコシステムや仕様は何らかの形で利用し設計を加速することができるでしょう。
RISC-V ISAの変遷
最後に最近のRISC-V ISAの動きについて述べていきます。
2021年12月に2年以上振りに大きな改訂が行われ、多数の拡張仕様が新たに導入されました。目立つ所では命令拡張としてVectorやBitManipulation、Cryptography拡張などの大物拡張命令セットが正式に導入されました。
仕様名 | 拡張名 |
Privileged Architecture 1.12 | 1.12Sm1-12, Ss1-12, Sv57 |
Hypervisor | H |
Fast TLB invalidation | Svinval |
NAPOT pages | Svnapot |
Page-based memory types | Svpbmt |
Vector Extension | Zve32x, Zve32f, Zve64x, Zve64f, Zve64d, Zve, Zvl32b, Zvl64b, Zvl128b, Zvl256b, Zvl512b, Zvl1024b, Zvl, Zv |
State Enable Extension | Smstateen |
Crypto Scalar | Zbkb, Zbkc, Zbkx, Zknd, Zkne, Zknh, Zksed, Zksh, Zkn, Zks, Zkt, Zk, Zkr |
Count overflow & Filtering | Sscofpmf |
Bit-Manipulation ISA-extensions | Zba, Zbb, Zbc, Zbs |
Base Cache Management Operation | Zicbom, Zicbop, Zicboz |
time cmp | Sstce |
ePMP | Smepmp |
Floating-Point in Integer Registers | Zfinx, Zdinx, Zhinx, Zhinxmin |
Half-Precision Floating-Point | Zfh, Zfhmin |
表2 2021年11月に批准された特権仕様の例 (文献(2)(3))
特権仕様ではMachine, Supervisorがバージョン1.12になり、あわせてHypervisorバージョン1.0が正式に導入されています。この中にはキャッシュ制御のための命令拡張(Zicbom, Zicbop, Zicboz)や、物理メモリ保護(PMP)の拡張(Smepmp)などが含まれています。Vector拡張などのアプリケーション性能に直結する“ハイライト”された機能だけでなく、特権仕様の地道な機能拡充は実用的なCPUを開発する際に非常に役立ってくれます。初期のRISC-V仕様に存在せず各CPU実装が必要に応じて独自に定義していた仕様がRISC-V Internationalによって統合される形で整備されてきており、RISC-V仕様の成熟をみてとることができます。
プロファイル仕様の策定
RISC-V ISAはモジュール化されユーザが任意の拡張を選択して設計できるコンセプトとなっています。当初の仕様ではアルファベット1文字の拡張仕様(I,M,A,F等)を組み合わせて対応するISAを表現していました。しかしながら今日では拡張の種類も増えまた、それぞれが長い文字列となり、その組み合わせ数は爆発的に増加しています。
そうした中で、ソフトウェアエコシステムとRISC-Vユーザにとって複雑度を下げることを目的として、標準のベースISAとオプションの拡張ISAで構成されたRISC-V Profilesが定義されようとしています。(文献(4))
<注釈>プロファイルはアプリケーションプロセッサ向けのRVAとマイクロコントローラ向けのRVMの2つが定義されようとしています。一度RVMのドラフトが公開されていましたが現在は取り下げられ、まずはRVAの策定に注力しているようです。</注釈>
個々のISA拡張の独自の組み合わせや独自拡張命令の存在を禁止するものではありませんが、RISC-V CPU開発者はソフトウェアサポートの可能性を高めるために可能な限りこのプロファイルに沿うことが推奨されています。
図3 I,M,A,F ⇒ Profile型
また、RISC-V ProfileはISAのプロファイルを定義することを目的としていますが、ハードウェアシステムの定義を目的として、RISC-V Platform Specificationも定義されようとしています。(文献(5))こちらはLinuxのようなrich-OSを動作させる環境とRTOSベースの2つを定義することを目標に推進されています。
RISC-V Platform Specificationでは、ISAへの要求としてRISC-V Profileの指定に加えて、デバッグやタイマ、割込み、Bootシーケンスといった周辺回路への要求が具体的な要求が記載され、将来的にはモバイル、エッジコンピューティング、車載といった産業用途別にターゲット設定されることが予定されています。
add.uw 命令
これまでB拡張として知られていたBit manipulationはカテゴリ毎に細分化されZba(address), Zbb(basic), Zbs(single-bit)という名称でRVA22U64プロファイルの必須拡張に加えられています。このZba拡張にadd.uw命令というunsigned wordの加算命令が追加されています。なぜこのような命令が今頃追加されたのでしょうか?
add.uw rd, rs1, rs2
RV64の場合、unsigned intで宣言された変数の加算には、add命令の後にゼロ拡張を行う必要があり3命令が必要でした。ループや配列のインデックスにunsigned intが使われるとアドレス計算のたびにこの処理が必要となりますが、add.uw命令を使うことで1命令になります。
add+sli+srli ⇒ add.uw
ある実装ではこのindex操作の差異でCoremarkのベンチマークスコアが20%弱向上することが知られています。(文献(6))
従来RISC-Vはサポート必要な必須命令が少なく複雑な機能はコンパイラによる命令の組み合わせとハードウェアのマイクロアーキテクチャ実装でカバーされるべきであるというのが設計意図されてきていました。しかしながら、こういった基本命令レベルでの弱点を克服しようという動きはRISC-Vがより実用的な製品からのフィードバックを受けて進化していっていることを示していると考えられます。
***
プロセッサ開発とりわけ狭義のCPU開発における開発アイテムとそこに占めるRISC-Vのありがたさとその動向を開発者視点で紹介しました。RISC-Vの登場により、CPUを商用レベルで開発していくことの敷居は下がっており、経済的な合理性も説明しやすくなってきています。ポストムーアとも呼ばれるコンピュータアーキテクチャの新しい黄金時代を生き残っていくには、ターゲットに応じたプロセッサをタイムリーに開発していくことが重要でCPU開発もその鍵となります。本記事がその一助になれば幸いです。
****
あだち こうじ
****
参考文献
(1) RISC-V Non-ISA Specifications,GitHub.
https://github.com/riscv-non-isa
(2) Jeff Scheel;Recently Ratified Extensions.
https://wiki.riscv.org/display/HOME/Recently+Ratified+Extensions
(3) Jeff Scheel;Draft Specification Status Dashboard.
https://wiki.riscv.org/display/HOME/Draft+Specification+Status+Dashboard
(4) riscv /riscv-profiles,GitHub.
https://github.com/riscv/riscv-profiles
(5) riscv /riscv-platform-specs,GitHub.
https://github.com/riscv/riscv-platform-specs
(6) PolarFire SoC CPU Performance Benchmarking.
https://onlinedocs.microchip.com/pr/GUID-8CA810D1-5A91-4A25-B308-E300BB856CF7-en-US-3/index.html