HT(ハイパー・スレッド)の話し…。

※ 以下の投稿は、例によってオレ個人の興味と関心に基づくものだ…。自分の「備忘録」用として、貼っておく…。興味も関心も無い人は、スルーしてくれ…。

ハイパースレッディング・テクノロジー
https://ja.wikipedia.org/wiki/%E3%83%8F%E3%82%A4%E3%83%91%E3%83%BC%E3%82%B9%E3%83%AC%E3%83%83%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E3%83%BB%E3%83%86%E3%82%AF%E3%83%8E%E3%83%AD%E3%82%B8%E3%83%BC

『現在のパソコンに使われるCPUはCISCと呼ばれるものが主流で、多くは一つのコアにコードを読み込み(ロード)、解釈(デコード)し、処理をスケジュールする装置を一つと、それを処理するパイプラインと呼ばれる演算装置を複数持っている。しかしスケジュールの能力に限りがあるため、例えば整数を処理するパイプラインが働いていても、浮動小数点やMMXなどのマルチメディア計算をするパイプラインが空いていることがある。

そこで一つのコアに搭載しているデコードやスケジュールをする装置を複数に増やし、一つのコアを論理的に複数のコアとして動作させることで、空いているパイプラインを埋めて効率を向上させることが考えられた。

ただしコードやデータの間にはお互いに依存関係があり並行処理できない場合がある。また複数の論理的なコアは一つのL2キャッシュを共有しておりデータやキャッシュ不整合が発生した場合はロックがかかり効率が低下する。

コアはキャッシュに対し速度が遅いメインメモリーの入出力が必要になるとパイプラインが空いていても処理できない。最近のCPUは処理するコードやデータの量がL2キャッシュの容量を超えるほど肥大化しメインメモリーの入出力が必要な場合が増えているため、メモリーコントローラーをチップセットではなくCPU自体に内蔵させてメインメモリーの入出力速度を向上させている。』
『ハイパースレッディングが特に有効なのは、整数処理と浮動小数点処理やマルチメディア処理というように異なるパイプラインを多用するソフトウェアである。殆どのソフトウェアでは論理部分の大半は整数処理であり、浮動小数点処理と多重化できる可能性が高い。

しかしマルチメディアでデータ量が大きくなると、ハードディスクやメインメモリーの頻繁な読み書きが必要となり効率が低下する。またデータのサイズがバラバラの場合は規則正しくロードすることができない。

従ってハイパースレッディングで効率が良いのは、比較的小さなサイズの整数処理のコードと、データサイズが小さい、もしくはデータサイズが大きくても配列が規則的な浮動小数点処理やマルチメディア処理の繰り返しが並行して行われている場合である。』
『一方苦手とするのは、例えばWindowsやLinuxのように雑多なDLLやライブラリー類が頻繁かつ非同期的にコールされ、またコードやデータが頻繁に更新される、いわゆるローカリティが低い場合である。この場合、複数のスレッドでCPUのデータ幅やL2キャッシュが細分化され(スラッシング)、ハイパースレッディングによって逆に効率が低下することもある。

そのため、ハイパースレッディングによって多くのユーザーが不満を持つソフトウェアの立ち上がり時間が短縮されないのはこのせいである。一方、音声や動画の変換や編集ではハイパースレッディングの効果が高くなる。通常入力データサイズが規則的なデータ圧縮のほうが入力データが不規則なデータ解凍より早くなる傾向がある。』
『ハイパースレッディングの利点として、もともと複数の物理的コアを利用できる対称型マルチプロセッシング対応のOSでは、特にソフトウェアを改変することなくハイパースレッディングによる複数の論理的コアを利用できることである。

すなわちハイパースレッディングはソフトウェアを改変せず利用できる透過性があることが特徴である。もちろんハイパースレッディングを意識した処理として実装しているかどうかによって効率は変化する。

なお、処理中のコードやデータを自ら書き換えていくような特殊なソフトウェアや、複数のスレッドが強い依存関係を持つ場合は効率が低下したりエラーとなることがある。また論理的コア同士の間でデータの秘匿に問題があるなど、ごく限られたケースながら問題が生じることがある。このため、多くのPCではBIOSなどでハイパースレッディングをオフとすることができるようになっている。』

1コアを2スレッド動作させる、HTテクノロジー
http://www.pasonisan.com/customnavi/z1012_cpu/03ht.html

※ この図が、分かりやすい…。ハイパー・スレッドの発想は、「パイプライン」をギッシリ埋めたら、それだけ処理の量が増加して、処理速度が速くなる…、というものだ…。スレッドを流し込む回路を、2本に増やして、空いているパイプラインに送り込もう…、というものだな…。

※ 実コア4個の場合で、説明している…。「HTなし」だと、右側の図の通り、パイプラインに「空き」が生じている…。これを「HTあり」にすると、その実コアのパイプラインの空いているところに、「処理命令(演算命令)」を流し込んで、「隙間なく」稼働させることができている…。それで、「処理量」全体としては、「4コア」+「4HT」で、あたかも「8コア」に匹敵するようなパフォーマンスが発揮できる…、というわけだ…。

※ そういう芸当を可能にするテクノロジーが、この図…。各「命令」には、「ID」が付されており、どこの「パッケージ」のどの「コア」で処理すべきなのか、指示している…、というわけだ…。

※ こういう「フラグ」が立てられている図は、インターネットの「TCP・IP」でも、見たな…。また、「VPN」のところでも見た(VPNは、TCP/IPの応用だから、当然と言えば当然だ…)。

※ まあ、同じような「発想」と言っていいんだろう…。

※ 実は、完全に「誤解」していた…。ハイパー・スレッドは、OSの「マルチタスク」における「アイドリング」状態を利用して、その状態に「スレッド」を発行して、OSレベルで騙すテクノロジーだ…、と理解していた…。

※ どこで、そう理解したのか…。何か、そういう文献でも読んだのか…。今となっては、分からんな…。

※ これだから、世の中恐ろしい…。一旦、「分かった」つもりになっていても、どこでどう「誤解」しているものか、知れたものでは無い…。

※ 何事も、「虚心坦懐」に、「一から学ぶ」という姿勢を忘れないようにすることが、大切だ…。