3

おそらく私はアーキテクチャを誤解していますが、マシンにたとえば乗算命令がある場合、その命令はより小さな命令に変換されていないか、非常に複雑であるため、最終的に同等のRISC命令と同じ速度になりますか?

乗算は悪い例です。どちらのアーキテクチャでも単一の命令です。上記の「乗算」を、単一の命令である同等の RISC がない CISC ではより複雑な命令に置き換えます。

4

5 に答える 5

3

乗算は良い例でも悪い例でもあります。まず、乗算は高価な命令です。一部のプロセッサには、正当な理由で乗算がありません。あなたはx86や他の人が持っていることができ、多くの時計または1つの時計を取ります。1クロックの乗算を取得するには、(比較的)大量のチップ領域が必要です(Daniが述べたように、乗算専用のロジックブロックである可能性があります)。ある設計者が別の設計者と同じ選択をする理由はまったくありません。同じ会社内(1つのx86と別のx86)であろうと、異なるアーキテクチャ(x86とarmとmipsなど)であろうと。すべての設計者は、乗算の結果がオペランドの2倍のビットであることを知っています。それで、プログラマーにオペランドのすべての組み合わせに対する完全な答えを与えることを選択しますか(結果はオペランドとは異なるサイズです)、それともオペランドサイズで結果をクリップしますか?クリップしてオーバーフローまたは例外を発生させた場合、または結果が間違っていることを知らずに実行を継続させますか?オーバーフローを検出してパフォーマンスを犠牲にして、すべてのmulおよびdiv命令の周りにラッパーを追加するように強制しますか?

x86は、最初に学習したり、他の人への参照として使用したりするのに非常に悪いアーキテクチャです。それは多くの悪い仮定につながります。すべてのプロセッサがマイクロコード化されているわけではありません。すべてのCISCプロセッサがマイクロコードであるとは限りません。RISCプロセッサをマイクロコード化できない理由はありません。CISCまたはRISCのいずれかをマイクロコード化することも、CISCまたはRISCをマイクロコード化することもできません。これは設計上の選択であり、ルールではありません。

RISCは、最小のステップ数を意味するわけではありません。レジスタの移動を行う単純なレジスタでさえ、最小2ステップ(ソースのフェッチ、結果の格納)であり、プロセッサの実装方法を実行するのに2クロックかかる可能性があります(レジスタファイル用のスラムバンクを使用する場合)。必ずしもデュアルポートではありません)。alu命令は3つのステップであり、RISCプロセッサでは3クロックかかる可能性があり、RISCは命令ごとに1クロックを平均化しますが、CISCも同様です。スーパースカラーに移行して、少なくともプロセッサがバインドされたときのバーストでは、命令ごとに1クロックを超えることができます。スーパースカラーに移行する際の問題は、CISCとRISCで同じです。

命令セットシミュレータを作成するか、少なくとも1つを開始することをお勧めします。他に何もない場合は、逆アセンブラ。さらに良いのは、100人のプログラマーを連れて、同じプログラミングタスクを互いに分離して実行させることです。すべてが同じ学校で同じ教師によって教えられたとしても、あなたはそのissまたは逆アセンブラーのために3から100の間のどこかで異なるデザインを手に入れるでしょう。プログラミングタスクとしてテキストエディタにします。プログラミング言語の選択だけが最初は少し異なり、その後プログラムのデザインが異なります。ハードウェア設計はソフトウェア設計に非常に似ており、プログラミング言語を使用し、コンパイラーやリンカーなどがあります。ハードウェア設計者でいっぱいの部屋に同じタスクを与えれば、異なる設計が得られます。CISCとRISCの関係は少なく、設計チームとその選択とは関係があります。Intelにはさまざまな設計目標があります。たとえば、下位互換性です。これは非常に高価な選択です。

CISCとRISCはどちらも、プロセッサの設計に基づいて、各命令をより小さな消化可能/分割可能なステップに変換します。multiplyをaddに置き換え、CISCとRISCをasmレベルで比較してからさらに深く比較します。x86では、メモリをオペランドとして使用できます。たとえば、armでは使用できません。それで

register = memory + register

load register from memory
regster = register + register

余分なステップがあります。

しかし、それらは両方とも同じ一連のステップに分解されます

resolve memory address
start memory cycle,
wait for memory cycle to end,
fetch register from register memory
send operands to alu
take alu output and store in register memory

命令を適切に実行するためのriscは、メモリから読み取った値を追加のレジスタに格納する必要があるため、ciscは実際にはわずかに高速です(asmの観点からはcisc 2つのレジスタ、risc、3つまたは2つは再利用されます)。

メモリから読み取られている値が整列されていない場合、ciscは技術的に勝ちます(riscが整列されていない転送を一般的に許可しない場合)。ciscプロセッサは、すべてが等しく保持されているアラインされていないデータをフェッチするのに同じ数のメモリサイクルを必要とします(両方のプロセッサに2メモリサイクルかかり、ciscはriscと同様に罰せられます)。しかし、asm命令とasm命令に焦点を合わせるには、メモリオペランドが整列されていない場合、riscはこれを実行する必要があります。

read memory to register a
read memory to register b
shift a, 
shift b,
or/add

ciscが行う場所:

read memory to register (takes two memory cycles)

また、命令サイズがあり、armやmipsなどの一般的なriscプロセッサは、x86が可変である固定命令長に傾いています。x86は、4バイトで別のバイトを実行するのに必要なことを1バイトで実行できます。はい、フェッチとデコードはより複雑です(より多くのロジック、より多くの電力など)が、同じサイズのキャッシュにより多くの命令を収めることができます。

マイクロコーディングは、ある命令セットを別の命令セットに分割するだけではありません(もう一方は、ネイティブでプログラムしたくないような非常に苦痛なものです)。マイクロコーディングは、低レベルのシステムがより少ないバグでより迅速に実装されることを前提として、より早く市場に参入するのに役立ちます。事後にいくつかのバグを修正でき、将来的にフィールドにパッチを適用できるため、生産をより早く立ち上げることができるという前提があります。常に完璧であるとは限らず、常に成功するとは限りませんが、マイクロコード化されていないプロセッサと比較してください。マイクロコード化されていないプロセッサでは、コンパイラの担当者にバグを修正してもらうか、プロセッサをリコールするか、会社として目をつぶって、一部の顧客を取り戻すことを望んでいます。 、など..。

したがって、答えはノーです。 両方RISCとCISCは、個々の命令をマイクロコード化できるかどうかに関係なく一連のステップに変換します。それらは、好きなように実装されたステートマシンの状態であると単純に考えてください。CISCには、1つの命令により多くのステップを詰め込むものがあるかもしれませんが、それはより少ない命令フェッチを意味します。また、CISC命令全体を知っていると、ステップはチップ内でより効率的に実装される可能性があり、RISCプロセッサは一連の命令を調べて、同じステップ数を取得するためにオンザフライで最適化する必要があります。(ldr r0、[r1]; r0、r0、r2を追加)。CISCは、1つの命令に焦点を合わせるのではなく、命令のグループを調べる場合にも、同じ種類の最適化を探すことができます。どちらもパイプと並列実行を使用します。CISCは多くの場合x86を意味し、RISCはよりモダンでクリーンなアーキテクチャを意味します。人間がプログラムして実装するのが簡単であるという意味でよりクリーンであるということは、自動的に速くなるという意味ではありません。同じ仕事をするためのより多くのステップ。x86は可変ワード長であり、履歴は1バイト命令に戻ります。たとえば、4バイトの固定命令長と比較すると、x86は、固定命令長のリスクよりも多くの命令をキャッシュにパックできる可能性があり、x86に可能性を与えます。パフォーマンスの向上。なぜriscは、多くの命令を、キャッシュとパイプラインをより高速に移動する1つの小さな命令に変換しないのですか?x86は、固定命令長のリスクよりも多くの命令をキャッシュにパックできる可能性があり、x86のパフォーマンスが向上する可能性があります。なぜriscは、多くの命令を、キャッシュとパイプラインをより高速に移動する1つの小さな命令に変換しないのですか?x86は、固定命令長のリスクよりも多くの命令をキャッシュにパックできる可能性があり、x86のパフォーマンスが向上する可能性があります。なぜriscは、多くの命令を、キャッシュとパイプラインをより高速に移動する1つの小さな命令に変換しないのですか?

于 2012-06-26T07:49:50.080 に答える
2

CISC マシンのデコード回路は複雑で、複雑な CISC 命令をより単純な命令にデコードします。たとえば、理論的には、2つのメモリアドレスの値をフェッチし、乗算の結果を別のメモリアドレスに設定する単一のCISC命令が存在する可能性があります。CISC マシンのデコーダーは、この単一の命令を、メモリ位置からレジスターに値をフェッチする、そのレジスターに別のレジスターを追加するなど、複数の RISC のような操作にデコードします。デコード後、違いはありません。これが、現在の CISC マシン (x86 など) が RISC マシンと競合する方法です。しかし、複雑なデコード フェーズの代償を払わなければなりません。

于 2012-06-25T15:58:06.357 に答える
2

小さいものに変換されるかもしれませんが、乗算のように頻繁に使用される命令には、通常、指定された回路があります。

于 2012-06-25T15:50:48.343 に答える
1

@Pink 1人の労働者がカートを使用してレンガを移動し、一度に10人を積み込み、10人の労働者が並んでレンガを手渡していると考えてください。したがって、これらの10が太陽電池式の機械でない限り、カートの価格の支払いが低くなるという利点があります;)

于 2012-07-01T22:48:37.030 に答える