WEB+DB PRESS plusシリーズコンピュータアーキテクチャ技術入門
――高速化の追求×消費電力の壁

[表紙]コンピュータアーキテクチャ技術入門 ――高速化の追求×消費電力の壁

紙版発売
電子版発売

A5判/416ページ

定価3,058円(本体2,780円+税10%)

ISBN 978-4-7741-6426-7

電子版

→学校・法人一括購入ご検討の皆様へ

書籍の概要

この本の概要

わずか70年余りで,150億倍もの演算速度向上を遂げたプロセッサ,
40年余りで記憶容量が800万倍に増加したメインメモリ,
55年余りで記憶密度が3億倍に達したストレージ。
そして,省電力化により,演算/W(1ワットあたりの演算能力)に至っては,
約70年で2兆倍もの差がある......。

驚くべき進化を遂げたコンピュータは,
今,どのように成り立っているのでしょうか。

本書では,コンピュータアーキテクチャの今に焦点を当て,
手のひらサイズのスマートフォンから,
巨大なスーパーコンピュータやデータセンターまで幅広く取り上げながら,
プロセッサ,メモリ,I/Oを中心に最新のしくみを徹底解説。
合わせて,現在ホットな消費電力や並列処理,GPUの話題も盛り込み,
各種プログラミングテクニックもカバー。
さまざまなスケールで共通する技術とは何か,
異なる/特長的な技術とは何かを押さえつつ,
コンピュータにおける性能向上の鍵を探っていきます。

未来に向かう,より効率的なソフトウェア開発のために,
長く役立つ技術知識を満載してお届けします。

こんな方におすすめ

  • コンピュータ技術の今を知りたいエンジニアの方々

本書に関するお知らせ

本書に関連する記事を公開しております。

この書籍に関連する記事があります!

本書について
コンピュータは,普及が著しいスマートフォンやタブレットに使われており,GoogleやFacebookなどのデータセンターにも大量に使われています。
その差,“2兆”倍(!?)1Wあたりの演算性能の向上とは?―ENIACとスマートフォン
現在あるコンピュータの歴史の幕開けから,70年余り。いまや,コンピュータはいわゆるPC(Personal Computer)に止まりません。

本書のサンプル

本書の一部ページを,PDFで確認することができます。

目次

  • 本書について
  • 本書の構成
  • 基本用語の整理

第1章 コンピュータシステムの基本

1.1 コンピュータシステムの構造

  • 命令とデータ
  • コンピュータシステムの構成要素 ──プロセッサ,メモリ,入出力装置
  • コンピュータは2進数で処理を行う
    • 2進法とビット,バイト,ワード
  • プロセッサの命令 ──プログラムは命令の集まりでできている
    • 分岐命令,条件分岐命令
  • 命令セットアーキテクチャ ──Intel 64,AMD64,ARMv8
    • 命令セットアーキテクチャは上位互換で拡張する
  • バイト列を記憶するメモリ ──メモリセル,メモリの記憶容量
    • メモリにはバイト単位でアドレスを付ける
    • 記憶容量の単位 ──1024B,1KB,1KiB
    • DRAMチップとメモリセルの価格
  • 入出力装置
    • スマートフォン用LSIの入出力装置
    • PC用LSIの入出力装置
    • スマートフォン用SoCとデスクトップPCプロセッサの違い

1.2 プロセッサの基礎

  • プロセッサはどのように命令を実行するのか
    • サイクルタイムとクロック周波数
  • 流れ作業で性能を上げるパイプライン処理
  • メモリの読み書き速度の問題
  • 階層構造のメモリ ──実効的なメモリ速度を改善する
    • キャッシュ

1.3 半導体技術

  • 半導体とは
  • MOSトランジスタの原理 ──N型とP型
  • CMOS論理回路
    • 現代のデジタル回路は省電力のCMOSが主流
  • プロセッサチップの作り方
  • ムーアの法則 ──1個のチップに集積できる素子の数は毎年倍増(!?)
  • マルチコア化の流れ ──性能と消費電力
  • 性能と消費電力 ──1Wの電力あたりのプロセッサの性能を上げる
  • CMOSの消費電力 ──スイッチ,アクティブ電力,クロックゲート

1.4 まとめ

  • Column 文字の表現

第2章 プロセッサ技術

2.1 プロセッサの命令セットアーキテクチャ

  • プロセッサの実行環境 ──レジスタとメモリ空間
    • 命令で操作できる各種のレジスタ
    • メモリ空間 ──メモリを抽象化
    • 命令の実行はレジスタやメモリの内容を変える ──命令実行の実行環境への影響
    • スーパーバイザモードとユーザモード ──2つの実行状態
    • ユーザモードではバイナリ互換が必要
  • 3アドレス命令と2アドレス命令 ──x86命令アーキテクチャは2アドレス命令
  • 固定長命令と可変長命令 ──メモリアドレスの指定,可変長命令,固定長命令
    • メモリアドレスの指定法
    • Intel x86アーキテクチャの可変長命令
    • SPARCやARMプロセッサで使用されている固定長命令
    • 固定長命令のメリット,デメリット

2.2 プロセッサの基本構造 ──マイクロアーキテクチャの基礎

  • パイプラインプロセッサ ──プロセッサはどのように命令を実行するのか
  • フェッチユニット ──命令の読み出し
  • デコードユニット ──命令のデコードとスケジュール
    • 資源予約表
    • レジスタ状態表
    • デコードユニットが要 ──パイプライン全体の動作を制御する
  • 実行パイプライン ──命令を実行する
  • ロード/ストアユニット
  • 条件分岐命令の処理 ──命令の実行の順序を変える命令
    • 分岐ユニット
  • 入出力装置との接続 ──メモリと入出力レジスタ,メモリマップドI/O
    • デバイスドライバ

2.3 演算を速くする

  • 数値の表現
    • 負の整数をどう表すか ──コンピュータでは「2の補数表現」が使われる
    • 小数点を含む数字をどう表すか ──IEEE 754浮動小数点数のフォーマット
  • 加算器の高速化 ──フルアダー
    • 基本のリップルキャリーアダー
    • 上位のキャリーを速く求める ──G信号とP信号
    • 引き算はどうするのか
    • リザルトバイパス ──汎用レジスタをバイパスして,演算結果を次の演算に渡す
  • 乗算器とその高速化
    • 変形ブースエンコード
    • 部分積の数を減らすブースのアルゴリズム
    • 部分積の和を高速化するウォレスツリー
  • 除算器とその高速化
  • 浮動小数点演算器
  • SIMD演算ユニット ──SSE,AVX
    • SIMD演算は専用のビット長の長いレジスタを使う
    • SIMD命令は長いレジスタを分割して並列に演算する

2.4 高速化を支えるキャッシュメモリ

  • キャッシュメモリの構造
    • キャッシュライン,キャッシュラインサイズ
  • キャッシュメモリのアクセス ──キャッシュラインとタグ
    • フルアソシアティブキャッシュ ──自由度が高い方式
    • ダイレクトマップキャッシュ ──構造が簡単な方式
    • セットアソシアティブキャッシュ ──良いとこ取りの中間的な方式
  • 頻繁に使われるデータをキャッシュに入れるには?
    • LRU
  • キャッシュコヒーレンシの必要性
  • MSIプロトコル ──キャッシュコヒーレンシを実現する基本手順
    • ストアの前に同一アドレスのキャッシュラインを無効化する
    • ロードの前にキャッシュの「スヌープ」を行う
    • MESIFプロトコル ──Intelが採用している
    • MOESIプロトコル ──AMDが採用している
  • キャッシュの階層化 ──メモリアクセス時間の改善
    • キャッシュの階層化のしくみ
  • ハーバードアーキテクチャ ──命令,データ分離キャッシュ

2.5 プロセッサの高速化技術

  • スーパースカラ実行
  • Out-of-Order実行
    • リザベーションステーション ──入力オペランドが揃うと実行を開始する
    • レジスタリネーミング ──逆依存性を解消する
    • レジスタリネーミングの実行の様子
  • 分岐予測 ──条件分岐命令の条件成立/不成立を予測する
    • 分岐予測とループの回数
    • 2ビット飽和カウンタを用いる分岐予測 ──過去に分岐が行われた履歴を記憶しておく
    • 2ビット飽和カウンタの構造
    • ローカル履歴を用いる分岐予測 ──ループ回数が少ない場合の予測精度の向上に効果あり
    • その他の分岐予測
    • 分岐予測ミスからの回復 ──投機実行とレジスタリネーム機構の利用
  • リターンアドレススタック ──リターン命令の分岐先のアドレスを予測する
  • BTB ──分岐先アドレスを予測する
  • プリフェッチ ──先回りしてデータをキャッシュに入れる
    • ネクストラインプリフェッチ
    • ストライドプリフェッチ
    • ストライドプリフェッチは配列アクセスに有効
    • ソフトウェアプリフェッチ
  • 可変長命令をRISC命令に分解して実行 ──Nx586プロセッサ,μOP,μOPキャッシュ

2.6 プロセッサの性能

  • 命令実行に必要なサイクルを数える ──IPS,IPC
  • 階層キャッシュの速度を測ってみる
    • メモリアクセスサイクルの測定結果
    • キャッシュやメモリのアクセスには何サイクル掛かっているのか
    • 1次キャッシュからの読み込みのケース
    • 1次キャッシュをミスして2次,3次キャッシュから読み込む
    • ステップ値が80を超えるとメインメモリへのアクセスが出てくる
    • Mode=1とMode=2の違い
  • 性能を引き出すプログラミング
    • キャッシュを有効に使う
    • 構造体の配列
    • 配列の構造体
    • 構造体の配列か,配列の構造体か
    • ソフトウェアプリフェッチを使う
    • 演算時間の長い命令は避ける
    • 性能を左右する最内ループ

2.7 マルチプロセス化の技術

  • メモリ管理機構
    • セグメント方式のメモリ管理
    • 断片化の問題
    • ページ方式のメモリ管理
    • ページテーブルを使うメモリ割り当てとプロセスの分離
    • ページテーブルをキャッシュするTLB
    • TLBミスとメモリアクセス時間,ラージページでTLBミスを低減
  • スーパーバイザモードとユーザモードによる分離
    • バッファオーバーフロー攻撃
    • バッファオーバーフロー攻撃とその対策 ──NXビット,XDビット
  • 割り込み
    • 例外
    • スーパーバイザコール ──ソフトウェア割り込み
  • 仮想化技術
    • ベアメタル型とホストOS型
    • VMM上でのゲストOSの動作
    • 「二重のアドレス変換」を行うメモリ管理機構
    • 仮想化とWeb,データセンターの世界

2.8 まとめ

  • Column デナードスケーリングとは何か? ──性能向上の鍵

第3章 並列処理

3.1 OSによるマルチプロセスの実行

  • OSは多くのプロセスを並列に実行する
  • OSで複数のプロセッサを使う

3.2 マルチコアプロセッサとマルチプロセッサ

  • マルチコアプロセッサ
    • マルチコアプロセッサのメモリアクセス
  • マルチプロセッサシステム
  • マルチスレッドとマルチコア
  • Column マルチXX ──プロセス,スレッド,タスク,マルチコア

3.3 排他制御

  • 複数プロセッサのメモリアクセスで矛盾が起こる
  • アトミックなメモリアクセスとロック
  • ロックの問題点 ──ロックの粒度とデッドロック
  • トランザクショナルメモリ
    • トランザクショナルメモリの実現方法

3.4 巨大プロセスで多数のコアを使う

  • プロセスを分割して並列実行する
    • スレッド
    • pthreadライブラリでスレッドを生成
  • OpenMPを使う
    • OpenMPを使う上での注意点

3.5 分散メモリシステムと並列処理

  • 分散メモリ型クラスタシステム
    • 分散メモリ型のマルチプロセッサシステムの実現
    • 分散メモリシステムでの並列処理
  • 分散メモリを共有メモリに近づける ──ビッグデータ時代の工夫
    • ccNUMAシステム ──ハードウェアで共有メモリを作る
    • ディレクトリベースのキャッシュコヒーレンシ維持
    • 仮想マシンで共有メモリを実現する

3.6 並列処理による性能向上

  • 並列化する部分の狙いを定める
  • アムダールの法則
  • すべてのコアの実行時間を均等に近づける
    • OpenMPではスレッド数に注意

3.7 まとめ

  • Column GPUを含むシステムの並列化を行うOpenACC

第4章 低消費電力化技術

4.1 CMOSの消費電力

  • スイッチに伴う電力消費
  • 漏れ電流による電力消費
    • 漏れ電流の小さいFinFET

4.2 消費電力を減らす技術 ──プロセッサコア単体での電力削減

  • スイッチ1回あたりのエネルギーを減らすDVFS
  • ARMのbig.LITTLE
  • スイッチ回数を減らすクロックゲート
  • 低リーク電流トランジスタで漏れ電流を減らす
  • 漏れ電力をさらに減らすパワーゲート

4.3 プロセッサチップの電力制御

  • Cステートによる電力制御
  • チップ温度の余裕を利用するターボブースト
    • プロセッサコア間やコアとGPUの間で電力枠を融通
    • パッケージの熱容量を利用して瞬間ダッシュ
  • メモリコントローラとPCI Expressリンクなどの電力ステート

4.4 コンピュータとしての低電力化

  • 用事をまとめて休み時間を長くする
    • 応答時間の余裕を知らせるLTR
    • 寝た子を起こさないOBFF
    • 割り込みやデータ転送要求のタイミングを遅らせて長い休みを作る
    • 消費電力の減少
  • 入出力装置のアイドル時の電力を減らす
    • SATAストレージのデバイススリープ
    • 液晶パネルのセルフリフレッシュ ──自分でリフレッシュ
  • プロセッサチップへの電源供給
  • ボルテージレギュレータの効率改善
    • オンチップレギュレータ
    • IVRチップの研究と製品化

4.5 省電力プログラミング

  • プログラムを最適化して性能を上げる
    • 最も重要なのは処理アルゴリズム
    • ビデオのエンコードやデコード
    • コンパイラの最適化オプション
  • 無駄な動作を省いて効率的に処理を行う
    • 無駄な動作を省いたプログラムを作る
    • HDDアクセス
    • Windows OSのタイマー周期
  • 使わないファイルや入出力はクローズする

4.6 まとめ

  • Column ENIACとスマートフォン ──2兆倍もの進歩を遂げた演算/W
  • Column 目で見る電力制御

第5章 GPU技術

5.1 3Dグラフィックスの基礎

  • 張りぼてモデルを作る ──サーフェスモデル
  • モデリング変換,視点変換,モデルビュー変換 ──マトリクスを掛けて位置や向きを変えて配置を決める
  • シェーディング ──光の反射を計算する

5.2 GPUとその処理

  • CPUとGPUの違い
  • グラフィックスパイプライン
    • バーテックスシェーダ ──頂点の座標変換を行う
    • ラスタライザとZバッファ
    • 壁紙を貼り付けるテクスチャマッピング
  • 各種のピクセルシェーディング
    • フォンシェーディング
  • ジオメトリシェーダ
  • プログラマブルシェーダとユニファイドシェーダ
  • SIMDかSIMTか
  • SIMTの実行ユニット ──プレディケード実行
    • GPUコアの構造
    • NVIDIAのKepler 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 プロセッサのメモリ技術 ──階層的な構造

  • 高速小容量から低速大容量への「階層」を構成するメモリ
  • 各種のメモリ素子
    • SRAM
    • DRAM
    • 不揮発性メモリ素子 ──NAND Flash,FeRAM,ReRAM,MRAM
    • 不揮発性メモリ素子とプロセッサの消費電力

6.2 メインメモリ技術

  • メモリバンド幅の改善
    • 必要なメモリバンド幅は?
  • DRAMチップの内部構造
  • DIMM
  • 各種のDRAM規格
    • DDR3 ──PCやサーバ,あるいはビデオレコーダなどに広く使われている
    • DDR4
    • GDDR5 ──GPU向けの高いバンド幅を持つメモリ規格
    • DDR3L,LPDDR3 ──低消費電力規格
    • Wide I/OとHybrid Memory Cube ──3次元実装でバンド幅を高めるアプローチ
  • メモリコントローラ

6.3 DRAMのエラー対策

  • エラー訂正コード
  • メモリスクラビング ──エラーの累積を防ぐ
  • データポイゾニング ──無駄なダウンを引き起こさない
  • 固定故障対策

6.4 まとめ

  • Column DRAMメモリの歴史

第7章 ストレージ技術

7.1 コンピュータのストレージ ──不揮発性の記憶

  • 磁気記録のメカニズム
    • 熱ゆらぎとデータ化け,エラー訂正
  • HDD装置
    • HDDには振動を与えないように
  • 光ディスク
  • 巨大データを保存するテープアーカイブ
  • NAND Flash記憶素子
    • NAND Flashトランジスタの構造と動作原理
    • NAND Flashメモリの記憶セルアレイ
    • NAND Flashメモリのページとブロック ──NAND Flashメモリの書き換え回数制限
    • NAND Flashメモリの限界と3D化
  • NAND Flashメモリのウェアレベリング,NANDコントローラ
  • SSDとHDDの使い分け
  • ストレージの接続インタフェース

7.2 ストレージのエラー訂正

  • 交替セクタ,交替ブロック
  • エラー訂正の考え方
  • LDPCの考え方
  • LDPCのデコード

7.3 RAID技術

  • RAIDの考え方と方式
  • ストライピング/RAID0,RAID01,RAID10 ──ディスク性能を向上させる

7.4 まとめ

  • Column HDDの進化

第8章 周辺技術

8.1 周辺装置インタフェース

  • 周辺装置のインタフェースレジスタ
  • インタフェースレジスタを使った入出力制御
  • DMAによるデータ転送 ──大量データの入出力
  • 割り込みを使った周辺装置制御
  • アドレス変換の問題
    • スキャッタ・ギャザーDMA
    • 周辺装置側にもアドレス変換機構を設ける方法
  • デバイスドライバの役割
  • PCI規格 ──インタフェースレジスタの衝突を解消
  • 周辺装置インタフェースの標準化 ──ATA,プリンタのページ記述言語
  • 高速シリアル伝送 ──差動伝送でクロストーク雑音を抑える
  • Column BIOS ──Basic Input Output System
  • クロック抽出 ──信号とクロックのタイミングのずれの問題を解消
  • PCI Express
  • USB
    • USB 3.0

8.2 各種の周辺装置

  • スマートフォンSoCに接続される周辺装置
  • PCに接続される周辺装置

8.3 フラットパネルディスプレイとタッチパネル

  • 液晶ディスプレイパネルの基本構造
  • アクティブマトリクス液晶パネル
    • 漏れ電流が少ないIGZO液晶パネル
    • 液晶コントローラをパネルに集積する
  • AMOLEDパネル
  • タッチパネル

8.4 まとめ

  • Column 周辺装置が主役の時代

第9章 データセンターとスーパーコンピュータ

9.1 いまどきのデータセンターの基本

  • データセンターの種々の形態 ──パブリックとプライベート
  • Googleなどの巨大データセンター
  • データセンターの計算ノード
  • データセンターのネットワーク
    • 高い信頼度を実現するGoogleのMapReduce

9.2 いまどきのスーパーコンピュータの基本

  • スーパーコンピュータの性能をランキングするTop500
    • LINPACKによる性能ランキングの問題
  • スーパーコンピュータの計算ノード
  • ネットワークの基礎
    • ネットワーク直径
    • バイセクションバンド幅
  • Top500スーパーコンピュータのネットワーク
    • 3次元トーラス+αのトポロジを使うスーパーコンピュータ「京」
  • スーパーコンピュータのネットワークはInfiniBandが主流
    • ファットツリー接続を使う東工大のスーパーコンピュータTSUBAME 2.0

9.3 巨大データセンターの電力供給と冷却

  • データセンターの電源供給
    • 電力供給系のロスの低減
  • 巨大データセンターやスーパーコンピュータの冷却
    • ホットアイルとコールドアイルの分離
    • 外気を利用した冷却
    • 液冷
    • データセンターとスーパーコンピュータの冷却の違い

9.4 スーパーコンピュータの故障と対策

  • スーパーコンピュータに使用する部品の故障を減らす
  • 故障ノードを交替ノードに置き換える
  • チェックポイントーリスタートの問題

9.5 まとめ

  • 本書の結びに

著者プロフィール

Hisa Ando

先端プロセッサの開発に40年間従事。シリコンバレーでSPARC64プロセッサの開発に従事。現在は,テクニカルライターとしてプロセッサやスーパーコンピュータ関係の報道や解説を中心に活動しており,『プロセッサを支える技術』(技術評論社,2011)などコンピュータアーキテクチャ関係の3冊の著書がある。また,ブログでプロセッサ関係の話題を紹介している。博士(工学)。