Comments
Description
Transcript
ハードウェアによる CPUの高速化技術
ハードウェアによる
CPUの高速化技術
長岡技術科学大学
電気電子情報工学専攻
出川智啓
今回の内容
CPUの性能の見積
CPUの進化
CPU(コア)に搭載されている高速化技術
139
GPGPU実践基礎工学
2015/10/07
コンピュータの歴史
世界初のデジタルコンピュータ
世界初の汎用コンピュータ
1944年 ハーバードMark I
機械式リレーを採用
1946年 ENIAC
軍事用に開発(ミサイルの弾道計算など)
300FLOPS
金融や株取引にも利用が拡大
140
様々な用途に利用できるようコンピュータを設計
GPGPU実践基礎工学
2015/10/07
スーパーコンピュータ
様々な用途に利用できるようコンピュータを設計
設計が複雑化
1970年代には性能が停滞
科学技術計算に特化して性能を高めたコンピュータ
Cray‐1
世界初のスーパーコンピュータ
日本製スーパーコンピュータ
141
日立,富士通,NECが製造
たびたび世界トップの性能を達成
GPGPU実践基礎工学
2015/10/07
TOP500 List(2015, Jun.)
http://www.top500.org/
計算機名称(設置国)
アクセラレータ
1
Tianhe‐2 (China)
Intel Xeon Phi
2
Titan (U.S.A.)
NVIDIA K20x
3
Sequoia (U.S.A.)
4
実効性能[PFlop/s]
/ピーク性能[PFlop/s]
33.9/54.9
消費電力[MW]
17.8
17.6/27.1
8.20
−
17.2/20.1
7.90
K computer (Japan)
−
10.5/11.3
12.7
5
Mira (U.S.A.)
−
8.59/10.1
3.95
6
Piz Daint
6.27/7.79
2.33
7
Shaheen II(Saudi Arabia)
5.54/7.24
2.83
8
Stampede (U.S.A.)
Intel Xeon Phi
5.17/8.52
4.51
9
JUQUEEN (Germany)
−
5.01/5.87
2.30
Vulcan (U.S.A.)
−
4.29/5.03
1.97
10
142
(Switzerland)
NVIDIA K20x
GPGPU実践基礎工学
2015/10/07
CPUの理論性能
Floating Point Operations Per Second
1秒あたりに浮動小数演算を何回実行できるか
なぜ浮動小数点演算だけ?
整数の加算はアドレス計算(プログラムカウンタなど)で頻繁に
使うので高速になるよう設計
浮動小数点演算と比較すると整数演算の影響は非常に小さい
143
影響が小さくないシステムは使い物にならない
GPGPU実践基礎工学
2015/10/07
CPUの理論性能
公式
FLOPS = 1コアの演算性能 [?]
× コア数
[Core]
× CPUの動作周波数 [Hz=Clock/sec]
1コアの演算性能
144
=1度に発行出来る浮動小数点演算命令
単位は[Floating Point Operations/Clock /Core]
性能の評価には動作周波数だけでなく,1コアが1クロックで
発行できる命令数が重要
GPGPU実践基礎工学
2015/10/07
CPUの理論性能
FLOPS = 1コアの演算性能
× コア数
× CPUの動作周波数
1コアの演算性能の向上
コア数の増加
演算器(トランジスタ)の増加
様々な機能を追加(今日の内容)
トランジスタの増加
CPUの動作周波数
145
回路の効率化や印可電圧の向上
GPGPU実践基礎工学
動作周波数の向上に注力
(ほぼ全ての処理が速くなる)
2015/10/07
CPUの性能の変化
Intelの予告(Intel Developer Forum 2003)
2007年頃には10GHzに達する
http://pc.watch.impress.co.jp/docs/2003/0227/kaigai01.htmより引用
146
GPGPU実践基礎工学
2015/10/07
CPUの性能の変化
2004年頃からクロックが停滞
http://www.gdep.jp/page/view/248より引用
147
GPGPU実践基礎工学
2015/10/07
CPUの性能向上*
(2012)
電子回路の構成部品
*姫野龍太郎,絵でわかるスーパーコンピュータ,講談社
機械式リレー
真空管
トランジスタ
IC (Integrated Circuit)
LSI (Large Scale Integrated Circuit)
集積率が上昇
製造技術の進歩による配線の細線化
250nm→180nm→130nm→90nm→65nm→45nm→32nm→22nm
148
10nmまではなんとかなりそう→3次元構造へ
集積できるトランジスタ数の増加
抵抗の低下による消費電力低減
GPGPU実践基礎工学
2015/10/07
CPUの性能向上*
*姫野龍太郎,絵でわかるスーパーコンピュータ,講談社
(2012)
製造技術の進歩による配線の細線化
1.集積できるトランジスタ数の増加
同じ面積に集積できるトランジスタ数が増加
複雑な回路を構成
2.プロセッサの処理速度の向上
149
抵抗が線幅に比例して減少し,消費電力が低下
減少した電力を周波数向上に利用
1秒あたりに0と1を切り替える回数(動作周波数)を増加
(トランジスタ スイッチング速度,消費電力等のキーワードでGoogling)
GPGPU実践基礎工学
2015/10/07
ムーアの法則*
*Moore, G.E., Electronics, Vol.38,No.8(1965).
http://ja.wikipedia.org/wiki/ムーアの法則
http://en.wikipedia.org/wiki/Moore%27s_law
インテルの共同設立者ムーアによる経験則
半導体の集積率は1年で倍になる
後に「18ヶ月で2倍」に修正
姫野龍太郎,絵でわかるスーパーコンピュータ,講談社 (2012)より引用
150
GPGPU実践基礎工学
2015/10/07
1サイクルあたりの命令数,トランジスタ数(×106)
CPUの性能向上の方向性
Makino, J., SC07
151
GPGPU実践基礎工学
2015/10/07
1サイクルあたりの命令数,トランジスタ数(×106)
CPUの性能向上の方向性
1サイクルで発行できる
命令数が増加
命令数が停滞
増加するトランジスタ数を
利用して複雑な回路を構成
152
GPGPU実践基礎工学
2015/10/07
マイクロアーキテクチャの進化
フォン・ノイマン型コンピュータ
プログラムが主記憶に置かれ,1命令ごとにメモリから取り出
して逐次実行
現在のコンピュータではメモリへのアクセス時間>>演算時間
あまりにも遅いので基本原理から逸脱して高速化
153
キャッシュ
命令パイプライン
アウト・オブ・オーダー実行
命令の同時実行(命令レベル並列),スーパースカラ実行
分岐予測・投機的実行
GPGPU実践基礎工学
2015/10/07
命令パイプライン
複数の命令を少しずつずらしながらオーバーラップさせ
て実行
一種のバケツリレー
フォン・ノイマン型コンピュータの動作原理
フェッチ,デコード,実行の3段階
ある命令の実行が終わってから次の命令をフェッチ
分岐命令以外は実行の終了を待つ必要はない
命令の実行中に次の命令を実行(フェッチ,デコード)可能
154
GPGPU実践基礎工学
2015/10/07
命令パイプラインの模式図
命令1
フェッチ
命令2
命令3
命令4
デコード
実行
フェッチ
デコード
実行
フェッチ
デコード
実行
フェッチ
デコード
実行
実行開始
処理時間
2個の命令を実行する時間で4個の命令を実行
155
GPGPU実践基礎工学
2015/10/07
命令の構成
1命令の実行は5ステップで構成
各ステップを担当するユニット(処理器)が存在
フェッチ
IF
ID
デコード
OF
IF : Instruction Fetch
ID : Instruction Decode
OF : Operand Fetch
EX : Execution
WB : Write Back
156
実行
EX
WB
命令をメモリから読み込み
命令をデコード
データをメモリから読み込み
演算の実行
演算結果をレジスタへ書き込み
GPGPU実践基礎工学
2015/10/07
命令パイプラインの模式図(詳細)
各ユニットの利用効率が上昇
15ステップで3回利用→7ステップで3回利用
命令1
IF
ID
OF
EX
WB
IF
ID
OF
EX
WB
IF
ID
OF
EX
命令2
命令3
実行開始
157
WB
処理時間
GPGPU実践基礎工学
2015/10/07
パイプライン処理を阻害する要因
全てのプログラムをパイプライン処理で高速化すること
は不可能
パイプライン処理を阻害する要因
物理的な資源の不足(構造的ハザード)
直前の命令が未完了(データハザード)
分岐命令による命令の未確定(制御ハザード)
158
GPGPU実践基礎工学
2015/10/07
構造的ハザード
プロセッサ内の資源の不足
演算ユニットやレジスタなどの取り合い
優先する命令に資源を割り当て,その他の命令は待機
資源を追加すれば解消
命令1
IF
演算結果をレジスタへ
書き込み
ID
OF
EX
WB
IF
ID
OF
EX
WB
IF
ID
OF
EX
命令2
命令3
WB
データをメモリから読み
込み,レジスタへ格納
実行開始
159
処理時間
GPGPU実践基礎工学
2015/10/07
データハザード
直前の命令の結果を利用
直前の命令の結果がレジスタに無く,フェッチが不可能
結果をレジスタに戻さず次の命令のオペランドとして使用
(レジスタバイパス)
WBが終わっていないので
cの値が未確定
命令1
IF
OF
EX
WB
IF
ID
OF
EX
WB
e = c + d
IF
ID
OF
EX
WB
命令2
命令3
実行開始
160
c = a + b
ID
処理時間
GPGPU実践基礎工学
2015/10/07
命令の同時実行(スーパースカラ実行)
お互いに無関係な命令を並行して(同時に)実行
並行して実行しても,順序を変えて実行しても結果は同じ
命令レベル並列性
t1 = a*b
t2 = c*d
t = t1 + t2
tの計算にはt1とt2の両方が必要
t1とt2はどちらを先に実行しても,並列に実行してもよい
t1とt2を同時に処理することで高速化
161
a,b,c,dを読み出し,CPUで乗算命令を2個同時に発行できるなら
GPGPU実践基礎工学
2015/10/07
命令の同時実行(スーパースカラ実行)
お互いに無関係な命令を並行して(同時に)実行
並行して実行できる演算
t1,t2が浮動小数と整数なら同時実行が可能
t1,t2が同じ型なら構造的ハザードを回避できる場合に同時
実行可能
命令1
IF
ID
OF
EX
WB
命令2
IF
ID
OF
EX
WB
IF
ID
OF
EX
命令3
実行開始
162
t1 = a*b
t2 = c*d
WB
t = t1 + t2
処理時間
GPGPU実践基礎工学
2015/10/07
アウト・オブ・オーダー実行
命令の順序を入れ替えて実行
命令をいくつもフェッチし,デコードを行い,オペランドが得ら
れた順に実行
順番通り計算した場合と同じ結果が得られるように制御
実行の効率が向上
メモリアクセスの改善
現在の計算機はメモリへのアクセス時間>>演算時間
163
1個のデータを読み出す間に100回以上演算が可能
メモリ読み出し命令を可能な限り早く発行
GPGPU実践基礎工学
2015/10/07
アウト・オブ・オーダー実行
依存性
あり
依存性
あり
164
int
a,b,c;
float x,y,z;
int
a,b,c;
float x,y,z;
c = a+b;
c = c*c;
c = a+b;
z = x+y;
同時に命令を
フェッチ,デコード
c = c*c;
z = z*z;
同時に命令を
フェッチ,デコード
z = x+y;
z = z*z;
依存性なし
依存性なし
GPGPU実践基礎工学
2015/10/07
アウト・オブ・オーダー実行
命令の順序を入れ替えて実行
命令をいくつもフェッチし,デコードを行い,オペランドが得ら
れた順に実行
命令1
命令2
IF
ID
OF
EX
WB
IF
ID
OF
EX
WB
c = a+b;
z = x+y;
オペランドが得られた方を先に実行(うまくいけば同時実行)
命令3
IF
命令4
ID
OF
EX
WB
IF
ID
OF
EX
実行開始
165
WB
c = c*c;
z = z*z;
処理時間
GPGPU実践基礎工学
2015/10/07
制御ハザード
条件分岐命令が存在
どちらに分岐するかわからないため,命令をフェッチできない
ループアンロールによる条件分岐(判断)の削減,分岐予測・
投機的実行
命令1
IF
ID
OF
EX
WB
IF
ID
OF
EX
IF
ID
OF
命令2? 3?
命令4
実行開始
166
if(命令1){
命令2
}else{
命令3
WB
}
命令4
EX
WB
処理時間
GPGPU実践基礎工学
2015/10/07
分岐予測
条件の判定を事前に予測
予測した先の命令の実行を準備
予測が当たると時間を大きく節約
条件確定
命令1
IF
ID
OF
EX
WB
IF
命令2
if(命令1){
命令2
}else{
命令3
}
命令4
ID
OF
EX
WB
IF
ID
OF
EX
条件予測無し
命令4
実行開始
167
処理時間
GPGPU実践基礎工学
2015/10/07
WB
分岐予測
条件の判定を事前に予測
予測した先の命令の実行を準備
予測が当たると大きな時間の節約になる
条件確定
命令1
命令2
IF
ID
OF
EX
WB
IF
ID
OF
EX
WB
IF
ID
OF
EX
命令4
実行開始
168
if(命令1){
命令2
}else{
命令3
}
命令4
命令2に分岐すると予測
WB
処理時間
GPGPU実践基礎工学
2015/10/07
分岐予測
条件の判定を事前に予測
予測した先の命令の実行を準備
予測が当たると大きな時間の節約になる
条件確定
命令1
命令2
IF
ID
OF
EX
WB
IF
ID
OF
EX
WB
IF
ID
OF
EX
命令4
実行開始
169
if(命令1){
命令2
}else{
命令3
}
命令4
命令2に分岐すれば
そのまま実行
WB
処理時間
GPGPU実践基礎工学
2015/10/07
分岐予測
条件の判定を事前に予測
予測した先の命令の実行を準備
予測が当たると大きな時間の節約になる
条件確定
命令1
IF
ID
OF
EX
WB
命令3に分岐すれば,命令
2を破棄して命令3を準備
命令3
IF
命令4
実行開始
170
if(命令1){
命令2
}else{
命令3
}
命令4
ID
OF
EX
WB
IF
ID
OF
EX
処理時間
GPGPU実践基礎工学
2015/10/07
WB
静的な分岐予測
ループの回数だけ条件判断
i<Nならループ継続
N‐1回はi<Nが成立,最後の1回でi<Nが不成立
常に成立すると予測しておけば,予測が外れるのは1回のみ
for(i=0;i<N;i++){
命令1
}
命令2
171
GPGPU実践基礎工学
2015/10/07
投機的実行
両方の分岐先の実行を並列に進め,判定が出た段階で
正しい方の結果のみを残す
大量のトランジスタを集積できるようになって実現
GPUのif分岐は投機的実行に類似
if(命令1){
条件確定
ID
OF
EX
WB
命令2
IF
ID
OF
EX
WB
命令3
IF
ID
OF
EX
WB
IF
ID
OF
EX
命令1
IF
命令4
実行開始
172
条件が成立
した方を残す
命令2
}else{
命令3
}
命令4
WB
処理時間
GPGPU実践基礎工学
2015/10/07