Cache Memory
Cache Memory
Pembahasan
Organisasi cache memory Direct mapped cache Set associative cache Pengaruh cache pada kinerja komputer
Cache Memory
10-2
Cache Memory
Cache memory adalah memori berbasis SRAM berukuran kecil dan berkecepatan tinggi yang dikendalikan secara otomatis oleh hardware.
Menyimpan suatu blok dari main memory yang sering diakses oleh CPU
Dalam operasinya, pertama-tama CPU akan mencari data di L1, kemudian di L2, dan main memory.
CPU register file L1 cache cache bus ALU system bus memory bus I/O bridge main memory
L2 cache
bus interface
Cache Memory
10-3
L1 Cache
Satuan transfer antara register dan cache dalam blok berukuran 4-byte
baris 0 baris 1
register dalam CPU memiliki tempat untuk menyimpan empat word berukuran 4-byte. L1 cache memiliki tempat untuk menyimpan dua blok berukuran 4-word
Satuan transfer antara cache dan main memory dalam blok berukuran 4-word blok 10
abcd
...
blok 21 pqrs
...
blok 30 wxyz
...
Cache Memory 10-4
tag tag
0 0
1 1
B1 B1
valid Ukuran cache : C = B x E x S byte data Cache Memory set S-1: valid
tag tag
0 0
1 1
B1 B1 10-5
Pengalamatan Cache
Alamat A: t bit
m-1
s bit
b bit
0
v set 0: v v set 1: v
0 0 0 0
1 1 1 1
B1 B1 B1 B1
v set S-1: v
tag tag
0 0
1 1
B1 B1
Data word pada alamat A berada dalam cache jika bit <tag> dan <set index> cocok dan berada dalam baris yang valid. Isi word dimulai dari byte ofset <block offset> pada awal blok
Cache Memory
10-6
Direct-Mapped Cache
Cache yang sederhana Setiap set hanya memiliki satu baris (line)
set 0: set 1:
valid valid
tag tag
set S-1:
valid
tag
blok cache
Cache Memory
10-7
valid valid
tag tag
t bit
m-1
tag
tag
blok cache
Cache Memory
10-8
0110
w0
w1 w2
w3
(2) Bit tag pada cache harus cocok dengan = ? bit tag pada alamat t bit 0110 tag s bit b bit i 100 set index block offset0
(3) Jika (1) dan (2), maka cache hit, dan block offset memilih posisi awal byte
m-1
Cache Memory
10-9
v
1 1
(1)
(3)
1 1
v
1 1
v
1 1
(4)
M[12-13]
(5)
1 1
Cache Memory
10-10
Bit tengah
set 1:
Cache Memory
10-12
set 0:
Set dipilih
set 1:
tag tag
tag
valid
Cache Memory
10-13
1001 0110 w0 w1 w2 w3
(2) Bit tag pada salah satu baris cache harus cocok dengan bit tag pada alamat
=?
(3) Jika (1) dan (2), maka cache hit, dan block offset memilih posisi awal byte s bit b bit i 100 set index block offset0 10-14
m-1
Cache Memory
Multi-Level Cache
Pada cache, data dan instruksi dapat dipisah atau diletakkan dalam tempat yang sama
Prosesor
Reg
L1 d-cache L1 i-cache
Memori Memori
disk disk
8-64 KB 3 ns 32 B
30 GB 8 ms $0.05/MB
Reg.
L2 Unified L2 Unified 128KB--2 MB 128KB--2 MB 4-way assoc 4-way assoc Write-back Write-back Write allocate Write allocate 32B lines 32B lines
Cache Memory
10-16
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.
Cache Memory
10-17
int sumarrayrows(int a[M][N]) { int i, j, sum = 0; for (i = 0; i < M; i++) for (j = 0; j < N; j++) sum += a[i][j]; return sum; }
int sumarraycols(int a[M][N]) { int i, j, sum = 0; for (j = 0; j < N; j++) for (i = 0; i < M; i++) sum += a[i][j]; return sum; }
Gunung Memori
Membaca throughput (membaca bandwidth)
Banyaknya byte yang terbaca dari memori setiap detik (MB/detik)
Gunung memori
Ukuran throughput sebagai fungsi dari spatial locality dan temporal locality. Cara untuk menentukan kinerja sistem memori.
Cache Memory
10-19
Cache Memory
10-20
/* Working set size (in bytes) */ /* Stride (in array elements) */ /* Clock frequency */
init_data(data, MAXELEMS); /* Initialize each element in data to 1 */ Mhz = mhz(0); /* Estimate the clock frequency */ for (size = MAXBYTES; size >= MINBYTES; size >>= 1) { for (stride = 1; stride <= MAXSTRIDE; stride++) printf("%.1f\t", run(size, stride, Mhz)); printf("\n"); } exit(0); }
Cache Memory
10-21
Gunung Memori
Pentium III Xeon 550 MHz 16 KB on-chip L1 d-cache 16 KB on-chip L1 i-cache 512 KB off-chip unified L2 cache
1200
read throughput (MB/s)
L1
s1
L2
s5
s7
s9
128k
32k
mem
s11 s13 s15
8m 2m 512k
stride (words)
Cache Memory
s3
10-22
800
600
400
200
Cache Memory
10-23
Cache Memory
10-24
Deskripsi :
N pembacaan untuk setiap elemen sumber N nilai dijumlahkan untuk setiap tujuan
Dapat disimpan di register
Cache Memory
10-25
Metoda analisis :
Melihat pola akses pada loop bagian dalam.
k i k j i j
Cache Memory
10-26
Mengakses elemen yang berurutan Jika ukuran blok (B) > 4 bytes, eksploit spatial locality
miss rate = 4 bytes / B
Cache Memory
10-27
Baris
Kolom
Tetap
Miss pada setiap iterasi loop bagian dalam : A B C 0.25 1.0 0.0
Cache Memory 10-28
Baris
Kolom
Tetap
Miss pada setiap iterasi loop bagian dalam : A B C 0.25 1.0 0.0
Cache Memory 10-29
Tetap
Baris
Kolom
Miss pada setiap iterasi loop bagian dalam : A B C 0.0 0.25 0.25
Cache Memory 10-30
Tetap
Baris
Baris
Miss pada setiap iterasi loop bagian dalam : A B C 0.0 0.25 0.25
Cache Memory 10-31
Kolom
Tetap
Kolom
Miss pada setiap iterasi loop bagian dalam : A B C 1.0 0.0 1.0
Cache Memory 10-32
Kolom
Tetap
Kolom
Miss pada setiap iterasi loop bagian dalam : A B C 1.0 0.0 1.0
Cache Memory 10-33
miss/iterasi = 1.25
for (i=0; i<n; i++) { for (j=0; j<n; j++) { sum = 0.0; for (k=0; k<n; k++) sum += a[i][k] * b[k][j]; c[i][j] = sum; } }
miss/iterasi = 0.5
for (k=0; k<n; k++) { for (i=0; i<n; i++) { r = a[i][k]; for (j=0; j<n; j++) c[i][j] += r * b[k][j]; } }
miss/iterasi = 2.0
for (j=0; j<n; j++) { for (k=0; k<n; k++) { r = b[k][j]; for (i=0; i<n; i++) c[i][j] += a[i][k] * r; } }
Cache Memory
10-34
50
40
Cycles/iteration
30
20
10
0 25 50 75 100 125 150 175 200 225 250 275 300 325 350 375 400
Array size (n)
Cache Memory
10-35
Ide dasar: Sub-blok (mis., Axy) dapat diperlakukan seperti skalar C11 = A11B11 + A12B21 C21 = A21B11 + A22B21 C12 = A11B12 + A12B22 C22 = A21B12 + A22B22
Cache Memory
10-36
Cache Memory
10-37
Potongan baris diakses bsize kali blok dipakai n kali secara berurutan
Cache Memory
50
Cycles/iteration
40
30
20
10
kji jki kij ikj jik ijk bijk (bsize = 25) bikj (bsize = 25)
0
75 10 0 12 5 15 0 17 5 20 0 22 5 25 0 27 5 30 0 32 5 35 0 37 5 40 0 25 50
Cache Memory
10-39
Kesimpulan
Pemrogram dalam melakukan optimisasi kinerja cache
Bagaimana struktur data dikelola Bagaimana data diakses
Struktur nested loop Blocking merupakan teknik umum
Cache Memory
10-40