Hyper-Threading Technology短評(たるさん的三位一体説)   

2002年11月16日




☆Hyper-Threading TechnologyがついにPen4でEnable   
Pentium4-3.06GHzがついに発売された。 単なる高クロックバージョンならば何の興味も無いのだが、 こいつはHyper-Threading Technology Enable なのだ。

たるさんは以前からHyper-Threading Technologyには大いに注目してきた。 それは、この技術がILP(命令レベルでの並列性抽出)の限界を打ち破る 高い可能性を秘めていると考えているからだ。

以前、たるさんはなぜintelがNetBurstアーキテクチャなどという、 非効率アーキテクチャを採用したかを シロウトなりに検討してみたことがあった。
2001年10/7〜10/2頃書いた下記の内容がそれである。

トレースキャッシュは諸刃の剣か?(その1)
トレースキャッシュは諸刃の剣か?(その2)
トレースキャッシュは諸刃の剣か?(その3)
トレースキャッシュは諸刃の剣か?(最終章)

当時はPentium4がHyper-Threading Technologyを隠し搭載している なんて知るよしもなかったから、この時は 「NetBurstアーキテクチャはCPUの発熱を抑える事により 高クロック化を促進するのが目的。」という結論を導き出していた。 「単純にNetBurstだから高速というわけではなく、 NetBurst自体は逆に高速化に直接は寄与しない。」 という事が重要と考えていたのである。

しかし、NetBurstアーキテクチャはHyper-Threading Technology導入のための 伏線だったのである。その理由は後に明らかになる。 また、Hyper-Threading Technologyの能力向上についての予測も行っている。

バクチでバブル退治  (投機的マルチスレッドの衝撃、その1) などがそれで、投機的マルチスレッド処理を伴わない (つまり現状のHyper-Threading Technologyでの)性能向上について予想した。

目からウロコのPentium4再考(≠最高) からの一連の記事では、「雑誌説明とは異なり、 Hyper-Threadingテクノロジの本質はキャッシュミスや 分岐予測ミスのペナルティー減にあると考えるのである。」 と予想している。

コンテンツの分量から言っても、Crusoeネタ、UWBネタを越えて、 当サイト最大の関心事なのである。

☆Hyper-Threading Technologyの各速報を見てみる。   
では、Web版の速報を見てみよう。 Webで速報が出ているのは、大雑把に見渡したところ下記の3紙だ。

ついに投入される新テクノロジ - HyperThreadingに迫る
Pentium 4 3.06GHz速攻レビュー! 〜Hyper-Threadingの効果は如何に?
ハイパースレッディング搭載Pentium4を試してみた

一番内容が充実しているのは ついに投入される新テクノロジ - HyperThreadingに迫るである。 とにかく記事の量が多く、検討項目が仔細に亘っている。

しかし、たるさん的にはこれらの記事は3記事ともに解説に不満が残る。 なぜならば、これらの記事ではHyperThreadingによる高速化の理由をすべて Out-Of-Order機構の非効率性改善によると考えているからである。

例えば、ブルーとグリーンという2つのスレッドを実行する場合は、 よく下記のような説明図が掲載されている。

スレッド・ブルー
実行ユニット1 命令12 命令4
実行ユニット2 命令11 命令6 命令3
実行ユニット3 命令9 命令5 命令2
実行ユニット4 命令10 命令7
実行ユニット5
実行ユニット6 命令8 命令1


スレッド・グリーン
実行ユニット1 命令11 命令3
実行ユニット2 命令10 命令6
実行ユニット3 命令8
実行ユニット4 命令12 命令5 命令1
実行ユニット5 命令9 命令7
実行ユニット6 命令4 命令2


Hyper-Threadingによる効率的実行のウソっぽい雑誌説明図

実行ユニット1 命令11 命令12 命令3 命令4
実行ユニット2 命令10 命令11 命令6 命令6 命令3
実行ユニット3 命令8 命令9 命令5 命令2
実行ユニット4 命令12 命令10 命令5 命令7 命令1
実行ユニット5 命令9 命令7
実行ユニット6 命令8 命令4 命令2 命令1


雑誌などで上記のような説明をよく見かけることだろう。 あぁ、またかぁ...といいかげんに食傷気味な図だ。

以前にも述べたが、HyperThreadingの本質は 分岐予測ミスとキャッシュミスのペナルティー減にもあるのであって、 上図のようなOut-Of-Order機構の非効率性改善だけですべてを説明するのは 実情の1/3も説明していない。

なぜそんなことになったのかといえば、それはこれらの記事を書く ライターがintel発表を鵜呑みにして... おっと、こういう激辛コメントは誹謗中傷になりかねない。 それに、こういう表現はたるさんの本意ではない。 この辺でやめにしておこう。失礼失礼。

というわけで、事の本質を正しく捉えている記事はないものかとネット上で探してみた。 まず、たるさんお気に入りの凄腕ライタ・後藤弘茂氏の記事ならば何かつかんでいるかも知れない。

調べてみると、 Intelがひたすらメモリ帯域の拡大にこだわる理由 という記事で「Hyper-Threadingでメモリレイテンシを隠蔽 」と表題の付いている 項目がある。この内容は、たるさん言うところの 「Hyper-Threadingの本質はキャッシュミスのペナルティー減」と言うことと、 表現は違っても技術的には同一な内容である。

なぜならば、高メモリレイテンシの最大のデメリットは キャッシュミス時のストール回復時間が長いことにあるからだ。 後藤氏、さすがである。

だが、後藤氏の記事をもってしても 「Hyper-Threadingの本質は分岐予測ミスのペナルティー減」 という3つめの理由については言及がなかった。(Googleで調べた範囲ではだが...)

☆三位一体の記事を探してみる。   
たるさん的予想では

1.Out-Of-Orderの非効率性改善
2.キャッシュミスのペナルティー減
3.分岐予測ミスのぺナルティー減

という3つの理由のうち、2.と3.が重要で、1.はどちらかというと おまけ的扱いである。もちろん効果無しとまでは言わないが、 2.3.の効果が寄与大と予想している。

しかし、百歩譲って三位一体と考えても、これらに言及している ライタがほとんどいないという現状はいったいどうしたことか?

検索サイトを駆使して探してみると、ようやく一人だけ事の本質を すべて正しく捉えているライタに遭遇することができた。

それがこれ、
【レポート】Hyper-Threadingテクノロジを解説する(1) マルチプロセッシングの基礎
という(4)まで続く藤広哲也氏の一連の記事だ。

この記事は内容的にたるさんの意見と見解がほぼ一致する。 そして、プロのライタゆえに内容の濃さはもちろん当サイトを上回る。 特に(2)にその内容が含まれているのであるが、 ぜひ一読して読んでみていただきたい。

☆Hyper-Threading Technologyはキャッシュミスや分岐予測ミスにも効果がある。   
まず、Hyper-Threading Technologyによる高速化の理由を、 上記の食傷気味説明図にあわせて正しく説明してみよう。

Hyper-Threading Technologyはパイプラインバブルを他のスレッドで 埋めることで効率を改善するアーキテクチャである。 そして、他のスレッドをどうやって詰め込むかには、 粒度の細かい方式と、粒度の荒い方式がある。

たるさんは以前のコンテンツで粒度の細かい方式を予想し、性能予測記事を書いた。 実際この予想は的中し、Pentium4のHyper-Threading Technologyは 2スレッド固定での粒度の細かい方式 であることが後に明らかとなっている。

粒度が細かい場合、たとえOut-Of-Oeder機構の効率改善が0%だったとしても、 (つまり、雑誌解説によるような効率UP効果が0%だったとしても) システム全体としては高速化が可能なのだ。 それを説明しよう。

Out-Of-Order完全バッティング時の高速化
実行ユニット1 命令7 命令7 命令4 命令4 命令1 命令1
実行ユニット1 命令8 命令8 命令5 命令5 命令2 命令2
実行ユニット1 命令9 命令9 命令6 命令6 命令3 命令3
実行ユニット4
実行ユニット5
実行ユニット6


例えば上記ような処理はシングルスレッドCPUでもスレッド・ブルーで 3サイクル、スレッド・グリーンで3サイクル必要で、合計6サイクルかかる。 しかし、雑誌説明通りOut-Of-Order機構の非効率性改善のみが Hyper-Threading Technologyの効果ならば、このような 演算リソースの完全バッティング状態では まったく効率化せず、Hyper-Threading Technologyでもやっぱり 6サイクルかかる事になる。

このような場合、Out-Of-Order機構のHyper-Threading Technologyによる 効率化は雑誌説明通りならば起こりえない。 リソースの完全バッティングはHyper-Threading Technologyでも回避できないからだ。 (空いているリソースに別スレッドの命令が入り込むため、高速化するのである。)

では、もしここでスレッド・グリーンの命令4でキャッシュミス (分岐予測ミスでも状況は同じ。)が発生し、再読込ペナルティーが仮に 4サイクルだったと仮定してみよう。

シングルスレッドCPUではスレッド・グリーンが キャッシュミス・ペナルティーを受けて 7サイクルとなるので、2スレッドをすべて処理するためには 合計10サイクル必要だ。

ではHyper-Threading Technologyではどうなるのであろうか?

Out-Of-Order機構完全バッティング時でも効率改善の図
実行ユニット1 命令7 命令4 命令待ち 命令待ち 命令7 命令4 命令1 命令1
実行ユニット1 命令8 命令5 命令待ち 命令待ち 命令8 命令5 命令2 命令2
実行ユニット1 命令9 命令6 命令待ち 命令待ち 命令9 命令6 命令3 命令3
実行ユニット4
実行ユニット5
実行ユニット6


Hyper-Threading Technologyでは、キャッシュミスの回復中にも もう一方のスレッドを実行できるため、図の通り8サイクルで処理を完了できた。

つまり、キャッシュミス中のペナルティーが シングルスレッドの場合より小さいのだ。 (分かりやすく説明するため非常に特殊な例を挙げたが、 考え方は実際のPentium4でも同じである。)

これは分岐予測ミスでも同様である。シングルスレッドではミスしたステージ以前を すべて破棄しなければならなくなるのに対し、Hyper-Threading Technologyでは もう一方のスレッドの内容を処理している部分は破棄の必要がない。

これらの高速化は、もちろん雑誌説明通りではまったく説明が付かない のである。 (もちろん藤広哲也氏、後藤宏茂氏の名解説は除く。)

☆たるさんは、なぜキャッシュミス・分岐予測ミスの寄与が大きいと考えるのか?   
ではもう少し深くキャッシュミスに考えてみよう。 1スレッドの場合、キャッシュミスが起こると 正しい命令を2次キャッシュ(それもミスったらメインメモリ) から読み出さなければならない。 しかも、NetBurstアーキテクチャでは命令デコードのペナルティーまで 付け加わるのである。 Pentium4では、トレースキャッシュに的中する限りデコードの必要性がないからだ。 (厳密に言うとμOPS命令デコードの手間があるが、X86命令直接デコードの手間よりは 比較にならない位ラクチン。)

というわけで、一度でもキャッシュミスが発生すると、新たに命令が届くまで パイプラインは完全に停止してしまう。 その場合の非効率性はOut-Of-Order時のリソース競合による非効率性の 比ではない。Out-Of-Order時のリソース競合では、競合が発生した 一部の命令に対する遅延はあっても、 パイプライン全体の完全ストップはあり得ないからだ。

これは分岐予測においても同様で、分岐予測に失敗すると影響を受けるステージ (パイプラインの17段ステージ以前全部)はすべて破棄せざるを得なくなる。

この場合、どれほどのパイプラインバブルが発生しているか、 Out-0f-Order機構のリソース競合のケースと比較して考えてみてほしい。

Out-Of-Order機構の非効率性問題では、
1.競合が起こった命令についてのみ
2.1サイクルだけ遅延
(遅らせてもやっぱり競合していたという場合もあるにはあるが...) という場合がほとんどである。だから、発生しているパイプラインバブルも キャッシュミスや分岐予測ミスに比べると微々たるものである。

どちらの寄与が大きいかは明白なような気がするのだが... (ちなみに、intel自身は確信犯である。 Out-Of-Order機構の効率改善効果での説明でも寄与度ゼロでは無いから 一応ウソではないし、 顧客に分かりやすい説明の方が宣伝効果が大きいからだ。)

では、このたるさん的予想の的中度はどうなんだろうか?

実は バクチでバブル退治  (投機的マルチスレッドの衝撃、その1) の章でHyper-Threading Technologyの性能予想をしていて、 例えば複数スレッドによる性能向上予想値や パイプラインの充填率予測値は下記の通りであった。 (元の図では通常型アーキテクチャの場合も入っていたのだが、 ここでは見やすくするため割愛させていただいた。)

複数スレッドによる性能向上の予想値 パイプライン充填率の予想値


intelから発表されている場合について、上図の数値を数字で書き表してみよう。 予想値では2スレッド実行時の速度向上率は1スレッド時に比べて 29.5%アップである。(intel公表値はXeonで30%、Pentium4で25%アップ。) パイプラインの充填率は1スレッドで38.2%、 2スレッドで49.4%である。 (intelの公表値は1スレッドで35%、2スレッドで50%)

これがどれほどの的中率かは諸兄のご判断にお任せするが、 たるさん的にはこれほど乱暴な計算でよくもまぁ...という感じだ。

☆今はほとんど使い物にならない。しかし、未来があるHyper-Threading Technology。   
では、Hyper-Threading Technologyは「買い」なんだろうか?

現状でははっきりと「買いではない。」と言えるだろう。

まず、価格がべらぼうに高い。 まだボーナス前で秋葉出撃もできないし、意識を失うにはあまりにも高額すぎる。 窓際族たるさんの財布には千円札しか入っていない。(T_T)

それに、マルチスレッドは対応アプリが出そろうまでは パンピーな人々にはあまり効果が無いのである。

実はたるさん自身、一時期Celeon266(改)デュアルとPentiumII-233デュアルの 運用経験がある。しかし、今最も頻繁に使っているCeleron300A@450MHzマシンの方が 体感上高速なのである。 たるさんはプログラミング系の趣味を持たないので、 バックグラウンドジョブはダウンロード程度だ。 デュアルシステムを運用中に「デュアルでよかった〜。」と思ったのは、 プリンタ印刷多用中のワープロ入力時程度であった。

予算が同じなら、低速CPUのデュアル・マシンより 高速CPUのシングル・マシンの方が、確実に体感速度は速いと言える。

効果があるのは、下記の3種類の人々程度だと思われる。
1.プログラマのようにバックグランドジョブが多い人。
2.サーバー用途。
3.廃人、ウデに自信のある人。

ではHyper-Threading Technologyは意味がないのであろうか?

いや、そうではないだろう。 高価格は政策上の理由であり、いずれ価格は下がってくるはずだ。 また、現状で効果が少ないのは対応アプリが少ないためであり、 intelの影響力を考えればこの手の対応アプリが 主流になるのは時間の問題であるからだ。 (ただし、たるさん的には意外に時間がかかると読むが...)

しかも、それ以上の最大の功績はILPの限界からCPUを救った事である。 また、CPUに広大なヘッドルームを確保してくれた事である。 以前Crusoeの未来について考える(進化の限界?編) においてCrusoeの意外に低い進化の限界予想を報告したことがあるが、 これとは逆にHyper-Threading Technologyは低い顕在能力とは対照的な 高い潜在能力を確保してくれているのである。

(Hyper-Threading Technologyは、他の技術と比べると、 そのヘッドルーム形成力が桁違いに大きいと予想する。 その影響力はPentiumPROにおける内部RISC化と同等どころか、 明らかにそれ以上である。)

一例を挙げておこう。 もし、intelが100段構成のパイプラインを持つ超高クロックCPUを 作ったと仮定しよう。 こんなCPUがもし仮に製作できたとしても、 パイプラインストールだらけでまともに動作しないだろう。

しかし、このCPUに100スレッド対応の Hyper-Threading Technologyを導入すれば、原理上の話とは言え まったく分岐予測ペナルティーもキャッシュミスペナルティーも (見かけ上)無いCPUを作ることができる。 どちらのミスもパイプラインストールを(見かけ上)発生させないからである。

☆現世的御利益と未来志向   
では、Hyper-Threading Technologyは市場を席巻するのであろうか?  たるさん的答えは短期的にはノーだが、長期的にはイエスだ。

Hyper-Threading TechnologyをライバルのAMDとの比較で考えてみよう。 Hammerはintelとは逆にメモリレイテンシの直接低減やマルチCPU化時の 高速動作を直接狙った。 これは、短期的には対intelへの強力な布石だ。

事実、今までも性能的には抜きつ抜かれつのデッドヒートだが、 設計思想的にはまったく方向性が違っている事がわかる。

Athlon系CPUは、「とにかく処理自体を直接高速化」という 設計思想である。 その設計思想は、メモリコントローラを直接CPUに組み込むHammerで より先鋭化して実現する。

しかし、これらの技術は即効性はあるが進化の限界が相対的に低いと予想する。 Hyper-Threading Technologyに比べると顕在能力は高いが、 潜在能力が低いのではあるまいか?

それに対し、NetBurst系CPUは、アーキテクチャ自体は逆に処理が遅くても 高クロック化に向いていればヘッドルーム1)の広さで 最後には勝てるという設計思想だ。 「損して得取れ」というか「急がば回れ的」アーキテクチャ であると言える。

そして、Hyper-Threading TechnologyはNetBurstアーキテクチャの締めくくり とも言うべき究極技で、一つのスレッド処理は逆に遅くなってしまうが、 複数スレッドの同時処理によりトータルでは速くなるという、 典型的「急がば回れ」アーキテクチャである。

というわけで、現世的御利益志向のAMDに対し、 未来志向のintelと言えるのではなかろうか?

これは、どちらの設計思想が正しいと言うわけではなく、 追う者と追われる者の差である。

追うAMDは今勝たなければ明日はない。(資金繰りだって苦しいだろう。) しかし、王者intelは武田信玄のごとく「勝つ戦いよりも負けない戦い。」を 重視しなければならない。

資金繰りに余裕のあるintelは今を勝つためにバクチに出る必要はなく、 確実に負けない体制を築ければそれでよい。 それよりも、勝ち味は薄くても未来永劫に負けないCPU (ヘッドルームに余裕のあるCPU)を設計する事が重要である。 つまり、両者の設計思想はそれぞれに正しいのである。

そしてintelは、次世代のための息の長い技術を手に入れたと見るべきであろう。 30年後のCPUにもHyper-Threading Technologyの片鱗位はきっと残っている。 そんな予感のする長命技術である。

好き勝手に書いていたら短評では無くなってしまった。 このネタは個人的にノリがいいので、 次回は高スレッド数対応化時の問題点について予想してみようかなあ? (えっ、マザボの修理はどうなったかって? ゴホ、ゴホッ。最近風邪気味だなぁ。)




1)
ヘッドルームとは、アーキテクチャ的に耐えられる周波数上限の余裕の事である。 アーキテクチャ設計時には未来の高クロック周波数を予想して、高クロック化のための 設計上の余裕を持たせておかなくてはならない。 そうしないと、半導体化技術の微細化で高クロック化が可能になったとしても、 アーキテクチャ上の理由から高クロック動作できなくなってしまうからである。

(補足)
今回の記事ではHyper-Threading Technologyをかなり肯定的に取り上げたが、 以前アップした マルチスレッドアーキテクチャは使い物になるか? で主張している内容と言っていることが矛盾しているのではないか? と言う指摘をいただいた。 確かに、この記事はマルチスレッドアーキテクチャを否定的に解説している。

この間の経緯については バクチでバブル退治  (投機的マルチスレッドの衝撃、その1) をご覧いただきたい。 Hyper-Threading Technologyの発展系として投機的マルチスレッド技術が 控えているのである。そして、この技術最大のウリは シングルスレッドでも高速化できるという点にあることをお忘れ無きよう。 分かりやすく、その文章の一部をここに書き写ておく。

マルチスレッドアーキテクチャは使い物になるか? で書いたレポートは、 シングルスレッドをマルチスレッドに自動分解することはきわめて困難である という常識を前提に書かれている。 言い訳するわけではないが、これはデュアルCPU界では当然の事実なのである。

そして、デュアルCPUとマルチスレッドアーキテクチャの比較類推から、 マルチスレッドアーキテクチャにおけるその効果を否定的に予測したのである。 しかし、これでは前提条件がまるっきり崩れてしまうではないか!

と言うわけで、最初考えていたコラムは急遽中止し、 投機的マルチスレッドアーキテクチャについて考えてみた。 」

この一文に、投機的マルチスレッド技術に対する たるさんの驚きが典型的に現れている。 つまり、マルチスレッドアーキテクチャに否定的だったたるさんは、 この日を境に肯定派に転んだのである。 (シングルスレッドも高速化できるというのは非常に重要である。)

現状のHyper-Threading Technologyはゲーム等では高速化の寄与が 無いばかりか、逆効果である場合もある。 これは マルチスレッドアーキテクチャは使い物になるか? で指摘したとおりであるし、実際に的中している。 だから、現状ではHyper-Threading Technologyは対応アプリが出そろうまでは 効果が薄いと判断したのである。

しかし、Hyper-Threading Technologyではなく投機的 Hyper-Threading Technologyが将来的にEnableされる可能性を考えれば Hyper-Threading Technologyは長期的には買いであると 判断せざるを得ないわけである。

ヘッドルームの点もそうなのであるが、将来的にはシングルスレッドでも 高速化できる可能性が高い点を考えに入れれば、Hyper-Threading Technologyを 「次世代のための息の長い技術」と評価した理由も ご理解いただけるのでは無かろうか?