【レポート】Prescottに追加された新しい命令セットを探る

  [2003/04/14]

今年後半に予定されている次世代のPentium 4、コードネーム「Prescott」で追加される新しい命令セットの詳細が、実製品の投入に先がけてデベロッパ向けに公開された。Prescottで何が変わり何が変わらないのか、多少の参考にはなりそうだ。新命令セットの概要を紹介していこう。

○追加された命令セットの概要

x86(IA-32)のベースは1985年にリリースされたi386DXだが、世代を重ねるたびに、いくつかの新しい命令セットが追加され現在に至っている。細かな命令の小追加に加え、過去、MMX関連(Pentium/MMX)、SSE(Pentium III)、SSE2(Pentium 4)という3回の大規模な命令の追加が行われてきた。

これまで行われた大規模な命令の追加と比較すると、Prescottに行われた命令セットの追加は小追加にとどまっている。現行のPentium 4にいくつかの命令を追加する程度、と考えて良いだろう。大雑把に分類するとPrescottで追加される命令は次の3種に分けられる。

・CPUID関連
ソフトウェアで新世代(Prescott)を識別するため従来からあるCPUID命令が拡張されている。

・Hyper-Threadingのための新命令
Pentium 4 3.06GHzで導入されたHyper-Threadingだが、さらにソフトウェアの対応を向上させるため、Hyper-Threadingに特化した2個の命令が追加されている。詳しくは後述するが、2個の新命令はPrescott以外でもHyper-Threadingをサポートするすべてのプロセッサでサポートされることになるようだ。

・Prescott新命令

SSE/SSE2関連で10個の新命令と浮動小数点演算命令が1個、合計11個の命令が追加される。SSE/SSE2関連の命令は従来も少しづつ強化されているので、その一環だろう。「Prescott新命令」と実際に命名されているのは、この11個の命令だけだ。

○Hyper-Threadingのための新命令

では興味深いところから見ていこう。Prescottでは、Hyper-ThreadingのためにMONITOR、MWAITという2つの命令が追加されるが、これはHyper-Threadingの性能を向上させるのに大きな威力を発揮する。

ソフトウェアで2個以上のスレッドを使って処理を進める際に、互いに協調して処理を進めていくケースが多々ある。場合によっては、片方のスレッドが、ある処理を行うまで待って処理を再開しなければならないケースもある。

そのような時には、たいてい次のようなコーディングを行っていた。

bool flag = FALSE; // 処理が完了したかどうか調べるフラグ
....
while(!flag) { // 別のスレッドがフラグを書き換えるまで無限にループする。
// 何もしない
}

上記はflagという変数をFALSE(偽)にセットしておき、別スレッドがflagをTRUE(真)にするまでは無駄にループする、という内容だ。マルチプロセッサの場合、このようなコードは(効率はともかく)問題にならない。しかし、Hyper-Threadingでは大問題だ。

ご存じのように、Hyper-Threadingは1個のCPUが擬似的に2個のCPUとして振る舞う。従って、演算などを行うリソースは1個分しかない。そのような環境で上記のコードを実行すると無駄なループが貴重なCPUのリソースを食いつぶしてしまい、パフォーマンスが低下するわけだ。

MONITOR、MWAIT命令は、それを防ぐために設けられている。具体的には、MONITORでメモリアドレスを指定し、MWAITを実行する。別スレッドが指定したメモリアドレスにアクセスするまで、CPUリソースを別スレッドに解放して停止する。上記のような処理を擬似的にMONITOR、MWAITを使って書くと次のようになる。

bool flag = FALSE;
...
MONITOR(&flag); // EAX = &flag, ECX = 0, EDX = 0, MONITOR EAX,ECX,EDX
if( !flag ) MWAIT();// EAX = 0, ECX = 0, MWAIT EAX,ECX

MONITORでflagのアドレスを指定し、MWAITを実行すると、このスレッドは停止して別スレッドにCPUリソースが解放される。別スレッドがflagにアクセスして真になるとMWAITが終了して、このスレッドが動き出す仕掛けだ。無駄なループがCPUのリソースを食いつぶすのを避けつつ、スレッドを停止して別スレッドと同期した処理が行えるわけだ。

○Prescott新命令/CPUID命令の拡張

Prescott新命令は先に述べたとおりSSE/SSE関連とFPU関連で合計11個の命令で構成されている。あまり詳細に述べても面白いものではないので概略にとどめよう。

SSE/SSE2関連はパックド浮動小数点の演算を支援する命令などが追加される。加算・減算が複合した形で行えるのが新命令群の特徴で、たとえばADDSUBPDを使うと64ビット浮動小数点数×2をパックした値に対して、下位64ビットに減算、上位64ビットに加算を1命令で行うことができる。

一方、浮動小数点演算にはFISTTP(Store Integer with Truncation)が追加された。従来は2命令(以上)で行っていた処理を1命令化するもので、具体的にはスタックトップにある浮動小数点数を整数に変換(打ち切って整数変換)してメモリに書き込み、スタックをPOPする、という動作を行う。便利な命令と言うところだろうか。

CPUIDの拡張はPrescott新命令のサポートのチェックと、MONITOR/MWAITのチェックが異なるのが特徴といえる。Prescott新命令はサポートしていないが、MONITOR/MWAITをサポートしているというCPUがあり得るわけだ。(もしかすると)従来の非PrescottのPentium 4でもHyper-Threading対応のものはMONITOR/MWAITがサポートされるのかも知れない。

以上が概要だが、Prescottの秘密が多少は分かると期待していた読者は期待はずれだったかも知れない。命令数からいっても小追加の規模でとどまっているので、これで何か新しい展開があるというものではないだろう。しかし、Prescottは4GHz超で動作するHyper-Threading対応のプロセッサとなるのでパフォーマンスは期待して良さそうだ。

(米田聡)

IDF-J Spring 2003レポート
http://pcweb.mycom.co.jp/news/special/2003/04/09/01.html

米Intel、Pentium 4のステッピングを変更、FSB800MHzのCPU対応も公開
http://pcweb.mycom.co.jp/news/2003/02/24/10.html

【IDF Spring 2003レポート】2日目基調講演 - デスクトップの主役はPrescott
http://pcweb.mycom.co.jp/news/2003/02/20/28.html

Intel
http://www.intel.com/



IT製品 "比較/検討" 情報

転職ノウハウ

あなたが本領発揮できる仕事を診断
あなたの仕事適性診断

シゴト性格・弱点が20の質問でサクッと分かる!

「仕事辞めたい……」その理由は?
「仕事辞めたい……」その理由は?

71%の人が仕事を辞めたいと思った経験あり。その理由と対処法は?

3年後の年収どうなる? 年収予報
3年後の年収どうなる? 年収予報

今の年収は適正? 3年後は? あなたの年収をデータに基づき予報します。

激務な職場を辞めたいが、美女が邪魔して辞められない
激務な職場を辞めたいが、美女が邪魔して辞められない

美人上司と可愛い過ぎる後輩に挟まれるエンジニアの悩み

人気記事

一覧

イチオシ記事

新着記事

TVアニメ『ステラのまほう』、アニメキービジュアル&メインキャストを公開
[16:39 6/27] ホビー
iiyama PC、税別39,980円のM.2 SSD搭載15.6型ノートPC
[16:31 6/27] パソコン
NEDO、電力系統の安定運用に向け太陽光発電の遠隔出力制御システムを開発へ
[16:24 6/27] テクノロジー
[内田彩]「ラブライブ!」声優が初ツアーを完走
[16:18 6/27] ホビー
KDDI、バットマンモチーフの「Galaxy」7月4日予約開始 - 限定100台で14万円
[16:17 6/27] 携帯

求人情報