プログラミング
RISC-V:彼らはもっとよく知っているべきだった
RISC-V: They should have known better (dmitry.gr)
要約
この記事は、RISC-Vアーキテクチャが、特に低コストのマイクロコントローラー分野において、その設計上の欠陥により競合他社に劣っていると主張しています。特に、割り込み処理のオーバーヘッドが大きく、コード密度も期待外れであり、標準化された拡張機能の不足がさらなる断片化を招いていると批判しています。また、圧縮命令セットの設計も不十分で、実用性に欠けると指摘しています。
全文翻訳
Dmitry.GR/ Thoughts/ RV RISC-V:彼らはもっとよく知っているべきだった 目次 すべての人にとってのすべて オプションの欠如明白な部分の欠如ばかげたエンコーディング主張される修正私たちはどうしてここにたどり着き、どこへ向かうのか?これはRISC-Vが破滅したことを意味するのか?コメント... 私はしばしば、RISC-Vに対する私の嫌悪感を説明するように求められ、断片的に説明することがよくあります。反応はしばしば「あなたはそれがすべて持つ輝きを理解していないだけだ」という形をとりますが、それはもちろん、まったく議論になりません。N回目に説明を求められた後、私はそれを一箇所にまとめて、次回尋ねられたときに単にリンクできるようにすることにしました。さらに、誰かがもし、首尾一貫した反論を形成したいのであれば、このテキストを参照として、私のポイントを明確かつ詳細に参照できるでしょう。ここに述べられているすべての意見は私の個人的なものであり、私の雇用主、いかなる神、または私の家主の見解を表すものではありません。私の猫たちは一部同意し、一部反対し、後で彼らの意見を発表するでしょう。すべての人にとってのすべて RISC-Vは最終的に、非常に安価な使い捨てマイクロコントローラーの分野を支配するでしょう。そのISA設計のためではなく、それにもかかわらずです。最初で最も理解しやすい問題は、すべてのユースケースに最適であることはできないということです。RISC-Vのファンは、RISC-Vがすぐにすべてのスーパーコンピューターを所有し、同時にすべての小さなマイクロコントローラーのユースケース、そしてその間のすべてのものを所有すると信じさせようとします。これは不可能であり、どのISAにとっても同様に不可能でしょう。簡単に言えば、ハイエンドCPUが必要とするものは、小さなコスト削減マイクロコントローラーコアが必要とするものとは正反対です。設計上の選択はマイクロアーキテクチャ的なものだけでなく、実際(そして必然的に)CPUアーキテクチャ自体に影響を与えます。参考までに、RISC-Vは最終的に、非常に安価な使い捨てマイクロコントローラーの分野を支配すると100%確信しています。そのISA設計のためではなく、それにもかかわらずです。それは、8051を改善することによってその役割を引き継ぐでしょう――そのバーは非常に低く、単なるスピードバンプにすぎません。安価なマイクロコントローラーコアには何が必要でしょうか?それらが何に使われているかを調べてみましょう。典型的なユースケースは、MP3プレーヤー、SDカード、USBスティックなどのより大きなチップ内のハードウェアブロックとインターフェイスし、それらを迅速に再構成することです。ハードな作業はカスタムIPによって行われ、CPUコアはレジスタを一時的に操作したり、何かを設定したりするためだけに存在します。この場合、重要なのは割り込みレイテンシ(低いほど良い)とサイズ(小さいほど良い)です。通常、そのようなコアで多くの数学演算が行われるとは期待しません。大量生産されたコスト削減デバイスでは、コードは実際のROM(更新不可の場合)またはRAM(更新可能の場合)から実行されます。NORフラッシュは高価すぎ、本当に大量生産されるものにはオプションではありません。ROMから実行する場合、ROMはあまりコンパクトではないため、コードサイズが重要になります。RAMから実行する場合、SRAMもダイ上でかなりのスペースを占めるため、コードサイズが重要になります。したがって、これらのユースケースではコード密度が重要です。多くの数学演算は期待されないため、ハードウェア除算器(あるいは乗算器)などは破棄できます。このような使い捨ての状況では、特権分離も不要です――外部の信頼できないコードがフェッチされることは決して期待されません。「しかし」と言うかもしれません、「あなたはちょうどRV32IC(またはRV32EC)を説明しただけだ!」したがって、基本的にそのような組み込みコアが持つ唯一の目的に対して、RISC-Vは主要な既存の競合他社よりも著しく劣っています。実際、それはかなり近いですが、実際には割り込みを処理するための仕様準拠の方法がないため、一時的な場所でレジスタを保管して残りを保管できるようにするために、RV32I_Zicsrが必要になります。MIPSはこれのために2つのケグ($k0と$k1)を予約しました。それらなしでは、RISC-Vはmscratch/sscratchを必要とします。Zicsrなしでは、それらを持たず、物事を行うための奇妙な他の方法に固執することになります。そして、私たちは8051の領域に戻ります――それは物事を奇妙に行うことに特化しています。小さな組み込みコアはアウトオブオーダーモンスターではありません。それらから1サイクルあたり1つの命令しか得られない場合、あなたは幸運だと考えるでしょう。これを考慮して、割り込みハンドラーがABI必須レジスタをスタッシュしてCで書かれたハンドラーを呼び出すのに必要なサイクル数を楽観的に数えましょう。まず、CSRRWを使用してレジスタ(説明のためにt0としましょう)をスタッシュし、残りをスタッシュできる場所の基本アドレスを取得します。次に、ra、sp、gp、tp、t1-t6、およびa0-a7をスタッシュする必要があります。その後、別のCSSRWを使用して古いt0の値を取り戻し、それをスタッシュする必要があります。これは少なくとも21サイクルです。出る途中、数学は似ています:スタッシュされたレジスタのアドレスを読み取るための1つのCSRRWと、それらをロードするための19回のロード。これは少なくとも20サイクルです。しかし、それだけではありません。これはアセンブリで行う必要があるため、CハンドラーへのJALとそこからのRETを実際に考慮する必要があります。それぞれ2サイクルと仮定しましょう。したがって、Cハンドラーで作業が行われる前に、各割り込みには少なくとも44サイクルのコストがかかります。Cortex-M0(競合する安価な32ビットコア)は、15サイクルで割り込みエントリ、12サイクルでエグジットを行い、ABIで破壊されるレジスタをハードウェアでプッシュするため、ハンドラーは直接Cで書かれます。したがって、各割り込みのコストはわずか27サイクルです。うーん...それはずっと速いですね!RV32Eを考慮していないのは不公平だと抗議するかもしれません。レジスタの数が半分であるため、最初のプッシュを6サイクル速く、ポップも速く行うことができ、割り込みオーバーヘッドは38サイクルになります。それでもCortex-M0より3分の1以上多いです。うーん...したがって、基本的にそのような組み込みコアが持つ唯一の目的に対して、RISC-Vは主要な既存の競合他社よりも著しく劣っています。CLICやさまざまな独自の「高速IRQ」/自動スタッキング拡張機能の存在は、さらなる非難です。ベースISAは、ベンダーに10年前のCortex-M0に追いつくために非標準のシリコンを発明することを強制します。それは、さらに「標準」(もしそう呼べるなら)を断片化させます。おかしいことに、圧縮拡張機能を使用しても、典型的なIRQプロローグは、Cortex-M0のゼロバイトハードウェアパスよりも大きく、遅いです。さて、圧縮命令についてです。それらを詳細に見てみましょう。それらはひどく設計されています。レジスタにバイトをオフセット付きで格納したいとします。16ビット命令はどの範囲のオフセットをエンコードできますか?ゼロから3まで。33ではなく、303でもありません。3!まあ、半分ワードを格納するのには良いかもしれませんか?いいえ...ゼロまたは2。一体?ワードを格納する場合、ゼロから124バイトという妥当な範囲が得られますが、他のものについてはどうなっているのですか?さらに悪いことに、半分ワードを格納する命令は、バイトを格納する命令と類似していますが、オフセットのオプションが少ないのはなぜですか?なぜ?さて、バイトを格納するビットの1つはオフセットのためにゼロにハードワイヤードされています...それは範囲を少なくとも6まで拡張するために使用できたはずですが、そうしません!比較すると、Cortex-M0は、バイト用にゼロから31、半分ワード用にゼロから62、ワード用にゼロから124までのオフセットを使用することを喜んで許可します――明らかにこれははるかに多くのユースケースをカバーしています。それで何が起こったのですか?本当に、私は知りませんが、正当化するのは確かに困難です。典型的な決まり文句は、これらのより大きなオフセットにはフルレングス命令を使用することです。確かに、しかし密度は犠牲になります――RISC-VファンがC拡張機能を誇示していたときに最近自慢していたまさにその密度です。しかし待ってください、まだあります。バイトと半分ワードを格納するそれらの命令は、C拡張機能にさえ含まれていません。それらはZcbと呼ばれる別の拡張機能に含まれているため、たとえそれらの貧弱な範囲があなたの状況で使用するのに十分であったとしても、それらにアクセスできない可能性があります。後で「拡張機能」について説明します...サーバーコアには何が必要でしょうか?生の処理能力。ここでは、シリコンが多かれ少なかれ無料であるアウトオブオーダーコアの世界にいます。コアのサイズがどれほど大きくても、キャッシュはそのサイズをはるかにしのぐからです。最新のアウトオブオーダーコアは、一度に8つ、時には10個の命令をデコードし、それらを複数のポートに並行して発行します。多くの最新コアは、同じサイクルで複数の分岐を処理できます(少し考えてみてください、それを理解してください...はい)。コード密度は実際にはそれほど...