『コンピュータアーキテクチャ技術入門』
https://gyazo.com/f4cb3e2ee30e4a579064f43a098814c8
2014/5/1
第1章 コンピュータシステムの基本
1.1 コンピュータシステムの構造
命令とデータ
コンピュータシステムの構成要素 ──プロセッサ,メモリ,入出力装置
コンピュータは2進数で処理を行う
2進法とビット,バイト,ワード
プロセッサの命令 ──プログラムは命令の集まりでできている
分岐命令,条件分岐命令
命令セットアーキテクチャは上位互換で拡張する
バイト列を記憶するメモリ ──メモリセル,メモリの記憶容量
メモリにはバイト単位でアドレスを付ける
記憶容量の単位 ──1024B,1KB,1KiB
入出力装置
スマートフォン用LSIの入出力装置
スマートフォン用SoCとデスクトップPCプロセッサの違い
プロセッサはどのように命令を実行するのか
メモリの読み書き速度の問題
半導体とは
現代のデジタル回路は省電力のCMOSが主流
プロセッサチップの作り方
ムーアの法則 ──1個のチップに集積できる素子の数は毎年倍増(!?) 性能と消費電力 ──1Wの電力あたりのプロセッサの性能を上げる
CMOSの消費電力 ──スイッチ,アクティブ電力,クロックゲート
1.4 まとめ
Column 文字の表現
第2章 プロセッサ技術
2.1 プロセッサの命令セットアーキテクチャ
命令で操作できる各種のレジスタ
メモリ空間 ──メモリを抽象化
命令の実行はレジスタやメモリの内容を変える ──命令実行の実行環境への影響
ユーザモードではバイナリ互換が必要
3アドレス命令と2アドレス命令 ──x86命令アーキテクチャは2アドレス命令
メモリアドレスの指定法
Intel x86アーキテクチャの可変長命令
SPARCやARMプロセッサで使用されている固定長命令
固定長命令のメリット,デメリット
2.2 プロセッサの基本構造 ──マイクロアーキテクチャの基礎
条件分岐命令の処理 ──命令の実行の順序を変える命令 分岐ユニット
2.3 演算を速くする
数値の表現
負の整数をどう表すか ──コンピュータでは「2の補数表現」が使われる 小数点を含む数字をどう表すか ──IEEE 754浮動小数点数のフォーマット
上位のキャリーを速く求める ──G信号とP信号
引き算はどうするのか
リザルトバイパス ──汎用レジスタをバイパスして,演算結果を次の演算に渡す 変形ブースエンコード
浮動小数点演算器
SIMD演算は専用のビット長の長いレジスタを使う
SIMD命令は長いレジスタを分割して並列に演算する
2.4 高速化を支えるキャッシュメモリ
キャッシュライン,キャッシュラインサイズ
キャッシュメモリのアクセス ──キャッシュラインとタグ
頻繁に使われるデータをキャッシュに入れるには?
ストアの前に同一アドレスのキャッシュラインを無効化する
ロードの前にキャッシュの「スヌープ」を行う
キャッシュの階層化のしくみ
2.5 プロセッサの高速化技術
レジスタリネーミングの実行の様子
分岐予測 ──条件分岐命令の条件成立/不成立を予測する 分岐予測とループの回数
2ビット飽和カウンタの構造
ローカル履歴を用いる分岐予測 ──ループ回数が少ない場合の予測精度の向上に効果あり
その他の分岐予測
分岐予測ミスからの回復 ──投機実行とレジスタリネーム機構の利用
リターンアドレススタック ──リターン命令の分岐先のアドレスを予測する
ネクストラインプリフェッチ
ストライドプリフェッチ
ストライドプリフェッチは配列アクセスに有効
ソフトウェアプリフェッチ
2.6 プロセッサの性能
階層キャッシュの速度を測ってみる
メモリアクセスサイクルの測定結果
キャッシュやメモリのアクセスには何サイクル掛かっているのか
1次キャッシュからの読み込みのケース
1次キャッシュをミスして2次,3次キャッシュから読み込む
ステップ値が80を超えるとメインメモリへのアクセスが出てくる
Mode=1とMode=2の違い
性能を引き出すプログラミング
キャッシュを有効に使う
構造体の配列
配列の構造体
構造体の配列か,配列の構造体か
ソフトウェアプリフェッチを使う
演算時間の長い命令は避ける
性能を左右する最内ループ
セグメント方式のメモリ管理
ページ方式のメモリ管理
ページテーブルを使うメモリ割り当てとプロセスの分離
TLBミスとメモリアクセス時間,ラージページでTLBミスを低減 スーパーバイザモードとユーザモードによる分離
バッファオーバーフロー攻撃とその対策 ──NXビット,XDビット
ベアメタル型とホストOS型
「二重のアドレス変換」を行うメモリ管理機構
仮想化とWeb,データセンターの世界
2.8 まとめ
Column デナードスケーリングとは何か? ──性能向上の鍵
3.1 OSによるマルチプロセスの実行
OSは多くのプロセスを並列に実行する
OSで複数のプロセッサを使う
3.2 マルチコアプロセッサとマルチプロセッサ
マルチコアプロセッサのメモリアクセス
マルチプロセッサシステム
マルチスレッドとマルチコア
複数プロセッサのメモリアクセスで矛盾が起こる
アトミックなメモリアクセスとロック
ロックの問題点 ──ロックの粒度とデッドロック
トランザクショナルメモリの実現方法
3.4 巨大プロセスで多数のコアを使う
プロセスを分割して並列実行する
スレッド
OpenMPを使う上での注意点
分散メモリ型クラスタシステム
分散メモリ型のマルチプロセッサシステムの実現
分散メモリシステムでの並列処理
分散メモリを共有メモリに近づける ──ビッグデータ時代の工夫
ディレクトリベースのキャッシュコヒーレンシ維持
仮想マシンで共有メモリを実現する
3.6 並列処理による性能向上
並列化する部分の狙いを定める
すべてのコアの実行時間を均等に近づける
OpenMPではスレッド数に注意
3.7 まとめ
Column GPUを含むシステムの並列化を行うOpenACC
第4章 低消費電力化技術
スイッチに伴う電力消費
漏れ電流による電力消費
4.2 消費電力を減らす技術 ──プロセッサコア単体での電力削減
低リーク電流トランジスタで漏れ電流を減らす
4.3 プロセッサチップの電力制御
Cステートによる電力制御
チップ温度の余裕を利用するターボブースト
プロセッサコア間やコアとGPUの間で電力枠を融通
パッケージの熱容量を利用して瞬間ダッシュ
メモリコントローラとPCI Expressリンクなどの電力ステート
4.4 コンピュータとしての低電力化
用事をまとめて休み時間を長くする
割り込みやデータ転送要求のタイミングを遅らせて長い休みを作る
消費電力の減少
入出力装置のアイドル時の電力を減らす
SATAストレージのデバイススリープ
液晶パネルのセルフリフレッシュ ──自分でリフレッシュ
プロセッサチップへの電源供給
ボルテージレギュレータの効率改善
オンチップレギュレータ
4.5 省電力プログラミング
プログラムを最適化して性能を上げる
最も重要なのは処理アルゴリズム
ビデオのエンコードやデコード
コンパイラの最適化オプション
無駄な動作を省いて効率的に処理を行う
無駄な動作を省いたプログラムを作る
HDDアクセス
Windows OSのタイマー周期
使わないファイルや入出力はクローズする
4.6 まとめ
Column ENIACとスマートフォン ──2兆倍もの進歩を遂げた演算/W
Column 目で見る電力制御
5.1 3Dグラフィックスの基礎
張りぼてモデルを作る ──サーフェスモデル
モデリング変換,視点変換,モデルビュー変換 ──マトリクスを掛けて位置や向きを変えて配置を決める
シェーディング ──光の反射を計算する
5.2 GPUとその処理
CPUとGPUの違い
グラフィックスパイプライン
バーテックスシェーダ ──頂点の座標変換を行う
SIMTの実行ユニット ──プレディケード実行
GPUコアの構造
Kepler GPUのSIMT命令実行 ──ワープスケジューラ,命令ディスパッチユニット
GPUの描画プログラムOpenGL
5.3 GPUの科学技術計算への利用
なぜ,GPUを科学技術計算に使うのか
CUDAによるGPUプログラミング
CUDAで並列計算を記述する
スレッド間のデータの受け渡し
CPUとGPUは分散メモリ ──異なるメモリ間のデータのコピーが必要
理想的なCPUとGPUの関係
CPUとGPUの共有メモリを実現するAMDのHSA 5.4 GPUを使いこなすプログラミング
条件分岐は避ける
スレッドは無駄なく使う
ある程度多くのワープを走らせる
ローカルメモリをうまく使う
メモリアクセスのパターンに注意する
ブロック数にも気をつける
通信と計算をオーバーラップする
5.5 まとめ
Column ゲームとグラフィックス
第6章 メモリ技術
6.1 プロセッサのメモリ技術 ──階層的な構造
高速小容量から低速大容量への「階層」を構成するメモリ
各種のメモリ素子
不揮発性メモリ素子とプロセッサの消費電力
6.2 メインメモリ技術
メモリバンド幅の改善
必要なメモリバンド幅は?
DRAMチップの内部構造
各種のDRAM規格
DDR3 ──PCやサーバ,あるいはビデオレコーダなどに広く使われている GDDR5 ──GPU向けの高いバンド幅を持つメモリ規格 6.3 DRAMのエラー対策
エラー訂正コード
固定故障対策
6.4 まとめ
Column DRAMメモリの歴史
第7章 ストレージ技術
7.1 コンピュータのストレージ ──不揮発性の記憶
磁気記録のメカニズム
熱ゆらぎとデータ化け,エラー訂正
HDD装置
HDDには振動を与えないように
光ディスク
巨大データを保存するテープアーカイブ
NAND Flashトランジスタの構造と動作原理
NAND Flashメモリの記憶セルアレイ
NAND Flashメモリのページとブロック ──NAND Flashメモリの書き換え回数制限
NAND Flashメモリの限界と3D化
NAND Flashメモリのウェアレベリング,NANDコントローラ
SSDとHDDの使い分け
ストレージの接続インタフェース
7.2 ストレージのエラー訂正
交替セクタ,交替ブロック
エラー訂正の考え方
LDPCのデコード
RAIDの考え方と方式
ストライピング/RAID0,RAID01,RAID10 ──ディスク性能を向上させる
7.4 まとめ
Column HDDの進化
第8章 周辺技術
8.1 周辺装置インタフェース
周辺装置のインタフェースレジスタ
インタフェースレジスタを使った入出力制御
割り込みを使った周辺装置制御
アドレス変換の問題
スキャッタ・ギャザーDMA
周辺装置側にもアドレス変換機構を設ける方法
PCI規格 ──インタフェースレジスタの衝突を解消 周辺装置インタフェースの標準化 ──ATA,プリンタのページ記述言語
Column BIOS ──Basic Input Output System
クロック抽出 ──信号とクロックのタイミングのずれの問題を解消 USB
8.2 各種の周辺装置
スマートフォンSoCに接続される周辺装置
PCに接続される周辺装置
8.3 フラットパネルディスプレイとタッチパネル
液晶ディスプレイパネルの基本構造
アクティブマトリクス液晶パネル
漏れ電流が少ないIGZO液晶パネル
液晶コントローラをパネルに集積する
AMOLEDパネル
タッチパネル
8.4 まとめ
Column 周辺装置が主役の時代
第9章 データセンターとスーパーコンピュータ
9.1 いまどきのデータセンターの基本
データセンターの種々の形態 ──パブリックとプライベート
データセンターの計算ノード
データセンターのネットワーク
9.2 いまどきのスーパーコンピュータの基本
スーパーコンピュータの性能をランキングするTop500
スーパーコンピュータの計算ノード
ネットワークの基礎
ネットワーク直径
バイセクションバンド幅
3次元トーラス+αのトポロジを使うスーパーコンピュータ「京」 9.3 巨大データセンターの電力供給と冷却
データセンターの電源供給
電力供給系のロスの低減
巨大データセンターやスーパーコンピュータの冷却
ホットアイルとコールドアイルの分離
外気を利用した冷却
液冷
データセンターとスーパーコンピュータの冷却の違い
9.4 スーパーコンピュータの故障と対策
スーパーコンピュータに使用する部品の故障を減らす
故障ノードを交替ノードに置き換える
チェックポイントーリスタートの問題
9.5 まとめ
本書の結びに