読み方:はいぱーすれっでぃんぐハイパースレッディングテクノロジー のこと。Weblio国語辞典では「Hyper-Threading」の意味や使い方、用例、類似表現などを解説しています。">

「Hyper-Threading」の意味や使い方 わかりやすく解説 Weblio辞書 (original) (raw)

この記事には複数の問題があります改善ノートページでの議論にご協力ください。 出典がまったく示されていないか不十分です。内容に関する文献や情報源が必要です。(2017年12月) 出典は脚注などを用いて記述と関連付けてください。(2020年10月) 脚注による出典や参考文献の参照が不十分です。脚注を追加してください。(2020年10月)出典検索?: "ハイパースレッディング・テクノロジー"ニュース · 書籍 · スカラー · CiNii · J-STAGE · NDL · dlib.jp · ジャパンサーチ · TWL

ハイパースレッディング・テクノロジー (: Hyper-Threading Technology、HTT) とは、インテルハードウェアマルチスレッディング実装に対する同社の商標である。当初は、NetBurstマイクロアーキテクチャにおける同時マルチスレッディング (Simultaneous Multi-Threading; SMT) の実装に対して用いられていたが、その後、コードネームMontecitoの名で知られるプロセッサナンバー 90xxのItaniumにおける_Switch-on-Event Multi-threading_ (SoEMT) (ブロック型マルチスレッディングの一種)にも用いられ、LPIA (Low Power on Intel Architecture) 製品の1つであるインオーダープロセッサのIntel AtomのSMT実装もハイパースレッディング・テクノロジーと称している。 これらの製品に共通しているのは、オペレーティングシステム (OS) が、ハイパースレッディングが有効なコアを、1つのコアではなく複数のコアと認識できる点である。

詳細

ハイパースレッディング・テクノロジーとは、従来CPUのコア一つに一つしか搭載していなかったある一部の命令制御装置やバッファを複数搭載してコードの処理能力を向上するものである[1]。これにより、ハイパースレッディング・テクノロジーを搭載・有効化したCPUでは、ホストOSからはあたかも実際に搭載しているコア数より多くのコア(疑似コア)を搭載しているように見え、スレッドやプロセスの割り当てを個々の疑似コアに対してスケジューリングできるようになる。この見かけのプロセッサコア数を論理コア数または論理プロセッサ数 (number of logical processors) と呼び、実際にCPUに実装されているコアの数を物理コア数または物理プロセッサ数 (number of physical processors) と呼ぶことがある。

現在のコンピュータに使われるCPUはスループット向上のために命令のパイプライン処理を行なっており、多くは一つのコアにコードを読み込み(ロード)、解釈(デコード)し、処理をスケジュールする装置を一つと、それを処理するパイプラインと呼ばれる演算装置を複数持っている。しかしスケジュールの能力に限りがあるため、例えば整数を処理するパイプラインが働いていても、浮動小数点数演算やMMX/SSEなどのマルチメディア向けSIMD演算[2]を実行するパイプラインが空いていることがある。

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

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

コアはキャッシュに対し速度が遅いメインメモリーの入出力が必要になるとパイプラインが空いていても処理できない。最近のCPUは処理するコードやデータの量がL2キャッシュの容量を超えるほど肥大化しメインメモリーの入出力が必要な場合が増えているため、メモリーコントローラーをチップセットではなくCPU自体に内蔵させてメインメモリーの入出力速度を向上させている。

ハイパースレッディングが特に有効なのは、整数処理と浮動小数点処理やマルチメディア処理というように異なるパイプラインを多用するソフトウェアや、多数のスレッドがあるがメモリアクセスの遅延が律速になるようなプログラムである。殆どのソフトウェアでは論理部分の大半は整数処理であり、浮動小数点処理と多重化できる可能性が高い。

キャッシュミスによりCPUがメインメモリにアクセスすると、データがレジスタに乗るまでに数百クロックの間待たなければならない(ストール)。ハイパースレッディングは一方のスレッドがストールしている間に別のスレッドを走らせることでCPUコアの利用効率を上げ、またこれによりメモリアクセスレイテンシを隠蔽する。

従ってハイパースレッディングで効率が良いのは、比較的小さなサイズの整数処理のコードと、データサイズが小さい、もしくはデータサイズが大きくても配列が規則的な浮動小数点処理やマルチメディア処理の繰り返しが並行して行われている場合である。

一方苦手とするのは、例えばWindowsLinuxのように雑多なDLLやライブラリ類が頻繁かつ非同期的にコールされ、またコードやデータが頻繁に更新される、いわゆるローカリティが低い場合である。この場合、複数のスレッドでCPUのデータ幅やL2キャッシュが細分化され(スラッシング)、ハイパースレッディングによって逆に効率が低下することもある。

そのため、ハイパースレッディングによって多くのユーザーが不満を持つソフトウェアの立ち上がり時間が短縮されないのはこのせいである。一方、音声や動画の変換や編集ではハイパースレッディングの効果が高くなる。通常入力データサイズが規則的なデータ圧縮のほうが入力データが不規則なデータ解凍より早くなる傾向がある。

ハイパースレッディングの利点として、もともと複数の物理的コアを利用できる対称型マルチプロセッシング対応のOSでは、特にソフトウェアを改変することなくハイパースレッディングによる複数の論理的コアを利用できることである。

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

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

PC向けのインテル製CPUでは、2013年現在ハイパースレッディング搭載製品はすべて物理コア1つ当たり論理コア2つ (2-way) である。一方、HPC用途やメインフレーム用途などの高価なCPUでは、より多数のSMTをサポートしている。例えばIBMPOWER8や、オラクルのSparc T3は物理コア1つ当たり論理コア8つ (8-way) である。インテルのXeon PhiはCPU用途ではなく、GPUを利用した汎用計算 (GPGPU) のような使い方を想定しているコプロセッサだが、これは物理コア1つが論理コア4つ (4-way) になっている。ただし、第12世代CPUから搭載された、電力効率を優先した高効率コア(Eコア-Efficient Core)ではハイパースレッディングは使用できない。

性能

ハイパースレッディングの利点を以下に挙げる。

インテルによると、NetBurstマイクロアーキテクチャにおける最初の実装は「通常の」プロセッサへ5%の領域のみを追加するだけで、15 - 30%の性能向上をもたらしたとしている。

しかし、ハイパースレッディングは、論理的なコアが物理的なコアの1次キャッシュメモリーや2次キャッシュメモリーを共有する構造になっているため、共有しているキャッシュメモリーの離れた領域を複数の論理的なコアが読み書きするようなソフトウェアでは、キャッシュの入れ替え(偽共有(英語版))が多発し性能が低下することが指摘されている[4]。インテルは「ほとんどのベンチマークにおいて、ハイパースレッディング技術は良い結果を出している」と述べている。

現在

ハイパースレッディングはNetBurstマイクロアーキテクチャで最初に実装されたが、それに続くCoreマイクロアーキテクチャでは採用されなかった。これは、Coreマイクロアーキテクチャが疑似マルチコアではなく真のマルチコアを想定した設計[5]であったことにも起因する。Coreマイクロアーキテクチャのプロセッサであってもハイパースレッディング・テクノロジーを示すフラグ (CPUID: EAX=1, EDX[28])[6] は有り、1(有効)を示しているが、仮想プロセッサ個数 (CPUID: EAX=1, EBX[23:16]) は1であることを示し、ハイパースレッディング・テクノロジーが機能していないことを意味する。なお、Nehalemマイクロアーキテクチャを採用し、2008年後半に発売されたIntel Core i7ではSMTを採用し、ハイパースレッディング・テクノロジーの商標が復活した。2011年発表のSandy Bridgeマイクロアーキテクチャ以降の製品でも、ハイパースレッディング・テクノロジーは採用されている。なお、2010年 (Westmere) 以降の製品[7]では、EBX[23:16]の値は論理プロセッサの数ではなく、アドレッシング可能なAPIC IDの最大数[8]に変わっているため、これらのフラグや値からハイパースレッディングの有効/無効状態を判定することはできない。

IA-64Montecitoや、超低消費電力CPUのIntel Atomでもマルチスレッド技術が採用されたが、前者はブロック型マルチスレッディングであり、後者はインオーダープロセッサにおけるSMT実装なので、従来のNetBurstマイクロアーキテクチャのものとは技術的な関連はない。

なお、Lunar Lake、およびArrow Lake(共にシリーズ2)以降のCore Ultraシリーズでは全種、ハイパースレッティングは実装されていない。

セキュリティ

2005年、Colin Percivalは、制限された特権を伴う悪意あるスレッド操作により、別のスレッドの実行の監視を許可してしまうため、暗号鍵が盗まれる可能性があることを明らかにした、「Cache Missing for Fun and Profit (PDF) 」という論文を発表した。 これは、攻撃者が対象となるコンピューター上で、アプリケーションを自由に実行できる環境が整わないと影響を受けないため、悪用する事は非常に困難である。現在のところ被害などは報告されていない。

2019年、Intel Core i7以降のCPUに対する複数の脆弱性Microarchitectural Data Sampling(英語版)が公表された。これについて、ハイパースレッディングの無効化が対策の1つとして検討されることがある[9]。特に、ChromeOSではこれによりデフォルトでハイパースレッディングを無効にすることとしている[10]

RedHat系などの新しいLinuxのカーネルでは、ブートパラメタあるいはOSの動作時に、ハイパースレッドの機能をオンあるいはオフにできる[11][12]

脚注

[脚注の使い方]

  1. ^Core iシリーズにも使われる「SMT」の利点と欠点”. ASCII.jp. 2022年8月11日閲覧。
  2. ^ x86アーキテクチャでは浮動小数演算に従来のx87命令を使うことが多かったが、x64アーキテクチャではスカラーの浮動小数演算もx87命令を使わずSSE/SSE2命令を利用して実行される。
  3. ^ インテル® ハイパースレッディング・テクノロジーのパフォーマンスに関する考察 | iSUS
  4. ^ インテルのハイパースレッディング技術でサーバ性能の低下が発生か - CNET Japan
  5. ^ Intel Coreマイクロアーキテクチャの目指す世界 - @IT
  6. ^ インテル® プロセッサの識別とCPUID命令, p.26
  7. ^ c++ - Logical CPU count return 16 instead of 4 - Stack Overflow
  8. ^ Intel® 64 and IA-32 Architectures Software Developer's Manual, p.325
  9. ^ Martin Giles (2019年5月16日). “インテル製CPUに新たな脆弱性、2011年以降の「ほぼすべて」に影響”. ASCII.jp. 2020年7月17日閲覧。
  10. ^Microarchitectural Data Sampling on Chrome OS” (英語). The Chromium Projects. 2020年7月17日閲覧。
  11. ^ Red Hat Enterprise Linux の同時マルチスレッド
  12. ^ 4. SMT Control (Kernel Org)

関連項目

情報源

外部リンク

CPUテクノロジー
アーキテクチャ ISA: CISC EDGE EPIC MISC(英語版OISC RISC VLIW ZISC(英語版ハーバード・アーキテクチャ ノイマン型 4ビット 8ビット 12ビット 16ビット 18ビット 24ビット 31ビット 32ビット 36ビット 48ビット 60ビット 64ビット 128ビット
並列処理 パイプライン 命令パイプライン イン・オーダー&アウト・オブ・オーダー レジスタ・リネーミング 投機的実行 レベル ビット 命令 スーパースカラー データ タスク スレッド マルチスレッディング 同時マルチスレッディング ハイパースレッディング スーパースレッディング(英語版コア シングルコア マルチコア ホモジニアスマルチコア ヘテロジニアスマルチコア フリンの分類 SISD SIMD MISD MIMD
タイプ マイクロプロセッサ DSP マイクロコントローラ System-on-a-chip ベクトルプロセッサ
コンポーネント 演算装置 Back-side bus マルチプレクサ デマルチプレクサ レジスタ MMU TLB キャッシュ レジスタファイル マイクロコード 制御装置 CPUクロック
電源管理 APM ACPI Dynamic frequency scaling(英語版) Dynamic voltage scaling(英語版) Clock gating(英語版)
並列計算
総論 クラウドコンピューティング グリッド・コンピューティング 高性能計算 コンピュータ・クラスター 分散コンピューティング
並列レベル タスク データ ビット 命令
スレッド スーパースレッディング(英語版ハードウェアマルチスレッディング 同時マルチスレッディング ハイパースレッディング SIMT
理論 アムダールの法則 グスタフソンの法則 コスト効率性(英語版) Karp-Flatt metric(英語版) Parallel slowdown(英語版) Speedup(英語版
要素 スレッド ファイバー プロセス PRAM Instruction window(英語版
調整 キャッシュコヒーレンシ 同期 バリア マルチプロセッシング メモリコヒーレンス キャッシュ無効化 Application checkpointing(英語版
プログラミング スレッド (コンピュータ) 並列プログラミングモデル Implicit(英語版) Explicit(英語版並行性 フリンの分類 SISD SIMD MISD MIMD SPMD(英語版Lock-freeとWait-freeアルゴリズム
ハードウェア スーパーコンピュータ スーパースカラー ベクトル計算機 マルチプロセッシング 対称型 非対称型(英語版マルチコア メモリ NUMA COMA(英語版) 分散型(英語版共有型 分散共有型 MPP Beowulf
API Ateji PX(英語版Boostスレッド C++ AMP Charm++(英語版) Cilk(英語版) Coarray Fortran(英語版CUDA Dryad(英語版) Global Arrays(英語版) Intel Cilk Plus(英語版Intel Threading Building Blocks MPI OpenACC OpenCL OpenHMPP(英語版OpenMP PVM POSIXスレッド UPC
問題 Embarrassingly parallel(英語版) Grand Challenge(英語版) Software lockout(英語版
並行計算 カテゴリ:並行計算 カテゴリ:並列コンピューティング