質問

コンピューターシステムの講義では、MIPSプロセッサを紹介しました。それは学期の過程で(再)開発され、実際には非常に簡単に理解できました。それはaを使用します RISC デザインは、その基本コマンドが定期的にエンコードされており、ワイヤーをシンプルに保つためにはほとんどありません。

それは言及されました CISC 別の哲学に従います。私は簡単に見ました x86命令セット そしてショックを受けました。誰もが非常に複雑なコマンドセットを使用するプロセッサをどのように構築したいかを画像化できません!

ですから、プロセッサ市場の大部分がCISCアーキテクチャを使用している理由は良い議論が必要だと思います。彼らは何ですか?

役に立ちましたか?

解決

一般的な歴史的傾向があります。

昔は、思い出は小さかったので、プログラムは小さくなりました。また、コンパイラはあまり賢くなく、多くのプログラムがアセンブラーで書かれていたため、少数の指示を使用してプログラムを作成できることは良いことと考えられていました。命令パイプラインはシンプルで、プロセッサはそれを実行するために一度に1つの命令をつかみました。とにかく、プロセッサ内の機械は非常に複雑でした。デコード命令は、大きな負担であるとは感じられませんでした。

1970年代、CPUとコンパイラデザイナーは、このような複雑な指示を持つことは結局それほど役に立たないことに気付きました。これらの指示が非常に効率的であるプロセッサを設計することは困難であり、これらの指示を本当に活用したコンパイラを設計することは困難でした。チップ領域とコンパイラの複雑さは、より汎用レジスタなどのより一般的な追求に適していました。 RISCに関するウィキペディアの記事 これをより詳細に説明します。

ミップ 究極のRISCアーキテクチャであり、それが頻繁に教えられる理由です。

x86 家族は少し違っています。もともとは、非常に小さなメモリ(大きな指示の余地がない)を持つシステム向けのCISCアーキテクチャであり、多くの連続したバージョンを受けています。今日のX86命令セットは、CISCであるために複雑であるだけでなく、おそらくX86_64プロセッサを備えたペンティウムを備えた80386の8088であるためです。

今日の世界では、RISCとCISCはもはや彼らが一度だったかもしれない白黒の区別ではなくなりました。ほとんどのCPUアーキテクチャは、さまざまな色合いの灰色に進化しています。

RISC側では、一部の最新のMIPSバリアントが乗算と分割の指示を追加し、不均一なエンコードを備えています。 プロセッサはより複雑になりました:それらの多くは16ビット命令セットを持っています 親指 言うまでもなく、「オリジナル」の32ビットの指示に加えて ジャゼル CPUでJVM命令を実行する。最新のアームプロセッサもあります シムド マルチメディアアプリケーションの手順:結局のところ、いくつかの複雑な指示は支払います。

CISC側では、最近のすべてのプロセッサが内部にある程度RISCがあります。彼らは持っている マイクロコード これらすべての複雑なマクロ命令を定義します。プロセッサの完全な複雑さにより、各モデルの設計は、RISCデザインでも、多数のコンポーネントを使用して、パイプラインと予測の実行などを伴うものでも数年かかります。

では、なぜ最速のプロセッサはCISCを外に残るのでしょうか?その一部は、X86(32ビットおよび64ビット)ファミリーの場合、歴史的な互換性です。しかし、それは全体ではありません。 2000年代初頭、Intelはプッシュを試みました イタニウム 建築。イタニウムは複雑な指示の極端なケースです(ただし、実際にはCISCではありません:そのデザインは吹き替えられています すごい)。それは、順序で指示を実行するという昔ながらのアイデアを廃止します。すべての命令は、次の障壁まで並行して実行されます。イタニウムが服用しなかった理由の1つは、インテルであろうと他の場所であろうと、まともなコンパイラを書くことができないということです。今では、x86_64のような古き良き時代のシーケンシャルプロセッサです。それは私たちが理解していることです。

他のヒント

X86命令セットは、ちょっとした特別なケースです。 Motorolaの68KとDECのVAXは、CISCのやや優れた例だと思います。多くの組み立て言語コードの時代に、人々は非常に定期的で非常に包括的なISAの方が良いと考えていました。私は彼らがアセンブリコードと人々が考えた方法の違いを呼んだと思います。セマンティックギャップ「。理論的には、あなたが思った方法に一致する命令セットが必要でした。

CISCのもう1つの大きな設計ドライバーは「直交」のようです。すべての命令は、すべてのアドレス指定モード(レジスタ、絶対アドレス、相対オフセットなど)で機能します。分散コンピューティング環境(DCE)とCorbaで、API設計に正統派のボギーマンが表示されるのを見ることができます。そのアイデアは、指導セットデザインに限定されません。

CISCの理由の1つは、指示のために密集したエンコードを持つことでした(メモリは 高価な)。 RISCのアイデア全体は、常に同じサイズの指示を取得することでCPUをスピードアップすることでした(複雑で遅い「命令サイズ」ステップはありません)、簡単なことをしてもらいます(したがって、何をすべきかを把握するのは速いです) 。記憶は安かった。他のもののためにCPU上のこの解放された回路領域(より多くのレジスタ、より多くの処理単位があるため、それらが独立している場合は並行していくつかの指示を行うことができます)。 CPUはRAMよりもはるかに遅かったので、これは報われました。しかし、CPUはより速くなりました(そして並行してより多くのことをしましたが、...)RAMはより速くなりませんでした(少なくとも並列処理の増加により、CPUのデータの消費よりも同じ速度ではありません)。 CPUとして速いが小さいキャッシュメモリに会います。そのため、今ではメモリは再びプレミアムになります。コストの理由ではなく、スピードのためです。 CISCリバイバル時間。一方、CPUは、今日のマイクロプロセッサがRISCコンパイラが行ったことを大いに行っているという点まで、より複雑になりました。操作を初期部品に分解し、内部のriscy命令を再注文して、可能な限り同時に行うことができます。 RISCは、理由で「重要なものをコンパイラに緩和する」とバッドマウスをしていました...

CISCの真の利点は、メモリとキャッシュ圧力の低下であり、それだけで高性能アプリケーションを要求するのがより良いものになります。そのようなシステムの主要なボトルネックはメモリ帯域幅です。同様にサイズのキャッシュメモリを考えると、CISCプロセッサはRISCよりも多くの情報を説明できます。また、CISCの指示にはいくつかのマイクロ操作が含まれるため、個々の指示を書くことができるその命令の最速の実行パスを提供する可能性があります。要するに、CISCプロセッサは、メモリ集約型アプリケーションのパフォーマンスの向上につながるメモリ帯域幅を利用するのにより効率的です。

たとえば、実行する R1 = R2 + R3 + R4 + R5 + R6 結果をスタックに押し込み、RISCコードが書かれていると言います。

ADD  R1, R2, R3 (4-byte)
ADD  R1, R4, R5 (4-byte)
ADD  R1, R6, R0 (4-byte, R0=0)
PUSH R1         (4-byte)

そのため、16バイトのスペースが必要です。

CISCに来て、異なるスタイルのエンコーディングの可能性があるため、同じ情報が次のように表される場合があります...

ADD R1, R2, R3 (4-byte)
ADD R1, R4, R5 (4-byte)
ADD R1, R6     (2-byte)
PUSH R1        (1-byte) 

メモリの12バイトしか必要ありません。したがって、メモリの利用が改善され、プロセッサがより多くの指示を確認し、アイドルサイクルを削減できます。

このように誰も育てていない重要な側面は、ほとんどすべてのCISC CPUがマイクロコード化されたアーキテクチャであることです。マイクロシーケンサーとコントロールストアは、ハードワイヤードコントローラーよりもはるかに少ない不動産を消費します。命令セットは、ハードウェアを変更せずに変更できます。

私がフィールドに入ったとき、マイクロプロセッサは目新しいデバイスでした。 70年代から80年代前半の非常に一般的な慣行は、ビットスライスのアルス、マイクロシークンベースのコントロールユニット、およびマイクロコード命令セットがロードまたは吹き飛ばされたコントロールストアを使用してCPUを組み立てることでした。これらのコンピューターは、7400シリーズトランジスタトランジスタロジック(TTL)に基づいていました。 78181 4ビットALUを使用して、DEC PDP-11およびEarly Vax 11コンピューター、データ一般NOVA、Xerox Alto、Wangデスクトップコンピューターなど、多くのプロセッサを構築しました。

X86互換プロセッサを使用していないデスクトップコンピューターを見つけるのに苦労するでしょう。その命令セットはMIPSを破り、SPARCを破り、アルファを破り、タイタニックを打ち負かしました(その名前を間違って綴ったかもしれません)。一方、MIPは今日かろうじて存在していません。だから、あなたが今日何を考えても、非常に賢い人々はx86指導セットが本当に良いアイデアであると考えており、彼らはそれでたくさんのお金を稼いでいます。

複雑な命令セットは実装者の能力を超えているため、コンピューターはRISCとして始まりました。 RISC命令セットを表示する場合は、CDC 6400-6600およびCDCサイバー170-175命令セットをご覧ください。それは適切なRISCです。約10年前、私は一部のチップデザイナーに、どれだけのスペースを必要とするか尋ねました(合理的な高度なGPUチップの隅に)。彼らは、そのスペースの99%が必要になるマシンのRAMを含む1mm2について私に言った。

人々が たぶん......だろう CISCマシンを構築すると、実際には有利でした。 X86は、1978年と1985年のMIPSのずっと前にリリースされたことを忘れないでください。当時、指示を読むためにプロセッササイクルが必要であり、それらを解読し、実行します。 1978年のMIPは、指示ごとに4サイクル、および操作ごとに使用されていました。 「メモリにレジスタを追加する」などのX86命令を取得すると、指示には7サイクルかかりますが、3つの操作を実行します。それが大きな利点でした。そして、あなたが持っているより異なる指示、そしてそれぞれの指示がより強力なほど、利点は大きくなります。

また、悪夢のようなプレフィックスコードを備えたX86 64ビット命令セットが開発されたとき、命令セットの複雑さはもはや重要ではありませんでした。 CISCは今日、RISCに翻訳されており、翻訳事業全体がチップの1パーセントです。

この質問は、モバイルとタブレットのコンピューティングへの大規模なシフトを支持するコンピューティングの非常に最近の傾向と多くのことが関係しています。 「変曲点」 まさにその種と同じです グローブ 注意を喚起し、警告しました。短編小説は、CISCが大規模な下で溶け始めているように見えるということです パラダイムシフト/モバイルコンピューティングの猛攻撃は、明らかに本質的に高いエネルギー消費量のためです。

CISCはおそらく常にデスクトップ上にありますが、モバイルはコンピューティングの新しい未来と広く見なされています。多くの発展途上国(潜在的な潜在的なコンピューターを使用する人口が多い)は、実際にはデスクトップフェーズを大幅にスキップします。たとえば、 デスクトップコンピューティングの上昇と下降

この質問の優れたケーススタディは、「Skunkworks」のようなプロジェクト/イニシアチブを介してAtom CPUを介してモバイル市場でインテルをより良く位置付けようとする新しいポジションでインテルで働いているマイクベルについて読むことです。サポート。モバイル市場は、主に高エネルギー効率(消費電力)であるため、RISCアーキテクチャと主にアームプロセッサと非常に密接に結びついています。これは、質問と他の回答が言及していないコンピューティングの新しい重要な基準です。これらの方針に沿った最近の2つの記事があります。これは、主題に関する多くの内部企業思考(そしてその後のスクランブル!)を明らかにしています。

他の答えで言及されていない要因は経済的です。それはまた、インテルについてです。 CISCアーキテクチャは、主にX86およびX64ファミリーで表されています。これらはすべて、元のIBM PCで使用されている謙虚な8088から降ります。その一連のコンピューターの初期の市場優位性は、IntelがR&Dの堅実な収益源を持っていたことを意味しました。 Intelが2番目のソース契約を破棄/キャンセルすることで競争を抑制できたという事実と相まって、CPU価格が極端なレベルに上昇する可能性があるため、非常に豊富な総利益率が保証されました。

したがって、他のCPUメーカーはペースを維持するのに苦労していましたが、Intelは新しい、より速い製品の開発に数十億ドルを注ぐことができました。 RISC競争は、それほど多くのお金を費やすことができませんでした。多くのRISCプロセッサは市場から外れました。いくつかは:

Dec Alpha、Fairchild Clipper、AMD 29000、SPARC、MIPS、POWER(PCの使用)、Hitachi Superh ...

RISC対CISC戦争が終わり、CISCが勝ったことを発表したその時代の専門家を思い出します。そうではありませんでした。それはただ他のみんなを上回っています。

このダイナミクスはこれまでに変わることができますか?それはすでにです。経済的利点は絶対にありません。

x86のアキレスヒールの1つは、それが力に対する貪欲な食欲です。これにより、より小さく、より軽快な競争相手(ARM)が、エネルギーの節約が重要な市場(電話/タブレットなど)で繁栄することができました。

アームチームのメンバーからのこれについての素晴らしいビデオは アームプロセッサー - 成功の種を播種 - コンピュータフィル 8:30頃

X86の2番目の問題は、Intelの戦略の成功です。彼らはなんとかすべての競争を排除することができました。彼らは減速した。何年もの間、新しいIntelプロセッサは非常に控えめな改善のみを提供してきました。さらに悪いことに、超豊かなマージンは、どの企業をあきらめるのが難しい食事です。

今日、AMDからのチップ(SOC)と競合するX64チップのARMベースのシステムが再びCPU市場を興味深い場所にしています。 (私見では)

CISCを実装することを選択する多くの理由があります。最も顕著な理由は、既存のCISC命令セットとのバイナリ互換性に関するものです。ソフトウェアバイナリ翻訳テクノロジーは改善されていますが、ハードウェアベースの互換性には、いくつかの技術的な利点があります(および翻訳キャッシングの少ないという不利な点)、およびより信頼性の高いと思われる技術的な利点が少ない。

コード密度は、おそらくCISCを選択する2番目に重要な理由です。 Renesas RXは、コードメモリサイズが重要なコスト要因であるマイクロコントローラーをターゲットにするため、コード密度専用のCISCとして設計されました。可変長さの命令、複雑な命令(主にアドレス指定モード)、暗黙的なオペランド、および下位レジスタは、すべての利益コード密度をカウントします。

CISCを選択する歴史的な(そして私の意見では、私の意見では、見当違いの)理由は、より高いレベルの言語とプロセッサを使用してプログラマー間のセマンティックギャップを埋めることでした。複雑な命令は一般に一連の単純な命令に置き換えることができるため、RISCの高レベル言語コンパイラの複雑さは、言語を一致させるCISCよりもはるかに複雑ではありません。 RISCは、「セマンティッククラッシュ」(プロセッサ命令が対応する言語ステートメントよりも多かれ少なかれ機能する場合)を回避し、強度の削減とスケジューリングの最適化を促進します。 (見る 「CISC対RISCに関連するコンパイラ開発の取り組みのトレードオフは何ですか?」 詳細については。)

命令の実行に関連するかなりの固定費があります。これにより、比較的複雑な指示の使用が促進され、このオーバーヘッドをより実際の作業で広めることができます。動的命令数を減らすと、パフォーマンスが向上する可能性があります。ロジックとRAMのコストがROMのコストよりもはるかに大きかった場合、マイクロコードを調べることで命令が解読されたため、複雑な指示のインセンティブが重要でした。

おそらく歴史的証拠と矛盾するCISCを使用する理由は、マイクロコードを各マイクロアーキテクチャに対して最適化できるのに対し、標準ライブラリは新しい実装の機能を活用するのが遅い場合があることです。 Memcopyのソフトウェア実装の最適化レベルとREP MOVSBのマイクロコードのレベルは、ライブラリがマイクロコードよりも注目を集めることができることを意味します。この一部は、より広範なユーザーベースをターゲットにしたプロセッサベンダーから来る可能性があるため、開発者またはユーザーのローカライズされた関心が実装の努力をバイアスすることができるオープンソースや内部ソフトウェアに比べて、努力の正当化はより困難になる可能性があります。

プロセッサを使用して最適化された標準ライブラリを出荷できることには、重要なアトラクションがあります。プラットフォーム標準ライブラリのストレージと実行は、ソフトウェアハードウェアコード設計によって大幅に最適化できます。複雑な命令とプラットフォームの抽象化レイヤー呼び出しの区別は、微妙な(または存在しない)ことがあります。 RISC設計では、CISCと同じ実装手法を使用して、CISCが複雑な命令で提供するものと同じようにPALコールを処理することができます。これには、一般的な命令セットで提供されていない操作を特殊なハードウェアで提供していない操作、巧妙なキャッシュとデコードを使用し、レジスタオペランドの指定(CISCはCISCがそうしますが多くの場合、機能ごとのABIと同様の専用レジスタを使用します)。 CISCに関連するメンタルモデルは、そのような最適化を促進できます。さらに、ユーザーは、特定のPALライブラリを強制的に含めるよりも、「ハードウェア」標準ライブラリ(CISC)を強制的に含めることにより、あまり腹を立てない場合があります。

比較的複雑な命令をデコードすると、一連の命令がセマンティックユニットとして認識されているイディオム認識の同等のRISC技術よりも、頭上のオーバーヘッドが少なくなります(そして、識別意図ではより確実に正しい場合があります)。このオーバーヘッドの違いは、より小さな実装で最も顕著ですが、この情報を使用するオーバーヘッドは、デコードの節約の重要性を減らします。

追加のコンテキスト情報は、ハードウェアの最適化を容易にすることができます。たとえば、メモリ内の値を増やすと、ハードウェアは、メモリアドレスが2回(負荷とストアで)2回使用されていることを認識し、キャッシュウェイのメモと翻訳キャッシュの機会を提供します。複雑な命令は、そのような情報を明示的に提供できます。複雑な指示では、中間値には明示的な寿命があります(指示のもの)。従来のRISCレジスタの値を明示的に上書きする必要があります。 (注:RISCは、使用時に常にゼロにされているレジスタを指定し、単一使用の一時的な値を指定する手段を提供します。そのような指示は適度に複雑になります。)

実装の詳細が抽象化レイヤーの背後に隠されていない場合、異なるトレードオフに最適化するために異なるマイクロアーキテクチャを使用することがより困難になります。マイクロアーキテクチャの詳細を建築保証として公開すると、マイクロアーキテクチャが互換性の保証にロックされます。 PALソフトウェアは複雑な命令と同じように最適化できますが、ハードウェアソフトウェアコード設計が必要です。組織の分離と多様性により、コード設計がより困難になります。

複雑な指示は、特権国家への保護されたアクセスを提供することができます。たとえば、複雑な命令は、多くの場合、割り込みに関してアトミックです。 RISC命令セットは、割り込みを一時的に停止するためのユーザーレベルのメカニズムを提供できますが、おそらくリンクロードのようなものでさえ、ソフトウェアが中断された場合に操作を明示的に再取得することができます。

同様に、複雑な命令は、特権情報の制御されたアクセスおよび/または使用を提供できます。実行された操作はセマンティクスを制御しているため、実際の特権違反は回避できます。 RISC指向の代替品には、PALコード(通常は大きなオーバーヘッドがあります)と、特権状態を持つ構成レジスタ(またはレジスタの影のコピー)へのマスクアクセスが含まれます。一般的なソリューション(RISC)を提供することは、1つまたはいくつかの特殊なケース(CISC)に対するソリューションを提供するよりも困難ですが、より強力で、特殊なケースの蓄積に対して脆弱ではありません。重要な特別なケースが少ないと信じている場合、CISCはより魅力的になる可能性があります。

複雑な命令は、ソフトウェアから状態を隠すこともできます。そのような顕著な利点の1つは、コンテキストの保存と復元です。状態を保存および復元する指示により、アーキテクチャは、状態をメモリに転送するための特定のメカニズムではなく、OSにコンテキストサイズを通信するだけで済みます。これにより、レガシーOSで実行されているアプリケーションが状態を追加するISA拡張機能を使用できます。 (繰り返しますが、PALソフトウェアは同じ機能を提供できます。)


X86の複雑さの多くは、多くの拡張機能にわたる互換性に由来しています。複雑で少ない直交指示(コード密度に役立つ)で、一般的に必要でないことが判明したいくつかの作業を削除し、不必要な依存関係チェーン(たとえば、1つのキャリービットのみ、ダイナミックシフト量レジスタが1つだけ)を避け、回転する作業を追加する一般的に使用され、複雑な命令内で最適化できます。これらのいずれかは、新しい指示を追加し、ISAの審美的に心地よいものにする必要があります。

多くの場合、指示は非常に直交的で原始的であるため、RISCはそのような問題に遭遇しません。場合によっては、RISCが新しいプリミティブを追加する必要がある場合がありますが、通常は複数の使用に適用できます。

さらに、複雑な指示をサポートするためにインフラストラクチャが設置されると、追加の複雑な指示のために障壁が削減されます。つまり、非繰り返しの複雑な指示のコストの多く。 RISC ISAは、Ciscy機能を導入するために補完的な妨害に苦しんでいます。

x86の拡張頻度は、汎用コンピューティングとマーチャントプロセッサモデルの人気に部分的に起因する可能性があります(これらもバイナリ互換性の重要性を高めます)。 RISC ISAは、多くの場合、SYSEMベンダーと結びついています。これは、アプリケーションへのより狭い焦点を促進し、特定のRISC ISAの実装を競う競争の欠如が、マーケティングのための命令セット拡張機能の使用をやや落胆させることを奨励しています。人気はまた、新しい拡張機能を開発するコストがそれほど重要ではないようになります(非繰り返しの費用は、より多くの量ではそれほど重要ではありません)。

X86の互換性の哲学は、おそらくよりきれいな休憩を提供するのではなく、既存のメカニズムを拡張することにも偏見があります。つまり、新しい機能は既存の機能の影響を受けます。拡張の頻度が高いほど、より多くの漸進的な変化を促進します。これは、メカニズムの再利用を促進し、直交性を減らす傾向があります。

古典的なMIPSのアカデミックプレゼンテーション(MIPの最新バージョンのサブセットであり、さまざまなオプションのISA拡張機能を除外)を最新のX86(バイナリ互換性を16ビット8086に遡り、さらに後ろにアセンブリレベルの準互換性を削減します)を比較します。そのすべての歴史的な荷物は、CISCにとって最良のケースでも、RISCの現実的なケースでもありません。

命令セット構成が削減される前に、命令セット構成がありました。彼らはアプリケーションを持っています。特に、非常に大きなメモリブロック転送では、大容量のチップセットを備えたもので、長い間ループではなく、ビデオページ全体を転送するのに4〜16バイトしか必要ありません。それは変化しており、RISCは、ハイエンドのビデオカードで見つかった信じられないほどのGPUのように、チップセットがより洗練されているため、現状になりつつあります。

CISC CPUには、RISCよりも多くの利点があります。 CISCは何度もRISCよりも少ないハードウェアレジスタとXNOR/XORゲートを使用しているため!!!! CISCの命令バイトが実行されると想像してください。 1ビリオントランジスタが約3億個のロジックゲートを生産できる場合、300ミリオンのオペレーターまたはプロセス(IF、平等、数学、変数、アドレス指定など)を処理でき、CISCでより多くのプログラムが実行できます。しかし、RISCでは、Pipelined Designでプログラムを実行するには、数十回ロジックゲートが必要です。 300ミリオンx 50回(50命令) + 15000000000ビットカウンター!!!いわゆるRISCで。 CISCは、より多くのハードウェアを使用して、CPUを遅くするソフトウェアAlgothrimを削減します。

ライセンス: CC-BY-SA帰属
所属していません cs.stackexchange
scroll top