後藤弘茂のWeekly海外ニュース

MPEG-2のエンコードまで実現できるKatmaiの新命令



●次世代アプリケーションのためのKNI

 「KNI (Katmai New Instructions)のゴールはアプリケーションをもっとヒューマンインタラクション(人間との対話性)豊かにすること」、「それは、より豊かな3Dグラフィックスや、MPEG-2ビデオのエンコード、音声認識などだ」

 9月中旬に開催された、Intelの開発者向けカンファレンス「Intel Developer Forum (IDF)」で、IntelのTicky Thakkar氏(Principal Processor Engineer)は、'99年の新MPU「Katmai(カトマイ:コード名)」と「Tanner(タナー:コード名)」が対応する新しい命令群KNIの目的を、このように表現した。KNIは、これまでのMPUには重すぎた、こうした次世代アプリケーションの性能を飛躍させるという。MMXと同様に、従来のアプリケーションを高速化する技術ではなく、あくまでもKNI対応の次世代アプリケーションを高速化する技術だ。

 アルバート・ユーIntel上級副社長兼ジェネラルマネージャ(Microprocessor Products Group)によると、KNIには「Memory Streaming Architecture(メモリストリーミングアーキテクチャ)、新しいメディア命令(New Media Instructions:ニューメディアインストラクションズ)、それにSIMD-FPの3つのキーエレメンツがある」という。KNIで増える70もの新命令(まだ詳細は明らかではない)は、この3つの要素に大別される。


●128ビットレジスタを新設したSIMD-FP

 KNIの3要素のなかでも、もっとも目立つ拡張がSIMD-FPだ。これは、浮動小数点演算をMMXと同じように「SIMD(Single Instruction Multiple Data)」化したものだ。MMXでは、パック化された複数の整数データに対して、1命令で同じ処理を並列して実行できる。SIMD-FPは、浮動小数点データを同じ手法で並列処理する。これは、AMDが開発しx86互換メーカーが共通してサポートする「3D Now!」テクノロジと共通しているが、大きな違いがある。それは、KNIでは新たに、独立したレジスタファイルを定義したことだ。

 MMXや3D Now!では、レジスタを物理的に新設せず、浮動小数点レジスタを定義し直して使っているが、KNIでは128ビット幅の専用レジスタ8本(XMM0~XMM7)を新設した。そして、128ビットの中に、32ビットの単精度浮動小数点データを4つパック化できるデータ形式を定義している。KNIのSIMD-FPでは、4つの浮動小数点演算を並列に実行できるため、処理性能は500MHzのKatmai/Tannerの場合、ピークで2GFLOPSに達する。また、レジスタが共有されていないため、SIMD-FPは従来の浮動小数点演算ユニットやMMXユニットと同時に実行できる。

 KNIのSIMD-FP命令には、ロード/ストア命令やベーシックな四則演算のほか、逆数や平方根の逆数も用意されている。従来処理に時間がかかったこの逆数や平方根の逆数では、ルックアップテーブルを使いNewton-Raphson法で精度を上げる手法により高速化するという。このほか、条件付きムーブ命令、高速にパックド形式のデータフォーマットにデータを入れる命令、SIMD-FPと整数やMMXのレジスタ間でデータを変換する命令などもある。

 このSIMD-FPがもっとも効果を発揮するのは、3Dグラフィックスのジオメトリ処理だ。現在の3Dゲームなどは、これらの処理に浮動小数点演算を使うため、整数データしか処理できない従来のMMXでは高速化ができなかった。しかし、SIMD-FPでは、3Dグラフィックスで、2倍以上の性能アップが期待できるとIntelは説明する。また、AC3オーディオのデコードや、スピーチのプロセッシング、画像のワーピングのような複雑な2Dグラフィックスの処理も高速化されると言う。


●メモリからのロード/ストアを効率化

 メモリストリーミングアーキテクチャは、データフローを新命令(メモリストリーミング命令)でコントロールすることで、バスの効率を向上させる技術だ。例えば、前もって必要なデータを1次キャッシュに読み込ませることができるプリフェッチ命令を使うことで、フェッチを連続して行ない、データ待ちによる演算ユニットのストールをなくす。オーバーラップしてデータをロードし続けることで、実際にメモリからデータが読み出されるまでのメモリのレイテンシを隠すことができるようになる。Pentium II系のバス(P6バス)はもともとパイプライン化されているため、プリフェッチの効果は大きいという。

 また、メモリストリーミング命令は、キャッシュの階層を意識した命令になっている。読み出すデータや書き込むデータが、頻繁に再利用するものか、それとも1度しか使わないものかによって、2次キャッシュに入れるか入れないかを明示的にコントロールできる。たとえば、MPEG-2のエンコードでは、頻繁に再利用するIフレームだけを2次キャッシュに入れることで、2次キャッシュのスラッシングが起きるのを防ぐことができるという。

 Intelによると、メモリストリーミングアーキテクチャは、さまざまなタイプのアプリケーションに有効で、10%程度はパフォーマンスが向上するという。


●MPEG-2エンコード向けの命令も追加

 KNIの3つ目の要素ニューメディアインストラクションズは、従来のMMXレジスタを使う命令で、頻繁に使う処理を新たに加えたという。たとえば、要素間の差の絶対値の和を求める「Sum of Absolute Differences命令」は、MPEG-2ビデオなどのエンコードで使われる。

 MPEG-2のエンコードでは動き補償予測が、膨大な計算量を必要とする。動き補償予測では、ひとつのフレームから16×16ドットのマクロブロックを取り、前後のフレームのサーチエリアの中で、そのブロックとよく似ているブロックを探す処理を行なう。ブロックがそのまま移動していれば、そのブロックの画像情報はフレーム間で共有できるため、データ量を減らせるからだ。ブロックが同じかどうかは、ブロックの各ドットを、サーチエリアのドットと1ドットづつ比較することで行なう。具体的にはドット間の差を求めて、その絶対値を16×16ドット分合計する。KNIの新命令は、この絶対値の算出と足し算を、複数のドット分まとめて1命令で処理できるので、大幅なスピードアップが見込める。

 MPEG-2のエンコードでは、このSum of Absolute Differences命令とメモリストリーミングアーキテクチャによって、720×480ドット30フレームのリアルタイムエンコードが、ソフトウェアで可能になるという。ニューメディアインストラクションズには、このほか「average with rounddown」、「pack maximum」、「pack minimum」などが用意される。


●包括的なKNI

 KNIは、長い間、SIMD-FPを意味すると思われていた。しかし、ようやく概要が明らかにされたKNIは、もっと包括的で規模の大きな拡張となっている。3Dグラフィックスだけでなく、ビデオや認識処理など、広範なアプリケーションの高速化が実現できる。もっとも、KNIは、他のハイエンドMPUが取り入れつつあるマルチメディア処理命令と、似たものが多く、とくに独創的というわけではない。

 SIMD-FPの部分だけを取ると、KNIは先行する3DNow!とある程度似通っている。例えば、逆数や平方根の逆数などの高速化では、似たようなアプローチを取るようだ。ただし、KNIが128ビット幅のレジスタを新設した意味は大きい。KNIでは32ビット単精度浮動小数点データを4個パック化できるのに対して、3DNow!では64ビット幅のレジスタに32ビット単精度浮動小数点データを2個パック化する仕様となっている。ただし、K6-2プロセッサでは実際には3DNow!命令の実行はスーパースカラー化されており、2命令を同時に実行できる(できない組み合わせもある)ため、理論上のピーク性能はKatmai/Tannerと変わらなくなる(動作周波数が同じ場合)。そのため、Intelでは、SIMD-FPレジスタがフラットに128ビット確保できる点を、プレゼンテーションで強調していた。実際、レジスタの量自体が多く、しかも従来のMMX命令や浮動小数点命令と共有しないため、実際の性能はKNIの方が上回る可能性が高い。

 もっとも、レジスタの拡張は、Intelだからこそできたことでもある。x86互換メーカーが独自にレジスタを拡張し、しかもそれがIntelの拡張と互換性がなかった場合、OS側が喜んで対応するかどうかわからない。次の焦点は、KNIにx86互換メーカーが対応するか(法的にできるか)どうかになるかも知れない。


●倍精度浮動小数点演算の強化はMercedで?

 ところで、このコラムでは、KNIで倍精度(64ビット)の浮動小数点データがサポートされるというウワサについて何度か触れた。PC向けアプリケーションレベルの3Dグラフィックスでは、単精度で十分だが、ワークステーションの世界の3Dグラフィックスや科学技術計算用途では、倍精度のサポートは必須となってくる。実際には、Intelは単精度しかサポートしなかったわけで、それは今回のKNIの拡張の目的が、前者のPCアプリケーションに絞られていることを意味している。

 IntelがKNIを単精度に絞った理由についてのヒントは、電子デバイス専門誌Electronic Engineering Timesの記事「Internal layout of Intel's Merced comes to light」(Electronic Engineering Times,9/28)中に見つけることができるかも知れない。ここには、彼らが独自に入手したIntelのIA-64プロセッサ「Merced(マーセド:コード名)」のフロアプランのブロック図が掲載されている。そこに見えるのは、巨大な浮動小数点演算ユニットだ。

フロアプラン そして、これをまた、IDFのアルバート・ユーIntel上級副社長兼ジェネラルマネージャ(Microprocessor Products Group)のキーノートスピーチで公開された、Mercedのフロアプランの写真(右)と対照させて見ると面白い。もし、各ブロックの配置がElectronic Engineering Timesの記事の通りだとすると、写真に見えるMercedの浮動小数点演算ユニットは、チップ面積の10%かそれ以上という、とてつもないサイズになる。つまり、Intelは、倍精度浮動小数点演算の性能強化は、IA-64で抜本的に行なうつもりなので、それまではSIMD化などで中途半端に強化はしないということなのだろう。


バックナンバー

('98年10月8日)

[Reported by 後藤 弘茂]


【PC Watchホームページ】


ウォッチ編集部内PC Watch担当pc-watch-info@impress.co.jp