Open6
「コンピュータアーキテクチャ技術入門」の読書メモ
ピン留めされたアイテム
2.5 プロセッサの高速か技術
スーパースカラ実行
- スーパースカラプロセッサ:毎サイクル複数命令実行
- 初期は整数演算命令と浮動小数点演算命令は並列で実行できる
Out-of-Order実行
- 真の依存性
- ハードウェアのやりやすい実行順序に変更
- リザベーションステーション
- レジスタリネーミング
- 論理レジスタを物理レジスタに割り当てる
- 構成の例32個の論理レジスタに対して48個の物理レジスタを持つ
- → 物理レジスタの方が多い。
条件分岐予測
- 空きサイクルを減らすための方法
分岐予測とループの回数
-
条件分岐のアドレスより前方に分岐する場合は成立
- → 分からなかった。
-
2ビット飽和カウント
- →なんとなく分かったけど完全には分かっていない。「条件が成立して分岐が成立」とはたとえば不forループだと、ループが続く方なのかそれともループが抜ける方なのか?
- →なぜ13bit必要なのかが分からない。「カウンタが入り混じる」が分からない。
-
ローカル履歴
- 過去のNot Take, Takenの履歴を記憶する
- → 全然分からなかった
リターンアドレススタック
- CALL命令の次命令のアドレスは必ずRETURN命令のジャンプ先
BTB(Branch Target BUffer)
-
→ なんとなく分かったような気がするが。。。
プリフェッチ
- ネクストラインプリフェッチ
- ストライドプリフェッチ
- ソフトウェアプリフェッチ
- プリフェッチ命令
可変長命令をRISC命令に分解して実行
- 固定長の命令に変換すると、パイプライン命令を効率よく処理できる
- Intel μOP
- IPS(Instruction per Second)
- IPC(Instruction per Cycle)
- CPI(Cycle per Instruction)
階層キャッシュの速度
2.6章
性能を引き出すプログラミング
- C言語の2次元配列は列方向の順にメモリが格納される
- →構造体の配列は、コンパイラがよしなにやってくれないのだろうか?キャッシュラインの有効利用はどの程度メリットがあるのか?
- 割り算は時間がかかる。
- →なぜ?
- 割り算はパイプライン処理ができない
- →なぜ?
- →性能を意識してプログラミングすると、可読性の低いコードになりそう。ここまでシビアに考えるときは、どういうときだろうか?
2.7章 マルチプロセス
- メモリ管理機構(MMU)
- セグメント方式
- 断片化が問題になる
- ページ方式が採用されている
- 断片化は起こらない
- ページテーブルはプロセスごとに作られる
- ページテーブルは、ページテーブル専用のキャッシュメモリに置かれる。TLB(Translation Lookaside Buffer)によってアドレスを変換する
- ラージページもサポートしている