L.W.R.(59) MMXテクノロジ最適化テクニック 小鷲英一著 1997、アスキー

Joseph Halfmoon

前回は486本だったので、今回はPentium「関係」の御本です。Pentiumでも後期。登場した当時はインテル期待のテクノロジだった筈のMMXですが、インテル自ら「黒歴史」化してとっくの昔に非推奨な機能です。でもま、多分、今でも互換性のために奥底に眠っているかも。決して呼び出されることは無いのだけれども。どうなんだ。

※『Literature Watch Returns (L.W.R.)』の投稿順 index はこちら

486、Pentium、Pentium Proとマイクロアーキテクチャの大改良

今回は1997年の御本です。平成9年です。勝手に前世紀(20世紀)の御本を古文書と称しているので、本シリーズの対象であります。

前回の486のときに、486は命令セット的には386と大差ないけど、内部(マイクロアーキテクチャ)を大変更して性能は大幅アップした、と書きました。RISC(SPARCやMIPSデス。Armは存在したが眼中になかった時代)勢からx86は遅い遅いとディスられ続けていたので、それに一矢報いるためだったと思います。486での改良にとどまらず、インテルは必死に速度向上策を打ちだします。1993年登場のPentiumでは遂にスーパースカラー(1クロックで複数の命令を発行できる)化を果たします。なお、Pentiumは、世間的には586という御名前で登場するものと思われてましたが、他社(インテル的にはイミテーターと蔑称を与えていた)との差別化を図るため商標として有効なお名前になって今にいたります。

インテル的にはRISC系(当時、インテルもRISC、それも複数アーキテクチャを開発して売っていたことがあるのです。それどころか組み込み用途、主としてLBP向けに、RISCでは業界一の数量を売り上げたりもしていたことがあるのです。けれどx86に比べると儲からないのでやめたとか、やめさせられたとか。知らんけど)でスーパースカラー化を行っていたので、それをx86系にも展開したというところでしょう。スーパースカラー化x86の第1世代がPentiumということになります。ペアリングという「わかりやすい」方法ですが、うまく嵌ると2命令を同時に実行できました。

その後も手を緩めないインテルは1995年には、Pentium Proを投入します。お名前的にはPentiumの「高級品」的なネーミングですが、内部のマイクロアーキテクチャ的には激変。Pentium的な制限のない、外部から見える命令を処理単位にバラして多数を同時に実行できる世界へと踏み出しました。どの命令がどういう順番で実行されているのか外から見ても分からないっと。この辺になると、遅い遅いとディスっていたRISC側がインテルの開発速度についていくのが辛くなり、息切れし始めるのです。また同じx86のAMDも振り落とされそうになり、独立系ベンチャーのNexGenのNx686を買収してなんとかPentium Proと対抗することになります。

インテルが高速化に血道をあげていたこの時期に登場したのが、MMX登載のPentiumです。当初の正式名称は、Pentium Processor with MMX Technologyだったらしいです。これが1997年。まさにこのご本の年。

SIMD

過去回のコンピュータ・アーキテクチャ本を読んでいたら分かりますが、SIMD(Single Instruction Multiple Data)という概念は相当前からあったらしいです。ただ、x86のような皆がフツーにそしてパーソナルに使っているコンピュータでSIMDできるようにしたのはMMXが嚆矢ではないかと思います。個人的にはMMX登場の10年くらい前にSIMD命令を作りかけたのだけれども大人の事情でボツだったような。。。

まあそういうわけで1997年にMMXが登場した時点ではインテルが相当力を入れていたことが分かります。MMX付きのPentuim登場の数か月後には、Pentium ProにMMXを登載した雰囲気(それだけでないと思うが)のPentium IIが登場、MMXで他を圧倒せんという雰囲気デス。

この辺でMMXのようなSIMDに需要ありと思われた理由は、当時の「マルチメディア」事情じゃなかったと思われます。今でも思い出します、Windows95(当然1995年登場)のCDの中に、音楽ビデオのデータが入っていて、小さなウインドウの中でビデオが再生できたのです。それを見たのはフツーのPentium登載のPCだったか486機だったか。動画用のデバイスの仕事などもしたことあったので、原理は知っていても手元のPCで出来るとなったときのうれしさは各段です。そこで「マルチメディア」、ぶっちゃけビデオとオーディオの再生性能の向上が急務となりました。再生レートの高いビデオと綺麗なステレオ音響が欲しいと。

MMXとその黒歴史化

そこにピッタンコなMMXが登場、というわけっす。ビデオは2D、オーディオはステレオ、複数データに同じ処理を加えることが多くSIMD命令にピッタリだと。

その際、インテルは「あまり使われていなかった」FPUのレジスタどもをMMXでも使うように決定しました。こうすれば新たなレジスタセットという大きなハード追加をせずに済み。既存のオペレーティングシステムとも相性がよく、小規模なドライバ等を開発するだけでSIMD命令をサポートできるっと。

ただしこの決断はハズレだということがしばらくして判明しました。まず、MMXはFPUレジスタに間借りしたとは言え、整数によるDSP処理向けっす。しかしライバルAMDは浮動小数処理もSIMD化できる 3D Now!(3D計算には浮動小数いるもんね)を投入してきました。おっと3Dグラフィックをサポートする場合には浮動小数もSIMD化しないと。また、FPUレジスタは内部的には80ビット幅ありますが、通常使えるのは64ビット分です。単精度2並列が限界。SIMDの場合並列度が高いほど性能UPっす。4並列化などするときにはビット幅が足りませぬ。そして一番の問題が、FPUとの切替使用のオーバヘッドです。8087以来の伝統をもつx86系のFPUは、そのクセ強なレジスタ構造(レジスタ・スタック)で、今となってはとても評判が悪いですが、超越関数どもなど直接実行する命令をもっている唯一のハードなので、SIMDが浮動小数をサポートした今でも使われることがあります。ところがMMX命令はFPU命令とは混在使用できないので、切り替えが必要。そして切替がメンドイ(時間がかかる)です。そんなこんなでインテルはMMXに見切りをつけ、SSE(Streaming SIMD Extensions)という新たなSIMD命令群(のちにもっと強力な奴らもくるけど)にスイッチします。それは世紀末になりかけた1999年のSSE登載 Pentium IIIからです。MMXが一番だったのは僅かに2年ほど。こんなに立派な解説の御本が出ているのに。。。

今回、MMX命令をちょっと触ってみたかったので、別件シリーズでお世話になっているFreeDOS(MS-DOSの魔改造OS)上のdebug/x(これまたMS-DOSのdebugの魔改造デバッガ)使ってみようかと思ったのです。そしたらば MMXはサポートされてないみたい。魔改造OSとデバッガにも見放されているMMXは黒歴史?

L.W.R.(58) はじめて読む486、蒲池輝尚著 1994、アスキー へ戻る