Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

20200709 fjt7tdmi-blog-appendix

137 Aufrufe

Veröffentlicht am

https://fjt7.hatenadiary.jp/entry/2020/07/09/003822
こちらのブログの補足資料です。コンピュータ・アーキテクチャに詳しくないプログラマ向けに、CPU のスペックの見方をざっくり説明しています。

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

20200709 fjt7tdmi-blog-appendix

  1. 1. コンピュータ・アーキテクチャの復習
  2. 2. CPU の性能 • CPU はプログラム(命令)を実行するもの • 高性能 • プログラムを速く実行できる • 単位時間あたりに、実行できる命令の数が多い • 高性能な CPU を作るにはどうすればよいか?
  3. 3. コアの数 • ARMv8 時代の CPU は基本的にマルチコア • CPU を見たら、まずはコアの数をチェックする必要がある • 高性能コア・省電力コアの両方がある場合は、それぞれの数に注意 • コア数の増加で性能を上げるには、ソフトウェア側の対応が必要 • マルチスレッド化 • コア数の増加では、シングルスレッド性能は上がらない
  4. 4. シングルスレッド性能 • プログラムの実行時間は以下の式で求まる • 実行時間 = 実行命令数 単位時間当たりの実行命令数 = 実行命令数 動作周波数 × IPC • シングルスレッド性能を上げる方法は、以下の3つ • 実行命令数を減らす • 動作周波数を上げる • IPC を増やす
  5. 5. 実行命令数(最初に結論) • 今回は、ほぼ気にしなくていい • ARM は x86-64 より少し有利かも?
  6. 6. 実行命令数 • プログラムの実行時間を短くするには、実行命令数を減らしたい • 基本的に、これはコンパイラの仕事 • CPU が勝手に実行命令数を減らすことはできない • ただし、ISA の違いは実行命令数に影響を与える • たとえば x86-64 (Intel 系) と ARMv8 で実行命令数はどう変わる?
  7. 7. 実行命令数(マイクロ命令分解の話) • x86-64 と ARMv8 の ISA は大きく違う • x86-64: 古い ISA (x86-32) を引き継いでおり、複雑な CISC 命令を含む • ARMv8: 最新の ISA で、ほぼ単純な RISC 命令のみで構成 • だが実際の CPU では、これらはマイクロ命令に分解される • マイクロ命令: 各 CPU 製品に都合よく設計された、内部命令 • 最終的にマイクロ命令になるので、x86-64 と ARMv8 の違いは 見かけほど決定的ではない…
  8. 8. 実行命令数(レジスタ数の話) • x86 系の ISA には弱点がある • 汎用レジスタ (CPU 内部の記憶領域) が少ない • x86-32: 8 • x86-64: 16 • ARMv8: 32 • x86 系は ARMv8 に比べてメモリアクセス命令が増える • 実行命令数が増える
  9. 9. 実行命令数(まとめ) • 実行命令数の観点では、ARMv8 が x86-64 より有利…かも? • ただし、同じ ISA で CPU 製品ごとに実行命令数が変わることはない • ARM Cortex-a57 と Apple A7 の実行命令数を比べるのはナンセンス • ARMv8 の拡張で、実行命令数が変わるものは少ない • ARMv8.3-A の FP-INT 変換 (Javascript 向け) くらい?
  10. 10. 動作周波数(最初に結論) • 書いてある数字だけ見ろ
  11. 11. 動作周波数 • 動作周波数をチェックするのは簡単 • 大抵、わかりやすく公表されている (例: 3GHz) • だが、動作周波数について語るのは超難しい • 本当はスルーしたい • 解説に自信がないが、少しだけ話す
  12. 12. 動作周波数(決定要因) • 周波数を考えるうえで、以下が大事な要素になる • 半導体プロセス技術 • 回路遅延 • 消費電力 • (たぶん、他にも大事な要素があるが、今はスルー)
  13. 13. 動作周波数(半導体プロセス技術) • 半導体チップを製造するプロセスの技術のこと • CPU 設計企業ではなく、半導体製造企業に紐づく • 例: TSMC, Samsung, Intel • 例えば Apple A13 Bionic のプロセス技術は TSMC 7nm • 当然、微細化が進んで数字が小さくなるとうれしい • でも、お高い
  14. 14. 動作周波数(半導体プロセス技術) • ARM の CPU は TSMC / Samsung などで製造する • TSMC / Samsung は 7nm が現役で、まもなく 5nm を立ち上げ • Intel が設計した CPU は Intel で製造している • Intel は 10nm の立ち上げに何年も苦戦
  15. 15. 動作周波数(回路遅延) • CMOS 回路は電圧の High / Low で 1 / 0 を表す • 電圧の変化には時間がかかる、これが回路遅延 • コンデンサの充放電 • 大きな回路は遅い • 例: IPC (後述) を上げるために複雑な回路を組むと、遅い • 例: 容量の大きい2次キャッシュは、1次キャッシュより遅い
  16. 16. 動作周波数(回路遅延) • 周波数は、回路遅延が一番大きい場所に律速される • ボトルネックを取り除く必要がある • 回路遅延を短くする手法はあるが、設計がより複雑になったりする • 例: パイプライン化 • 最終的には回路設計者(アーキテクト)のセンス
  17. 17. 動作周波数(消費電力) • 消費電力(と放熱)が HW 設計のボトルネックとなって久しい • 周波数を上げると、消費電力は急激に上昇する • 周波数の3乗に比例するとかなんとか • 最先端プロセス技術を使い、あとは地道な手法を積むしかない • 回路を小さくする • クロックゲーティングとか
  18. 18. 動作周波数(まとめ) • 周波数は大抵公表されているので、まず数字をチェックしろ • 周波数が決まる要因は超複雑で、簡単には語れない • 良いプロセス技術を使うことは必要 • Intel 不利 • 回路遅延・消費電力は、地道さの積み重ねと設計者のセンス • 周波数が上がると消費電力が増えるので、IPC とのバランスが大事
  19. 19. IPC • 最初に結論…は言わない • 初見でわかる説明が無理なので、まず解説をする
  20. 20. IPC(IPC とは) • IPC (Instruction Per Cycle) • 1 サイクルあたりに実行できる平均命令数 • サイクル (クロック・サイクル) • クロックの立ち上がりから、次の立ち上がりまでの期間 • サイクルの周期は、周波数の逆数になる • 2GHz なら 0.5ns • 周波数が低いのに性能が良い = IPC が高い
  21. 21. IPC(大学で習う CPU) • 情報系の大学では、CPU について以下のように教わる • 1つの命令を処理するのに、以下の回路が必要 • IF: Instruction Fetch (命令のデータをメモリから読み込む) • ID: Instruction Decode (命令を解析) • RR: Register Read (CPU のレジスタ・ファイルを読み出し) • EX: Execute (四則演算などの、演算実行) • MA: Memory Access (ロード・ストア命令の場合、メモリアクセス) • RW: Register Write (CPU のレジスタ・ファイルに書き込み) IF ID RR EX MA RW
  22. 22. IPC(パイプライン化) • これらの処理は、パイプライン化されて実行される • 1つの回路 (ステージ) を通るのに、1サイクル • 命令が全ステージを通るのに、6サイクル • パイプライン化されているので、全体では 1サイクルで 1命令処理 load r1, 0(r9) load r2, 4(r9) add r3, r1, r2 store r3, 8(r9) IF ID RR EX MA RW time IF ID RR EX MA RW IF ID RR EX MA RW IF ID RR EX MA RW IPC = 1.0 !
  23. 23. IPC (スーパースカラ) • パイプラインをたくさん作って並列実行 • 下図は、2並列の場合 • 1サイクルで、平均2命令処理できる • これが「IPC を高くする」のキホン load r1, 0(r9) load r2, 4(r9) add r3, r1, r2 store r3, 8(r9) IF ID RR EX MA RW IF ID RR EX MA RW IF ID RR EX MA RW IF ID RR EX MA RW time IPC = 2.0 !
  24. 24. IPC (並列実行できない場合) • 実は、いつでも並列実行ができるわけではない load r1, 0(r9) load r2, 4(r9) add r3, r1, r2 store r3, 8(r9) IF ID RR EX MA RW IF ID RR EX MA RW IF ID RR EX MA RW IF ID RR EX MA RW time 前の命令で 計算する r3 を使うので 並列実行は不可能
  25. 25. IPC (限界) • パイプラインを 100 並列にすれば IPC が 100 ... とはならない • IPC は 4~8 程度が限界 • しかも、これは Out-of-Order 実行 (後述) に対応している場合の数字
  26. 26. IPC (Out-of-Order 実行) • プログラム・オーダー(プログラム上の命令の順番)を無視して 命令を実行すること • 実行可能な命令を判断する回路があり、可能なものから実行 • フェッチ・デコードは順番通りにやる(右図) • 実行可能かどうか判断できるのは、デコードの後
  27. 27. IPC (In-Order / Out-of-Order) • Out-of-Order 実行に対応していない CPU を In-Order という • In-Order なら最大 IPC は高々 2 だが、回路が単純で省電力 • 「高性能コア」「省電力コア」の2種類がある場合は大抵: • 高性能コア: Out-of-Order スーパースカラ (Max IPC: 2~6) • 省電力コア: In-Order スーパースカラ (Max IPC: 1~2)
  28. 28. IPC (フロントエンド・バックエンド) • Out-of-Order スーパースカラの回路は、以下の2つに分かれる • フロントエンド • プログラム・オーダー通りに処理する、フェッチ・デコード部分 • バックエンド • プログラム・オーダーを無視して、可能な命令から処理する、演算部分 • フロントエンド・バックエンドはそれぞれ並列度(幅)が異なる • これが IPC の上限をきめるので重要
  29. 29. IPC (小さい OoO スーパースカラの例) • フェッチ幅 2 (デコード幅 2) / 発行幅 3 • 英語だと 2-fetch (2-decode) / 3-issue • 発行 (issue) とは、バックエンドの処理を開始すること IF ID IF ID RR EX RW RR EX RW RR EX MA RW フロントエンド バックエンド
  30. 30. IPC (大きい OoO スーパースカラの例) • フェッチ幅 4 (デコード幅 4) / 発行幅 8 • 4-fetch (4-decode) / 8-issue IF ID IF ID RR EX RW RR EX RW RR EX MA RW RR EX RW RR EX MA RW RR EX RW RR EX RW RR EX RW IF ID IF ID
  31. 31. IPC (演算器の個数) • バックエンドは、機能が異なるものが複数あるのが一般的 • 例 • 8-issue のバックエンド • INT: 3 • FP/SIMD: 2 • LOAD/STORE: 2 • BRANCH: 1 • この場合、ロード・ストアは同時に2命令しか実行できない
  32. 32. IPC (回路規模・消費電力) • 当然だが、フェッチ幅や発行幅を増やすと回路規模は増える • 回路面積が幅の 3 乗に比例するとかなんとか • 消費電力も、当然増える • 消費電力の上限が厳しい場合(モバイルなど)では 周波数と IPC のバランスが重要
  33. 33. IPC (Skylake) • 理論上、最大 IPC は 6 • 5 decode (6 micro-ops decode) • 8 issue • その他は IPC を最大に近づけるため 調整されていると思えばよい • 物理レジスタ数 (180 + 168) • リオーダ・バッファ (72) • ロード・ストア・バッファ (72 + 56)
  34. 34. IPC (まとめ) • In-Order / Out-of-Order をまずチェック • フェッチ幅(デコード幅)・発行幅を次にチェック • それ以外は、今回は無視してよい
  35. 35. まとめ • 以下をチェックしよう • コアの数 • 動作周波数 • IPC • In-Order / Out-of-Order • フェッチ・デコード幅、発行幅、演算器の構成

×