Top Banner
08. メメメメメメメ メメ メメ
31

08. メモリ非曖昧化

Jan 01, 2016

Download

Documents

cirocco-keevan

08. メモリ非曖昧化. 五島 正裕. 内容. データ依存 メモリ非曖昧化 ストア・セット・メモリ依存予測器. データ依存. データ依存. 制御駆動型 (control-driven) (⇔ データ駆動, data-driven ) 命令間のデータの授受は, プログラム・オーダ上で,先行 / 後続の関係にある 2 命令が, 同一のロケーションを参照する ことで表現 ロケーション:レジスタ と メモリ. Write. add. r4 =. r1 + r2. add. r5 =. r4 + r3. Read. データ依存. I p. - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 08.  メモリ非曖昧化

08. メモリ非曖昧化

五島 正裕

Page 2: 08.  メモリ非曖昧化

内容

1. データ依存

2. メモリ非曖昧化

3. ストア・セット・メモリ依存予測器

Page 3: 08.  メモリ非曖昧化

データ依存

Page 4: 08.  メモリ非曖昧化

r4 + r3

データ依存

制御駆動型 (control-driven) (⇔ データ駆動, data-driven ) 命令間のデータの授受は,

プログラム オーダ上で,先行・ / 後続の関係にある 2 命令が, 同一のロケーションを参照する

ことで表現 ロケーション:レジスタ と メモリ

add r4 =

add r5 =

r1 + r2

Write

Read

Page 5: 08.  メモリ非曖昧化

データ依存

後 続 命 令 Is

Read Write

先行命令

Ip

Read

入力依存 (input) 逆依存 (anti)

Write

フロー依存 (flow) 出力依存 (output)

Ip

Is

Ip

Is

Ip

Is

Ip

Is

time

time

time

time

Page 6: 08.  メモリ非曖昧化

ロード / ストア命令

ロード命令 r[Rt] = *(r[Rs] + immediate);

ストア命令 *(r[Rs] + immediate) = r[Rt];

opop RsRs RtRt immediateimmediate031 152025

Page 7: 08.  メモリ非曖昧化

レジスタとメモリの違い

レジスタ番号 静的

(実行の度に)変わらない フロントエンド(デコード・ステージ)で分かる

メモリのアドレス 動的

実行の度に変わり得る バックエンド(アドレス計算(実行)ステージ)で初めて分か

る:「曖昧」

Page 8: 08.  メモリ非曖昧化

メモリの曖昧性による偽の依存

偽の依存: 先行するストアのアドレスが計算されるまで,

後続のロード / ストアは 原則 実行できない 「計算したら違ってた」

Page 9: 08.  メモリ非曖昧化

コード例

f (int* a, int* b,

int* x, int* y)

{

*x = *a * *a;

*y = *b * *b;

}

x == b ?

ld r1 = *(sp + 0) // a

ld r1 = *r1

ld r2 = *(sp + 16) // x

mul r1 = r1 * r1

st *r2 = r1

ld r3 = *(sp + 8) // b

ld r3 = *r3

ld r4 = *(sp + 24) // y

mul r3 = r3 * r3

st *r4 = r3

ret

Page 10: 08.  メモリ非曖昧化

解決法

防止(予防, prevention ): ロード / ストアは in-order で

発見 & 回復 (detection & recovery) : 依存なしと予測して out-of-order で メモリ・オーダ違反 (memory-order violation) を発見 0 ~ 7% のロードがメモリ・オーダ違反 ⇒ ペナルティ

理想 (ideal, oracle) : IPC 最大 2 倍

Page 11: 08.  メモリ非曖昧化

IPC 2 倍の理由

「計算のかたまりがオーバラップする」 「計算のかたまりは,ロードではじまり,ストアで終わる」 「真のメモリ・データ依存がクリティカルになるようなコード

は,

 最適化されてない?」

目標: ロードを,特に早期に実行したい (ストアは,そんなでもない)

コンパイラより上手にできる

Page 12: 08.  メモリ非曖昧化

オーバラップ実行

ld

st

ld

st

ILP (Inst Level Parallelism)

ld

st

ILP

st

ld

Page 13: 08.  メモリ非曖昧化

メモリ非曖昧化 (memory disambiguation)

Page 14: 08.  メモリ非曖昧化

メモリ・ディスアンビギュエーション

ディスアンビギュエーション (disambiguation) : 「非曖昧化」,「曖昧性除去(解消)」

分離 (split) ロード / ストア アドレス予測 アドレス一致 / 不一致予測

Page 15: 08.  メモリ非曖昧化

ロード / ストア命令

通常のロード / ストア命令: アドレス計算部 メモリ・アクセス部

ロード命令 : r[Rt] = *(r[Rs] + immediate);

ストア命令: *(r[Rs] + immediate) = r[Rt];

opop RsRs RtRt immediateimmediate031 152025

Page 16: 08.  メモリ非曖昧化

分離ロード / ストア (split load/store)

通常のロード / ストア命令: アドレス計算部 メモリ・アクセス部

分離ロード / ストア: ディスパッチ時に分離,以降 2 つの命令としてスケジューリング

効果: ストア・バリューがなくても,アドレス計算が開始できる

バリューより,アドレスが早く決まることが多い ロードは変わらない

バリューに相当するソース・オペランドがないから

Page 17: 08.  メモリ非曖昧化

ロード / ストア命令

普通の ISA のロード / ストア命令: 非分離 (non-split) を想定

理由: パイプライン・マシンで, ALU でアドレス計算をすることを想

定 コード効率の改善(命令の圧縮)

非 RISC 的?

Page 18: 08.  メモリ非曖昧化

18

DRMDR

100100

PC

Main Memory

1000

MA MD

200

0

IF

ID

EX

MEM

WB

100

208

IR

RegFile

8ld 12

Rs

Rt 1add23104

Page 19: 08.  メモリ非曖昧化

アドレス予測

ロード / ストアのアドレスを予測 単純にロードを早期実行する効果 非曖昧化の効果

値予測の一種 だが,値予測より歴史が古い

メモリ・アクセスがストライドであることは容易に想像できる

Page 20: 08.  メモリ非曖昧化

ハードウェア

今までの方法: 分離ロード / ストア アドレス予測

実際にアドレスの一致検出を行う スケジューリングのために,比較器のマトリクス(行列)が必

要! 比較器数 ≒ ½ × (ウィンドウ・サイズ)2

もう 1 つの方法: アドレス一致 / 不一致予測

Page 21: 08.  メモリ非曖昧化

比較器のマトリクス

old

new

0

1

2

3

0 1 2effectiveaddress 先行命令

=? rdyL/S Valid

Load ― ― 1

Store

0 ― 0

1= 0

≠ 1

L/S V

Page 22: 08.  メモリ非曖昧化

ストア・セット・メモリ依存予測器

Page 23: 08.  メモリ非曖昧化

ストア・セット

あるロードのストア・セットとは: そのロードが依存したことがあるストアの集合

計算の方法: recovery-based 最初「依存していない」としておいて, オーダ違反 (memory-order violation) を検出して,追加

利用の方法: ロードは,そのストア・セット内のストアに依存すると予測

Page 24: 08.  メモリ非曖昧化

予測器の実装

原理的には: ストア・セット内のすべてのストアが実行された後でロードを実

実装上の制限: ストア・セット内のストアは in-order で実行

In-order チェイン: ストア → ストア → … → ストア → ロード

Page 25: 08.  メモリ非曖昧化

PC of Fetched Instructions

構造と動作

SSID X

SSID X

SSID X

SSID Table

LastFetched

StoreTable

X

S

S

L

SSID : Store Set ID

S1

S2

L

S1S2

Page 26: 08.  メモリ非曖昧化

Recovery-Based

ストア・セットの計算の方法: recovery-based 最初「依存していない」としておいて, オーダ違反 (memory-order violation) を検出して,追加

Violation の検出: 比較器数 ≒(ウィンドウ・サイズ) ×(発行幅)

「教訓」: 厳密にやるより,いい加減にやったほうがうまくいく(こともあ

る)

Page 27: 08.  メモリ非曖昧化

比較器のアレイ

old

new

0

1

2

3

effectiveaddress 先行命令

=? rdyL/S Valid

Load ― ― 1

Store

0 ― 0

1= 0

≠ 1

L/S V

Page 28: 08.  メモリ非曖昧化

今日のまとめ

Page 29: 08.  メモリ非曖昧化

メモリ・データ依存

データ依存: レジスタ メモリ

メモリのデータ依存: 動的 アドレス計算しないと分からない:「曖昧」

Page 30: 08.  メモリ非曖昧化

メモリ参照の曖昧性による偽の依存 ストアのアドレスが決まるまで,後続のロード / ストアは実行できな

保守的 (conservative) な方法: ロード / ストアは in-order で

ロードは,特に早期に実行したい 「計算のかたまりは,ロードではじまり,ストアで終わる」

ストアは,そんなでもない 真のメモリ・データ依存がクリティカルであるようなプログラム

は,

最適化されてない?

Page 31: 08.  メモリ非曖昧化

ディスアンビギュエーション

ディスアンビギュエーション(非曖昧化,曖昧性除去,解消) 分離ロード / ストア アドレス予測 アドレス一致 / 不一致予測

ストア・セット依存予測器