x86に限ってだが、アウトオブオーダーで欠かせないのが命令変換の仕組みである。インテルの場合は「μOp」(マイクロオプ)、AMD(というか旧NexGen)は当初「RISC86」と称し、その後「Op」、最終的には「microOp」と表記は変わっているが、要するにx86命令を「RISC風の」内部命令に変換する仕組みである。この内部命令が、μOpとかmicroOpなどと呼ばれるわけだ。
ここでちょっと寄り道して、RISCとCISCの話をしておくことにする。例えばx86という命令はCISCの代表例であるが、そもそもRISCとCISCの違いとは? というところを簡単に説明しておこう。
RISCとCISCの違いをざっとおさらい
RISCという概念を、それと明確には知らずに搭載したCPUはかなり昔からある※1。だが、RISCという概念が明確になったのは、1981年にデビッド・パターソン(David Patterson)がプロジェクトの指揮を取った「RISC-I/RISC-II」プロジェクトと、ほぼ同じ1982年に、ジョン・ヘネシー(John Hennessy)がプロジェクトの指揮を取った「MIPS」プロジェクトがそれぞれ大きな成果を上げ、これに基づいた製品が登場するようになってからではないかと思う(IBM 801とかもあるが、ここでは割愛する)。
※1 1964年の「CDC6600」が最初、という説が根強い。
ここで初めて、RISC(Reduced Instruction Set Computer:縮小命令セットコンピューター)という概念が定義された。この当時のRISCの概念は、以下の要素に代表されている。
- 命令長は固定
- 処理時間は命令によらず一定(原則1クロック)
- 演算はすべてレジスター間のみ
- マイクロコードを廃する
- 汎用レジスターを多数用意
- 遅延スロットを設けてパイプラインストールを防止
これらを(全部ではないにせよ)搭載したものがRISC、そうでないものがCISC(Complex Instruction Set Computer:複合命令セットコンピューター)というのが、やや乱暴だが現実に即した分類だった。例えばCISCの代表例たるx86の場合は、以下のようになる。
- 命令長は可変。しかも規則性がないため、命令を1byteずつデコードしないと、最終的な命令長が不明
- 処理時間は命令によって大きく変わる
- 演算はレジスター間演算以外に、メモリーや即値、アドレス指定など多彩なモードがある
- マイクロコードを多用しており、特に80386ではデコードのレイテンシがかなり多かった
- 汎用レジスターは非常に少なく、スタックを多用する必要があった
- 遅延スロットに相当するものはない
![](/img/blank.gif)
この連載の記事
-
第781回
PC
Lunar LakeのGPU動作周波数はおよそ1.65GHz インテル CPUロードマップ -
第780回
PC
Lunar Lakeに搭載される正体不明のメモリーサイドキャッシュ インテル CPUロードマップ -
第779回
PC
Lunar LakeではEコアの「Skymont」でもAI処理を実行するようになった インテル CPUロードマップ -
第778回
PC
Lunar LakeではPコアのハイパースレッディングを廃止 インテル CPUロードマップ -
第777回
PC
Lunar Lakeはウェハー1枚からMeteor Lakeの半分しか取れない インテル CPUロードマップ -
第776回
PC
COMPUTEXで判明したZen 5以降のプロセッサー戦略 AMD CPU/GPUロードマップ -
第775回
PC
安定した転送速度を確保できたSCSI 消え去ったI/F史 -
第774回
PC
日本の半導体メーカーが開発協力に名乗りを上げた次世代Esperanto ET-SoC AIプロセッサーの昨今 -
第773回
PC
Sound Blasterが普及に大きく貢献したGame Port 消え去ったI/F史 -
第772回
PC
スーパーコンピューターの系譜 本格稼働で大きく性能を伸ばしたAuroraだが世界一には届かなかった -
第771回
PC
277もの特許を使用して標準化した高速シリアルバスIEEE 1394 消え去ったI/F史 - この連載の一覧へ