Professional Documents
Culture Documents
Bagian 10
Cache Memory
I/O main
L2 cache bus interface
bridge memory
...
main memory memiliki tempat
blok 21 pqrs
untuk meyimpan blok-blok
... berukuran 4-word
blok 30 wxyz
...
Cache Memory 10-4
Organisasi Cache Memory
1 valid bit t tag bit B = 2b byte
Cache adalah array per baris per baris per blok cache
dari kumpulan set.
Setiap set berisi valid tag 0 1 ••• B–1
satu atau lebih E baris
set 0: •••
baris. per set
Setiap baris valid tag 0 1 ••• B–1
menyimpan satu
blok data.
valid tag 0 1 ••• B–1
set 1: •••
S= 2s set valid tag 0 1 ••• B–1
•••
m-1 0
v tag 0 1 • • • B–1
set 0: •••
v tag 0 1 • • • B–1 <tag> <set index> <block offset>
v tag 0 1 • • • B–1
set 1: •••
v tag 0 1 • • • B–1
Data word pada alamat A berada
••• dalam cache jika bit <tag> dan <set
v tag 0 1 • • • B–1 index> cocok dan berada dalam baris
set S-1: ••• yang valid.
v tag 0 1 • • • B–1
Isi word dimulai dari byte ofset <block
offset> pada awal blok
•••
Memilih set
Menggunakan bit set index untuk memilih set yang digunakan
0 1 2 3 4 5 6 7
(1) (3) 1
1 1 M[12-13]
m[13] m[12]
(4) 1 1 M[12-13]
(5) 11 1
1 M[12-13]
m[13] m[12]
•••
valid tag blok cache
set S-1:
valid tag blok cache
Memilih set
Serupa dengan direct-mapped cache
•••
valid tag blok cache
t bit s bit b bit set S-1:
valid tag blok cache
00 001
m-1
tag set index block offset0
0 1 2 3 4 5 6 7
1 1001
Set dipilih (i):
1 0110 w0 w1 w2 w3
(2) Bit tag pada salah satu (3) Jika (1) dan (2), maka
=? cache hit, dan block
baris cache harus cocok
offset memilih posisi
dengan bit tag pada alamat
awal byte
t bit s bit b bit
0110 i 100
m-1
tag set index block offset0
Pada cache, data dan instruksi dapat dipisah atau diletakkan dalam
tempat yang sama
Reg L1
Prosesor Unified
d-cache Unified
L2
L2 Memori
Memori disk
disk
L1 Cache
Cache
i-cache
L1 Data
1 cycle latency
16 KB
4-way assoc L2
Reg. L2Unified
Unified
Write-through 128KB--2
128KB--2MB MB Main
32B lines 4-way assoc Main
4-way assoc Memory
Write-back Memory
Write-back Hingga
Write Hingga4GB
4GB
L1 Instruction Writeallocate
allocate
32B lines
32B lines
16 KB, 4-way
32B lines
Chip
ChipProsesor
Prosesor
Miss Rate
Persentase referensi memori yang tidak ditemukan dalam cache
(miss/referensi).
Umumnya 3-10% untuk L1, < 1% untuk L2.
Hit Time
Waktu untuk mengirimkan data dari cache ke prosesor
(termasuk waktu untuk menentukan apakah data tersebut
terdapat dalam cache).
Umumnya 1 siklus clock untuk L1, 3-8 siklus clock untuk L2.
Miss Penalty
Waktu tambahan yang diperlukan karena terjadi miss
Umumnya 25-100 siklus untuk main memory.
int main()
{
int size; /* Working set size (in bytes) */
int stride; /* Stride (in array elements) */
double Mhz; /* Clock frequency */
800
600
2k
s3
s5
8k
mem
s7
32k
s9
128k
512k
stride (words)
s13
(bytes)
2m
s15
8m
800
600
400
200
0
8m
4m
2m
1k
1024k
512k
256k
128k
64k
32k
16k
8k
4k
2k
working set size (bytes)
700
600
read throughput (MB/s)
500
one access per cache line
400
300
200
100
0
s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16
stride (words)
k j j
i k i
A B C
/*
/* ijk
ijk */
*/ Loop bagian dalam :
for
for (i=0;
(i=0; i<n;
i<n; i++)
i++) {{
for (*,j)
for (j=0;
(j=0; j<n;
j<n; j++)
j++) {{
sum (i,j)
sum == 0.0;
0.0; (i,*)
for
for (k=0;
(k=0; k<n;
k<n; k++)
k++)
sum A B C
sum +=+= a[i][k]
a[i][k] ** b[k][j];
b[k][j];
c[i][j]
c[i][j] == sum;
sum;
}}
}} Baris Kolom Tetap
/*
/* jik
jik */
*/ Loop bagian dalam :
for
for (j=0;
(j=0; j<n;
j<n; j++)
j++) {{
for
for (i=0;
(i=0; i<n;
i<n; i++)
i++) {{ (*,j)
sum
sum == 0.0;
0.0; (i,j)
for (i,*)
for (k=0;
(k=0; k<n;
k<n; k++)
k++)
sum A B C
sum +=+= a[i][k]
a[i][k] ** b[k][j];
b[k][j];
c[i][j]
c[i][j] == sum
sum
}}
}}
Baris Kolom Tetap
/*
/* kij
kij */*/ Loop bagian dalam :
for
for (k=0;
(k=0; k<n;
k<n; k++)
k++) {{
for
for (i=0;
(i=0; i<n;
i<n; i++)
i++) {{ (i,k) (k,*)
rr == a[i][k]; (i,*)
a[i][k];
for
for (j=0;
(j=0; j<n;
j<n; j++)
j++) A B C
c[i][j]
c[i][j] +=+= rr ** b[k][j];
b[k][j];
}}
}}
Tetap Baris Kolom
/*
/* ikj
ikj */*/ Loop bagian dalam :
for
for (i=0;
(i=0; i<n;
i<n; i++)
i++) {{
for
for (k=0;
(k=0; k<n;
k<n; k++)
k++) {{ (i,k) (k,*)
rr == a[i][k]; (i,*)
a[i][k];
for
for (j=0;
(j=0; j<n;
j<n; j++)
j++) A B C
c[i][j]
c[i][j] +=+= rr ** b[k][j];
b[k][j];
}}
}}
Tetap Baris Baris
/*
/* jki
jki */*/ Loop bagian dalam :
for
for (j=0;
(j=0; j<n;
j<n; j++)
j++) {{
for (*,k) (*,j)
for (k=0;
(k=0; k<n;
k<n; k++)
k++) {{
rr == b[k][j]; (k,j)
b[k][j];
for
for (i=0;
(i=0; i<n;
i<n; i++)
i++)
c[i][j] A B C
c[i][j] +=+= a[i][k]
a[i][k] ** r;
r;
}}
}}
Kolom Tetap Kolom
/*
/* kji
kji */*/ Loop bagian dalam :
for
for (k=0;
(k=0; k<n;
k<n; k++)
k++) {{
for (*,k) (*,j)
for (j=0;
(j=0; j<n;
j<n; j++)
j++) {{
rr == b[k][j]; (k,j)
b[k][j];
for
for (i=0;
(i=0; i<n;
i<n; i++)
i++)
c[i][j] A B C
c[i][j] +=+= a[i][k]
a[i][k] ** r;
r;
}}
}}
Kolom Tetap Kolom
for (i=0; i<n; i++) { for (k=0; k<n; k++) { for (j=0; j<n; j++) {
for (j=0; j<n; j++) { for (i=0; i<n; i++) { for (k=0; k<n; k++) {
sum = 0.0; r = a[i][k]; r = b[k][j];
for (k=0; k<n; k++) for (j=0; j<n; j++) for (i=0; i<n; i++)
sum += a[i][k] * b[k][j]; c[i][j] += r * b[k][j]; c[i][j] += a[i][k] * r;
c[i][j] = sum; } }
} } }
}
60
50
40
Cycles/iteration
kji
jki
30
kij
ikj
20 jik
ijk
10
0
25 50 75 100 125 150 175 200 225 250 275 300 325 350 375 400
Array size (n)
A B C
60
50
kji
40 jki
Cycles/iteration
kij
30 ikj
jik
20 ijk
bijk (bsize = 25)
bikj (bsize = 25)
10
0
0
5
0
5
0
5
0
5
0
5
0
5
0
25
50
75
10
12
15
17
20
22
25
27
30
32
35
37
40