IA-64プロセッサ基本講座

実は昨日あたりに帰省した。帰省のバスで読んでた本が「IA-64プロセッサ基本講座」である。自分自身x86のこと良く知らないが、とりあえずさくっと読んでみて、面白いなあと思ったことのまとめ。

ちなみに、CPU良く分からん人はこんなの読むと面白いかもしれない。まあ若干考えに偏りはあるが、自作erみたいな人なら読みやすいしお勧め

http://www.ne.jp/asahi/comp/tarusan/index.html

IA-64の簡単な特徴

IA-64x86と明確に違う点は、命令の順序を入れ替えて高速化を図るという、Out Of Order実行や、パイプライン実行等の並列化等を、CPUが判断するのではなく、コンパイラプログラマーが判断し、CPUに命令を送るようにしたことである。

こうして、理論上は、ハードウェアのコストを下げながら、高速に実行できるようになった訳である。

Itaniumのトランジスタ効率

この項に関しては、自分で纏めたTogetter

http://togetter.com/li/82688

を更に纏め、追加や訂正したものである。

この本が出たのは、Itanium2が出る前なので、Itaniumの情報になるが、キャッシュに関して非常に面白いことが書いてある。

プロセッサが約2500万のトランジスタを、またキャッシュが2億9500万のトランジスタを集積していて、

つまり、Itaniumのトランジスタの9割超はキャッシュということになるのである。

当時のCPUというと、NetBurst(Pentium 4)辺りだと思われるが、全体のトランジスタ数は4200万で、そのうちキャッシュは2350万となっている。

http://pc.watch.impress.co.jp/docs/article/20000823/kaigai01.htm

記事に依ると、キャッシュが大分増えたと書いてあるが、それでもキャッシュは6割を越えない。Itaniumが如何にキャッシュモンスターか良く分かる。

読んだ感じ、IA-64アーキテクチャ自身、特別にキャッシュが要求される要素はあまり見受けられなかったので、Itaniumで上がった計算性能を吸収する為には、それだけのキャッシュが必要だと判断されたのであろう。

キャッシュレイテンシ

Itaniumのキャッシュは、L3まで存在する。初代のItaniumの場合、他のCPUにもあるL2キャッシュは256KBで、当時のCPUとしては平均的な容量で、特筆すべき点はない。特筆すべきはL3キャッシュで、この容量は上位のもので4MBもあった。

このキャッシュのレイテンシは以下の通り

L1 Itanium Itanium2
命令キャッシュ 1 1
データキャッシュ 2 1
L2 Itanium Itanium2
整数 6 5
浮動小数 9 7
L3 Itanium Itanium2
整数 21 12
浮動小数 24 15

L3キャッシュの性能差は、初代ItaniumでL3が別チップになっていたものが、Itanium2になって統合され、劇的に改善された結果である。

整数と浮動小数点の性能差が何故か、という点については、Itanium独特の仕様であるが、レジスタへロードする経路が異なるため、と説明されている。

なお、当時のNetBurstのレイテンシは、L1で2、L2で7とみられる。5というデータも見つかったが、Itaniumと比べ早過ぎるので、恐らく異なると思われる。

L3キャッシュに関しては、最近のNehalemのデータが個人のブログで入手できた。Bestな場合で30〜40ということなので大体30といったところだろうか。

確かにItaniumの周波数は、同時代のCPUに比べ半分程度しかないので、Itaniumの1clockのコストは、Xeon等に比べ重いことを考慮しても、特にItanium2に関しては、Wikipediaの「L3キャッシュのレイテンシが大き過ぎる」ということは無いと思われる。

※私の考えが正しいかどうかは知らない。しかし、WikipediaのItanium項は、レイテンシのことを殆ど書いてないのに、レイテンシの所為で遅いとか書くのは、どっちにせよ良くないと思う。

その他

浮動小数点演算能力としては、積和算ユニットが計2つ搭載されており、キャッシュにヒットする限りはほぼNo Waitで実行できるだけのバックボーンもあるので、1clock当たり性能は6FLOPsということになる。

この性能と、バンド幅の高さから、科学計算用途ではかなり強力なCPUとして使えるであろう。

まとめ

そもそもこの本を読んだ理由というのは、どうしてIA-64は流行らなかったか、という点である。別に流行る、と言っても、個人向けに流行るようなCPUでないことは、火を見るより明かなので、サーバ市場やスパコンで流行らなかった理由である。

サーバ市場で流行らなかった理由は、皆思っているように、x86でなかったことだと思われる。また、前述したように、コンパイラプログラマーに負荷を掛けるシステムであり、コンパイラIA-64の性能を出し切れなかった可能性は多分にある。

スパコンで流行らなかった理由は、トランジスタをキャッシュに割いてしまったことだと思われる。

科学計算の分野では、速度向上するならばあっさりアーキテクチャを変えてしまう集団が一定数居るので、アーキテクチャの変更はあまり問題にならない。(GRAPE開発陣とか)

一方、科学計算では、キャッシュがヒットするような小さなデータで計算することはあまりない。従って、Itaniumのキャッシュに依存したアーキテクチャはあまり向いてないと思われる。

もっと根本的には、IA-64の設計思想が中途半端であったことが原因だろう。IA-32の延長線とみるなら、amd64ぐらいの互換が必要だし、IA-32の軛から解き放つのであれば、もっと根本的な改良が必要と思われるのである。

最後に

最後は割と強引に纏めてみたが、実行ユニットの数とか、メモリバンドとか、まだまだ不足している情報が多いので、余裕があれば追記しようと思う。