08.
This presentation is the property of its rightful owner.
Sponsored Links
1 / 31

08. メモリ非曖昧化 PowerPoint PPT Presentation


  • 36 Views
  • Uploaded on
  • Presentation posted in: General

08. メモリ非曖昧化. 五島 正裕. 内容. データ依存 メモリ非曖昧化 ストア・セット・メモリ依存予測器. データ依存. データ依存. 制御駆動型 (control-driven) (⇔ データ駆動, data-driven ) 命令間のデータの授受は, プログラム・オーダ上で,先行 / 後続の関係にある 2 命令が, 同一のロケーションを参照する ことで表現 ロケーション:レジスタ と メモリ. Write. add. r4 =. r1 + r2. add. r5 =. r4 + r3. Read. データ依存. I p.

Download Presentation

08. メモリ非曖昧化

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


08

08. メモリ非曖昧化

五島 正裕


08

内容

  • データ依存

  • メモリ非曖昧化

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


08

データ依存


08

データ依存

  • 制御駆動型 (control-driven) (⇔ データ駆動,data-driven)

    • 命令間のデータの授受は,

      • プログラム・オーダ上で,先行/後続の関係にある2命令が,

      • 同一のロケーションを参照する

        ことで表現

      • ロケーション:レジスタ と メモリ

Write

add

r4 =

r1 + r2

add

r5 =

r4 + r3

Read


08

データ依存

Ip

Ip

Is

Is

time

time

Ip

Ip

Is

Is

time

time


08

ロード/ストア命令

  • ロード命令

    • r[Rt] = *(r[Rs] + immediate);

  • ストア命令

    • *(r[Rs] + immediate) = r[Rt];

op

Rs

Rt

immediate

31

25

20

15

0


08

レジスタとメモリの違い

  • レジスタ番号

    • 静的

      • (実行の度に)変わらない

    • フロントエンド(デコード・ステージ)で分かる

  • メモリのアドレス

    • 動的

      • 実行の度に変わり得る

    • バックエンド(アドレス計算(実行)ステージ)で初めて分かる:「曖昧」


08

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

  • 偽の依存:

    • 先行するストアのアドレスが計算されるまで,

      後続のロード/ストアは 原則 実行できない

    • 「計算したら違ってた」


08

コード例

f (int* a, int* b,

int* x, int* y)

{

*x = *a * *a;

*y = *b * *b;

}

x == b ?

ldr1 = *(sp + 0)// a

ldr1 = *r1

ldr2 = *(sp + 16)// x

mulr1 = r1 * r1

st*r2 = r1

ldr3 = *(sp + 8) // b

ldr3 = *r3

ldr4 = *(sp + 24)// y

mulr3 = r3 * r3

st*r4 = r3

ret


08

解決法

  • 防止(予防,prevention):

    • ロード/ストアは in-order で

  • 発見 & 回復 (detection & recovery):

    • 依存なしと予測して out-of-order で

    • メモリ・オーダ違反 (memory-order violation) を発見

    • 0~7% のロードがメモリ・オーダ違反 ⇒ ペナルティ

  • 理想 (ideal, oracle):

    • IPC 最大2倍


Ipc 2

IPC 2倍の理由

  • 「計算のかたまりがオーバラップする」

    • 「計算のかたまりは,ロードではじまり,ストアで終わる」

    • 「真のメモリ・データ依存がクリティカルになるようなコードは,

       最適化されてない?」

  • 目標:

    • ロードを,特に早期に実行したい

    • (ストアは,そんなでもない)

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


08

オーバラップ実行

ILP

(Inst Level Parallelism)

ILP

ld

ld

ld

st

st

ld

st

st


Memory disambiguation

メモリ非曖昧化 (memory disambiguation)


08

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

  • ディスアンビギュエーション (disambiguation):

    • 「非曖昧化」,「曖昧性除去(解消)」

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

    • アドレス予測

    • アドレス一致/不一致予測


08

ロード/ストア命令

  • 通常のロード/ストア命令:

    • アドレス計算部

    • メモリ・アクセス部

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

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

op

Rs

Rt

immediate

31

25

20

15

0


Split load store

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

  • 通常のロード/ストア命令:

    • アドレス計算部

    • メモリ・アクセス部

  • 分離ロード/ストア:

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

  • 効果:

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

      • バリューより,アドレスが早く決まることが多い

    • ロードは変わらない

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


08

ロード/ストア命令

  • 普通の ISA のロード/ストア命令:

    • 非分離 (non-split) を想定

  • 理由:

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

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

    • 非 RISC 的?


08

add

ld

2

1

2

3

1

8

IF

100

PC

IR

0

Rs

200

100

ID

Rt

104

Reg

File

EX

208

1000

MEM

DR

MDR

MA

MD

Main Memory

WB


08

アドレス予測

  • ロード/ストアのアドレスを予測

    • 単純にロードを早期実行する効果

    • 非曖昧化の効果

  • 値予測の一種

    • だが,値予測より歴史が古い

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


08

ハードウェア

  • 今までの方法:

    • 分離ロード/ストア

    • アドレス予測

  • 実際にアドレスの一致検出を行う

    • スケジューリングのために,比較器のマトリクス(行列)が必要!

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

  • もう1つの方法:

    • アドレス一致/不一致予測


08

比較器のマトリクス

0

1

2

old

effective

address

L/S

V

0

1

2

3

new


08

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


08

ストア・セット

  • あるロードのストア・セットとは:

    • そのロードが依存したことがあるストアの集合

  • 計算の方法:recovery-based

    • 最初「依存していない」としておいて,

    • オーダ違反 (memory-order violation) を検出して,追加

  • 利用の方法:

    • ロードは,そのストア・セット内のストアに依存すると予測


08

予測器の実装

  • 原理的には:

    • ストア・セット内のすべてのストアが実行された後でロードを実行

  • 実装上の制限:

    • ストア・セット内のストアは in-order で実行

  • In-order チェイン:

    • ストア → ストア → … → ストア → ロード


08

S

S

L

構造と動作

SSID Table

Last

Fetched

Store

Table

SSID X

S1

SSID X

S2

S2

S1

X

L

SSID X

PC of Fetched Instructions

SSID : Store Set ID


Recovery based

Recovery-Based

  • ストア・セットの計算の方法:recovery-based

    • 最初「依存していない」としておいて,

    • オーダ違反 (memory-order violation) を検出して,追加

  • Violation の検出:

    • 比較器数 ≒(ウィンドウ・サイズ)×(発行幅)

  • 「教訓」:

    • 厳密にやるより,いい加減にやったほうがうまくいく(こともある)


08

比較器のアレイ

old

effective

address

L/S

V

0

1

2

3

new


08

今日のまとめ


08

メモリ・データ依存

  • データ依存:

    • レジスタ

    • メモリ

  • メモリのデータ依存:

    • 動的

    • アドレス計算しないと分からない:「曖昧」


08

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

  • ストアのアドレスが決まるまで,後続のロード/ストアは実行できない

  • 保守的 (conservative) な方法:

    • ロード/ストアは in-order で

  • ロードは,特に早期に実行したい

    • 「計算のかたまりは,ロードではじまり,ストアで終わる」

  • ストアは,そんなでもない

    • 真のメモリ・データ依存がクリティカルであるようなプログラムは,

      最適化されてない?


08

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

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

    • 分離ロード/ストア

    • アドレス予測

    • アドレス一致/不一致予測

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


  • Login