Upgrade to Pro — share decks privately, control downloads, hide ads and more …

パタヘネ輪読: 第一章

kota-yata
October 15, 2024

パタヘネ輪読: 第一章

kota-yata

October 15, 2024
Tweet

More Decks by kota-yata

Other Decks in Programming

Transcript

  1. 全体の流れ 3 • コンピュータの「性能が良い」とは? • コンピュータの消費電⼒の限界 • マルチプロセッサへの変遷と並列処理 • Intel

    Core i7のベンチマークテストを⾒る • Pythonの⾏列乗算プログラムで⾒る⾼速化 • コンピュータに関する誤信
  2. コンピュータの急速な進歩 5 • パーソナルコンピュータ ◦ 低コストかつそれなりの性能が求められる • サーバー ◦ 単⼀の複雑なアプリケーションを動かす場合や⼩規模なタスクを⼤量に扱う場合がある

    ◦ 処理能⼒、容量は⽤途によって⼤きく異なる(⼩さいWebサーバーからスパコンまで) • 組み込みコンピュータ ◦ ⾃動⾞やテレビから冷蔵庫まで、あらゆるハードウェアに組み込まれるプロセッサ ◦ ⽐較的低い性能でコストと消費電⼒を最⼩限に抑えることが求められる 進歩に伴ってコンピュータの利⽤形態も多様化した
  3. この本で学べること 8 • ⾼⽔準⾔語で書かれたプログラムがハードウェア向けにどう翻訳され、どう実⾏される のか • プログラムを実⾏するためにソフトウェアはハードウェアにどんな指⽰を出すのか • プログラムの性能はどう決まり、どう性能改善できるのか •

    ハードウェア設計者は性能‧エネルギー効率のためにどのような技法を⽤いているのか • 逐次処理から並列処理への転換はなぜ起きたのか、またどういう結果をもたらすのか • 商⽤コンピュータが誕⽣して以来、現代のコンピューティングの基礎を築くためにどの ようなアイディアが考案されたのか >以上の質問に対する答えを理解しないままで、現代のコンピュータにおけるプログラム性能を改善 しようとしたり、ここのアプリケーションでコンピュータ間の優劣にどんな特性が影響するかを評 価しようとしたりすることは慎んでほしい
  4. コンピュータ‧アーキテクチャにおける7つの主要なアイディア 9 • 抽象化 ◦ 下位レベルのプログラムの詳細を隠すことによりモデルを単純化する • 「⼀般的な場合」の⾼速化 ◦ 多くの場合、「⼀般的な場合」は稀な場合よりも⾼速化が単純である

    ◦ 「⼀般的な場合」は様々な指標の測定によって初めて可能になる(ベンチマーク) • 並列処理 ◦ この本通して頻繁に登場するアイディア 過去60年のコンピュータ設計において考案された7つの主要なアイディア
  5. コンピュータ‧アーキテクチャにおける7つの主要なアイディア 10 • パイプライン処理 ◦ ⾮常に多様される並列処理⽅式 ◦ ⽕事場のバケツリレー • 場合の予測

    ◦ 「先に許可を求めるよりも、後で許しを請す⽅が良い」 ◦ 処理の中で、ある程度予測のつく処理を先に実⾏してしまう • 記憶の階層化 ◦ 最⾼速だがビット当たりのコストが⾼い最⼩容量のメモリを最上部、その逆を最下部に 配置することでコストを抑えつつ性能を改善した 過去60年のコンピュータ設計において考案された7つの主要なアイディア
  6. プログラムの裏側 14 • コンピュータのハードウェアが実⾏できる命令の数はとても少ない • ソフトウェアをレイヤーに分け、⾼⽔準の処理を単純な命令の組み合わせ に変換していくことで、複雑で⼤規模なアプリケーションの実⾏が可能に なる ソフトウェアの抽象化 󰳏:

    ⾚⾝の寿司を提供したい →⾚⾝を切る →シャリを握る →⾚⾝をシャリの上に乗せる →客に差し出す 󰳏: シャリを握る →ご飯を炊く →酢飯にする →適当な分量掴み取る →握る より低いレイヤ
  7. プログラムの裏側 16 • ハードウェアは電気的な0/1の信号のみを理解する • アルファベットと同じように、0/1の組み合わせでハードウェアに命令を 伝えている(これを機械語という) • 命令を⽂字で書けるようにアセンブリ⾔語が作られた ◦

    ⼀命令⼀⾏で書いていく⾔語 ◦ アセンブリ⾔語を機械語に翻訳するシステムをアセンブラという ◦ しかしこれでは実際のアプリケーションを書くにはコード量が多すぎる。。 ▪ 例えばどのアセンブリ⾔語でもHello Worldを出⼒するのに10-20⾏は書く必要があ る ⾼⽔準⾔語からハードウェアの⾔語へ:⾔語の抽象化
  8. プログラムの裏側 17 • より多くのことを⼀度に書きたい→⾼⽔準⾔語の誕⽣ ◦ CとかRustとか、いわゆるプログラミング⾔語 ◦ ⾼⽔準⾔語をアセンブリ⾔語に変換するシステムをコンパイラという ◎ 擬似的な例

    ⾼⽔準⾔語: A+B → アセンブリ⾔語: add A, B → 機械語: 1000110010100000 ⾼⽔準⾔語からハードウェアの⾔語へ:⾔語の抽象化 ⾼⽔準⾔語を使うことで、プログラムをコンピュータから独⽴させられる
  9. ハードウェアの話:コンピュータの構成要素 18 • データの⼊⼒ ◦ マイクやキーボード、マウスのような⼊⼒装置 • データの出⼒ ◦ スピーカーやディスプレイなどの出⼒装置

    • データの記憶 ◦ HDD、メモリなどの記憶装置 • データの処理 ◦ プロセッサでの演算、制御など コンピュータ‧ハードウェアの役割
  10. ハードウェアの話:iPhone XS Maxの中⾝を⾒る 20 プロセッサ(CPU) • 数値演算や条件判定などを⾏い、 他のコンポーネントの動作を制御 する役割を持つ PMIC

    • 電源管理装置 • 疑問:なんでこんなにあるのか A12のようにCPU、GPUなど多機能を1 チップに集約したものをSoC (System on Chip)という
  11. ハードウェアの話:iPhone XS Maxの中⾝を⾒る 21 キャッシュはSRAMを使⽤している • 「フリップフロップ回路」なる複雑な回路 • リフレッシュ動作が要らないかつ⾼速 ⼀⽅メモリ(1次記憶)はDRAMを⽤いる

    • 電荷で情報を保持する • 定期的にリフレッシュ動作が必要 さらに下位の2次記憶にはフラッシュメモリが⽤ いられる • より低速でより安価&不揮発 記憶の階層化
  12. コンピュータの「性能が良い」とは? 32 • コンピュータは、クロックというタイミング単位で処理を⾏う ◦ その周期をクロックサイクル時間、その逆数をクロック周波数という ◦ CPU実⾏時間 = プログラムのクロックサイクル数

    / クロック周波数 コンピュータにおける「時間」 󰳏寿司職⼈A(1GHz) 1秒間に10億クロック クロックサイクル時間は1ns ⼤トロのCPU実⾏時間は1μs 1秒間に100万⼤トロ ⼤トロ(1000サイクル)を握る
  13. コンピュータの「性能が良い」とは? 33 • コンピュータは、クロックというタイミング単位で処理を⾏う ◦ その周期をクロックサイクル時間、その逆数をクロック周波数という ◦ CPU実⾏時間 = プログラムのクロックサイクル数

    / クロック周波数 コンピュータにおける「時間」 󰳏寿司職⼈B(2GHz) 1秒間に20億クロック クロックサイクル時間は0.5ns ⼤トロのCPU実⾏時間は0.5μs 1秒間に200万⼤トロ ⼤トロ(1000サイクル)を握る 󰳏寿司職⼈A(1GHz) 1秒間に10億クロック クロックサイクル時間は1ns ⼤トロのCPU実⾏時間は1μs 1秒間に100万⼤トロ
  14. コンピュータの「性能が良い」とは? 34 • コンピュータは、クロックというタイミング単位で処理を⾏う ◦ その周期をクロックサイクル時間、その逆数をクロック周波数という ◦ CPU実⾏時間 = プログラムのクロックサイクル数

    / クロック周波数 コンピュータにおける「時間」 プログラムの性能を上げるには、プログラムのクロックサイクル数を減ら すか、クロック周波数を上げる必要がある
  15. コンピュータの「性能が良い」とは? 36 CPU実⾏時間 = 実⾏命令数 * CPI * クロックサイクル時間 もしくは

    CPU実⾏時間 = 実⾏命令数 * CPI / クロック周波数 - - - - - - - - - - - - - - まとめ:古典的なCPU性能⽅程式 • クロックサイクル時間は通常コンピュータのスペックとして公開されている • 実⾏命令数はシミュレータ、ハードウェアカウンタなどを通して計算する • CPIはメモリシステムやプロセッサの構造などによるため計算が難しい
  16. コンピュータの消費電⼒の限界 38 集積回路内の⼀つのトランジスタに必要な電⼒は以下の式で算出される 消費電⼒ = ½ * 容量性負荷 * 電圧^2

    * 切り替え周波数 • 集積回路の主要テクノロジであるCMOSにおいて、エネルギー消費の主要因はトラ ンジスタの0/1の切替の動的エネルギーである ◦ これは½ * 容量性負荷 * 電圧^2で求められる ◦ 容量性負荷は、コンデンサの電荷が変わる際の抵抗のようなもの?? 消費電⼒の算出⽅法
  17. マルチプロセッサへの変遷と並列処理 41 • 2006年時点で、すべてのメーカーが1つのチップに複数のプロセッサを載せた マイクロプロセッサを出荷するようになった ◦ これはスループットの向上に⼤きく貢献した ◦ 「コア」と呼ばれるものは単⼀のプロセッサで、マイクロプロセッサはnコア‧マイクロプロ セッサなどと呼ばれるようになった

    • これにより、プログラマは並列処理を前提としたプログラミング技術を求めら れるようになった ◦ 古くから存在するパイプライン処理などは命令レベル並列性と呼ばれ、プログラマ、コンパイ ラ共に逐次処理と同じ書き⽅で何も問題はなかった ◦ この頃からプログラマは、並列処理のためのスケジューリング、負荷の平準化、同期のオー バーヘッドの減少に取り組む必要が出てきたのである ※並列処理については各章に説明が頻出する
  18. コンピュータに関する誤信 48 • あるコンピュータ上で実⾏に100秒かかるプログラムがあり、そのうち80 秒が乗算に占められているとする ◦ この時乗算をどれだけ効率化しても、プログラム全体の実⾏速度を5倍以上速くすること は不可能である ◦ 改善後の実⾏時間

    = 改善後の乗算にかかる時間 + 20秒 ◦ ある⾯を改善したことによる性能向上はその改善された機能の割合に制約される ▪ →Amdahlの法則(経済学においては収穫逓減の法則と呼ばれる) 󰢄 コンピュータの⼀⾯を改善すればそれに等しい性能向上が得られる
  19. コンピュータに関する誤信 50 • 前述の通り、クロック周波数、命令数、CPIはそれぞれ別の要素に影響さ れ、どれが⽋けても正確な性能評価には⾄らない • MIPS = 実⾏命令数 /

    (実⾏時間 * 10^6) なる直感的な指標があるが、命令 の働きが考慮されておらず、命令セットが異なるとこの指標は役に⽴たな い 󰢄 性能の尺度に性能⽅程式の⼀部を⽤いる