Documente Academic
Documente Profesional
Documente Cultură
1
Cap. 4
1
“Stride”(pas) reprezintă numărul de octeți pe care cineva trebuie să-i mute pentru a trece
de la un element la altul (la următorul sau la precedentul) . Pasul nu poate fi mai mic decât
mărimea elementului, dar poate fi mai mare, indicând un extra spațiu între elemente. O arie
cu pasul de aceeași mărime cu mărimea fiecărui element este continuă în memorie. O astfel
de arie se spune că are pasul unitate (unit stride). Non-unit stride arrays (ariile cu pasul
non-unitate ) sunt uneori mai eficiente în particular pentru matrici (2D) sau pentru arii
multidimensionale, depinzând de efectul asupra memoriei cache și de șablonul de acces
ales).
3
poate determina pași non-unitate la fel de ușor cum poate determina și pașii unitate.
Presupuneți că pre extragerea scrie direct în cache și că nu există “poluare”
(suprascrierea datelor care trebuie utilizate înaintea ca datele să fie pre extrase). Pentru
a obține cele mai bune performanțe utilizând un prefetcher non-unitate, câte pre
extrageri trebuie pot fi în aștepare (outstanding la un moment dat, dacă bucla
internă este în starea de echilibru?
Since the unblocked version is too large to fit in the cache, processing eight 8B elements
requires fetching one 64B row cache block and 8 column cache blocks. Since each iteration
requires 2 cycles without misses, prefetches can be initiated every 2 cycles, and the number
of prefetches per iteration is more than one, the memory system will be completely saturated
with prefetches. Because the latency of a prefetch is 16 cycles, and one will start every 2 cycles,
16/2 = 8 will be outstanding at a time
3
Conceptele ilustrate:
Facilități transversale,
Proiectarea ierarhiei de memorie .
#include "stdafx.h"
#include <stdio.h>
#include <time.h>
#define ARRAY_MIN (1024) /* 1/4 smallest cache */
#define ARRAY_MAX (4096*4096) /* 1/4 largest cache */
int x[ARRAY_MAX]; /* array going to stride through */
/* Initialize output */
printf(" ,");
for (stride=1; stride <= ARRAY_MAX/2; stride=stride*2)
label(stride*sizeof(int));
printf("\n");
8
a. Care este media timpului de acces la memorie pentru cache-ul curent (în cicli) versus
cache-ul care are o cale de predicție?
The average memory access time of the current (4-way 64KB) cache is 1.69ns. 64KB direct
mapped cache access time = .86ns @ .5 ns cycle time = 2 cycles Way-predicted cache has
cycle time and access time similar to direct mapped cache and miss rate similar to 4-way
cache.
The AMAT of the way-predicted cache has three components: miss, hit with way prediction
correct, and hit with way prediction mispredict: 0.0033 × (20) + (0.80 × 2 + (1 – 0.80) × 3) ×
(1 – 0.0033) = 2.26 cycles = 1.13ns
b. Dacă toate celelalte componente pot opera cu memoria cache cu o cale de predicție
care este mai rapidă (incluzând memoria principală), care va fi impactul asupra
performanțelor atunci când se utilizează memoria cu o cale de predicție?
The cycle time of the 64KB 4-way cache is 0.83ns, while the 64KB directmapped cache can
be accessed in 0.5ns. This provides 0.83/0.5 = 1.66 or 66% faster cache access.
c. Memoria cache cu cale de predicție se utilizează în mod uzual pentru memoria cache
pentru instrucțiuni care utilizează o coadă sau un buffer pentru instrucțiuni. Imaginați-
vă că doriți să încercați calea de predicție pentru o memorie cache pentru date.
Presupuneți că aveți o acurateță de 80% și că operația care urmează (de exemplu
operații dependente de accesul la cache al altor instrucțiuni) este lansată
presupunând o cale de predicție corectă. Astfel, o cale de predicție greșită presupune
golirea benzii și o capcană pentru răspuns (replay trap), care necesită 15 cicli. Este
pozitivă sau negativă schimbarea timpului mediu de acces la memorie per
instrucțiunea de încărcare (load instruction) cu memorie cache de date cu cale de
predicție, și cât de mare este schimbarea?
With 1 cycle way misprediction penalty, AMAT is 1.13ns (as per part a), but with a 15 cycle
misprediction penalty, the AMAT becomes: 0.0033 × 20 + (0.80 × 2 + (1 – 0.80) × 15) × (1 –
0.0033) = 4.65 cycles or 2.3ns
d. Ca o alternativă la calea de predicție, multe memorii cache nivel L2 cu asociativitate
mare serializează accesul la etichetă (tag) și dată, astfel încât trebuie activată doar
aria cerută care conține setul de date. Acest fapt micșorează consumul de putere
dar crește timpul de acces. Utilizați interfața WEB CACTI pentru: un proces de 0,065
µm, capacitatea memorie cache de 1MB, organizarea memoriei cu mapare
asociativă pe seturi cu 4 căi, mărimea unui bloc de 64B, citirea la ieșire a 144biți, un
banc, un singur port de citire/scriere, etichete pe 30 de biți, și tehnologia ITRS-HP cu
fire globale. Care este raportul între timpul de acces pentru serializarea etichetelor și
a datelor, și accesul paralel?
The serial access is 2.4ns/1.59ns = 1.509 or 51% slower
9
The access time is 1.12ns, while the cycle time is 0.51ns, which could be potentially
pipelined as finely as 1.12/.51 = 2.2 pipestages.
b. Comparați aria și energia dinamică totală pentru citire per proiectarea de tip pipelined
versus proiectarea utilizând bancuri. Precizați care va necesita o arie mai mică și
care va necesita putere mai multă, și explicați de ce.
The pipelined design (not including latch area and power) has an area of 1.19 mm2 and
energy per access of 0.16nJ. The banked cache has an area of 1.36 mm2 and energy per access
of 0.13nJ. The banked design uses slightly more area because it has more sense amps and
other circuitry to support the two banks, while the pipelined design burns slightly more power
because the memory arrays that are active are larger than in the banked case
11 Considerați pentru lipsurile memoriei cache de nivel 2 (L2)
mecanismele denumite cuvântul critic primul (critica word first)2 și
repornirea timpurie (early restart)3. Presupuneți o memorie cache L2 de 1MB, cu blocuri
de 64 de octeți și o cale de reumplere (refill) de 16 octeți. Presupuneți că L2 poate fi
scrisă cu 16 octeți la fiecare 4 cicli procesor, că timpul de recepție a primului bloc de 16
octeți din controlerul de memorie este de 120 de cicli, că fiecare bloc adițional de 16
octeți din memorie principală necesită 16 cicli, și că data poate fi direct trimisă (direct
bypass) la portul de citire al memoriei cache L2. Ignorați orice ciclu de transfer a unei
cereri de tip lipsă (miss) la L2 și datele cerute pentru memoria cache L1.
a. Câți cicli vor fi necesari pentru o lipsă L2 cu și fără mecanismele denumite cuvântul
critic primul (critica word first) și repornirea timpurie (early restart)?
With critical word first, the miss service would require 120 cycles. Without critical word
first, it would require 120 cycles for the first 16B and 16 cycles for each of the next 3 16B
blocks, or 120 + (3 × 16) = 168 cycles.
b. Credeți că mecanismele denumite cuvântul critic primul (critica word first) și
repornirea timpurie (early restart) vor fi mult mai importante pentru memorie cache
L1 sau pentru L2, și care sunt factorii care contribui la importanța lor relativă?
It depends on the contribution to Average Memory Access Time (AMAT) of the level-1 and
level-2 cache misses and the percent reduction in miss service times provided by critical
word first and early restart. If the percentage reduction in miss service times provided by
critical word first and early restart is roughly the same for both level-1 and level-2 miss
service, then if level-1 misses contribute more to AMAT, critical word first would likely be
more important for level-1 misses.
2
Cuvântul critic primul (critica word first) – cere prima dată de la memorie cuvântul lipsă și trimite-l către UCP
imediat ce sosește; lasă UCP să-și continue execuția în timp ce se umple restul de cuvinte din bloc. Se mai
numește extragere adaptată (wrapped fetch)
3
Repornire timpurie (early restart) – cât de curând (imediat ce) sosește cuvântul cerut din bloc, aceste este
trimis de urgență la UCP (procesor) lăsundu-l astfel pe acesta să-și continue execuția.
„
10
b. La ce creștere de viteză ne putem aștepta în starea de echilibru utilizând un buffer
de scriere cu fuzionare(merging write buffer) 4 în loc de un buffer de scriere fără
fuzionare atunci când se filează cu 0 memorie prin execuția unei memorări pe 64 de
biți dacă toate celelalte instrucțiuni pot fi lansate în paralel cu memorarea și blocurile
sunt prezente în cache-ul L2.
Assume merging write buffer entries are 16B wide. Since each store can write 8B, a
merging write buffer entry would fill up in 2 cycles. The level-2 cache will take 4 cycles to
write each entry. A non-merging write buffer would take 4 cycles to write the 8B result of
each store. This means the merging write buffer would be 2 times faster.
c. Care poate fi efectul unei posibile lipse (miss) la nivelul memoriei cache L1 relativ la
numărul de intrări cerute de la buffer-ul de scriere, pentru sisteme cu memorie cache
cu blocare și fără blocare?
With blocking caches, the presence of misses effectively freezes progress made by the
machine, so whether there are misses or not doesn’t change the required number of write
buffer entries. With non-blocking caches, writes can be processed from the write buffer
during misses, which may mean fewer entries are needed.
4
Bufferul de scriere cu fuzionare (Merging write buffer) combină scrierile care au ca destinație adrese
consecutive într-o singură intrare în buffer. Altfel, acestea vor ocupa intrări separate care vor crește șansa de
oprire a benzii de asamblare a procesorului.
11
tRCD este timpul necesar pentru a activa un rând într-un banc, și latența (CL) pentru
strobul de adresă pentru coloană (CAS) este numărul de cicli necesari pentru a citi la
ieșire o coloană din rând. Presupuneți că RAM-ul este pe DIMM-ul DDR2 cu ECC
standard, având 72 de linii de date. Presupuneți de asemenea că lungimea unei salve
de 8 citește la ieșire 8 biți cea ce înseamnă un total de 64B de la DIMM. Presupuneți
tRCD = CAS (or CL) * clock_frecuency, și că clock_frecuency = transfer_per_seconds/2.
Latența pe chip la o lipsă cache de la nivelul 1 la nivelul 2 și înapoi, nu include accesul
la DRAM, în cele 20ns.
a. Cât timp este necesar de la prezentarea unei comenzi active până la ultimul bit de
date cerut de la tranziția DRAM de la valid la invalid pentru DIMM-ul DDR2-667 1GB
cu CL = 5. Presupuneți că pentru fiecare cerere se va prextrage automat o altă linie
cache adiacentă din aceeași pagină.
This is similar to the scenario given in the figure, but tRCD and CL are both 5. In addition,
we are fetching two times the data in the figure. Thus it requires 5 + 5 + 4 × 2 = 18 cycles
of a 333MHz clock, or 18 × (1/333MHz) = 54.0ns.
b. Care este latența relativă, atunci când se utilizează DIM-ul DDR2-667, a unei cereri
de citire a unui banc activ versus una pentru o pagină deja deschisă, incluzând și
timpul necesar pentru a procesa o lipsă în interiorul procesorului?
The read to an open bank requires 5 + 4 = 9 cycles of a 333MHz clock, or 27.0ns. In the case
of a bank activate, this is 14 cycles, or 42.0ns. Including 20ns for miss processing on chip,
this makes the two 42 + 20 = 61ns and 27.0 + 20 = 47ns. Including time on chip, the bank
activate takes 61/47 = 1.30 or 30% longer.
b. Dacă 10% din accesul total la DRAM se întâmplă unul după altul sau continuu fără
nici un interval de timp pierdut, cum se va schimba decizia?
The key benefit of closing a page is to hide the precharge delay Trp from the critical path.
If the accesses are back to back, then this is not possible. This new constrain will not impact
policy 1.
The new equations for policy 2, Access time when we can hide precharge delay = Trcd +
Tcas + Tddr Access time when precharge delay is in the critical path = Trcd + Tcas + Trp +
Tddr Equation 1 will now become,
c. Calculați diferența mediei energiei consumate de DRAM per acces între cele două
politici utilizând fracția de potrivire pentru buffer-ul de rând calculată anterior.
Presupuneți că preîncărcarea necesită 2 nJ, activarea 4 nJ și 100pJ sunt necesari
pentru a citi sau scrie în buffer-ul de rând.
14
For any row buffer hit rate, policy 2 requires additional r × (2 + 4) nJ per access. If r = 50%,
then policy 2 requires 3nJ of additional energy
19 Ori de câte ori un calculator este în așteptare (idle), fie îl putem trece
în starea cu consum redus (stanby), când DRAM încă este activ, sau îl
putem lăsa să hiberneze. Presupuneți că, pentru hibernare, trebuie doar să copiem
conținutul DRAM-ului pe un mediu nevolatil precum un Flash. Dacă citire sau scrierea
unei linii Flash de 64 B necesită 2,56 µJ, iar DRAM-ul necesită 0,5 nJ, iar dacă consumul
în idle al DRAM-ului este de 1,6W (pentru 8 GB), cât timp trebuie un sistem trecut în idle
pentru a beneficia de hibernare? Presupuneți că memoria principală are 8GB.
a. La ce tipuri de programe vă așteptați să aibă încetiniri mai mici când aceste rulează
sub VM?
Programs that do a lot of computation but have small memory working sets and do little
I/O or other system calls.
b. Dacă încetinirea este liniară ca funcție de timpul sistem, fiind dată încetinirea de la
punctul anterior, cât de mult încetinește un program ce petrece 20% din timpul său
de execuție în modul sistem ?
The slowdown above was 60% for 10%, so 20% system time would run 120% slower.
c. Care este încetinirea mediană a apelurilor sistem din tabel sub virtualizarea pură și
paravirtualizare?
The median slowdown using pure virtualization is 10.3, while for para virtualization the
median slowdown is 3.76.
d. Care funcție din tabel are cea mai mare încetinire? Care credeți că poate fi cauza
acesteia?
The null call and null I/O call have the largest slowdown. These have no real work to
outweigh the virtualization overhead of changing protection levels, so they have the
largest slowdowns
16
despre AMD-V pot fi găsite la http://sites.amd.com/us/business/it-
solutions/virtualization/Pages/resources.aspx.)
a. Care dintre ele poate furniza performanțe superioare pentru aplicații cu acces intensiv
la memorie în cazul unor memorii mari?
As of the date of the Computer paper, AMD-V adds more support for virtualizing virtual
memory, so it could provide higher performance for memoryintensive applications with
large memory footprints.
b. Informațiile despre AMD IOMMU pot fi găsite la
http://devoloper.amd.com/us/documentation/articles/pages/892006101.aspx.) Ce face
tehnologia de virtualizare și unitatea de gestiune a memoriei (IOMMU) pentru a
îmbunătății performanțele de virtualizare a operațiilor I/O?
Both provide support for interrupt virtualization, but AMD’s IOMMU also adds capabilities
that allow secure virtual machine guest operating system access to selected devices.
19