RISC-Vは、研究者が始めた「オープンソース」のISAです。ARMやMIPS、x86などに比べて、RISC-Vはオープンな規格であり、誰でも自由に実装できるということを意味します。それ以上に、ややオープンな開発モデルを持っています。これはRISC-Vの進化を管理するために設立された非営利団体「RISC-V Foundation」によって管理されており、Google、Qualcomm、Microsemi、Nvidia、NXP、その他様々な企業がメンバーとして参加しています。

RISC-Vのもう一つの側面は、他のプロプライエタリな命令セットとは異なり、カスタム拡張を可能にし、実際に奨励している点にあります。ARMプロセッサを構築するためにライセンスを購入した場合、BroadcomやQualcomm、Samsungのような企業が持っているようなアーキテクチャライセンスを取得しても、ARM命令セットの独自の実装を行うことができますが、独自のカスタム命令を追加することはできません。これは最終的にはARMが顧客からのフィードバックを得て、将来のISAのリビジョンで新しい命令を追加することになりますが、個々のライセンシーが追加できるものではありません。

もちろん、オフコア用の密結合アクセラレータのためにアクセラレータを取得する方法は他にもありますが、命令セット自体をカスタムで拡張することは制限されています。前述したように、RISC-Vにはオープンな開発プロセスがあります。RISC-Vファンデーションのメンバーでないと開発の議論に参加できないところもあります。これは比較的低コストで、企業の場合は最低でも年間5,000ドル程度、アクティブなオープンソース開発者の場合は無料、それ以外の場合は個人で100ドル程度で参加できます。

RISC-Vの命令セットアーキテクチャ自体については、実際のところ、あまり目新しいものではありません。特に奇抜で面白い設計決定をしているわけではありません。64ビットと32ビットのISA、RISC ISAは何十年も前から存在しており、それらをどのように構築するかについては膨大な知識があります。

RISC-Vの主な目的はスケーラビリティです。RISC-Vは、高性能コンピューティングやラックスケールコンピューティング、MMUを持たない組み込みデバイス、個々のマイクロコントローラよりも小さいユースケースに至るまでスケールアップできるISAを目指しています。これは実際には現実的な問題であり、当初AMDのような企業がRISC-Vに惹かれていました。初期の RISC-V開発者会議で、AMDの誰かが手を挙げて、彼らが興味を持った理由は、AMDのプロセッサを出荷するときに、最近のプロセッサには15の異なるISAが搭載されていたからだと言ったと言われます。

RISC-Vの現状

RISC-Vは、公開から約4年が経過しました。RISC-Vは、2010年にカリフォルニア大学バークレー校のPar Labプロジェクトとして開始されました。これは、シンプルで効率的で拡張可能で、他のユーザーとの共有に制約のないISAを開発することをその目的としていました。そのため、Krste Asanovic(SiFiveの創設者)、Andrew Waterman、Yunsup Lee、およびDavid PattersonがRISC-Vを開発しました。彼らは2011年に最初のチップを製造し、仕様をオープンソースとして公開、商業製品にも利用しやすいBSDライセンス(オープンソースソフトウェアに適用されるライセンス体系の一種で、カリフォルニア大学バークリー校で生まれたBSD系UNIXのライセンスのために成立した方式)のもとで誰でも自由に使えるようにしました。試行錯誤の末、GitHubで公開されています。

David Patterson. Photo by Berkeley Engineering / Youtube

RISC-Vのオリジナル開発者はその後VCをバックにしたスタートアップSiFiveを輩出し、RISC-Vのエコシステムで多くの仕事をしてきたが、それ以外にもコアを生産したり、その周りのツールを生産したりしているベンダーが多数存在しています。

コンパイラ側では、GCCのサポートがアップストリームになっています。前述したように、私は主にClangをサポートするLLVMのためのRISC-Vバックエンドの作業を推進しています。サポートが必要なRISC-Vの大部分のバリアントについては、そのサポートがアップストリームにあり、活発な開発が行われています。Glibcはアップストリームで、Muslはダウンストリームのポートを持っていて、すぐにアップストリームになることを期待しています。また、Goのサポートもありますが、しばらくの間停滞していましたが、今では少しずつ回復してきていると思います。

RISC-Vコアの実際のVerilog実装を修正できるのは素晴らしいことですが、より高いレベルのソフトウェア表現を修正することで、より生産性の高い開発を始めることができます。Qemu、gem5、そしてRISC-Vリファレンスソフトウェアモデルの事実上のリファレンス実装となっているのは、UC Berkeley由来のspikeです。また、QEMUやFFMPEGで有名なFabrice Bellardによって書かれたTinyEMUもあります。

利用可能なハードウェアの面では、SiFiveはLinux K4側の開発ボードを製造しています。マイコンクラスの開発ボードもありますし、中国メーカーのKendryteボードもあります。最近では、NXP がオープンな ISA の取り組みを開始し、PULPマイクロコントローラを搭載した開発ボードを提供しています。

オープンソースの実装としては、UC バークレーと SiFiveがサポートしているRocketとチューリッヒ工科大学の PULP があります。これは今では様々な呼び方が含まれていますが、マイクロコントローラ側ではもちろんのこと、Linuxが可能な側でも、Arianeと呼ばれるデザインがあります。

オペレーティングシステム側では、少なくとも FreeRTOS、Zephyr、seL4、興味深いことに、Tock の初期の作業がいくつかサポートされています。TockはRustを使って実装された興味深いRTOSで、Rust RISC-V LLVMツールチェーンをベースにRISC-Vをターゲットにした初期の作業が行われています。Rustのメモリの安全性をうまく利用し、RTOSにアプリケーションをロードするモデルを持っていますが、通常は1つのバイナリにコンパイルされ、コンパイル時に修正されます。

LinuxとFreeBSDのサポートはアップストリームで、よく開発されています。また、より実験的な面では、プラン9を現代的に再構築したHarveyOSや、HelenOSの移植版もあります。先日、FOSDEMでHelenOSの作業についての話がありました。一連のブートローダーが用意されています。bblとOpenSBI については、RISC-Vコミュニティの興味深い話題に触れているので、もう少し後ほどお話したいと思います。また、特にDebianとFedoraでは活発な活動が続いています。

両方のディストリビューションのLinuxベースのシステムの大部分がコンパイルされ、動作しています。librsvg のようなライブラリは Rust で書き換えられており、Rust は現代の Linux システムをコンパイルする上でかなり重要な依存関係になっているので、私はある意味 LLVM 側のブロッカーです。どちらの場合も、librsvgがRustに移植される前の古いバージョンのlibrsvgを使っていて、LinuxバイナリのアップストリームのLLVMサポートを待っている間だ。

RISC-Vの良い点

RISC-Vの良い点の一つは、x86コアやARMコアを変更した場合にどのように見えるかを推定してシミュレーションを行うのではなく、高品質でオープンソースのRISC-Vの実装を変更することで、より良い評価や既存の研究との比較を行うことができるという点です。

UC BerkeleyからスピンアウトしたSiFiveはこの分野で膨大な量の仕事をしてきました。彼らの目標は、最終的には新しいシリコンの開発コストを削減することで、新しい設計のスタートアップのコストを削減することです。

その一例として、RISC-Vにダイレクトセグメントのサポートを追加したことがあります。これはページベースの仮想メモリの最適化と呼ばれることがあります。この最適化はページベースの仮想メモリを使わず、プロセスの仮想アドレス空間の一部を直接連続する物理メモリにマッピングすることでTLBを回避するというものです。これについては、2013年のISCAで発表された論文があります。この論文では、大きなページや巨大なページがあっても、なぜそれが面白いのかについて、より詳細に説明されています。要するに、整列とサイズの面ではるかに多くの柔軟性を得ることができるということです。

最終的には、ハードウェア記述言語Chiselで実装されたRISC-Vのデザインに50行の修正を加え、Linuxカーネルに400行の修正を加えたもので、比較的管理しやすい作業でした。Rocketは先ほどお話したRISC-Vデザインの1つで、UC Berkeleyでスタートし、現在はSiFiveがサポートしていますが、ハードウェア記述言語Chiselで実装されています。これは、より新しくて斬新なハードウェア記述言語の一種で、Scalaの組み込みドメイン固有の言語として実装されています。

ソフトウェア開発者がより利用しやすくなることが期待されています。その目的のどこに成功しているのか、他の斬新なHDLが成功しているのかは人によって見解が分かれるところです。正直に言うと、lowRISCでは少し手を引いて、システムVerilogのような伝統的なハードウェア記述言語に力を入れています。

Become a Patron!

Image by RISC-V foundation via Youtube