第13回TOPPERS活用アイデア・アプリケーション開発コンテスト 活用アイデア部門 への「RISC-Vプロファイルに沿ったRISC-V64ビットプロセッサ向けTOPPERSカーネル標準化」の提案

第13回TOPPERS活用アイデア・アプリケーション開発コンテスト 活用アイデア部門 へ「RISC-Vプロファイルに沿ったRISC-V64ビットプロセッサ向けTOPPERSカーネル標準化」という表題で応募しまして，金賞を受賞しました．本記事では，既に公表されている応募内容について改めて共有し，ふりかえりたいと思います．

# 応募内容

## 部門

活用アイデア部門

## 作品のタイトル

RISC-Vプロファイルに沿ったRISC-V64ビットプロセッサ向けTOPPERSカーネル標準化

## 作成者

山崎進研究室

※ 実質的には山崎進の単独での作成です．

## 共同作業者

絶賛募集中

## 対象者

RISC-V CPU上のTOPPERSカーネルを利用したい組込みシステム開発者，企業等

## 使用する開発成果物

TOPPERS/ASPカーネル(RISC-V実装含む)

※ これについては．その後のTOPPERS開発者会議2023での議論により，最初の母体として，TOPPERS/ASP3カーネルを用いることに決めました．

## 目的・狙い

RISC-Vは拡張命令セットをモジュール化して拡張命令セットとして定義することができる一方で，検証すべき組み合わせが膨大になってしまう．そこで，ISAの共通セット標準であるRISC-Vプロファイルにしたがい，TOPPERSカーネルのRISC-Vサポートの仕様を定め，特定ボードに依拠しない，適切な標準化を図る．

※ 今読み返すと，少し日本語変ですね．

## アイデア／アプリケーションの概要

1. TOPPERSコミュニティに呼びかけ，賛同する会員を募集し，WGを組織する．
2. 各プロファイル向けのコンパイラ・アセンブラ・エミュレータを整備する．
3. TOPPERS/ASPカーネルのRISC-Vサポートのコードを参考に，各プロファイルをサポートするために必要なタスクを同定し，技術的課題を特定する．

## 背景

RISC-Vはオープンで拡張可能なISAである．IntelやARMなどにライセンス料を支払わずに自由にCPUを実装できるため，大いに注目されている．既存のISAの欠点を見極めた上で仕様を策定しているため，実装しやすく，低消費電力化や高性能化を図りやすいという利点もある．その特性から，自動車産業でも採用が広がりつつある．RISC-V CPUメーカーの大手であるSiFive社も，自動車産業向けのソリューションを強化すると表明している．日本でもルネサス エレクトロニクス株式会社がRISC-V 32ビットのMCU・MPUを販売している．

RISC-Vは拡張命令セットをモジュール化して定義することができ，そのような拡張命令セットが多数提供されている．一方で，カーネルやアプリケーションの開発者にとっては，検証すべきISAの組み合わせが膨大になってしまう問題がある．

その問題を踏まえて，RISC-Vプロファイルという，ほとんどのユーザーに最大の価値をもたらすようなISAの共通セットが標準化されている．これにより，カーネルやアプリケーションの開発者が考慮すべき拡張命令セットを限定することができる．

したがって，RISC-Vプロファイルの定義にしたがって，TOPPERSカーネルのRISC-Vサポートの仕様を定めることで，特に64ビットプロセッサについて，特定ボードに依拠しない，適切な標準化を図ることができると考えられる．

2023年6月現在，RISC-Vプロファイルは64ビットプロセッサ向けを中心にRVI20, RVA20, RVA22の各プロファイルが定義されており，RVA23プロファイルが審議中である．

## 目的

1.	RISC-V プロファイルに基づいて，特定ボードに依拠しない，TOPPERSカーネルのRISC-Vサポートの仕様を定める
2.	1について検討・審議し，標準化を図るWGを立ち上げる

## 計画

次のような計画で進める．
1.	TOPPERSコミュニティに呼びかけ，活動方針に賛同する会員を募集し，WGを組織する．
2.	各プロファイル向けのコンパイラ・アセンブラ・エミュレータを整備する．
(ア)	既存処理系で既にサポートされている場合には，指定するオプションを特定する
(イ)	そうでない場合には，一旦既存処理系をそのままにしてアドホックに解決して進める．並行して既存処理系にIssueを投げ，該当技術コミュニティに積極的に働きかける．
3.	TOPPERS/ASPカーネルについて，既存のRISC-Vサポートのコードを参考に，各プロファイルをサポートするために必要なタスクを同定し，技術的課題を特定する．
4.	WGにて，分担を決め，見積もりを行って活動計画を立案し，必要な研究開発費の算段を立てる．
5.	4で見積もった研究開発費をTOPPERSプロジェクトホームページで公表し，企業からの協賛金を募り，各種補助金・助成金等を申請することで，研究開発費と活動費用を集める．
6.	各分担にて，研究開発を遂行する．
7.	年度ごとに活動報告レポートをTOPPERSカンファレンス・総会にて説明し，その後，TOPPERSプロジェクトホームページで公表する．
8.	適宜，主にTOPPERS会員向けにRISC-Vの勉強会を主催し，普及と利用促進を図る．

※ 計画については，その後のTOPPERS開発者会議2023での議論により，前述のように，最初の母体として，TOPPERS/ASP3カーネルを用いることに決めたほか，計画変更しました．それについては，後述します．．

## 現状 (主に2023年の代表者の研究進捗)

TOPPERSカーネルのコンフィギュレータをmacOS上でコンパイルする方法を確立した．特に最新版のBoostを用いてコンパイルする方法を高田光隆氏にご教示いただいた．

https://qiita.com/zacky1972/items/aa4507d6613a0e8bbf11

GCCにおいて，任意のRISC-V拡張に対応させてクロスコンパイルする方法を確立した．

https://qiita.com/zacky1972/items/0cbfdf4e400e0205aa7b

RISC-Vの標準エミュレータであるspikeとpkについて，macOSとUbuntu上で動作させることができた．

https://qiita.com/zacky1972/items/6d433bdbef737d1e300f

GCCインラインアセンブルを用いて，RISC-Vベクタ拡張(RVV)のアセンブリコードを記述する方法を確立した．

https://qiita.com/zacky1972/items/eabbcae5af04e24c2cc0

RVVにおいて，条件分岐を書く場合には，ベクトルマスクレジスタを用いることを突き止め，記述方法を確立した．

https://qiita.com/zacky1972/items/4ca65dfafbd2a1bc6913

RVV向けauto-vectorizationを持つClang 16をUbuntuでビルドする方法を確立した．

https://qiita.com/zacky1972/items/6aa01b8a85e0f86dbafd

2023年7月の情報処理学会組込みシステム研究会にて，「RISC-Vベクタ拡張を用いたCORDICアルゴリズムによる三角関数の実装」を発表予定．概要は次のとおり:

> 三角関数は，自動運転車やVR機器に必要な3D処理や，画像処理で広く用いられるFFTなどで使われている．その典型的な使い方の一つは，複数の角度に対するsin関数とcos関数の値を同時に求める使い方である．本研究では，このような目的に使えるように，sin関数とcos関数を同時に求めるCORDICアルゴリズムを，バージョン1.0のRISC-Vベクタ拡張を用いて，複数同時に求めることができるように実装した．固定小数点数を用いてsin関数のみを求める場合で，エミュレート実行を元にして求める値の数(n)と実行するのにかかる命令数の相関関係を調べたところ，36.932n+406.53となり，相関係数は0.9611であった．このことから，提案手法で三角関数をまとめて計算するサーバープロセスを形成する方式で運用するのが妥当そうであることがわかった．RVV向けAuto-vectorizationをサポートするClang 16で，C言語固定小数点数版をRVV命令の生成を意図したオプションを与えてコンパイルしてアセンブリコードを確認したところ，RVV命令は生成されたが効率が悪かった．現時点ではRVV命令をハンドコーディングすることに意味がありそうである．中尾と武内による三角関数専用コプロセッサを用いた先行研究と比べた時，条件によっては提案手法の方がより高速である可能性がある．

現在，信号処理への応用研究と，独自のRISC-V CPUの設計を行なっている．
 
※ 最後のRISC-V CPUの設計については，RISC-Vではなくなったのですが，DSAの研究開発に昇華しました．これについては，別途，お話しします．

## 市場性について

2023年3月公開の記事 “The Evolving Automotive Experience Made Possible by RISC-V”にて，MIPS CEOが，自動車分野の先進運転システム(ADAS)や車載インフォテインメントにおいて特に，RISC-V採用事例が急速に増え続けていると表明．

https://riscv.org/blog/2023/03/the-evolving-automotive-experience-made-possible-by-risc-v/

SiFive社は2022年末に「RISC-Vの立ち上がりは早く、2024年にはRISC-Vの出荷コア数がArmを上回り、逆転するのではないか」と記者会見で述べていた．

https://eetimes.itmedia.co.jp/ee/articles/2212/28/news053.html

RISC-V AI SoCは、2027年までに73.6％の年平均成長率（CAGR）を維持し、250億個の累積出荷数とSemico が予測　「SIP、SoC、AI、および設計開始のためのRISC-V CPU市場の分析」（CC330-21）より

https://riscv.org/blog/2022/02/semico-researchs-new-report-predicts-there-will-be-25-billion-risc-v-based-ai-socs-by-2027/

https://riscv.or.jp/2022/05/semico2027/

NASAがRISC-Vに基づいて設計されたプロセッサ[「SiFive Intelligence X280」](https://www.sifive.com/cores/intelligence-x280)を次世代高性能宇宙飛行コンピューティング (HPSC: High Performance Spaceflight Computing) のコア CPU として宇宙ミッションに活用することを公表

https://www.sifive.com/press/nasa-selects-sifive-and-makes-risc-v-the-go-to-ecosystem

https://note.com/shinichm/n/n8be45945c218

Intelは同社のFPGA向けRISC-VソフトプロセッサNios Vを持つ

https://www.intel.co.jp/content/www/jp/ja/products/details/fpga/nios-processor/v.html

一方で，IntelはIntel Pathfinder for RISC-Vプログラムを2022年に開始するも，2023年1月末に突然終了．おそらくIntelは，x86_64を売り続けたいものの，RISC-Vの急速な成長には一目置いており，イニシアティブを取りつつ，動向を警戒していると見ることができる．

Googleが2023年にRISC-VをAndroidのプラットフォームとみなすことを表明，実現には数年かかるとの見通し

https://arstechnica.com/gadgets/2023/01/google-announces-official-android-support-for-risc-v/

Appleは2021年にRISC-V関連の求人募集．Apple Siliconに採用される可能性あり．

※ その後の報道で，AppleとArmは2040年以降も続く長期契約を締結したと発表しました．

https://gigazine.net/news/20230906-apple-arm-chip-deal-long-term/

それを踏まえると，Apple SiliconをArmからRISC-Vへ早期に移行する動機に乏しいものと思います．

## 今後の展望(個人的な研究の展望)

この活動を通して，TOPPERSプロジェクト会員のみなさまと技術交流できれば，ありがたいと考えています．

2022年度の特別会員の計画に挙げたように，宇宙機器に搭載するコンピュータシステムを設計・実装する将来構想を持っています．JAXAはTOPPERS/HRMP3カーネルを次世代宇宙機向けマイクロプロセッサに採用するとしているので，このコンピュータシステムにTOPPERS/HRMP3カーネルを搭載して，JAXAや民間企業に提案できればと考えております．

独自のRISC-V CPUを開発する計画も持っています．最初はFPGAで考えています．低消費電力・高性能なCPUを提案できればと考えています．関連する特許も出願予定です．

並列処理に長け，フォールト・トレラントであるプログラミング言語Elixirと，そのIoTフレームワークであるNervesを，TOPPERSカーネルと共存させて統合する研究も進めてまいりたいと思います．

※ この展望は応募時のもので，現在では，前述のように，RISC-V CPUの開発からDSAの開発に発展しています．

## TOPPERS開発者会議2023にて

上記について説明したほか，下記のRISC-V Profile のGitHub レポジトリにあるドキュメントを共有しました．

https://github.com/riscv/riscv-profiles

それを受けて，前述のように，TOPPERS/ASPカーネルのRISC-V実装を参考にしながら，TOPPERS/ASP3カーネルについて，RISC-Vプロファイルに基づいてRISC-V対応をしていく方針を打ち出しました．

## TOPPERS RISC-V WG 提案

TOPPERS開発者会議2023での議論を踏まえて，RISC-V WGの目標案を下記のように提案しました．

### RISC-V WGの短期目標 (2023〜2024年度)

1.	32ビットプロセッサ
    1. 日本国内で入手できるRISC-V 32ビットプロセッサの拡張の状況を調査し，RVM23U32プロファイルが実態に沿っているかを確認し，中期目標を策定する
    2. 現行のOSS版の竹内氏によるRISC-V向けASPカーネルの実装を踏まえて，OSS版のRISC-V向けASP3カーネル整備の中期目標を立案する
2.	64ビットプロセッサ
    1. さまざまな拡張に対応したシミュレーション実行環境を整備する
    2. 命令数カウント命令rdinstret，命令サイクル数rdcycleを使用して，TOPPERSカーネルの性能を仮評価する方法を検討する(おそらくシミュレーション環境だとこれらの2つの命令は同じ結果を返す)

### RISC-V WGの中期目標(2024年度〜2026年度)

1.	32ビットプロセッサ
    1. 1の方針・計画に従って，整備を進める．その際に，ボードや拡張固有の機能を抽象化・標準化し，できるだけ汎用性がある設計とする
    2. 次にHRP3/FMP3のどちらに取り組むかを決める
2.	64ビットプロセッサ
    1. FPUとベクタ拡張のそれぞれについて，コンテキスト・スイッチ時のレジスタ退避・復旧方法についてASP3カーネルに実装し，主要処理の実行命令数・サイクル数を評価する研究を実施する
    2. 次にHRP3/FMP3のどちらに取り組むかを決める


## TOPPERS活用アイデア・アプリケーション開発コンテスト活用アイデア部門金賞受賞にあたってのコメント

このたびは大変栄誉ある賞をありがとうございました．

私事ながら，今まで，指導した学生，関わったプロジェクト等について受賞したことはあったのですが，私個人の名前での受賞は生涯初めてですので，とても嬉しく思っております．

最近になって自動車産業でもRISC-Vの採用が広がりつつあることから，TOPPERSカーネルのRISC-V対応を検討する時期に来ていると考えて，このたび，ワーキンググループの組織化を提案しました．それを受けて，開発者会議にてお時間をいただくことができました．

その議論を踏まえて，標準化されたプロファイルとASPカーネルへのRISC-V実装を参考にしたTOPPERS第3世代カーネルへ順次導入を進めることを含むRISC-Vワーキンググループの短期目標と中期目標の提案に至りました．

またそれとは別に，私が研究を進めています並列プログラミング言語ElixirをTOPPERSカーネルのアプリケーション記述言語として活用することの検討へのご意見や，RISC-Vワーキンググループでの活動との連携についてのご意見をいただけたことを大変嬉しく思います．

今後もRISC-VワーキンググループやElixirを中心に，TOPPERSプロジェクトに貢献していきたいと考えておりますので，ワーキンググループへの参画など，末長くご支援いただけますようお願い申し上げます．


## 次のアクション

今後，2023年12月11日のTOPPERS運営委員会に出席し，RISC-Vワーキンググループの活動方針を改めて提案することとなりました．TOPPERS運営委員会での審議を経て，RISC-Vワーキンググループ発足の運びとなる予定です．

提案書を急ぎ，執筆したいと思います．