ablog

不器用で落着きのない技術者のメモ

ハイパー・スレッディングとは

ちょっと、ハイパー・スレッディングについて話題になっていたので調べてみた。

プロセッサを支える技術  ??果てしなくスピードを追求する世界 (WEB+DB PRESS plus)

プロセッサを支える技術  ??果てしなくスピードを追求する世界 (WEB+DB PRESS plus)

P.241

なお、Intelプロセッサの「ハイパースレッディング」(Hyper Threading)というのはIntelマーケティング上の呼称で、NehalemアーキテクチャのプロセッサはSMT方式のマルチスレッドをサポートしています。

P.250

喩えて言うと、マルチスレッドは作業者のヒマな時間を有効に使うために複数の仕事を掛け持ちでやらせるようなもので、掛け持ちの作業のため多少、工具や機械などを増強したというものです。一方、マルチコアはその程度の生産性向上では間に合わないので、作業を2人、4人と増やすようなものという違いがあります。

おぉ、自分で適当に考えて使っていた喩えと同じだ。

P.239

本来、スレッド(Thread)というのはソフトウェアの用語で、プログラムを並列的に実行できる部分に分けたそれぞれの部分を指しています。

...

このような複数のスレッドを並列に実行できるハードウェア機能を持つプロセッサを「マルチスレッドプロセッサ」と呼んでいます。ソフトウェアのスレッドは「ライトウェイトプロセス」(Light Weight Process)とも呼ばれ、親のメモリ空間を共用して動くのですが、マルチスレッドプロセッサはとくにこのような制約がなく、独立したメモリ空間を必要とするプログラムでも実行できるという構成が一般的です。

P.240

マルチスレッドの二つの方式
VMT(垂直マルチスレッド) - 複数のスレッドを切り替えて実行する
...
この方式は完全に同時並行的に複数のプログラムを実行しているわけではないのですが、マルチプログラミングの場合はミリ秒単位の切り替えであるのに対して、こちらはマイクロ秒かそれ以下の単位での切り替えを行います。


SMT(同時マルチスレッド) - 複数のスレッドの命令を混ぜて実行する
また、最近のスーパースカラプロセッサは最大4〜6命令を程度を並列に実行することができるハードウェアとなっていますが、図5.2のように、データ依存性やキャッシュミスなどによるバブルサイクルがあるため、平均的には1サイクルに2〜3命令しか実行開始できていません。つまり、4命令を実行できるハードウェアの1/2〜2/3程度しか利用できていないというわけです。
しかし、独立に実行できるスレッドの命令間にはデータ依存性などはないので、複数スレッドの命令を混ぜて実行すればパイプラインバブルを減らして全体の実行効率を改善できます。このように複数のスレッドの命令を混ぜて実行する方式をSMT(Simultaneous Multi-Threading, 同時マルチスレッド)と呼びます。

P.249

したがって一概には言えないのですが、それでも平均的には2スレッド化した場合、スループット性能は10〜30%程度向上すると言われています。

だいたい自分の理解があっていることを確認できた。やはり、この本いいですね。