MA)」をベースにした新世代CPU群を発表し始めた。2(Merom:メロン)」が今後数カ月で相次いで登場する。MAのパフォーマンス/消費電力に強い自信を持っており、これで近年の落ち込みを一気に回復するつもりだ。その秘密の源は、あまり理解されていない。Intelが体系的な説明をあまり行なっていないためだ。Pro/II/III)アーキテクチャを拡張しただけ」とよく言われる。これはどちらも正しくない。4)とは異なるフィロソフィ(思想)を持ち、マイクロアーキテクチャが抜本的に革新されているからだ。Operations:uOPs)のアーキテクチャだ。MAとNetBurstでは、これが根本的に異なっているため、パイプラインの構造が全く異なるものとなっている。MAは、その先に続く新アーキテクチャ路線の第1ステップに過ぎない。MAの先には、P6/NetBurstと逆の方向へと伸びる、よりラディカルな将来マイクロアーキテクチャ展望できる。Traces(PARROT)」アーキテクチャの論文の中に、すでに見られる。MAと考えることもできる。MAは何がNetBurstと異なるのか。Computer)」である点だ。MA)」の、デコーダ回りのアーキテクチャを開発したアーキテクト。MAの要(かなめ)となる命令デコーダを最もよく知る人物だ。Architecture)の利点を持ち込んだことにあると言う。CISC云々は、ちょっと聞いただけだと奇妙な話に聞こえるかも知れない。x86系は、典型的なCISC系ISAだからだ。知られていることだが、CPUのマイクロアーキテクチャとなると話が違う。Computer)風のuOPsに変換しているからだ。P6以降のIntelのIA-32系マイクロアーキテクチャの最大のポイントは、RISC風に命令を分解し、RISCの手法を取り入れて高速化することにあった。MAはそれを否定する。inside)」とValentine氏は言う。CPUは、CISCの皮をかぶったRISC風CPUだった。MAでは、中身もかなりの部分までCISC風になった。中身を完全にCISCに戻したのではなく、ある程度までCISC風のuOPsを採用したという意味だが、方向性が全く逆であることは確かだ。IntelがRISC風→CISC風への転換を図った理由は明快だ。NetBurstでは、RISC風uOPsを採用したために、RISCの難点もパイプラインに持ち込んでしまったと、Intelが考え始めたからだ。CPUが非効率になり、消費電力が増大してしまった原因は、RISC化にあったとIntelは見る。MAでは、これを逆転させることで、パフォーマンス/消費電力を劇的に向上されることに成功したわけだ。この意味を明確にするには、かつてのCISC対RISCのISA論争にまで遡る必要がある。Diagram(※別ウィンドウで開きます)PDF版はこちら●リソースが少ない時代に適合していたCISCアーキテクチャCISCの特徴と一般的に言われるのは、命令数が多く、複雑な処理を行なう命令が多く、命令長が可変で、命令フォーマットが複数あり、メモリ-レジスタ間演算命令があることなど。したCISCの特徴は、コンピュータの歴史に由来する。CISCが産まれた時点ではアセンブラコーディングが前提で、プログラマの生産性を高めやすいISAを定義する必要があった。そのため、人間が扱いやすいように命令種類を増やし、コーディングの際の命令ステップ数を減らした。CISCの特徴は、当時のハードにも向いていた。命令ステップ数の削減によるプログラムのコードサイズの削減は、高価だったメモリの節約にもなった。CPUのフェッチ帯域の節約にもなった。CISCは元々、ハードウェアリソースが限られていた時代に適合していたわけだ。CISCのこうしたアプローチは、'80年頃まではうまく働いていた。ところが、半導体技術の進歩とプログラミング環境の変化によって状況が変わり始めた。メモリは安価になる一方で、高級言語の普及によってISAを複雑にする必然性が薄れた。チップの集積度の向上とともに、CPUのマイクロアーキテクチャではパイプライン処理などが登場し、高速化への道が開けてきた。そこで、よく知られているように、高級言語からコンパイルしたオブジェクトコードを高速に走らせるように特化したCPUを作ろうというアイデアが浮上してきた。Project」で、そこから次々にSPARC、MIPS、PowerPC、AlphaといったRISCアーキテクチャが生まれてきた。CISC対RISCの利点と難点(※別ウィンドウで開きます)PDF版はこちら●増えたリソースを活かすRISCアーキテクチャRISCに共通すると言われるフィロソフィは、高級言語を前提として、単純で少数の命令に限定し、命令長を固定して、命令フォーマットも限定すること。メモリアクセスはデータのロード(Load)系命令とストア(Store)系命令に限定し、演算命令はレジスタ間の演算に限定する。命令デコードを速くし、単純な命令をパイプラインで高速に実行できるようにする。実際には例外もあるが、基本的なアイデアは上記だと言われている。ISAは、ソフトウェア(コンパイラ)によるスタティックスケジューリングと、ハードウェアによるダイナミックスケジューリングのどちらも容易にする。レイテンシの長いメモリからのロードを、前へスケジューリングすることで、ロードレイテンシを隠蔽することができた。依存性のない命令同士を並列に実行させることも容易になる。その結果、スーパースカラやアウトオブオーダ(out-of-order)実行などが適用し易くなる。そのため、RISCは目覚ましくパフォーマンスを伸ばすことができた。RISCにも難点があった。それはハードウェアリソースを必要とすることだ。スタティックな命令数が増えるためプログラムメモリ容量が増えて、より多くの物理メモリを必要とする。ダイナミックには、同じ処理に必要な命令ステップ数がCISCよりも増えるため、命令実行サイクルが増える。そのため、同じ時間内に、CISCと同等かそれ以上の処理を行なうためには、単位時間により多くの命令を実行できるように、ハードウェア側の工夫が必要となる。その点もリソースを消費する。スーパースカラでより多くの命令を並列に実行するなら、CPUに広い命令フェッチ帯域とパイプライン帯域が必要になる。スーパーパイプラインでCPUをより高速に回すなら、より細分化されたパイプラインが必要となる。したマイクロアーキテクチャの拡張もリソースを必要とする。RISCは一般論では、CPUのパフォーマンスを上げる代わりに、リソースも必要とする。実際には、ISAやマイクロアーキテクチャの改良の結果、必ずしもそう言い切れなくなっているが、CISC対RISCの論争時にはそう言われていた。Pro(P6)前までの時代だった。P6アーキテクチャは、ある意味でこの論争に終止符を打った。P6がCISC型のx86命令を、RISC型の内部命令(uOPs)に変換する方式を取ったからだ。RISC風uOPsを使うことで、P6ではスーパーパイプライン、スーパースカラ、アウトオブオーダ実行といった、当時のRISCの先端のテクニックをほとんど取り込んだ。IntelはRISCの利点を認めて、それを積極的に取り入れることで、CISCの問題点と指摘されていた部分を克服したわけだ。ISA自体は変えずに、CPUの中でRISC風に変換すればいいというのが、Intelが出した答えだった。この方式は、デコード時の命令変換のオーバーヘッドはあるものの、高パフォーマンスを達成できた。その結果、次第にCISC対RISCの論争は収まっていく。RISC風変換はIntelだけの独創ではなく、当時はAMDの「K5」やNexGenの「Nx586」など類似のアーキテクチャのCPUが一斉に登場している。Intelは先駆ではなく、CPU業界全体の技術トレンドに従っただけだった。4/D)アーキテクチャにも拡張され受け継がれた。NetBurstでは、命令キャッシュがx86命令ではなくRISC風uOPsを格納するトレースキャッシュとなり、ますますRISC風のステージが増えた。RISC化が行き着いたのがNetBurstだった。CPUで花開いていったわけだが、プロセス技術が0.13μm(130nm)に達する頃から問題が浮上してきた。プロセスが微細化しても、消費電力が下がらなくなり、CPUのパフォーマンス/電力効率が最重要になり始めたためだ。NetBurstの効率が悪い理由の1つは、RISC風uOPsに変換してしまう点にある、とIntelは考えた。x86命令からRISC風uOPsに変換して以降は、パイプライン中は常にRISC風uOPs単位で扱われる。RISC風uOPsに分解することで、CISC時よりも命令数が増えるために、パイプライン内部では命令スロットや命令制御などのCPU内リソースが膨大に必要になる。パイプライン全体に渡ってリソースを食うので、これはばかにならない量となる。CPUが肥大化する最大の原因になっていると言われる。uOPs/サイクルの帯域なので、元のCISCのx86コードに換算すると、並列度は3命令/サイクル以下となってしまう。uOPs/サイクルの帯域でもパフォーマンスを得ている。パイプラインを細分化することで、リソースを費やしてしまっている。乱暴な言い方とすると、NetBurstでは、RISC風uOPs変換を追求したために、パイプライン中では、リソースを食うというRISCの難点もひきずってしまったわけだ。リソースは消費電力に換算される。CPUの消費電力が許容枠内だった時代は、それも許容できた。CPUの消費電力が天井に達すると、RISC変換で生じる無駄は、荷物になり始めた。MAでは、この問題を“RISC風に分解しないこと”で解決している。Fusion(最近はMicro-Fusionと呼ばれる)”とつけている。MAでほぼ完全な姿になった。uOPsとして扱うことができる。transition(※別ウィンドウで開きます)PDF版はこちら知られているように、Fusion(融合)と呼んでいるのは、複数のRISC風uOPsを1個のuOPsに融合させるという概念からだ。uOPs」と呼ばれている。uOPsに変換しているに過ぎない。Fusionの本質だ。「Micro-Fusionでは、CISC命令(の変換)を、より複雑なフォーマットのuOPsに保ち、少ないuOPs数を維持する。これらのオペレーションを、(uOPsに分解しないで)1つのバンドルにまとめてしまう。内部RISCプロセッサではない。(まるっきり)CISCというわけでもない。見方によっては、非常にシンプルなCISCと考えることができる。コモンな2つのuOPsを、1つの(Fused)uOPsにまとめてしまうからだ」とValentineは語る。uOPsは、複数のuOPsを含む、ある意味でCISC風の構造となっている。レジスタ-メモリ間の加算の例なら、従来のRISC風uOPsでは、メモリからレジスタへのロードuOPと、レジスタ間の加算uOPの2つに分解されていた。uOPとしてまとめて扱うわけだ。そのため、RISC風uOPsに分解していた時と比べると、パイプライン内部でのuOPs数を大きく減らすことができる。cycle:1サイクルで実行できる命令数)を高めることが可能になるというわけだ。Reduction(※別ウィンドウで開きます)PDF版はこちら●最後の最後だけRISC風uOPsとして実行もっとも、パイプラインを通してCISC風uOPsにすると、CISCのx86命令をネイティブ実行するのと同じように、高速化が難しくなってしまう。レジスタ-メモリ間の加算の例なら、メモリからのデータを待つ間、実行ユニットがアイドル状態になってしまう。uOPsにデコードしている。uOPsに融合されているuOPsは、各クロックサイクル毎に一緒(にパイプラインを流れる)。uOPsとして行なわれる。再スケジュールを行なってから実行しており、依然としてアウトオブオーダ型マシーンのままだ」とValentine氏は言う。uOPsに留め、土壇場で、ようやくRISC風のuOPsに分解するわけだ。RISCの利点は、やはり活かすのだが、RISC風uOPsとして扱うステージを出来る限り少なくしている。Valentine氏によると、各実行ユニットにそれぞれリザベーションステーションが設けられているという。uOPsの分解と再スケジューリングが行なわれるのは、その直前と見られる。分解されたuOPsは、リザベーションステーションで待機して、実行できる組み合わせで発行される。uOPs→uOPs」と、2段階でデコードされたと見ることもできる。実際には最初のデコードの段階で、後段で分解しやすいようなフォーマットにされているという。Execution」が強調される。uOPsになることで、より高効率になっていることがわかる。uOPs/サイクルなので、uOPsに換算すると、ピークのuOPs/サイクルははるかに多くなる。MAでは、3が4になった以上に大きな差が存在する。MAのパイプラインでは、できる限り、CISC風のアーキテクチャを維持しようとしていることがわかる。RISC風に置き換えるのは最小限。これは、CISCの部分はパイプライン中で最小限に留め、できる限りRISCにしようとしたNetBurstとは対極だ。MAでは発想を逆転させ、CISCの利点を活かそうとしている。CPUのマイクロアーキテクチャの要(かなめ)となるuOPs。CPUと全く逆の方向へと向いたアーキテクチャであることがよくわかる。AMDは、K7/K8アーキテクチャで、すでにある程度似たような方向へ向かっていた。これもまた、トレンドで、CISC対RISCの論争がはるか後ろへと遠のいたところで、再び、CISCへと揺り戻しの時代がやってきたようだ。