Tema 3: Memoria cache Summary of memory technology

Anuncio
Tema 3: Memoria cache
Eduard Ayguadé i Josep Llosa
These slides have been prepared using material from “Estructura de Computadores II” by professors A. Fernandez, J. Llosa & F. Sanchez and material
available at the companion web site for “Computer Organization & Design. The Hardware/Software Interface. Copyright 1998 Morgan Kaufmann Publishers.”
Summary of memory technology
„ DRAM is slow but cheap and dense:
z
z
z
Good choice for presenting the user with a BIG memory system
Uses one transistor, must be refreshed
60-120 ns, $5-$10 per Mbyte in 1997.
„ SRAM is fast but expensive and not very dense:
z
z
z
Good choice for providing the user FAST access time
Uses 4 to 6 transistors, holds state as long as power is supplied
5-25 ns, $100-$250 per Mbyte in 1997.
„ What about magnetic disks?
z
10-20 million ns, $0.1-$0.2 per Mbyte in 1997.
1
Processor - DRAM gap
„ Processor - memory performance gap:
z
grows 50% per year
Performance
1000
CPU
µProc
60%/yr.
100
10
DRAM
7%/yr.
DRAM
2000
1999
1997
1998
1996
1994
1995
1992
1993
1991
1990
1989
1987
1988
1986
1985
1984
1982
1983
1981
1980
1
Time
Processor - DRAM gap
„ Is this gap so important?
z
A lot of work can be done inside the processor during a memory
access
„ Example:
z
z
z
DRAM latency of 80 ns
Processor clock cycle of 1 ns
80 clks to access data x 6 instructions per clk → or 480
instructions
2
Motivation for memory hierarchy
„ Goal:
z
z
Present the user with large amounts of memory using the
cheapest technology.
Provide access at the speed offered by the fastest technology.
CPU
Level 1
Levels in the
memory hierarchy
Increasing distance
from the CPU in
access time
Level 2
Level n
Size of the memory at each level
Motivation for memory hierarchy
3
Locality
„ A principle that makes having a memory hierarchy a good
idea
„ If an item is referenced,
z
z
it will tend to be referenced again soon (temporal locality)
nearby items will tend to be referenced soon (spatial locality).
„ Examples:
z
z
90/10 rule: 90% of the dynamic references to code are located in
10% of the memory address space (loops, procedures, …)
Access to consecutive elements in data structures (vectors,
arrays, lists, …)
Locality
„ Temporal locality suggests:
z
“Once you reference a memory location, bring its contents to a
level closer to the processor”
„ Spatial locality suggests:
z
“Once you reference a memory location, also bring the contents of
nearby memory locations”
„ Block or Line:
z
z
z
A number of consecutive words in memory (e.g. 32 bytes,
equivalent to 4 words x 8 bytes)
Unit of information that can either be present or not present in a
level of the memory hierarchy
Unit of information that is transferred between two levels in the
hierarchy
4
Block or line
„ Finding a piece of data in memory ...
11
3
2
processor @
line in memory
byte inside word
word inside line
1 line
Example:
- 1 word contains 8 bytes = 64 bits
- 1 line contains 4 words
- memory contains 2048 lines
Block or line
„ Memory hierarchy is inclusive
Main memory
0
1
block x exists in both levels
block y exists only in the upper level
N-1
line
Cache
0
1
M-1
word
Processor
5
Line size trade-off
„ In general, larger line sizes take advantage of spatial
locality, BUT:
z
z
z
Larger line size means larger miss penalty: takes longer time to fill
up the line
If line size is too big relative to cache size, miss rate will go up: too
few cache lines
Pollution: with big lines you bring data with less probability of
being used (spatial locality)
Memory hierarchy terminology
„ Hit: data appears in some block in a level of the hierarchy
z
z
Hit rate (h): the fraction of memory access found in that level
Hit time th: time to access that level: memory access time + time
to determine hit/miss
„ Miss: data needs to be retrieved from a block in the next
level of the hierarchy
z
z
Miss rate m = 1 - h
Miss penalty (tm)= time to replace a block in that level with a block
in the next level
„ In general, Average Access Time = th x h + tm x m
6
Instruction and data caches
„ Instructions and data
behave in a different way
„ Harward architecture that
allows simultaneous access
to both I and D
„ Combined L2, usually
L2>>L1
Impact on performance
„ Suppose a processor executes at
z
z
z
Clock Rate = 1 GHz (1 ns per cycle)
CPI = 1.3
50% arith/logic, 30% ld/st, 20% control
„ Suppose a 1% instruction miss rate with 50 cycle miss
penalty:
z
z
CPI = ideal CPI + stalls per instruction = 1.3 + 0.01x50 = 1.9
31 % of the time waiting for instructions!
„ Suppose a 10% data miss rate with 50 cycle miss penalty:
z
z
CPI = ideal CPI + average stalls per instruction =
1.3 + (0.30x0.10x50) = 2.8 cycles
53 % of the time the processor is stalled waiting for memory!
7
More on memory hierarchy terminology
„ Mapping policy:
z
z
Where a line can be found?
Direct, Set associative, Fully associative
„ Replacement policy:
z
When a level is full, which line is eliminated in order to have an
empty slot for the new line?(temporal locality: the new one has higher
z
Random, FIFO, LRU
probability of being referenced in the near future)
„ Write policy:
z
z
Which levels in the hierarchy are updated on a write?
On hit: Write through, copy back. On miss: write allocate, write no
allocate
Mapping policy
„ Where a line can be found in cache memory?
000
001
010
011
100
101
110
111
000
001
010
011
100
101
110
111
00 0
00 1
01 0
01 1
10 0
10 1
11 0
11 1
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
00000
00001
00010
00011
00100
00101
00110
00111
01000
01001
01010
01011
01100
01101
01110
01111
10000
10001
10010
10011
10100
10101
10110
10111
11000
11001
11010
11011
11100
11101
11110
11111
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
Main memory
Direct cache
Fully associative
cache
2-way set
associative cache
8
tag
tag
tag
tag
tag
tag
tag
tag
data
data
data
data
data
data
data
data
000
001
010
011
100
101
110
111
00000
00001
00010
00011
00100
00101
00110
00111
01000
01001
01010
01011
01100
01101
01110
01111
10000
10001
10010
10011
10100
10101
10110
10111
11000
11001
11010
11011
11100
11101
11110
11111
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
tag
tag
tag
tag
tag
tag
tag
tag
data
data
data
data
data
data
data
data
000
001
010
011
100
101
110
111
00000
00001
00010
00011
00100
00101
00110
00111
01000
01001
01010
01011
01100
01101
01110
01111
10000
10001
10010
10011
10100
10101
10110
10111
11000
11001
11010
11011
11100
11101
11110
11111
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
Mapping policy
„ How can one differenciate between the possible candidates
for a cache line?
Main memory
In cache line number 010 one can find:
tag = 00 → line 00010 of main memory
tag = 01 → line 01010 of main memory
tag = 10 → line 10010 of main memory
tag = 11 → line 11010 of main memory
Direct cache
Mapping policy
„ How can one differenciate between the possible candidates
for a cache line?
Main memory
In cache line number 010 one can find:
tag = 00000 → line 00000 of main memory
tag = 00001 → line 00001 of main memory
…
tag = 11111 → line 00001 of main memory
Fully associative
9
tag
tag
tag
tag
tag
tag
tag
tag
data
data
data
data
data
data
data
data
00 0
00 1
01 0
01 1
10 0
10 1
11 0
11 1
00000
00001
00010
00011
00100
00101
00110
00111
01000
01001
01010
01011
01100
01101
01110
01111
10000
10001
10010
10011
10100
10101
10110
10111
11000
11001
11010
11011
11100
11101
11110
11111
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
data
Mapping policy
„ How can one differenciate between the possible candidates
for a cache line?
Main memory
„ Direct mapping
In cache line number 010 one can find:
tag = 000 → line 00001 of main memory
tag = 001 → line 00101 of main memory
…
tag = 111 → line 11101 of main memory
Set associative
Implementing the mapping policy
tag
# line
Line size = 1 word x 4 bytes
10
Implementing the mapping policy
„ Direct mapping: four-word lines (32 bit per word)
tag
# line
Data
Implementing the mapping policy
„ Fully associative
tag
11
Implementing the mapping policy
# set
„ 4-way set associative
tag
Sources of cache misses
„ Compulsory (cold start or process migration, first
reference): first access to a block
z
“Cold” fact of life: not a whole lot you can do about it
„ Conflict (collision): Multiple memory locations mapped to
the same cache location
z
z
Solution 1: increase cache size
Solution 2: increase associativity
„ Capacity: Cache cannot contain all blocks accessed by the
program
z
Solution: increase cache size
„ Invalidation: other process (e.g., I/O) updates memory
12
Sources of cache misses
„ Mapping policies behaviour:
Reducing misses
„ Assist cache:
z Bring line into cache if it shows
locality, thus avoiding the
replacement of other lines with
more locality
cache
cache
AC
AC
main
main
memory
memory
„ Victim cache:
z Give a second opportunity to
those lines that are replaced
cache
cache
VC
VC
main
main
memory
memory
13
0
8 Mbytes
4 Mbytes
2 Mbytes
1 Mbyte
512 Kbytes
256 Kbytes
128 Kbytes
30
64 Kbytes
40
8 Mbytes
4 Mbytes
2 Mbytes
1 Mbyte
512 Kbytes
256 Kbytes
128 Kbytes
64 Kbytes
32 Kbytes
2-way
16 Kbytes
1-way
50
32 Kbytes
50
8 Kbytes
60
16 Kbytes
60
8 Kbytes
4 Kbytes
2 Kbytes
40
4 Kbytes
2 Kbytes
1 Kbyte
0
1 Kbyte
ns
ns
Evaluation: access time (th)
0.8µ technology
80
70
4-way
30
8-way
20
10
Evaluation: access time (th)
0.8µ technology
70
16 bytes
32 bytes
64 bytes
128 bytes
256 bytes
20
10
direct mapped
14
Evaluation: miss rate
data cache only
SPEC95, reference data set
1012 instructions simulated
nr = 0.3735 references to memory per instruction
0.40
1-way
0.35
2-way
0.30
4-way
0.25
8-way
0.20
0.15
0.10
8 Mbytes
4 Mbytes
2 Mbytes
1 Mbyte
512 Kbytes
256 Kbytes
128 Kbytes
64 Kbytes
32 Kbytes
16 Kbytes
8 Kbytes
4 Kbytes
2 Kbytes
0.00
1 Kbyte
0.05
Evaluation: miss rate
data cache only
SPEC95, reference data set
1012 instructions simulated
nr = 0.3735 references to memory per instruction
0.50
0.45
16 bytes
32 bytes
0.40
64 bytes
0.35
128 bytes
0.30
256 bytes
0.25
0.20
0.15
0.10
0.05
8 Mbytes
4 Mbytes
2 Mbytes
1 Mbyte
512 Kbytes
256 Kbytes
128 Kbytes
64 Kbytes
32 Kbytes
16 Kbytes
8 Kbytes
4 Kbytes
2 Kbytes
1 Kbyte
0.00
direct mapped
15
Evaluation: average memory access
0.8µ technology
DRAM access time 250 ns
data cache only
write through / write allocate
8-byte bus between MC and MP
SPEC95, reference data set
1012 instructions simulated
nr = 0.3735 references to memory per instruction
120
1-way
100
2-way
4-way
ns
80
8-way
60
40
8 Mbytes
4 Mbytes
2 Mbytes
1 Mbyte
512 Kbytes
256 Kbytes
128 Kbytes
64 Kbytes
32 Kbytes
16 Kbytes
8 Kbytes
4 Kbytes
2 Kbytes
0
1 Kbyte
20
Evaluation: average memory access
0.8µ technology
DRAM access time 250 ns
data cache only
write through / write allocate
8-byte bus between MC and MP
SPEC95, reference data set
1012 instructions simulated
nr = 0.3735 references to memory per instruction
250
16 bytes
32 bytes
200
64 bytes
128 bytes
150
ns
256 bytes
100
8Mbytes
4Mbytes
2Mbytes
1 Mbyte
512Kbytes
256Kbytes
128Kbytes
64Kbytes
32Kbytes
16Kbytes
8Kbytes
4Kbytes
2Kbytes
0
1Kbyte
50
16
Cache line replacement policy
„ Random Replacement:
z
z
Hardware randomly selects a cache line out of the set and
replaces it
Can be implemented with a single counter.
„ First-In First-Out (FIFO):
z
z
The oldest one in the set is going to be replaced
Can be implemented with a counter per set, assuming that lines in
the set are filled/replaced in order.
Cache line replacement policy
„ Least Recently Used (LRU):
z
z
z
z
Hardware keeps track of the access history
Replace the entry that has not been used for the longest time
For two-way set associative cache one needs one bit for LRU
replacement
Exercise: how to implement it?
17
Cache write policy
„ Cache read is much easier to handle than cache write:
z
Instruction cache is much easier to design than data cache
„ Cache write policy:
z
It decides how do we keep data in the cache and memory
consistent
„ Two options on a hit:
z
Copy-back: write to cache only. Write the cache block to memory
when that cache block is being replaced on a cache miss.
9 Need a “dirty bit” for each cache block
9 Greatly reduce the memory bandwidth requirement
z
Write-through: write to cache and memory at the same time.
9 Replacements do not need to write lines back to memory
9 So … writes are done with a large access time!
Write buffer for write-through policy
„ A Write Buffer is needed between the cache and main
memory
z
z
Processor: writes data into the cache and the write buffer
Cache controller: write contents of the buffer to memory
„ Write buffer is just a FIFO:
z
Typical number of entries: 4
processor
cache
cache
main
main memory
memory
word
18
Write buffer for copy-back policy
„ Reducing miss penalty: in this case the buffer holds those
replaced “dirty” lines that need to be updated in main
memory
tags
=
=
=
=
=
=
=
=
=
hit in write buffer
@ issued
by processor
cache
cache
main
main memory
memory
lines
mux
„ On a miss, now we need to check if the line is in the write
buffer
Cache write policy (cont.)
„ What happens on a write miss? Do we read in the block?
z
z
Yes: Write-allocate
No: Write-no-allocate
„ Usually:
z
z
Write-allocate goes together with copy-back
Write-no-allocate goes together with write-through
19
Moving lines around …
„ Size of the bus between cache and main memory:
Moving lines around …
„ Single module memory / one-word wide bus
b0
memory access
b1
b2
b3
transfer +
cache load
„ Multi module memory / one-line wide bus
b0-b3
„ Multi module memory / one-word wide bus
b0
b1
b2
b3
20
Moving lines around …
„ Interleaved memory
0
8
16
1
9
17
2
10
18
3
11
4
12
5
13
6
14
7
15
count % 8
# line
b0
access
b1
b2
b3
b4
b5
b6
b7
transfer
Memorias de Semiconductores
Tipos de Memoria de Semiconductores:
„ Memoria Estática (SRAM, Static RAM). Cada celda de memoria equivale a 1
biestable (7-8 transistores). En comparación con las DRAM son rápidas, tienen
un alto consumo, poca capacidad y son caras.
→ Memoria Cache
„ Memoria Dinámica (DRAM, Dynamic RAM). Cada celda se comporta como un
condensador (1-1.x transistores). En comparación con las SRAM son lentas,
tienen un bajo consumo, mucha capacidad y son baratas. Problema del
refresco.
→ Memoria Principal
21
Memorias de Semiconductores
Celda SRAM de 6 Transistores
wordline
bitline’
bitline
„ La información se almacena en 2 inversores acoplados.
„ Al activar la word line el dato almacenado se lee a través de las
bit lines.
„ Se obtiene el dato negado y sin negar.
Memorias de Semiconductores
Celda SRAM de 6 Transistores
bitline’
bitline
22
Memorias de Semiconductores
Celda DRAM de 1 Transistor
wordline
bitline
„ La información se almacena en el condensador Cs.
„ Al activar la word line el dato almacenado se lee a través de la bitline.
„ El condensador se va descargando poco a poco, es necesario recargarlo
regularmente (refresco).
Estructura interna de una DRAM
20 bits
@
FILA
COLUMNA
Matriz de Memoria
1024 x 1024 x 1 bit
@FILA
10
Decodificador de fila
210 columnas
celda
.
wordline
.
.
.
.
.
.
.
210 filas
bitline
wordline
. . . . . .
. . .
Amplificadores de señal
@COLUMNA
10
Decodificador de columna
R/W
DATO
bitline
23
Estructura interna de una DRAM
„ Una operación de lectura:
@FILA
Decodificador de fila
1) Decodificar @FILA, se activa la señal wordline
.
wordline
.
.
.
.
.
.
.
. . . . . .
. . .
Amplificadores de señal
Decodificador de columna
R/W
Estructura interna de una DRAM
„ Una operación de lectura:
2) Se accede a todas las celdas de la fila, los datos de toda la fila se
envían a los amplificadores de señal y se recupera la tensión (el dato
está en un condensador que se va descargando poco a poco).
wordline
...
bitline
bitline
bitline
wordline
...
bitline
bitline
bitline
24
Estructura interna de una DRAM
„ Una operación de lectura:
@FILA
Decodificador de fila
2) Se accede a todas las celdas de la fila, los datos de toda la fila se
envían a los amplificadores de señal y se recupera la tensión.
.
.
.
.
.
.
.
.
. . . . . .
. . .
Amplificadores de señal
Decodificador de columna
R/W
Estructura interna de una DRAM
„ Una operación de lectura:
@FILA
Decodificador de fila
2) Se accede a todas las celdas de la fila, los datos de toda la fila se
envían a los amplificadores de señal y se recupera la tensión.
.
.
.
.
.
.
.
.
. . . . . .
. . .
Amplificadores de señal
Decodificador de columna
R/W
25
Estructura interna de una DRAM
„ Una operación de lectura:
3) Decodificar @COLUMNA, se selecciona una bitline y se envía el dato al
Decodificador de fila
exterior a través del buffer R/W.
.
.
.
.
.
.
.
.
Amplificadores de señal
@COLUMNA
Decodificador de columna
R/W
DATO
Estructura interna de una DRAM
„ Una operación de lectura:
@FILA
Decodificador de fila
4) La lectura es destructiva, hay que reescribir la celda (y toda la fila) para
recuperar el valor original (equivale a precargar la fila para el siguiente
acceso a memoria).
.
.
.
.
.
.
.
.
. . . . . .
. . .
Amplificadores de señal
Decodificador de columna
R/W
26
Estructura interna de una DRAM
„ Una operación de escritura:
Decodificador de fila
3) Prácticamente igual, la única diferencia es que la celda se reescribe con
el dato que entra por el buffer R/W.
.
.
.
.
.
.
.
.
Amplificadores de señal
@COLUMNA
Decodificador de columna
R/W
DATO
Estructura interna de una DRAM
„ Una operación de escritura:
@FILA
Decodificador de fila
4) Hay que reescribir la celda con el nuevo valor (y el resto de la fila
con el valor original).
.
.
.
.
.
.
.
.
. . . . . .
. . .
Amplificadores de señal
Decodificador de columna
R/W
27
Estructura interna de una DRAM
„
Una operación de lectura. Resumen:
1) Decodificar @FILA, se activa la señal wordline
2) Se accede a todas las celdas de la fila, los datos de toda la fila se envían a los
amplificadores de señal y se recupera la tensión (el dato está en un
condensador que se va descargando poco a poco).
3) Decodificar @COLUMNA, se selecciona una bitline y se envía el dato al
exterior a través del buffer R/W.
4) La lectura es destructiva, hay que reescribir la celda (y toda la fila) para
recuperar el valor original (equivale a precargar la fila para el siguiente acceso
a memoria).
„
Una operación de escritura:
3) Prácticamente igual, la única diferencia es que la celda se reescribe con el dato
que entra por el buffer R/W.
4) Hay que reescribir la celda con el nuevo valor (y el resto de la fila con el valor
original).
Estructura interna de una DRAM
Cronograma simplificado de una operación de lectura
tRC
A
@FIL
@COL
@FIL
D
@COL
DATA
tRAC
1
2
tCAC
3
4
3 Valores fundamentales:
„
Tiempo de acceso (tRAC): retardo máximo desde que se suministra la dirección de fila hasta
que se obtiene el dato → latencia de memoria.
„
Tiempo de ciclo (tRC): intervalo de tiempo mínimo entre dos accesos consecutivos a memoria
→ ancho de banda.
„
Tiempo de acceso a columna (tCAC): retardo máximo desde que se suministra la dirección de
columna hasta que se obtiene el dato.
28
Estructura interna de una DRAM
Cronograma simplificado de una operación de lectura
tRC
A
@FIL
@COL
@FIL
D
@COL
DATA
tRAC
1
tCAC
2
3
4
Valores típicos:
„ Tiempo de acceso (tRAC): 50ns.
„ Tiempo de ciclo (tRC): 70ns.
„ Tiempo de acceso a columna (tCAC): 20ns.
¿Posibles Mejoras? → Acceso a Bloques de Información.
„ Aprovechando que los datos de la fila están en los amplificadores de señal, sólo es
necesario enviar la @COL+1, @COL+2, …
FPM DRAM (Fast Page Mode DRAM)
„ Idea Fundamental: una vez accedida la fila, se puede acceder a
varias columnas simplemente cambiando la @COL.
→ Aprovechamos la localidad espacial
tPC
A
@FIL
@COL
@COL
D
DATA
tRAC
tCAC
DATA
tCAC
„ Valores típicos:
z
z
1er acceso (tRAC): 50ns.
2o acceso (tPC): 35ns.
29
Tipos de DRAM
„ Fast Page Mode DRAM (FPM DRAM)
„ Extended Data Out DRAM (EDO DRAM)
„ Burst EDO DRAM (BEDO DRAM)
„ Synchronous DRAM (SDRAM)
„ Double Data Rate SDRAM (DDR SDRAM)
„ DDR2 SDRAM
Evaluación FPM DRAM
„ Leer un bloque de 32 bytes (suponiendo que la MP está 8 entrelazada):
z
z
z
z
Placa Base de 66MHz (tiempo de ciclo:15ns).
4 Accesos a Memoria.
Temporización: 5-3-3-3 (incluye precarga).
Ancho de Banda: 152 Mbytes/s.
tPC
A
@FIL
@COL
@COL
D
DATA
tRAC
tCAC
DATA
tCAC
„ Problemas de la FPM DRAM: hay que esperar a que el dato sea leído antes de enviar la
nueva @COL.
30
EDO DRAM (Extended Data Out DRAM)
„ Idea Fundamental: se añade un registro en la salida de datos
→ se puede solapar el acceso a los datos
→ con el envío de la nueva @COL
tPC
A
@FIL
@COL
@COL
D
DATA
DATA
tRAC
„ Valores típicos:
z
z
1er acceso (tRAC): 50ns.
2o acceso (tPC): 20ns.
Estructura interna de una EDO DRAM
20 bits
@
FILA
COLUMNA
Matriz de Memoria
1024 x 1024 x 1 bit
@FILA
10
Decodificador de fila
210 columnas
celda
.
wordline
.
.
.
.
.
.
.
210 filas
bitline
. . . . . .
. . .
Amplificadores de señal
@COLUMNA
10
Decodificador de columna
R/W
REG
DATO
31
Evaluación EDO DRAM
„ Leer un bloque de 32 bytes:
z
z
z
z
Placa Base de 66MHz (tiempo de ciclo:15ns).
4 Accesos a Memoria.
Temporización: 5-2-2-2 (incluye precarga).
Ancho de Banda: 193 Mbytes/s.
tPC
A
@FIL
@COL
D
@COL
DATA
DATA
tRAC
„ Posibles mejoras de la EDO DRAM: Los accesos siempre son a posiciones
consecutivas.
BEDO DRAM (Burst EDO DRAM)
„ Idea Fundamental: añadir un contador para generar la nueva @COL.
tPC
A
@FIL
@COL
D
DATA
DATA
tRAC
„ Valores típicos:
z
z
1er acceso (tRAC): 50ns.
2o acceso (tPC): 15ns.
32
Estructura interna de una BEDO DRAM
20 bits
@
FILA
COLUMNA
Matriz de Memoria
1024 x 1024 x 1 bit
@FILA
10
Decodificador de fila
210 columnas
celda
.
wordline
.
.
.
.
.
.
.
210 filas
bitline
. . . . . .
. . .
Amplificadores de señal
@COLUMNA
10
CONT
10
Decodificador de columna
R/W
REG
DATO
Evaluación BEDO DRAM
„ Leer un bloque de 32 bytes:
z
z
z
z
Placa Base de 66MHz (tiempo de ciclo:15ns).
4 Accesos a Memoria.
Temporización: 5-1-1-1 (incluye precarga).
Ancho de Banda: 266 Mbytes/s.
tPC
A
@FIL
@COL
D
DATA
DATA
tRAC
„ Problema: Es una memoria asíncrona. Las memorias asíncronas son difíciles de mejorar
por problemas de ruido. Es muy difícil que soporten frecuencias superiores a los 66MHz.
33
Solución Arquitectónica
„ Problema: las memorias asíncronas no se pueden mejorar.
„ Solución Arquitectónica:
z Segmentar el funcionamiento interno de las memorias
z Hacer que funcionen de forma SÍNCRONA.
→ Desaparecen los problemas de ruido
→ Se puede aumentar la frecuencia de funcionamiento
SDRAM (Synchronous DRAM)
„ Funcionamiento segmentado.
„ Síncrona.
„ Puede funcionar a mucha más frecuencia que una DRAM asíncrona.
„ Autoincremento de la @COL.
„ Programable vía comandos.
„ Dispone de múltiples bancos (permite ocultar la precarga).
„ El funcionamiento interno es muy similar a una DRAM asíncrona.
34
DDR SDRAM (Double Data Rate SDRAM)
„ Es una SDRAM que envía los datos a doble velocidad que una SDRAM convencional.
CLOCK
SDRAM
DDR SDRAM
DATA
DATA
DATA
DATA
DATA DATA DATA DATA
„ Modificando exclusivamente la circuitería encargada de la entrada/salida de datos se
dobla el ancho de banda.
„ La latencia de memoria es prácticamente la misma.
DDR2 SDRAM
„ Es una DDR mejorada en los siguientes aspectos:
z Reducción del tamaño de página (número de columnas del array):
9 Reduce el tiempo de acceso
9 Reduce el consumo de energía
z Aumenta el número de bancos
9 Aumenta las posibilidades de solapar, con un buen controlador de memoria,
la precarga y el acceso a fila de bancos independientes.
z Aumento de la frecuencia
35
Tipos de DRAM
Ejemplos de Memorias DRAM comerciales
Año
Tipo Memoria
Latencia
Frec. Placa
Base
1r dato / resto
64 Mbits
66 MHz
50 / 20 ns
203.4 Mbytes/s
Capacidad
Ancho Banda lect.
32bytes
2000
EDO DRAM
2002
SDRAM
128 Mbits
167 MHz
36 / 6 ns
565.1 Mbytes/s
2003
DDR SDRAM
256 Mbits
200 MHz
30 /2.5 ns
813.8 Mbytes/s
Memoria Entrelazada
„ Memoria Principal 8-entrelazada de 256 Mbytes
„ Líneas 32 bytes
LÍNEA 0
Espacio
Lógico
0
1
M0
M1
2
0
1
2
…
7
3
8
9
10
…
15
4
16
17
18
…
23
24
25
26
…
31
…
…
…
228-1
32MB
256MB
M2
…
…
…
228-8
228-7
228-6
M7
8 bytes
228-1
1 byte
36
Memoria Entrelazada
„ Memoria Principal 8-entrelazada de 256 Mbytes
Chip DRAM
con 4 bancos
DIMM con 8 chips de Memoria DRAM
M0
M1
M2
1
2
…
7
0
8
9
10
…
15
16
17
18
…
23
24
25
26
…
31
…
…
…
…
…
228-8
228-7
228-6
…
228-1
32MB
0
8
16
…
8MB
226+0
226+8
226+16
…
8MB
227+0
227+8
227+16
…
8MB
227+226+0
227+226+8
227+226+16
…
8MB
M7
8 bytes
M0 M1 M2 M3
M4 M5 M6 M7
1 byte
Memoria Entrelazada
M0 M1 M2 M3 M4 M5 M6 M7
Banco 0
Banco i
8
8
8
8
8
8
8
8
Bus 64 bits
64
B0
M0
B1
B2
M0 M1 M2 M3
M4 M5 M6 M7
B3
37
Memoria Entrelazada
„ Memoria Principal 8-entrelazada de 256 Mbytes
„ Cada banco contiene 4 bytes de cada línea de 32 bytes
DRAM con 4 bancos
0
8
16
…
8MB
226+0
226+8
226+16
…
8MB
227+0
227+8
227+16
…
8MB
227+226+0
227+226+8
227+226+16
…
Estructura de un banco de 8 MB
0
8
16 24
…
8K
1KB
8MB
8 celdas de 1 bit
1 byte
Memoria Entrelazada
„ Memoria Principal 8-entrelazada de 256 Mbytes
„ Distribución de los 4 bytes de cada línea dentro de un módulo DRAM
DRAM con 4 bancos
0
8
16
…
8MB
226+0
226+8
226+16
…
8MB
8K
línea 0
línea 1
línea 2
línea 256
línea 257
línea 258
…
…
línea 255
…
línea 220-1
línea 511
…
227+0
227+8
227+16
…
227+226+0
227+226+8
227+226+16
…
8MB
8MB
1KB
1 byte
38
Memoria Entrelazada
„ Memoria Principal 8-entrelazada de 256 Mbytes
„ Líneas de 32 bytes
„ ¿Dónde está el byte 000204Eh?
0000000000000010000001001110
línea 258
byte 14
0000000000000010000001001110
banco 0
fila 1
columna 9
módulo 6
Memoria Entrelazada
0000000000000010000001001110
banco 0
fila 1
columna 9
módulo 6
0
banco 0
8
24
…
8MB
fila 1
226+0
banco 1
226+8
226+24
…
línea 1
línea 2
línea 257
línea 258
…
…
línea 255
línea 511
8MB
banco 0
227+0
banco 2
línea 0
línea 256
227+8
227+24
…
8MB
8K
columna 9
227+226+0
banco 3
227+226+8
227+226+24
…
1 byte
M0 M1 M2 M3
8MB
¡Byte 000204Eh!
módulo 6
M4 M5 M6 M7
…
línea 220-1
1KB
39
Memoria Entrelazada
„ La transmisión de datos entre MP y MC se hace por líneas completas
„ Es preciso cambiar la dirección de acceso, para acceder al primer byte de la línea
„ Se accede simultáneamente a todos los módulos
0000000000000010000001001110
línea 258
byte 14
0000000000000010000001001110
banco 0
fila 1
columna 9
módulo 6
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 000XXX
banco 0
fila 1
columna 8
Todos los
módulos
Memoria entrelazada
„ Queremos montar 1 GByte de memoria RAM usando módulos DIMM de 256
Mbytes.
z
z
z
z
z
z
z
La dirección tiene 30 bits
Necesitamos 4 módulos DIMM
Cada uno de los módulos se direcciona con 28 bits
Todos los módulos están físicamente conectados al mismo bus de datos
(triestados)
Sólo uno de los módulos puede funcionar en cada momento
Los dos bits de mayor peso de la dirección determinan cuál de los
módulos funciona (CS)
Los 28 bits restantes determinan cómo se accede al módulo
40
Memoria entrelazada
„ Queremos montar 1 GByte de memoria RAM usando módulos DIMM de 256
Mbytes.
„ Ejemplo: Acceso a la dirección 2000204Eh
Entrelazado
“vertical”
Entrelazado
“horizontal”
100000000000000010000001001110
fila 1
banco 0
columna 9
módulo 6
DIMM 2
Memoria Entrelazada
„ Memoria Principal 8-entrelazada de 256 Mbytes
„ Líneas de 32 bytes
z
0
8
¿Cómo queda distribuida la línea 0 en los chips de Memoria?
16 24 32 40
M0
…
1
9
17 25 33 41
M1
…
2
10 18 26 34 42
M2
…
7
...
15 23 31 39 47
…
M7
Ejemplo: Lectura de una línea de 32 bytes
LÍNEA 0
41
Memoria Entrelazada
„ Memoria Principal de 256 Mbytes
z
0
8
¿Cómo queda la línea 0 distribuida físicamente en Memoria?
16 24 32 40
…
1
9
17 25 33 41
…
2
10 18 26 34 42
M1
M0
…
M2
7
15 23 31 39 47
…
M7
...
Ejemplo: Lectura de una línea de 32 bytes
LÍNEA 0
Memoria Entrelazada
„ Memoria Principal de 256 Mbytes
z
0
8
¿Cómo se lee la línea 0 de MP?
16 24 32 40
M0
…
1
9
17 25 33 41
…
2
10 18 26 34 42
M1
…
M2
„
Enviar / decodificar la @fila (fila 0)
„
Leer la fila y enviarla a los amplificadores de señal
7
...
15 23 31 39 47
…
M7
42
Memoria Entrelazada
„ Memoria Principal de 256 Mbytes
z
¿Cómo se lee la línea 0 de MP?
M1
M0
0
8
16 24 32 40
…
1
9
M2
17 25 33 41
…
2
10 18 26 34 42
M7
...
…
„
Enviar / decodificar la @fila (fila 0)
„
Leer la fila y enviarla a los amplificadores de señal
7
15 23 31 39 47
…
Memoria Entrelazada
„ Memoria Principal de 256 Mbytes
z
¿Cómo se lee la línea 0 de MP?
M1
M0
0
8
16 24 32 40
…
1
9
M2
17 25 33 41
0
1
…
2
10 18 26 34 42
2
M7
…
7
15 23 31 39 47
…
7
a Memoria Cache
„
Enviar/ decodificar la @col (col 0)
„
Leer el 1er dato de la línea en todos los módulos
„
Enviar los primeros 8 bytes a la MC
43
Memoria Entrelazada
„ Memoria Principal de 256 Mbytes
¿Cómo se lee la línea 0 de MP?
z
M1
M0
0
8
16 24 32 40
…
1
9
M2
17 25 33 41
8
9
…
2
10 18 26 34 42
10
M7
…
7
15 23 31 39 47
…
15
a Memoria Cache
„
Incrementar la @col (col=1)
„
Leer el 2o dato de la línea en todos los módulos
„
Enviar los siguientes 8 bytes a la MC
„
...
Memoria Entrelazada
„
Lectura de 1 línea de 32 bytes, la MP está organizada en DIMMs de 8 bytes de
ancho.
z
Cronograma Simplificado:
9 Latencia fila (4 ciclos), latencia columna (4 ciclos), velocidad transferencia
(8 bytes por ciclo)
@FIL
@COL
datos datos datos datos
z
La velocidad de salida / transferencia de los datos dependerá del tipo
de Memoria y de la placa base (buses)
44
Memoria Entrelazada
„
Escritura de 1 línea de 32 bytes, la MP está organizada en DIMMs de 8 bytes
de ancho.
z
Cronograma Simplificado:
9 Latencia fila (4 ciclos), latencia columna (4 ciclos), velocidad transferencia
(8 bytes por ciclo)
@FIL
@COL
datos datos datos datos
z
¡El cronograma es idéntico!
Memoria Entrelazada
„ Ejemplo de cronograma de transferencia de una línea entre
Memoria Principal y Memoria Cache:
z
z
z
z
z
z
z
Tamaño de línea: 8 bytes.
Latencia de fila: 3 ciclos.
Latencia de columna: 2 ciclos.
Memoria Principal organizada en “DIMMs” de 2 bytes de ancho
Velocidad de transferencia entre MP y MC: 2 bytes por ciclo
Memoria cache tarda 1 ciclo en detectar miss (se requiere transferencia
de 1 línea desde MP)
Memoria cache tarda 1 ciclo en escribir la línea recibida y enviar el dato
al procesador (hit)
45
Memoria Entrelazada
Acceso en fallo
Petición
CPU
Lectura
MP
M
Acceso en acierto
Lectura de línea de MP
lat. F.
H
lat. C. 0,1 2,3 4,5 6,7
11 ciclos
Reducing miss penalty
„ Load into cache as words are transferred:
tm
@ CPU
Write to MP
read from MP
Load into MC
„ Write-buffer for copy-back
tm
@ CPU
Write to MP
read from MP
Load into MC
46
Reducing miss penalty
„ Early restart:
tm
@ CPU
Write to MP
b0
b1
b2
b3
b2 b3
b0
b1
read from MP
Load into MC
„ Reorder data:
tm
@ CPU
Write to MP
read from MP
Load into MC
Lab session
„ Code 1: Matrix product, different ijk forms
#define N 256
main() {
int i, j, k;
float A[N][N], B[N][N], C[N][N];
/* initialization of A, B and C*/
for (i=0; i<N; i++)
for (j=0; j<N; j++) {
A[i][j] = 1.2;
B[i][j] = 3.4;
C[i][j] = 0.0;
}
/* Computation of C */
for (i=0; i<N; i++)
for (j=0; j<N; j++)
for (k=0; k<N; k++)
C[i][j] = C[i][j] + A[i][k] * B[k][j];
}
47
Lab session
„ Code 1: Matrix product, different ijk forms
Cycles
Instructions executed
Floating point operations
Memory accesses (read and write)
Instruction cache misses
Data cache misses
Time (seconds)
MIPS
MFLOPS
ijk form
ikj form
jki form
1.392.048.480
1.082.413.938
1.846.706.514
959.064.862
959.064.702
959.067.394
33.555.463
33.555.463
33.555.463
655.615.970
655.613.221
655.617.326
2.571
2.384
2.537
17.086.764
2.321.923
33.757.489
6,971
5,412
9,234
137,58
177,21
103,86
4,81
6,20
3,63
Data cache miss ratio
2,606%
0,354%
5,149%
Instruction cache miss ratio
0,000%
0,000%
0,000%
Note: execution on a Pentium MMX at 200 MHz
Lab session
„ Code 1: Matrix product using scalar temporal variable
#define N 256
main() {
int i, j, k;
float t, A[N][N], B[N][N], C[N][N];
/* initialization of A, B and C*/
for (i=0; i<N; i++)
for (j=0; j<N; j++) {
A[i][j] = 1.2;
B[i][j] = 3.4;
C[i][j] = 0.0;
}
/* Computation of C */
for (i=0; i<N; i++)
for (j=0; j<N; j++) {
t = C[i][j];
for (k=0; k<N; k++)
t = t + A[i][k] * B[k][j];
C[i][j] = t;
}
}
48
Lab session
„ Code 1: Matrix product using scalar temporal variable
ijk form
ikj form
jki form
Cycles
874.348.935
762.446.346
1.531.322.928
Instructions executed
389.753.758
590.490.215
590.492.384
33.554.463
33.554.463
33.554.463
186.374.856
320.329.494
320.333.194
Floating point operations
Memory accesses (read and write)
Instruction cache misses
Data cache misses
Time (seconds)
MIPS
MFLOPS
2.366
2.290
2.723
17.192.127
2.317.923
33.821.126
4,372
3,812
7,657
89,148
154,903
77,118
7,675
8,802
4,382
Data cache miss ratio
9,224%
0,724%
10,558%
Instruction cache miss ratio
0,000%
0,000%
0,000%
Note: execution on a Pentium MMX at 200 MHz
Lab session
„ Questions:
z
z
Why the ikj is the best form?
In the second version using a scalar temporal variable:
9 Why the miss ratio grows if the number of misses is smaller?
9 Why the execution time is better if the miss ratio is higher
9 Why the MIPS metric is worse if the execution time is better?
49
Lab session
„ Code 2:
#define ITER 1000000
#define N 128*1024
#define mask N-1
main() {
int i, j, stride;
float v[N];
/* float = 4 bytes */
for (stride=1; stride<16; stride++) {
for (i=0; i<N; i++)
v[i]=1.3;
misses();
i=0;
for(j=0; j<ITER; j++){
v[i]=v[i]+11.2;
i = (i+stride) & mask;
}
printf(“%d: %d\n”, stride, misses());
}
}
Lab session
„ Code 2: execution on a Pentium MMX at 200 MHz
1200000
num. of misses
1000000
800000
600000
400000
200000
0
1
2
3
4
5
6
7
8
9 10 11 12 13 14 15
stride
„ What can you guess from this plot?
50
Lab session
„ Code 3:
#define ITER 1000000
#define N 16*1024
main() {
int i, j, stride;
float v[N];
/* float = 4 bytes */
stride = 8;
for (j=256; j<=N; j=j+256) {
for (i=0; i<N; i++)
v[i]=1.3;
misses();
k=0;
for (i=0; i<ITER; i++) {
v[k] = v[k] + 1.1;
k = k+stride;
if (k >=j) k=0;
}
printf("%d: %d\n", j*4, misses());
}
}
Lab session
„ Code 3: execution on a Pentium MMX at 200 MHz
1200000
num. of misses
1000000
800000
600000
400000
200000
0
0
4
8
12
16
20
24
28
32
j x 4 (K)
„ What can you guess from this plot?
51
Descargar