x86 CPU¶
- 目次
- x86 CPU
Intelの8086およびその後継プロセッサに関する情報のメモ。
要素技術¶
Cステート¶
省電力を行うため、プロセッサの負荷に応じてCPU機能を段階的に停止する仕組みです。
深いCステートに落ちるほど省電力になるが復帰に時間がかかるようになります。
- Cステート制御はBIOSで有効無効の設定があります。
- LinuxではBIOS設定とは無関係にドライバ(intel_idle)が制御するらしいです。
参考情報¶
後藤弘茂のWeekly海外ニュース 平均消費電力を大きく低減するPenrynらのC6ステート
SIMD命令¶
SSE系およびAVX系の演算機能で実現。使用にはOSの対応が必要(コンテキストスイッチで退避するレジスタに含めるため)。
Intel古来の浮動小数点命令(x87)は浮動小数点数を内部で80bit表現で持つため、64bit表現で持つSSE系、AVX系とは計算精度が異なる点に注意が必要です。
SSE¶
Pentium IIIから搭載、70命令。
128bit XMMレジスターを32bitプロセッサは8個(XMM0~XMM7)、64bitプロセッサは16個(XMM0~XMM15)持ち、各レジスタには4個の単精度浮動小数点(float)を格納できます。
SSE2¶
Pentium 4から搭載、144命令。
XMMレジスタ数はSSEと同じですが、各レジスタには4個のfloatを格納する以外に、2個のdouble、16個のbyte、8個の16bit short、4個の32bit integer、2個の64bit integer、1個の128bit integerのいずれかを格納できます。
SSE3¶
Pentium 4(Prescottコア)から搭載、13命令。
SSSE3¶
Coreマイクロアーキテクチャから搭載、32命令。
SSE4.1¶
Core 2(Penryn)から搭載、47命令。
SSE4.2¶
第1世代Core i(Nehalemマイクロアーキテクチャ)から搭載、7命令。
AVX¶
第2世代Core i(Sandy Bridgeマイクロアーキテクチャ)から搭載、12命令。
256bit YMMレジスタを16個持つ。YMMレジスタはSSEのXMMレジスタと下位128bitを共有。
→ YMM0 レジスタの下位128bitがXMM0 レジスタとなる。
浮動小数点SIMD演算 256bit(整数SIMD演算は128bit)。
3オペランド書式(入力レジスタと異なる出力レジスタを指定可能)。
vadds ymm0, ymm1, ymm2
AVX2¶
浮動小数点および整数SIMD演算 256bit。
ハイパースレッディング¶
- ハイパースレッディングの効果を確認(HPCテクノロジーズ)
この資料によれば、
「メモリ性能律速型アプリケーション」はハイパースレッドの効果は皆無
「CPU性能依存型アプリ」や「メモリ/CPU性能依存型アプリ」では10%以上の性能向上
ハイパースレッドのHPC用途は限定的
とあり、
ハイパースレッドが力を発揮する用途は、基本的には対話型の共同利用環境を構成する場合で、かつ利用するアプリケーションがハイパースレッドに適していること
という結論づけをしています。
ハイパースレッディングによるスループットと応答性¶
ハイパースレッディングを有効にして、1つの物理コアに対して2つの並列処理を実行させると、1つの処理でCPUに待ちが発生したときにもう1つの処理を実行することでスループットの向上を狙うことができます。しかし、CPUキャッシュは2つの処理が割り当てられることで半減してしまうので、1つの物理コアに対して1つの処理を割り当てたときに比べて応答性は劣化することがあります。
歴史¶
歴代インテルプロセッサの一覧表¶
プロセッサ名称 | bit数 | 初期型登場年 | トランジスタ数 | プロセス | 備考 |
4004 | 4bit | 1971年 | 2,300 | 10um | |
8008 | 8bit | 1972年 | 3,500 | 10um | |
8080 | 8bit | 1974年 | 6,000 | 6um | |
8086 | 16bit | 1978年 | 29,000 | 3um | |
8088 | 16bit | 1979年 | 29,000 | 3um | |
80286 | 16bit | 1982年 | 134,000 | 1.5um | MMU搭載 |
80386 | 32bit | 1985年 | 275,000 | 1.5um | |
80486 | 32bit | 1989年 | 120万 | 1um | |
Pentium | 32bit | 1993年 | 310万 | 800nm | |
Pentium Pro | 32bit | 1995年 | 550万 (CPU) 1550万 (L2キャッシュ) |
350nm | |
Pentium Ⅱ | 32bit | 1997年 | 750万 (CPU) | 350nm | |
Pentium Ⅲ | 32bit | 1999年 | 950万 (CPU) | 250nm | アウトオブオーダー |
Pentium 4 | 32bit | 2000年 | 4200万 | 180nm | |
Pentium 4 HT | 32bit | 2002年 | 90nm | ハイパースレッディング搭載 | |
Pentium M | 32bit | 2003年 | 7700万 | 130nm | |
Pentium D | 64bit | 2005年 | 90nm | デュアルダイ | |
Core Duo | 32bit | 2006年 | デュアルコア | ||
Core 2 Duo | 64bit | 2006年 | 2億9100万 | 65nm | |
Core 2 Quad | 64bit | 2007年 | |||
Core i (Neharem) | 64bit | 2008年 | 65nm | ||
Core i (Sandy Bridge) | 64bit | 2011年 | 9億9500万 | 32nm | |
Core i (Ivy Bridge) | 64bit | 2012年 | 14億 | 22nm | |
Core i (Haswel) | 64bit | 22nm | |||
Core i (Broadwell) | 64bit | 2015年 | 13億 | 14nm | |
Core i (Skylake) | 64bit | 2016年 |