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

出版社:技術評論社
ISBN:978-4-7741-6426-7
本体価格:2,780円
発売日:2014年05月01日
著者:Hisa Ando 著

詳細は技術評論社サイトへ

 

この本の概要

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

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

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

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

こんな方におすすめ

 

目次

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

第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