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