CISCとVLIW、命令とオペコード

CISCとVLIW、命令とオペコード

からhttp://en.wikipedia.org/wiki/命令セット

CISCプロセッサ命令セットに「複雑な」命令が含まれます。1 つの「複雑な」命令は、他のコンピュータでは多くの命令を必要とするような処理を実行します。このような命令は、複数のステップを実行する命令、複数の機能ユニットを制御する命令、または特定のプロセッサによって実装される単純な命令の大部分よりも大規模な命令に代表されます。

...

非常に長い命令語(VLIW)アーキテクチャ多くのマイクロコード アーキテクチャが含まれる では、1 つの命令に複数の同時オペコードとそのオペランドが含まれます。

CISC と VLIW は、命令に複数の操作 (つまり、オペコード) が含まれているという点で、同じ概念のように思えます。では、それらは同じ概念なのでしょうか?

命令に複数の操作 (オペコード) があるかどうかを判断する場合、単一の操作 (オペコード) をどのように定義しますか?

答え1

最新の CISC プロセッサには複数の実行ユニットがあります。また、それらの実行ユニット間で命令ストリームを分散させるための追加回路とロジックも多数あります。

VLIW は、コンパイラにこの作業の一部を実行させ、節約した回路をさらに多くの実行ユニット、キャッシュ、またはその他のリソースに使用しようとする試みです。

一例として、命令ワードが 128 ビットで 3 つの命令を含む Itanium が挙げられます。これにより、コンパイラは命令をペアにして一緒に実行する作業の一部を行うことができます。

答え2

命令とは、次の命令の前に論理的に実行する必要がある単一の命令です。命令に複数の操作 (VLIW 命令など) が含まれる場合、これらの操作は同時に実行されることが想定されています。また、VLIW 命令では、各操作スロットはハードウェア処理ユニット (FPU と ALU の組み合わせ) に対応し、命令によって静的に割り当てられます。CISC や RISC の場合、プロセッサは空いている処理ユニットを自由に選択できます。ただし、VLIW ではユニットが命令内に割り当てられるため、処理ユニットの数が多いまたは少ない別のモデルで 1 つの VLIW のコードを実行することはできません。これは、そのモデルの命令には、命令内のスロットの数が多いか少ないためです。ただし、数が多いモデルでは、スロットの少ない形式を使用するコードを実行できる場合があります。CISC や RISC ではコードが自動的に追加の処理ユニットを使用できますが、VLIW コードは、プロセッサ専用に再コンパイルしない限り、追加の処理ユニットを使用できません。

VLIWのこの制限が、明示的なデータグラフ実行 (EDGE)

答え3

命令に複数の操作 (オペコード) があるかどうかを判断する場合、単一の操作 (オペコード) をどのように定義しますか?

定義とあなたの期待は完全には正確ではありません。「オペコード」を示すために使用されます見えるマイクロオペレーションのような隠れた操作ではなく、命令であり、"命令"参照するのみユーザーに公開される操作「操作」はオペコードに対応しておらず、操作全体を扱う場合や、その大きな操作を実行するために使用される各下位レベルの操作を扱う場合など、参照方法に応じて単純 (単一のオペコード) または複雑 (複数のオペコード) になります。 除算を実行する場合、単一の操作と呼ぶことができます。 ただし、除算は一連の減算/乗算、つまり複数の操作 (ハードウェア用語ではステージ) に細分化することもできます。 多くの古い RISC アーキテクチャでは、命令をシンプルに保ち、パイプラインをわかりやすくするために、除算のさまざまなステージに個別の命令があります。 しかし、現代の RISC アーキテクチャでは通常、そうではなく、rlwinmPowerPC やldm/stmARM などの CISC のような非常に複雑な命令を持つ場合があります。

VLIW アーキテクチャ1つの命令は1つの命令のままです。しかし、命令はグループ化されたバッチとして。例えば、Itaniumアーキテクチャのバッチには、実行される3つの命令が含まれています。同時にもちろん、各命令には独自のオペコードが必要であり、プログラマーはそれらのオペコードを使用できます。さらに、これらの命令は、いくつかの高レベル命令の操作を共同で表すマイクロオペとは異なり、他の命令から独立しています。たとえば、一部のアーキテクチャでは、2 つの加算と乗算、および互いに関連しない異なるもののビット単位の排他的論理和がバッチ内に存在する場合があります。

それどころか、CISC指示は唯一単一の操作を実行する命令であり、1つのオペコード以前の世代のCISC CPUは各命令を直接実行していたため、実際には単一の破られない命令でした。しかし、現代のプロセッサでは、複雑な「操作」は、より短いクロックサイクルで実行できる複数のより単純なマイクロ操作に分割されます。これらのマイクロ操作は、外部からは見えないなので、複数の命令コードと呼ぶことはできません。ユーザーにとっては、それはまだ1つの命令です。おそらくIntelやAMDが裏でどんなマイクロオペレーションを使っているか分からないさらに、CISC 命令は単一のマイクロオペレーションまたは複数のマイクロオペレーションに分割できるため、CISC が単一の命令に複数のオペレーションを含むと言うのは完全に間違いです。

実際、現代の RISC アーキテクチャも、CISC と同様に命令をマイクロオペレーションに分割し、非常に単純なオペレーションもマクロオペレーションにまとめられますが、これもユーザーには見えません。たとえば、x86 の CMP/Jcc や RISC-V の DIV/REM などです。RISC が単純だとは言えないでしょう。RISC 命令は、複数のオペレーションを実行できます。

CISC と VLIW では、一方は一度に 1 つの命令と 1 つのオペコードを実行し (現時点ではスーパースカラーとアウトオブオーダー実行を除く)、一方は一度に複数の命令を実行します。では、これらはどのように同じ概念なのでしょうか? 命令セットの上、または少なくとも同じレベルで見る必要があります。CPU 内部で使用されるものと、CPU より上の命令セット上のものを比較しても意味がありません。

関連情報