プロジェクト

全般

プロフィール

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。

ハイパースレッディング

「メモリ性能律速型アプリケーション」はハイパースレッドの効果は皆無
「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年