今年後半に予定されている次世代の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レポート
米Intel、Pentium 4のステッピングを変更、FSB800MHzのCPU対応も公開
【IDF Spring 2003レポート】2日目基調講演 - デスクトップの主役はPrescott
Intel
http://www.intel.com/
| ソニー、A4サイズの薄型軽量デジタルペーパー端末を開発 [00:00 5/18] |
| 最大2200万件のID流出の可能性 -Yahoo! JAPANのID管理サーバに不正アクセス [23:03 5/17] |
| Google、Gmailに送金機能 [19:09 5/17] |
| Firefox、プライバシー問題でCookieの実験開始へ - 22から [18:37 5/17] |
| 【レポート】"HANA"でビジネスの境界を拡大 - SAPのCTOがUIやHANAクラウドの生まれ変わりに向けた取り組みを披露 [18:00 5/17] |
|
ももクロ、『5TH DIMENSION』ツアーのBD&DVDとアナログ盤アルバムを発売! [22:30 5/19] エンタメ |
|
[ハローキティ]モー娘。と「LOVEマシーン」披露 初コラボにノリノリ! [22:01 5/19] ホビー |
|
元AKB48&SDN48の小原春香、総選挙は「野呂さんとめーたんには負けたくない」 [22:00 5/19] エンタメ |
|
今年で28歳の太田千晶、婚活に意欲「見た目はイケてなくても優しかったら!」 [22:00 5/19] エンタメ |
|
【レポート】数字の「0」?それとも漢字の「日」? -日テレのロゴデザインについて宣伝部長に聞いてみた [21:00 5/19] クリエイティブ |
4つの診断で、自分の適性を見つめなおそう!
働くこと・挑戦し続けることへの思いを綴ったインタビュー
あなたにピッタリのアドバイスを読むことができます。
転職に必要な情報が収集できます
企業からアプローチのメッセージが届きます。