• Tidak ada hasil yang ditemukan

EC Sistem Komputer. Bagian 10 Cache Memory

N/A
N/A
Protected

Academic year: 2021

Membagikan "EC Sistem Komputer. Bagian 10 Cache Memory"

Copied!
40
0
0

Teks penuh

(1)

Departemen Teknik Elektro Institut Teknologi Bandung 2005

EC3003 - Sistem Komputer

Bagian 10

(2)

Pembahasan

Organisasi cache memory

Direct mapped cache

Set associative cache

(3)

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.

main memory I/O bridge bus interface L2 cache ALU register file CPU

cache bus system bus memory bus

L1 cache

(4)

L1 Cache

a b c d blok 10 p q r s

...

...

blok 21 w x y z

...

blok 30

main memory memiliki tempat untuk meyimpan blok-blok

berukuran 4-word

L1 cache memiliki tempat untuk menyimpan dua blok berukuran 4-word

register dalam CPU memiliki tempat untuk menyimpan empat word berukuran 4-byte.

Satuan transfer antara cache dan main memory dalam blok berukuran 4-word

Satuan transfer antara register dan cache dalam blok berukuran 4-byte

baris 0 baris 1

(5)

Organisasi Cache Memory

• • • B–1 1 0 • • • B–1 1 0 valid valid tag tag set 0: B = 2b byte

per blok cache

E baris per set S = 2s set t tag bit per baris 1 valid bit per baris Ukuran cache : C = B x E x S byte data • • • • • • B–1 1 0 • • • B–1 1 0 valid valid tag tag • • • set 1: • • • B–1 1 0 • • • B–1 1 0 valid valid tag tag set S-1: • • • • • •

Cache adalah array dari kumpulan set.

Setiap set berisi satu atau lebih baris.

Setiap baris

menyimpan satu blok data.

(6)

Pengalamatan Cache

t bit s bit b bit

0 m-1

<tag> <set index> <block offset> Alamat A: • • • B–1 1 0 • • • B–1 1 0 v v tag tag • • • set 0: • • • B–1 1 0 • • • B–1 1 0 v v tag tag • • • set 1: • • • B–1 1 0 • • • B–1 1 0 v v tag tag • • • • • • set S-1:

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

(7)

Direct-Mapped Cache

Cache yang sederhana

Setiap set hanya memiliki satu baris (line)

valid valid valid tag tag tag set S-1: • • • set 0: set 1:

E=1 baris per set

blok cache blok cache

(8)

Mengakses Direct-Mapped Cache

Memilih set

ƒ Menggunakan bit set index untuk memilih set yang digunakan

valid valid valid tag tag tag set S-1: t bit s bit • • • set 0: set 1: 0 0 0 0 1 0 b bit tag set index block offset

m-1

set dipilih

blok cache blok cache

(9)

Mengakses Direct-Mapped Cache

Pencocokan baris dan pemilihan word

ƒ Pencocokan baris : mencari baris valid dalam set yang dipilih

dengan mencocokan tag

ƒ Pemilihan word : Selanjutnya mengekstraksi word

1 t bit s bit 100 i 0110 0 b bit tag set index block offset Set dipilih (i):

m-1

(3) Jika (1) dan (2), maka cache hit, dan block offset memilih posisi awal byte

=1? (1) Bit valid harus di-set

= ? (2) Bit tag pada cache

harus cocok dengan bit tag pada alamat

0110 w0 w1 w2 w3

3

(10)

Simulasi Direct-Mapped Cache

M=16 byte alamat, B=2 byte/blok, S=4 set, E=1 entri/set

Penelusuran alamat (baca):

0 [00002], 1 [00012], 13 [11012], 8 [10002], 0 [00002] x t=1 s=2 b=1 xx x 1 0 m[1] m[0] v tag data 0 [00002] (miss) (1) 1 0 m[1] m[0] v tag data 1 1 m[13] m[12] 13 [11012] (miss) (3) 1 1 m[9] m[8] v tag data 8 [10002] (miss) (4) 1 0 m[1] m[0] v tag data 1 1 m[13] m[12] 0 [00002] (miss) (5) 0 M[0-1] 1 1 M[12-13] 1 1 M[8-9] 1 1 M[12-13] 1 0 M[0-1] 1 1 M[12-13] 1 0 M[0-1] 1

(11)

Bit Tengah Sebagai Indeks

Bit indeks orde tinggi

ƒ Baris memori yang bersebelahan akan dipetakan pada lokasi cache sama

ƒ Spatial locality yang buruk

Bit indeks orde tengah

ƒ Baris memori yang berurutan

dipetakan pada baris cache berbeda

ƒ Dapat menyimpan urutan byte

pada cache dalam satu waktu

4-baris cache Bit atas Bit tengah

00 01 10 11 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111

(12)

Set Associative Cache

Setiap set memiliki lebih dari satu baris

valid tag

set 0: E=2 baris per set

set 1:

set S-1:

• • •

blok cache

valid tag blok cache

valid tag blok cache

valid tag blok cache

valid tag blok cache

(13)

Mengakses Set Associative Cache

Memilih set

ƒ Serupa dengan direct-mapped cache

valid valid tag tag set 0: valid valid tag tag set 1: valid valid tag tag • • • set S-1: t bit s bit 0 0 0 0 1 0 b bit tag set index block offset

m-1 Set dipilih blok cache blok cache blok cache blok cache blok cache blok cache

(14)

Mengakses Set Associative Cache

Pencocokan baris dan pemilihan word

ƒ Harus membandingkan setiap tag pada baris yang valid dalam

set yang dipilih

1 0110 w0 w1 w2 w3 1 1001 t bit s bit 100 i 0110 0 b bit tag set index block offset Set dipilih (i):

=1?

m-1

(1) Bit valid harus di-set.

= ? (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

3

(15)

Multi-Level Cache

Pada cache, data dan instruksi dapat dipisah atau diletakkan dalam tempat yang sama

Ukuran : Kecepatan : $/Mbyte: Baris: 200 B 3 ns 8 B 8-64 KB 3 ns 32 B 128 MB DRAM 60 ns $1.50/MB 8 KB 30 GB 8 ms $0.05/MB

Bertambah besar, lambat dan murah

Memori Memori L1 d-cache Reg Unified L2 Cache Unified L2 Cache Prosesor 1-4MB SRAM 6 ns $100/MB 32 B L1 i-cache disk disk

(16)

Hirarki Cache Intel Pentium

Chip Prosesor Chip Prosesor L1 Data 1 cycle latency 16 KB 4-way assoc Write-through 32B lines L1 Instruction 16 KB, 4-way 32B lines Reg. L2 Unified 128KB--2 MB 4-way assoc Write-back Write allocate 32B lines L2 Unified 128KB--2 MB 4-way assoc Write-back Write allocate 32B lines Main Memory Hingga 4GB Main Memory Hingga 4GB

(17)

Metrik Kinerja Cache

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

(18)

Menulis Kode yg Cache Friendly

Kode yang baik :

ƒ Melakukan referensi berulang-ulang terhadap suatu variabel

(temporal locality)

ƒ Pola referensi stride-1 (spatial locality)

ƒ Contoh : cold cache, 4-byte words, 4-word cache blocks

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; }

(19)

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.

(20)

Fungsi Tes Gunung Memori

/* The test function */

void test(int elems, int stride) { int i, result = 0;

volatile int sink;

for (i = 0; i < elems; i += stride) result += data[i];

sink = result; /* So compiler doesn't optimize away the loop */ }

/* Run test(elems, stride) and return read throughput (MB/s) */ double run(int size, int stride, double Mhz)

{

double cycles;

int elems = size / sizeof(int);

test(elems, stride); /* warm up the cache */

cycles = fcyc2(test, elems, stride, 0); /* call test(elems,stride) */ return (size / stride) / (cycles / Mhz); /* convert cycles to MB/s */ }

(21)

Rutin Utama Gunung Memori

/* mountain.c - Generate the memory mountain. */

#define MINBYTES (1 << 10) /* Working set size ranges from 1 KB */ #define MAXBYTES (1 << 23) /* ... up to 8 MB */

#define MAXSTRIDE 16 /* Strides range from 1 to 16 */ #define MAXELEMS MAXBYTES/sizeof(int)

int data[MAXELEMS]; /* The array we'll be traversing */ int main()

{

int size; /* Working set size (in bytes) */ int stride; /* Stride (in array elements) */ double Mhz; /* 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); }

(22)

Gunung Memori

s1 s3 s5 s7 s9 s1 1 s1 3 s15 8m 2m 51 2k 128k 32 k 8k 2k 0 200 400 600 800 1000 1200 re a d t h rou ghp ut ( M B /s )

stride (words) working set size (bytes)

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 Punggung gunung memperlihatkan Temporal Locality L1 L2 mem Kemiringan untuk Spatial Locality xe

(23)

Punggung Gunung - Temporal

Potongan gunung memori dengan stride=1

ƒ Memperlihatkan throughput dari cache dan memori berbeda.

0 200 400 600 800 1000 1200 8m 4m 2m 1024 k 512 k 256 k 128 k 64 k 32 k 16 k 8k 4k 2k 1k

working set size (bytes)

re a d thr o ug p u t (M B /s ) L1 cache region L2 cache region main memory region

(24)

Kemiringan – Spatial Locality

Potongan pada gunung memori dengan ukuran 256 KB.

ƒ Memperlihatkan ukuran blok cache

0 100 200 300 400 500 600 700 800 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16 re ad t hr o ugh put (M B /s)

(25)

Contoh Perkalian Matriks

Pengaruh utama cache yang penting :

ƒ Total ukuran cache

ƒ Memperlihatkan temporal locality, tetap mempertahankan working set tetap

kecil (contoh : dengan menggunakan blocking)

ƒ Ukuran blok

ƒ Memperlihatkan spatial locality

Deskripsi :

ƒ Perkalian matriks NxN ƒ Total operasi O(N3) ƒ Akses

ƒ N pembacaan untuk setiap elemen sumber

ƒ N nilai dijumlahkan untuk setiap tujuan

ƒ Dapat disimpan di register

/* ijk */

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; } } /* ijk */

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; } }

(26)

Analisis Miss Rate

Analisis miss rate pada perkalian matriks

Asumsi :

ƒ Ukuran baris = 32B (cukup besar untuk 4 buah 64-bit word) ƒ Dimensi matriks (N) sangat besar

ƒ Aproksimasi 1/N sama dengan 0.0

ƒ Cache tidak terlalu besar untuk menyimpan beberapa baris.

Metoda analisis :

ƒ Melihat pola akses pada loop bagian dalam.

C A k i B k j i j

(27)

Layout Array C dalam Memori

Array C dialokasikan dalam urutan row-major

ƒ Setiap baris (row) terletak dalam memori yang berurutan

Berpindah antar kolom dalam satu baris :

ƒ for (i = 0; i < N; i++) sum += a[0][i];

ƒ Mengakses elemen yang berurutan

ƒ Jika ukuran blok (B) > 4 bytes, eksploit spatial locality

ƒ miss rate = 4 bytes / B

Berpindah antar baris dalam satu kolom :

ƒ for (i = 0; i < n; i++)

sum += a[i][0];

ƒ Mengakses elemen yang jauh ƒ Tidak terjadi spatial locality!

(28)

Perkalian Matriks ijk

/* ijk */

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; } } /* ijk */

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; } } A B C (i,*) (*,j) (i,j) Loop bagian dalam :

Kolom

Baris Tetap

Miss pada setiap iterasi loop bagian dalam :

A B C

(29)

Perkalian Matriks jik

/* jik */

for (j=0; j<n; j++) { for (i=0; i<n; i++) {

sum = 0.0; for (k=0; k<n; k++) sum += a[i][k] * b[k][j]; c[i][j] = sum } } /* jik */ for (j=0; j<n; j++) { for (i=0; i<n; i++) {

sum = 0.0; for (k=0; k<n; k++) sum += a[i][k] * b[k][j]; c[i][j] = sum } } A B C (i,*) (*,j) (i,j) Loop bagian dalam :

Baris Kolom Tetap Miss pada setiap iterasi loop bagian dalam :

A B C

(30)

Perkalian Matriks kij

/* kij */

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]; } } /* kij */ 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]; } } A B C (i,*) (i,k) (k,*)

Loop bagian dalam :

Baris Kolom Tetap

Miss pada setiap iterasi loop bagian dalam :

A B C

(31)

Perkalian Matriks ikj

/* ikj */

for (i=0; i<n; i++) { for (k=0; k<n; k++) { r = a[i][k]; for (j=0; j<n; j++) c[i][j] += r * b[k][j]; } } /* ikj */

for (i=0; i<n; i++) { for (k=0; k<n; k++) { r = a[i][k]; for (j=0; j<n; j++) c[i][j] += r * b[k][j]; } } A B C (i,*) (i,k) (k,*)

Loop bagian dalam :

Baris Baris Tetap

Miss pada setiap iterasi loop bagian dalam :

A B C

(32)

Perkalian Matriks jki

/* jki */

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; } } /* jki */ 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; } } A B C (*,j) (k,j)

Loop bagian dalam : (*,k)

Kolom Tetap Kolom

Miss pada setiap iterasi loop bagian dalam :

A B C

(33)

Perkalian Matriks kji

/* kji */

for (k=0; k<n; k++) { for (j=0; j<n; j++) {

r = b[k][j];

for (i=0; i<n; i++)

c[i][j] += a[i][k] * r; } } /* kji */ for (k=0; k<n; k++) { for (j=0; j<n; j++) { r = b[k][j];

for (i=0; i<n; i++)

c[i][j] += a[i][k] * r; } } A B C (*,j) (k,j)

Loop bagian dalam : (*,k)

Tetap

Kolom Kolom

Miss pada setiap iterasi loop bagian dalam :

A B C

(34)

Ringkasan Perkalian Matriks

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; } }

ijk (& jik):

• 2 load, 0 store

• miss/iterasi = 1.25

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]; } } 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; }

}

kij (& ikj):

• 2 load, 1 store • miss/iterasi = 0.5

jki (& kji):

• 2 load, 1 store • miss/iterasi = 2.0

(35)

Kinerja Perkalian Matriks Pentium

Miss rate bukan selalu perkiraan yang baik

ƒ Penjadwalan kode juga berpengaruh

0 10 20 30 40 50 60 25 50 75 100 125 150 175 200 225 250 275 300 325 350 375 400 Array size (n) C y cl es/ it erat io n kji jki kij ikj jik ijk

(36)

Meningkatkan Temporal Locality

Meningkatkan temporal locality dengan blocking.

Contoh : perkalian matriks dengan blocking

ƒ “blok” (di sini) bukan berarti “blok cache blok”. ƒ Tetapi berarti suatu sub-blok dalam matriks. ƒ Contoh : N = 8; ukuran sub-blok = 4

A11 A12 A21 A22 C11 = A11B11 + A12B21 C12 = A11B12 + A12B22 C21 = A21B11 + A22B21 C22 = A21B12 + A22B22 B11 B12 B21 B22 X = C11 C12 C21 C22

(37)

Perkalian Matriks dengan Blok

for (jj=0; jj<n; jj+=bsize) { for (i=0; i<n; i++)

for (j=jj; j < min(jj+bsize,n); j++) c[i][j] = 0.0;

for (kk=0; kk<n; kk+=bsize) { for (i=0; i<n; i++) {

for (j=jj; j < min(jj+bsize,n); j++) { sum = 0.0 for (k=kk; k < min(kk+bsize,n); k++) { sum += a[i][k] * b[k][j]; } c[i][j] += sum; } } } }

(38)

Analisis Perkalian Matriks Blok

ƒ Pasangan loop paling dalam mengalikan potongan A 1 x bsize dengan blok B

bsize x bsize dan mengakumulasikan menjadi C 1 x bsize.

ƒ Loop dengan j langkah melalui potongan A dan C n baris, memakai B sama.

A B C

Potongan baris diakses update potongan elemen berurutan

i kk i

kk jj jj

for (i=0; i<n; i++) {

for (j=jj; j < min(jj+bsize,n); j++) { sum = 0.0 for (k=kk; k < min(kk+bsize,n); k++) { sum += a[i][k] * b[k][j]; } c[i][j] += sum; } Innermost Loop Pair

(39)

Kinerja Blocking pada Pentium

Kinerja perkalian matriks dengan blocking pada Pentium

Blocking (bijk and bikj) meningkatkan kinerja dengan faktor dua kali di atas versi unblocked (ijk and jik)

ƒ Relatif tidak sensitive terhadap ukuran array.

0 10 20 30 40 50 60 25 50 75 100 125 150 175 200 225 250 275 300 325 350 375 400 Array size (n) Cy cl e s /ite ra tion kji jki kij ikj jik ijk bijk (bsize = 25) bikj (bsize = 25)

(40)

Kesimpulan

Pemrogram dalam melakukan optimisasi kinerja cache

ƒ Bagaimana struktur data dikelola

ƒ Bagaimana data diakses

ƒ Struktur nested loop

ƒ Blocking merupakan teknik umum

Seluruh sistem menyukai “cache friendly code”

ƒ Memperoleh kinerja optimum absolut sangat tergantung pada

platform yang digunakan.

ƒ Ukuran cache, ukuran line, associativities, dll.

ƒ Keuntungan paling besar dapat diperoleh dengan kode generik

ƒ Tetap bekerja dalam working set yang kecil (temporal locality) ƒ Gunakan stride yang kecil (spatial locality)

Referensi

Dokumen terkait

Syapar Alim Siregar menulis sebuah karya ilmiah berupa tesis yang berjudul: “Implementasi dan Implikasi Undang-undang Nomor 23 Tahun 2011 Terhadap Pengelolaan

Komponen utama pada bagian ini adalah aksial flow compressor  , berfungsi untuk mengkompresikan udara yang berasal dari inlet air section  hingga  bertekanan tinggi sehingga

Satu senyawa xanton yaitu ananiksanton (1), telah diisolasi untuk pertama kalinya dari ekstrak etil asetat kulit akar Calophyllum soulattri.. Struktur molekul senyawa tersebut

Kapsul Herbal Dawa Sukses

(2006) yang mengisolasi protoplas mesofil daun anggrek Dendrobium sonia “Bom 17” dengan menggunakan larutan osmotikum manitol, bahwa waktu inkubasi yang optimal

topik yang berhubungan dengan prinsip dapat dikembangkan dengan Model Penemuan Terbimbing. Berdasarkan uraian di atas, maka dapat disimpulkan bahwa penemuan

Hendaknya, akhlaknya Nabi Isa a.s ditiru oleh para dokter dan ahli kesehatan, juga oleh orang-orang yang kaya untuk membantu ekonomi orang-orang yang fakir dan miskin1.

Pengantar Komunikasi Politik (Terjemahan Imam Muttaqien).. 5 diterima oleh elit atau publik sebagai kerangka referensi pengetahuan mereka. Pada tingkat publik, pesan-pesan