Bridge Over Troubled Water

AMDのOpteronに対抗してインテルがIA−32eアーキテクチャーを発表したことはちょっとした驚きだった。

そもそも半導体の世界は未だにムーアの法則に支配されており、これをCPUアーキテクチャーの観点から見ると増加するトランジスター資源を、どんな回路に割り振って性能の向上を引き出すかが課題となる。この際、大まかに四つの手法が存在する。

  1. 並列化によって、同時に実行する処理の量を増やす
  2. データキャッシュを増加させ、外部アクセスに起因する遅延を減らす
  3. 実行回路の単純化によって、クロック速度を上げる
  4. 特化した専用演算回路を追加する

この中で、各汎用CPUのアーキテクチャー的な特徴を決定するのは1の並列化に対するアプローチの違いと言って良い。この並列化にはさらに以下の四つの方向性がある。

a.ベクトル演算、または SIMD(Single Instruction Multiple Data)

単一のインストラクションによって、同一の処理を複数のデータに施すことである。ベクトル処理などが典型であり、科学技術計算、画像処理などには極めて有効。

b.スーパースカラ演算

CPUの処理すべき一連のコマンドの中から、潜在的に並列実行可能なものを”動的”に並列実行してしまう手法を指す。ベクトル演算のように、処理の並列性が明示的でないため、スーパースカラと呼称する。複数の処理を同一のクロックサイクルで処理可能な単位に分解して並列同時実行する”パイプライン”処理と併用されることが多く現在の主流CPUアーキテクチャーである。

ただし、スーパースカラ演算は、動的な並列実行を行うために、依存関係の無い命令を動的に判定したり、処理の結果によっては並列に実行していた命令が無駄になり廃棄したり、また、命令をパイプライン処理可能な単位に翻訳したりと、複雑で大規模な処理が必要になってくる。依存性解析のための回路の複雑さは指数関数的にに増大し、最近のCPUでは、この部分のトランジスタの方が本質的な処理の部分より多い。

増大するトランジスタ集積度を速度向上に結びつけられないことがスーパースカラ演算のアーキテクチャー上の欠陥であるといわれている。

c.VLIW(Very Long Instruction Word)

bの動的な並列性解析に対して、その仕事をコンパイラに任せ、並列実行可能命令をひとまとめの”長い”命令にまとめて実行させるところからVLIWとよばれる。しかし、実行前に並列化可能とわかる部分以外にも動的 に並列化可能なことも多く、

思ったほど速度が上がらない

動的な判定を入れると、結局回路が複雑化する

などの欠点も指摘されている。

d.ハイパースレッディング

今日的なCPUは、その上でOSを走らせることが多く、OS上では複数の独立した”タスク”または、より細かい”スレッド”とよばれる処理単位が走っている。これらスレッドは基本的に処理の依存性が”少ない”。この性質を利用して、スーパースカラにおいて実行させる並列演算において、ことなる”スレッド”の処理を混在させるアーキテクチャーをハイパースレッディングとよぶ。

インテルのMissing Ring

前置きが長くなったが、インテルはItanium というアーキテクチャーの採用に際して、度重なる拡張とスーパースカラにより、トランジスタの集積度をパフォーマンスに結びつけることに限界が見えた過去に決別し、64ビットの時代には新たにVLIWを基本アーキテクチャーにしますよと方向性を出した。異なったアーキテクチャーであるため、過去のx86のソフトはエミュレーションで動作する。当時から既存のx86によるソフトウェア資産の動作は遅いことは問題として指摘されていた。これに対して、AMDのOpteron、また、IA−32eアーキテクチャーは、32ビットのx86ソフトも早く動作するし、64ビットのメリットも享受できる。なぜインテルは、初めからこうしたハイブリッドアーキテクチャーを採らなかったのか。そこには要因がある。

インテルは、サーバー市場の動向を読み誤ったそして疲れ切ったエンジニアは救世主思想に取り憑かれた。

「スーパースカラの指数関数効果により終わりの時は近づいた、救い主の名を唱えよ。Itaniumと!」

温故知新

私自身も過去、とある著名なソフトウェア製品の開発現場において、”アーキテクチャー上の限界”に達し、”複雑化しすぎた”ので書き換えなければ未来はない製品開発現場に居合わせたことがある。実際問題、古い製品のソースコードは、途方もなく複雑であり、修正を行うのも新規の機能を追加するのも習熟したエンジニアによる細心の注意を払った作業を必要としていた。社内では、疲れ果てたエンジニアが泥の様に眠っている。進歩する技術に取り残される感覚、華々しい手法とは無縁な複雑怪奇なソースコード。誰もが抜本的な修正の必要を否定しない。しかし、全く新しいアーキテクチャーに移植するプロジェクトは、莫大な開発投資を受けながら、完全に失敗するのだ。

理由は二つ。過去の製品の複雑さそのものと、ビジネスとしての遂行の困難さである。

既存製品に対して過去に積み上げられ、投入されてきた細かな修正、調整まで取り込んだ互換製品を新しい技術で作ることはやってみると途方もなく困難である。また、既存顧客を継続的に満足させ、ライバル製品との競合に打ち勝つために、既存製品に対する開発を継続せざるを得ず、主要エンジニアがかり出される。そして、その修正自身が、新しいアーキテクチャー製品に追加開発項目をもたらす。いつまで経っても追いつけないレースを売り上げに結びつかないままに続けざるを得なくなる。そんな状態で、5年も経つと、希望の光に見えた”新しいアーキテクチャー”そのものが古くさいものに見えてくる。いつしかプロジェクトをサポートしていた役員もいなくなり、プロジェクト自身が廃止されてしまった。

そのときの経験から言えば、古くて複雑なコードをバカにしてはいけない。そこにはノウハウが詰まっているはずである。新しいアーキテクチャーを作るなら、急速に伸びている別のターゲットセグメントに投下するか、古い部分を保持しながら、周辺のコンポーネントに新技術を追加し、いつの間にか別の製品になっているようなやり方が結局うまく行く。

インテルの選択 サーバー訪れるはずだった変革

さて、 使い古されて、限界だ限界だといわれるテクノロジーも、資金を投下して残業を重ねればそれなりのブレークスルーが発見される。考えられていたよりもかなりの長期間にわたって限界点に達しない ものだ。それはアーキテクチャー的にヘボとよばれたx86自身が証明していることであるし、FTTH vs xDSL、磁気記憶における垂直磁化など様々な技術領域で観測される。Itaniumを投下した時、インテル自身もx86資産の継承に関する問題点は認識していたはずである。しかし、彼らはこう考えた。

今日現在は、x86のソフトはx86で走らせた方が早いに決まってる。しかし、VLIWであるItaniumの実行速度向上は、スーパースカラであるx86の改善効率を上回る。やがてエミュレーターを用いたとしてもItaniumで走らせた方が早く実行する様になるだろう。

これは正しい。ただし前提がある。その時期を早めるのも遅くするのも、そのアーキテクチャーに投下する資本の量に依存するのだ。

Itaniumがリリースされた頃は、PCによる分散化に伴うコストの増大が問題視され、サーバー資源への集約化が謳われた頃である。リリース当初は高価格で専用ソフトも少ないItaniumであるが、専用ソフトを使いさえすれば確実に高速化のメリットを享受できる。 つまり、インテルはx86で行った徐々に変革していくやり方ではなく、新規アーキテクチャーを伸びる市場に投入するやり方を選択し、”伸びる”市場としてサーバー市場を選んだのだ。

 サーバー市場は確実に伸びる。よって市場の拡大に伴ってItaniumの売り上げは伸びるであろう。伸びればソフトの対応はすすみ、売り上げの再投下によりCPUの改良も進むであろう。 やがて、エミュレーターでもx86のスピードを上回り、PCを含む下の市場にも展開していけるであろう。

しかし、インテルは、市場の伸びに隠された構造の変革を十分には認識していなかった。実際には、サーバー市場は急激に拡大したものの、牽引したのは、中規模以下の低価格帯製品であった。これに伴い、ワークステーションなど専用CPUを搭載した機器も低価格化の圧力を受け急速にx86アーキテクチャーへとシフトし、専用高機能ソフトウェアにおいてもx86アーキテクチャーへの対応が進んだ。 インテル自身が高価格なCPUによるサーバー市場の破壊者であったのだ。

一方、 資金投下の進んだx86アーキテクチャーは、高速化ニーズの高いマルチメディア機能においては、SIMD系の命令追加が進み、OS向けの汎用処理では、ハイパースレッディングなどを取り込みつつクロック競争へと突入し、カタログスペックにおいて、他を駆逐していったのである。

資金の流れが、基本アーキテクチャーにより実現可能なCPUスピードまで左右する。すぐ来ると思われた神の国はまだ来ない。そうしてる間に、利用可能なトランジスターの量は、32ビットアーキテクチャーの他に64ビット命令をチップに載せられる所まで来てしまった。IA−32eアーキテクチャーは、こうした背景を持っているのだ。 手近な改善は、CPUアーキテクチャーの変更より、1チップ上への複数プロセッサーの混載とキャッシュ増大になるのかもしれない。

神の国では、単純で明快なアーキテクチャーを持ったCPUが普及していることであろう。だが、インテルのエンジニアよ。きっとその国には、君たちの得意などうしようもなく複雑で神経を使う回路を構築する仕事など存在しない 。そもそも莫大な資金を投入して解決する複雑さの地獄こそ君らの得意分野なのではないか?

どうする?インテル?