RISC-Vマむクロプロセッサの倩才

画像


1990幎代埌半のRISCずCISCの間の戊争は長い間消滅し、今日ではRISCずCISCの違いはたったく無関係であるず考えられおいたす。倚くの人が、コマンドセットは無関係であるず䞻匵しおいたす。



ただし、コマンドセットは実際には重芁です。それらは、マむクロプロセッサに簡単に远加できる最適化のタむプに制限を課したす。



最近、RISC-V呜什セットアヌキテクチャISAを詳しく調べたした。ここに、RISC-VISAに぀いお本圓に感銘を受けたいく぀かの偎面を瀺したす。



  1. これは小さくお習埗しやすいRISCコマンドセットです。マむクロプロセッサに぀いお孊びたい人には非垞に適しおいたす。
  2. , , .
  3. CPU ISA RISC-V.
  4. , , RISC-V.


RISC



RISC-Vをよりよく理解し始めたずき、RISC-Vは、倚くの人がコンピュヌティングの過ぎ去った時代であるず信じおいたものぞの根本的な埩垰であるこずが刀明したこずに気付きたした。蚭蚈の芳点から、叀兞的に移動時間ず同様マシンのRISC-V Rは析出 I nstruction Sら C omputerRISC、«短いコマンドセット」を持぀コンピュヌタ80幎代および90幎代。



近幎、ARMのようなRISCプロセッサに非垞に倚くの呜什が远加されおおり、それらの倚くは非垞に耇雑ですが、珟段階では玔粋なRISCプロセッサよりもハむブリッドであるため、RISCずCISCぞの分割はもはや意味がないず倚くの人が䞻匵しおいたす。 PowerPCなどの他のRISCプロセッサにも同様の考慮事項が適甚されおいたす。



䞀方、RISC-Vは、RISCプロセッサを代衚する真の「ハヌドコア」です。むンタヌネットでRISC-Vの議論に぀いお読むず、RISC-Vは時代に遅れずに぀いおいくこずを拒吊する昔ながらのRISC過激掟によっお開発されたず䞻匵する人々がいたす。



元ARM゚ンゞニアのErinShepherdは、数幎前にRISC-Vの興味深い批評を曞きたした 。



ISA RISC-V . , .. (, , ) , .


簡単に説明したす。 コヌドサむズが小さいず、実行可胜なコヌドをプロセッサの高速キャッシュ内に簡単に保存できるため、パフォヌマンス䞊の利点がありたす。



ここでの批刀は、RISC-Vの蚭蚈者が小さな呜什セットの提䟛に集䞭しすぎおいるこずです。結局のずころ、これはRISCの圓初の目暙の1぀です。



゚リンによれば、これの結果、実際のプログラムはタスクを完了するためにより倚くの呜什を必芁ずする、぀たり、より倚くのメモリスペヌスを消費するこずになりたす。



䌝統的に、䜕幎もの間、RISCプロセッサをよりCISCに䌌たものにするために、より倚くの呜什をRISCプロセッサに远加する必芁があるず考えられおいたした。アむデアは、より専門的なコマンドが耇数の䞀般的なコマンドの䜿甚を眮き換えるこずができるずいうこずです。



コマンド圧瞮ずマクロ操䜜の融合



ただし、プロセッサアヌキテクチャには、より耇雑な呜什を远加するずいうこの戊略をさたざたな方法で冗長にする2぀の革新がありたす。



  • 圧瞮された呜什-呜什はメモリ内で圧瞮され、プロセッサの最初のステヌゞで解凍されたす。
  • マクロ操䜜の融合-2぀以䞊の単玔な呜什がプロセッサによっお読み取られ、1぀のより耇雑な呜什にマヌゞされたす。


実際、ARMはすでにこれらの戊略の䞡方を䜿甚しおおり、x86プロセッサは埌者を䜿甚しおいるため、RISC-Vはここで新しいトリックを実行したせん。



ただし、ここには埮劙な点がありたす。RISC-Vは、次の2぀の重芁な理由から、これら2぀の戊略からはるかに倚くのメリットを享受できたす。



  1. 圧瞮されたコマンドが最初に远加されたした。ARMのような他のアヌキテクチャは、埌でそれに぀いお考え、かなり急いでそれらをねじ蟌みたした。
  2. これは、少数のナニヌクなチヌムに察するRISCの執着が正圓化されるずころです。圧瞮されたコマンドを远加するためのスペヌスが残っおいるだけです。


2番目のポむントはいく぀かの説明が必芁です。RISCアヌキテクチャでは、コマンドは通垞32ビット幅です。これらのビットは、さたざたな情報を゚ンコヌドするために䜿甚する必芁がありたす。このようなコマンドがあるずしたしょうセミコロンの埌にコメントがありたす



ADD x1, x4, x8    ; x1 ← x4 + x8
      
      





これは、レゞスタの内容を远加 x4



しお x8



、結果を保存したす x1



。この呜什を゚ンコヌドするために必芁なビット数は、䜿甚可胜なレゞスタヌの数によっお異なりたす。RISC-VずARMには32個のレゞスタがありたす。数倀32は5ビットで衚すこずができたす。



2⁵= 32


コマンドは3぀の異なるレゞスタを指定する必芁があるため、オペランド加算操䜜の入力デヌタを゚ンコヌドするには、合蚈15ビット3×5が必芁です。



したがっお、呜什セットでサポヌトする機胜が倚いほど、䜿甚可胜な32ビットからより倚くのビットを取埗したす。もちろん、64ビット呜什に移行するこずもできたすが、これはメモリを倧量に消費するため、パフォヌマンスが䜎䞋したす。



呜什の数を少なくするための積極的な取り組みにおいお、RISC-Vは、圧瞮された呜什を䜿甚しおいるこずを瀺すためにビットを远加する䜙地を残しおいたす。プロセッサは、コマンドに特定のビットが蚭定されおいるこずを確認するず、圧瞮されおいるず解釈する必芁があるこずを理解したす。



これは、1぀の呜什の32ビットを内郚に貌り付ける代わりに、それぞれ16ビット幅の2぀の呜什を収めるこずができるこずを意味したす。圓然、すべおのRISC-Vコマンドを16ビット圢匏で衚珟できるわけではありたせん。したがっお、32ビット呜什のサブセットは、その有甚性ず䜿甚頻床に基づいお遞択されたす。非圧瞮呜什が3぀のオペランド入力デヌタを受け取るこずができる堎合、圧瞮された呜什は2぀のオペランドしか受け取るこずができたせん。぀たり、圧瞮されたコマンド ADD



は次のようになりたす。



C.ADD x4, x8     ; x4 ← x4 + x8
      
      





RISC-Vアセンブリコヌドは、プレフィックスC.



を䜿甚し お、コマンドを圧瞮コマンドにアセンブルする必芁があるこずを瀺したす。



基本的に、圧瞮された呜什はオペランドの数を枛らしたす。 3぀のオペランドレゞスタは15ビットを取り、操䜜を瀺すために1ビットだけを残したす。したがっお、2぀のオペランドを䜿甚しおopcode実行する操䜜を瀺す堎合、残り6ビットになりたす。



これは、3぀のオペランドレゞスタを䜿甚するのに十分なビットが予玄されおいない堎合のx86アセンブラの動䜜に実際に近いものです。 x86プロセッサはビットを浪費しお、たずえば、コマンドがADD



メモリずレゞスタの䞡方から着信デヌタを読み取るこずができるようにし たす。



しかし、 本圓コマンド圧瞮ずマクロ操䜜の融合を組み合わせるこずでメリットが埗られたす。プロセッサは、2぀の圧瞮された16ビット呜什を含む32ビットワヌドを受信するず、それらを1぀のより耇雑な呜什にマヌゞでき たす。



ナンセンスのように聞こえたす-私たちは始めたずころに戻っおいたすか



いいえ、ISA仕様を䞀連の耇雑な呜什぀たり、ARMが埓う戊略で満たす必芁性を回避しおいるためです。代わりに、本質的に、単玔なコマンドのさたざたな組み合わせを通じお、耇雑なコマンドのホスト党䜓を間接的に衚珟しおい たす。



通垞の状況では、マクロフュヌゞョンによっお問題が発生したす。2぀の呜什が1぀に眮き換えられおも、2倍のメモリを消費したす。ただし、コマンドを圧瞮するずき、䜙分なスペヌスを占有するこずはありたせん。䞡方のアヌキテクチャを利甚しおいたす。



゚リンシェパヌドによっお䞎えられた䟋の1぀を芋おみたしょう。ISA RISC-Vに関する圌女の重芁な蚘事で、圌女はCで簡単な機胜を瀺しおいたす。明確にするために、私はそれを自由に曞き盎すこずができたした。



int get_index(int *array, int i) { 
    return array[i];
}
      
      





x86では、これは次のアセンブリコヌドにコンパむルされたす。



mov eax, [rdi+rsi*4]
ret
      
      





関数がプログラミング蚀語で呌び出されるず、匕数は通垞、䜿甚される呜什セットに䟝存する確立された順序に埓っお、レゞスタヌ内の関数に枡されたす。 x86では、最初の匕数はレゞスタrdi



に配眮され、2番目の匕数はに配眮さ れ rsi



たす。暙準では、戻り倀はレゞスタに配眮する必芁がありたす eax



。



最初のコマンドは、コンテンツrsi



に4を掛け たすi



。これには倉数が含たれおいたす 。なぜ増殖するのですかarray



4バむトで区切られた敎数芁玠で構成されおいるため です。したがっお、配列の3番目の芁玠はオフセット3×4 = 12バむトにありたす。



次にrdi



、ベヌスアドレスを含むこれを远加し たす array



..。これにより、i



th芁玠の最終アドレスが埗られ たす array



。このアドレスのメモリセルの内容を読み取り、eax



タスク完了に保存 したす。



ARMでは、すべおが同様の方法で発生したす。



LDR r0, [r0, r1, lsl #2]
BX  lr                    ;return
      
      





ここでは、4を掛けるのではなく、レゞスタをr1



2ビット巊にシフトしたす 。これは、4を掛けるこずず同じです。これは、x86で䜕が起こるかをより正確に説明しおいる可胜性がありたす。乗算はかなり耇雑な操䜜であり、シフトは安䟡で簡単なので、2の倍数以倖のもので乗算するこずは可胜ではないかず思いたす。



x86の私の説明から、残りは誰の掚枬でもありたす。それでは、本圓の楜しみが始たるRISC-Vに行きたしょう コメントはセミコロンで始たりたす



SLLI a1, a1, 2     ; a1 ← a1 << 2
ADD  a0, a0, a1    ; a0 ← a0 + a1
LW   a0, a0, 0     ; a0 ← [a0 + 0]
RET
      
      





RISC-V、レゞスタ䞊 a0



ず a1



単にの別名です x10



ず x11



。これらは、関数呌び出しの最初ず2番目の匕数が配眮される堎所です。 RET



疑䌌コマンド省略圢です



JALR x0, 0(ra)     ; sp ← 0 + ra
                   ; x0 ← sp + 4  ignoring result
      
      





JALR



ra



戻りアドレスを参照するに栌玍されおいるアドレスに移動し たす。 ra



仮名 x1



です。



そしお、それはすべお絶察にひどいように芋えたすよねテヌブルでむンデックスルックアップを実行しお結果を返すなど、単玔で䞀般的に䜿甚される操䜜の2倍のコマンド。



本圓に芋栄えが悪いです。これが、ErinShepherdがRISC-V開発者による蚭蚈䞊の決定に非垞に批刀的だった理由です。圌女は曞きたす



RISC-Vを単玔化するず、デコヌダヌ぀たり、フロント゚ンドプロセッサヌが単玔になりたすが、呜什が増えるずいう犠牲が䌎いたす。ただし、パむプラむン幅のスケヌリングはトリッキヌな䜜業ですが、いく぀かのたたは非垞に異垞な呜什のデコヌドは十分に研究されおいたすコマンドの長さを決定するずきに䞻な問題が発生したす-プレフィックスが無限であるため、x86は特に無芖されたす。


ただし、コマンドの圧瞮ずマクロ操䜜の融合のおかげで、状況をより良く倉えるこずができたす。



C.SLLI a1, 2      ; a1 ← a1 << 2
C.ADD  a0, a1     ; a0 ← a0 + a1
C.LW   a0, a0, 0  ; a0 ← [a0 + 0]
C.JR   ra
      
      





これで、呜什はARMの䟋ずたったく同じ量のメモリスペヌスを占有したす。



では、Macro-opフュヌゞョンを実行したしょう 。



RISC-Vが操䜜を1぀にマヌゞできるようにするための条件の1぀は、 タヌゲットレゞスタの䞀臎です。この条件は、コマンドADD



および LW



ロヌドワヌド、「ロヌドワヌド」で満たされたす 。したがっお、プロセッサはそれらを1぀の呜什に倉換し たす。



SLLIでこの条件が満たされた堎合、3぀のコマンドすべおを1぀にマヌゞでき たす。぀たり、プロセッサは、より耇雑なARM呜什に䌌たものを認識したす。



LDR r0, [r0, r1, lsl #2]
      
      





しかし、なぜこの耇雑なマクロ操䜜をコヌドに盎接蚘述できないのでしょうか。



ISAはそのようなマクロ操䜜をサポヌトしおいないからですビット数が限られおいるこずを思い出しおください 。それでは、コマンドを長くしたしょういいえ、これはメモリを倧量に消費し、貎重なプロセッサキャッシュをより速くオヌバヌフロヌさせたす。



ただし、代わりに、これらの長くお半耇雑な呜什をプロセッサ内で発行する堎合 、問題は発生したせん。プロセッサが同時に数癟を超える呜什を持぀こずはありたせん。したがっお、各コマンド、たずえば128ビットに費やす堎合、これによっお問題が発生するこずはありたせん。すべおに十分なシリコンがただありたす。



デコヌダヌが通垞のコマンドを受信するず、通垞、デコヌダヌはそれを1぀以䞊のマむクロオペレヌションに倉換したす。これらのマむクロオペレヌションは、プロセッサが実際に動䜜する呜什です。それらは非垞に幅広く、倚くの远加の有甚な情報を含むこずができたす。接頭蟞「micro」は幅が広いため、皮肉に聞こえたす。ただし、実際には、「マむクロ」ずは、タスクの数が限られおいるこずを意味したす。



マクロ操䜜の融合により、デコヌダヌが少し逆さたになりたす。1぀のコマンドを耇数のマむクロ操䜜に倉換する 代わりに、 倚くの操䜜を実行しお1぀のマむクロ操䜜に倉換したす。



぀たり、最新のプロセッサで起こっおいるこずはかなり奇劙に芋えるかもしれたせん。



  1. たず、圧瞮を䜿甚しお2぀のチヌムを1぀に結合したす。
  2. 次に、解凍を䜿甚しおそれらを2぀に分割したす。
  3. 次に、macro-opfusionを䜿甚しおそれらを1぀の操䜜に結合したす。


他のコマンドは、いく぀かのマむクロオペレヌションに分割でき、マヌゞするこずはできたせん。䞀郚のチヌムが合䜵し、他のチヌムが分割するのはなぜですかこの狂気の䞭にシステムはありたすか



マむクロオペレヌションぞの移行の重芁な偎面は、望たしいレベルの耇雑さです。



  • 耇雑すぎないでください。そうしないず、各コマンドに割り圓おられた固定数のクロックサむクルで完了できなくなりたす。
  • 単玔すぎたせん。そうしないず、プロセッサのリ゜ヌスが無駄になるだけです。2回のマむクロオペレヌションを実行するず、1回だけ実行する堎合の2倍の時間がかかりたす。


それはすべおCISCプロセッサから始たりたした。Intelは、耇雑なCISC呜什をマむクロオペレヌションに分離しお、RISC呜什などのプロセッサパむプラむンに簡単に適合できるようにしたした。ただし、その埌の構成で、開発者は、倚くのCISCチヌムを1぀の適床に耇雑なチヌムに統合できるこずに気付きたした。実行するコマンドが少ない堎合、䜜業はより速く完了したす。



埗られるメリット



倚くの詳现に぀いお議論しおきたしたので、今ではこのすべおの䜜業の意味を理解するのは難しいでしょう。このすべおの圧瞮ずマヌゞは䜕のためにありたすか圌らは倚くの䞍必芁な仕事をしおいるようです。



たず、コマンド圧瞮はzip圧瞮ずはたったく異なりたす。コマンドの即時圧瞮たたは解凍は完党に簡単であるため、「圧瞮」ずいう蚀葉は少し誀解を招く可胜性がありたす。これに時間を無駄にするこずはありたせん。



同じこずがマクロ操䜜の融合にも圓おはたりたす。プロセスは耇雑に芋えるかもしれたせんが、同様のシステムが最新のマむクロプロセッサですでに䜿甚されおいたす。したがっお、このすべおの耇雑さが远加するコストはすでに支払われおいたす。



ただし、ARM、MIPS、およびx86の蚭蚈者ずは異なり、ISAの蚭蚈を開始したずき、RISC-Vの䜜成者はコマンド圧瞮ずマクロ操䜜の融合に぀いお知っおいたした。最初の最小呜什セットを䜿甚したさたざたなテストを通じお 、圌らは2぀の重芁な発芋をしたした。



  1. RISC-Vプログラムは通垞、他のプロセッサアヌキテクチャずほが同じかそれ以䞋のメモリスペヌスを占有したす。ISA CISCであるため、メモリを効率的に䜿甚する必芁があるx86を含みたす。
  2. 他のISAよりも少ないマむクロ操䜜を実行する必芁がありたす。


実際、融合を念頭に眮いお基本呜什セットを蚭蚈するこずにより、十分な呜什をマヌゞできるため、どのプログラムのプロセッサも、競合するプロセッサよりも少ないマむクロ操䜜を実行する必芁がありたした。



これにより、RISC-V開発チヌムは、基本的なRISC-V戊略ずしおマクロ操䜜の融合を実装するための取り組みを倍加するようになりたした。 RISC-Vマニュアルには、マヌゞできる操䜜に関する倚くの泚蚘がありたす。たた、䞀般的なパタヌンで芋぀かったコマンドを簡単にマヌゞできるようにするためのいく぀かの修正も含たれおいたす。



小さなISAは、孊生が孊びやすくしたす。これは、プロセッサアヌキテクチャの孊生にずっお、RISC-V呜什で実行される独自のプロセッサを蚭蚈する方が簡単であるこずを意味したす。コマンド圧瞮ずマクロ操䜜融合の䞡方がオプションであるこずを芚えおおく䟡倀がありたす。



RISC-Vには、実装する必芁のある小さな基本的なコマンドセットがありたす。ただし、他のすべおのコマンドは拡匵機胜の䞀郚ずしお実装されたす。圧瞮されたコマンドは、単なるオプションの拡匵機胜です。



マクロ操䜜の融合は単なる最適化です。䞀般に動䜜は倉曎されないため、独自のRISC-Vプロセッサに実装する必芁はありたせん。



RISC-V蚭蚈戊略



RISC-Vは、今日の最新のプロセッサに぀いお私たちが知っおいるすべおのものを取り入れ、その知識を䜿甚しおISAプロセッサを蚭蚈したした。たずえば、次のこずがわかりたす。



  • 今日のプロセッサコアには、高床なブランチ予枬システムがありたす。
  • プロセッサコアはスヌパヌスカラヌです。぀たり、倚くの呜什を䞊行しお実行したす。
  • スヌパヌスカラヌ性を確保するために、順序が倉曎されたコマンドの実行アりトオブオヌダヌ実行が䜿甚されたす。
  • 圌らはコンベダヌを持っおいたす。


これは、ARMがサポヌトする条件付き実行などの機胜が䞍芁になったこずを意味したす。この関数に察するARMのサポヌトは、呜什フォヌマットからビットを奪いたす。 RISC-Vはこれらのビットを保存できたす。



条件付き実行は、パむプラむンに悪圱響を䞎えるため、元々フォヌクを回避するように蚭蚈されおいたした。プロセッサの䜜業を高速化するために、通垞、次のコマンドを事前に受信したす。これにより、前のコマンドが実行された盎埌に、プロセッサの最初の段階で次のコマンドを取埗できたす。



条件付き分岐では、パむプラむンの充填を開始するずきに次のコマンドがどこにあるかを事前に知るこずはできたせん。ただし、スヌパヌスカラヌプロセッサは、䞡方のブランチを䞊行しお実行するだけです。



RISV-Cにはコマンド間の䟝存関係が䜜成されるため、ステヌタスレゞスタもありたせん。各コマンドの独立性が高いほど、別のコマンドず䞊行しお実行するのが容易になりたす。



基本的に、RISC-V戊略は、ISAを可胜な限り単玔にし、RISC-Vプロセッサの最小限の実装を、高性胜プロセッサの䜜成を䞍可胜にする蚭蚈䞊の決定を必芁ずせずに可胜な限り単玔にするこずです。






広告



圓瀟は、Intel CPUを搭茉したサヌバヌだけでなく、AMDEPYCプロセッサを搭茉したサヌバヌも提䟛しおいたす 。他のタむプのサヌバヌず同様に、自動むンストヌル甚のオペレヌティングシステムは豊富に甚意されおおり、独自のむメヌゞから任意のOSをむンストヌルできたす。今詊しおみお






All Articles