
■ MMXレジスタ ■
前回はMMX技術について簡単に動作概念を説明しました。
MMXとはMulti Media eXtensionの略であり、インテルが開発し
た技術の事でした。ちょっと復習してみましょう。
以下にMMXの動作イメージを示します。
1.データaからレジスタへデータを読み出す。
レジスタ メモリ
┌────────────┐ ┌───┐
│ 3 2 1 0│←─────┤ 0│データa
└────────────┘ ┌────┤ 1│
↑ ↑ ↑ │┌───┤ 2│
│ │ └─────┘│┌──┤ 3│
│ └─────────┘│
└─────────────┘
2.データbからレジスタへデータを読み出す。
レジスタ メモリ
┌────────────┐ ┌───┐
│ 13 12 11 10│←─────┤ 10│データb
└────────────┘ ┌────┤ 11│
↑ ↑ ↑ │┌───┤ 12│
│ │ └─────┘│┌──┤ 13│
│ └─────────┘│
└─────────────┘
3.データaにデータbの値を加算する。
レジスタ
┌────────────┐
│ 16 14 12 10│
└────────────┘
↑ ↑ ↑ ↑
+ + + +
│ │ │ │
┌──┴──┴──┴──┴┐
│ 13 12 11 10│
└────────────┘
4.レジスタからデータaへデータを書き込む。
レジスタ メモリ
┌────────────┐ ┌───┐
│ 13 12 11 10├─────→│ 10│データa
└──┬──┬──┬───┘ ┌───→│ 11│
│ │ │ │┌──→│ 12│
│ │ └─────┘│┌─→│ 13│
│ └─────────┘│
└─────────────┘
これがMMX技術の動作概念でした。
MMX技術が出来る前までは1つのデータを1つずつ処理しなけ
ればなりませんでしたが、MMX技術を導入する事で複数のデー
タをいっぺんに処理する事が出来るようになったのでした。
後はこのMMX技術を「EAX」レジスタ等で動作するようにすれば
レジスタを効率良く使用できるようになるのでした。
ここまでは前回説明しました。
しかし、インテルの人達は「EAX」レジスタ等にはこれらの処
理が行なえるようにはしませんでした。
それは何故なのでしょうか?
実は「EAX」レジスタ等よりも、もっと使われる機会の少ない、
もったいないレジスタが存在しているのです。
このレジスタは「浮動小数点レジスタ」と呼ばれる物で、「科
学技術計算」を行なう為のレジスタです。
より精密な計算が行えるように、80ビットの大きさがあるの
ですが、今まで科学技術計算を行なう以外には使われる事があ
りませんでした。
「EAX」レジスタより大きなレジスタなのに使われる機会はず
っと少なかったのです。
これはもったいない事です。
という事で、インテルの人達は「EAX」レジスタ等よりもこの
「浮動小数点」レジスタの方にMMX技術を適用する事にしまし
た。
浮動小数点レジスタは80ビットの大きさがあるのですが、中
途半端なビット数なのでこの内の64ビットを使う事になりま
す。
以下に浮動小数点レジスタをMMXレジスタとして使用している
図を示します。
1.データaからレジスタへデータを移動する。
レジスタ メモリ(データa)
┌────────────────────────┐ ┌───┐
│ 7 6 5 4 3 2 1 0│←───────┤ 0│
└────────────────────────┘ ┌──────┤ 1│
↑ ↑ ↑ ↑ ↑ ↑ ↑ │┌─────┤ 2│
│ │ │ │ │ │ └─────┘│┌────┤ 3│
│ │ │ │ │ └─────────┘│┌───┤ 4│
│ │ │ │ └─────────────┘│┌──┤ 5│
│ │ │ └─────────────────┘│┌─┤ 6│
│ │ └─────────────────────┘│┌┤ 7│
│ └─────────────────────────┘│
└─────────────────────────────┘
2.データbからレジスタへデータを移動する。
レジスタ メモリ(データb)
┌────────────────────────┐ ┌───┐
│ 17 16 15 14 13 12 11 10│←───────┤ 10│
└────────────────────────┘ ┌──────┤ 11│
↑ ↑ ↑ ↑ ↑ ↑ ↑ │┌─────┤ 12│
│ │ │ │ │ │ └─────┘│┌────┤ 13│
│ │ │ │ │ └─────────┘│┌───┤ 14│
│ │ │ │ └─────────────┘│┌──┤ 15│
│ │ │ └─────────────────┘│┌─┤ 16│
│ │ └─────────────────────┘│┌┤ 17│
│ └─────────────────────────┘│
└─────────────────────────────┘
3.データaにデータbの値を加算する。
┌────────────────────────┐
│ 24 22 20 18 16 14 12 10│
└────────────────────────┘
↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
+ + + + + + + +
│ │ │ │ │ │ │ │
┌──┴──┴──┴──┴──┴──┴──┴──┴┐
│ 17 16 15 14 13 12 11 10│
└────────────────────────┘
4.レジスタからデータaへデータを移動する。
レジスタ メモリ(データa)
┌────────────────────────┐ ┌───┐
│ 24 22 20 18 16 14 12 10├────────→│ 10│
└──┬──┬──┬──┬──┬──┬──┬───┘ ┌──────→│ 12│
│ │ │ │ │ │ │ │┌─────→│ 14│
│ │ │ │ │ │ └─────┘│┌────→│ 16│
│ │ │ │ │ └─────────┘│┌───→│ 18│
│ │ │ │ └─────────────┘│┌──→│ 20│
│ │ │ └─────────────────┘│┌─→│ 22│
│ │ └─────────────────────┘│┌→│ 24│
│ └─────────────────────────┘│
└─────────────────────────────┘
浮動小数点レジスタの80ビットの大きさの内の64ビットが
使えるので一気に8バイトずつ処理が行なえるようになりまし
た。
次回はMMX技術を使用したプログラムを実際に作成してみる予
定です。