縮小命令セットアーキテクチャ(RISC)は、命令の数を減らしてパフォーマンスを向上させることを目的としています。このアプローチの唯一の欠点は、コンパイラが「よりスマート」でなければならないことです。
「コンパイラはもっと賢くなければならない」と言ったとき、私の講師はどういう意味ですか、そしてなぜそうなのですか?
RISCは、正直に言うと、「縮小命令セットの複雑さ」の略です。命令の数は必ずしも削減されるわけではありませんが、実行に必要なマシンサイクルとゲートの数の点で、各命令は単純です(またはマイクロコードストア)それを実装することに専念します。
理論(少なくとも部分的に実現されている)は、制御ロジックの量を減らすことにより、レジスタとデータパスに使用できるチップスペースが増えるというものです。したがって、RISCマシンには通常、CISCマシンの2〜4倍のレジスタがあります。
これにより、コンパイラは、「スケジューリング」操作(シーケンス処理)を含む、省略された制御ロジックの作業を実行できるようになります。たとえば、2つの追加を連続して実行するのではなく、追加してからシフト(および異なるレジスタ)なので、加算器とシフターの両方が最適に利用されます。また、コンパイラはレジスタセットを管理して、レジスタへの出入りを最適化し、ストレージアクセスを最小限に抑える必要があります。さらに、コンパイラは、奇妙な命令(「左にシフトしてリテラルでマスクする」など)を最大限に活用する方法を知っている必要があります。これらには通常、比較的強力な(おそらく奇妙な)シナリオがあるためです。
その結果、優れたRISCコンパイラによって生成された命令を解読することは事実上不可能です。命令セットをよく知っていても、複雑なシフトおよびマスク操作が常に行われていなくても、30分前の値がまだレジスタ12にあることを理解することはせいぜい困難です。
(私が何について話しているのかわからないと思われる人のために、私は70年代初頭にIBM 801でRISCに最初に関与し、GeorgeRadinとMartyHopkinsとファーストネームで関わりました。 。)
RISC CPUには命令が少ないため、単一の高レベルステートメントが単一の機械語オペコードに適切に変換される可能性は低くなります。
RISCCPUの同義語は「ロードストアアーキテクチャ」です。基本的に、実際に機能するRISC命令は、通常、レジスタでのみ機能することを意味します。 RAMに格納されている値を処理する場合は、明示的なLOAD命令を発行する必要がありますが、x86のようなCISC CPUには、それを自動的に実行する命令があります。 RISC CPUには、これまでx86よりも多くのレジスタがありました。適切なコードを使用すると、使用可能なレジスタを適切に管理して、不要なメモリアクセスを回避できます。つまり、コンパイラはそれを考慮する必要があります。
もう1つのことは、RISC CPUは通常、リンケージに必要な最小限の「インフラストラクチャ」しか提供しないということです。
たとえば、x86 CPUには「スタック」の概念があり、値をプッシュして、後で値を「ポップ」することができます(Push
およびPOP
命令があります)。 CALL
命令もあります-スタック上の現在の命令ポインタをプッシュしてから、宛先アドレスにジャンプします-通常はサブルーチンまたは関数です。その後、RET
命令を発行して、保存された命令ポインタをポップし、元の関数から再開できます。サブルーチンのネストは便利で、Push
とPOP
を使用して、サブルーチンのパラメーターを簡単に配置できます。
たとえば、MIPSでは、「ジャンプとリンク」のjal
だけがあります。これは、現在の命令ポインタをレジスタに配置してから、そのアドレスにジャンプします。スタックやx86CALL
命令のようなことをしたい場合は、手動で行う必要があります。これには、コンパイラからのより多くのインテリジェンスが必要です。
CISC(複雑な命令セットコンピューティング)プロセッサは、RISC(縮小命令セットコンピューティング)プロセッサよりも幅広い命令を利用できます。
CISCでの乗算の例は、MUL 1:3、4:2(1:3と2:4を乗算)です。このコマンドは、レジスタの位置1:3の値をロードし、4:2の値をロードし、それらを乗算して1:3に格納します。
RISC CPUは、次のことを行う必要があります。
... 4RISC操作から1CISC操作。
RISCは、最も単純な乗算計算を実行するためにさらに多くの操作を必要とするため、ビデオレンダリングやゲームなどにどれだけ多くの作業が必要か想像してみてください。
これを念頭に置いて、プログラマーが入力したコードからソフトウェアを構築するコンパイラーは、RISCアーキテクチャーのコードや複雑なコマンドの複雑な部分を単純化する方法を理解できるように「スマート」である必要があります。
これが理にかなっていることを願っていますさらに読むために、それは一見の価値があるかもしれません: http://www.engineersgarage.com/articles/risc-and-cisc-architecture?page=5