Viteza de RAM dinamică și ideea ridicolă de creștere a acesteia

Un pic de istorie

La începutul tehnologiei computerelor, memoria dinamică era destul de activă pe frecvența procesorului. Prima mea experiență cu calculatoarele a fost legată de clona calculatorului "ZX Spectrum". Procesorul Z80 a efectuat procesarea instrucțiunilor în medie 4 cicluri per operație, cu două cicluri utilizate pentru regenerarea dinamică a memoriei, care ne dă la o frecvență de 3,5 MHz, nu mai mult de 875,000 operațiuni pe secundă.







Cu toate acestea, după un timp, frecvențele procesorului au atins un nivel în care memoria dinamică nu mai putea face față sarcinii. Pentru a compensa acest lucru, a fost introdus un link intermediar sub forma unei memorii cache, ceea ce a făcut posibil ca, datorită operațiilor efectuate pe o cantitate mică de date, să se ajusteze diferența de viteză a procesorului și a memoriei principale.

Să ne uităm la ceea ce este acum memoria RAM a calculatorului și ce se poate face pentru a crește viteza sistemului informatic.

Pe scurt despre memoria statică și dinamică

Celula memoriei statice este construită pe baza unui declanșator, care este situat, de obicei, într-una din stările stabile "A" sau "B" (A =! B). Numărul minim de tranzistoare pentru o celulă este de 6 bucăți, în timp ce complexitatea traseului din celule aparent nu permite realizarea de module statice de memorie în 1 concert, la prețul unui modul convențional de 8 gig.

O celulă de memorie dinamică constă dintr-un condensator responsabil pentru stocarea informațiilor și un tranzistor responsabil pentru izolarea condensatorului din magistrala de date. Atunci când se utilizează acest condensator ca electrolit nu este montat, iar capacitance parazitare p-n tranziția între „substrat“ și electrod tranzistor (în mod specific pentru acest scop a crescut, de obicei, încearcă să scape de ea). Dezavantajul este curentul de scurgere a condensatorului (atât în ​​sine, cât și în tranzistorul cheie) la care este foarte dificil de a scăpa de, în plus, odată cu creșterea temperaturii implică faptul că aceasta crește probabilitatea de denaturare a informațiilor stocate. Pentru a susține fiabilitatea, memoria dinamică utilizează "regenerarea", constă în actualizarea periodică a informațiilor stocate cel puțin o perioadă specificată în care informațiile păstrează o valoare fiabilă. Perioada de regenerare tipică este de 8 ms, în timp ce mai multe informații pot fi actualizate mai rar, nu este recomandată.

În alte privințe, principiul funcționării este identic și constă în următoarele:

- selectarea inițială a liniei de memorie are ca rezultat accesul la întregul conținut plasat în șirul de buffer-e cu care se desfășoară lucrările ulterioare sau multiplexează accesul la coloane (abordare veche, lentă);
- datele solicitate sunt transmise către dispozitivul gazdă (de obicei, CPU), sau este modificat set de celule atunci când o operație de scriere (există o mică diferență, modificarea directă a celulei rândul selectat disponibil pentru memorie statică este modificată linie tampon pentru o memorie dinamică, și numai apoi se efectuează writeback conținutul întregii linii într-o buclă specială);
- închiderea și schimbarea liniilor de memorie, astfel încât același lucru este diferit pentru diferite tipuri de memorie, pentru capacitatea statică de a schimba instantaneu șirul în cazul în care datele nu se modifică, este necesar să se tampon conținutul șir de caractere dinamice de memorie necesară pentru a înregistra în loc, și numai atunci, puteți alege o altă linie.

Dacă la începutul tehnologiei computerelor fiecare operație de citire sau scriere sa încheiat cu un ciclu complet de memorie:

- selectarea liniei;
- operațiunea de citire / scriere din celulă;
- Schimbați / re-selectați linia.

Operațiunea modernă cu jetoanele de "memorie sincronă a la DDRX" este după cum urmează:

- selectarea liniei;
- operațiuni de citire / scriere a celulelor unei linii în grupuri de 4-8 biți / cuvinte (este permis accesul multiplu într-o singură linie);
- închiderea liniei cu introducerea informațiilor în loc;
- Schimbați / re-selectați linia.

Această soluție a salvat timpul de acces la date când după citirea valorii din celula "1" este necesară accesarea celulelor "2, 3, 4 sau 7" aflate pe aceeași linie sau imediat după operația de citire, este necesară scrierea valorii modificate .

Este necesar să rețineți că memoria DDR are două frecvențe:

- frecvența de bază a ceasului care determină viteza de transmisie a comenzii și de sincronizare;
- Frecvența efectivă a transmisiei de date (de două ori frecvența ceasului, care este marcată cu module de memorie).

Integrarea controlerului de memorie a sporit performanța subsistemului de memorie prin eliminarea legăturii de transmisie intermediare. Cresterea canalelor de memorie va trebui sa ia in considerare acest aspect din partea aplicatiei, de exemplu, modul cu patru canale cu anumite locatii de fisiere nu creste performanta (12 si 14 configuratii).


Procesarea unui element dintr-o listă legată cu pași diferiți (1 pas = 16 octeți)

Acum un pic de matematică

Procesor: frecvențele de operare ale procesoarelor ating acum 5 GHz. Potrivit producătorilor, soluțiile de circuit (conducte, predicții și alte trucuri) permit o instrucțiune per ceas. Pentru a încheia calculele, să luăm frecvența ceasului la 4 GHz, ceea ce ne va da o operație de 0,25 ns.

RAM: să luăm de exemplu memoria RAM a noului format DDR4-2133 cu un timp de 15-15-15.

procesor
Contact = 4 GHz
Ttakt = 0,25 ns (concomitent „condiționat“ timp de execuție funcționare a unuia)

Memorie DDR4-2133
Contact = 1066 MHz
Fdata = 2133 MHz
tact = 0,94 ns
tdata = 0,47 ns
SPDmax = 2133 MHz * 64 = 17064 MB / s (rata de transfer a datelor)
tRCmin = 50 ns (timpul minim între două activări de linie)

Ora de achiziție de date

Din registre și cache, datele pot fi furnizate în timpul ciclului de lucru (registre, nivel 1 cache) sau cu o întârziere de mai multe cicluri de ceas pentru memoria cache de nivelul 2 și 3.







Pentru RAM, situația este mai gravă:

- timpul de selectare a liniei este: 15 clk * 0,94 ns = 14 ns
- timp pentru recuperarea datelor din comanda de selectare a coloanei: 15 clk * 0,94 ns = 14 ns
- timpul de închidere al liniei: 15 clk * 0,94 ns = 14 ns (care ar fi crezut)

Din aceasta rezultă că timpul dintre comanda care solicită date din locația de memorie (în cazul în care cache-ul nu este inclus) poate varia:

14 ns - datele sunt în linia selectată;
28 ns - datele sunt într-un rând neselectat, cu condiția ca linia anterioară să fie deja închisă (bloc în starea "inactiv");
42-50 ns - este într-o altă linie, cu linia curentă trebuie să fie închis.

Numărul de operațiuni care pot fi efectuate (procesorul menționat mai sus) în acest timp este de la 56 (14 ns) până la 200 (50 ns schimbare linie). Separat de remarcat faptul că intervalul de timp dintre comanda de selecție coloana și primirea întregul pachet de date este adăugat la pachetul de biți linia de memorie cache de întârziere de încărcare 8 * 0,47 ns = 3.76 ns. Pentru situația în care va fi disponibil pentru „programul“ date numai după încărcarea liniei cache (care știe că, indiferent dezvoltatorii tactat procesoare, caietul de sarcini de memorie vă permite să dea datele necesare în prealabil), obținem o altă până la 15 și ciclurile pierdute.

Într-o lucrare, am realizat un studiu de viteza de memorie, rezultatele au arătat că un sistem complet „eliminate“ lățime de bandă de memorie este posibilă numai în diagrama de acces la memorie în cazul accesului aleatoriu mărește timpul de procesare (de exemplu, o listă legată de indicii pe 32 de biți și trei cuvinte duble, dintre care unul este actualizat) de la 4-10 (acces serial) la 60-120 ns (schimbare linie), ceea ce oferă o diferență de viteză de procesare de 12-15 ori.

Viteza de procesare a datelor

Pentru modulul selectat avem o lățime de bandă de vârf de 17064 MB / s. Aceasta pentru o frecvență de 4 GHz face posibilă procesarea cuvintelor pe 32 de biți pe ceas (17064 Mb / 4000 MHz = 4,266 octeți pe ceas). Aici sunt impuse următoarele restricții:

- Fără programarea explicită a încărcării în cache, procesorul va fi forțat să stea în așteptare (cu cât frecvența este mai mare, cu atât nucleul așteaptă pur și simplu datele);
- în ciclurile "citiți înregistrarea modificărilor" viteza de procesare este redusă la jumătate;
- procesoare multicore partaja autobuz lățime de bandă de memorie nuclee, și pentru situația în care există cereri concurente (caz degenerat), performanța de memorie poate deteriora în „de 200 de ori (rânduri schimba) * X miezuri“.

17064 MB / s / 8 nuclee = 2133 MB / s pe nucleu în cazul optim.
17064 MB / s / (8 nuclee * 200 operații pierdute) = 10 MB / s pe nucleu pentru cazul degenerat.

În traducere pentru operațiuni, obținem pentru procesor cu 8 nuclee: de la 15 la 400 de operații pentru procesarea unui octet de date sau de la 60 la 1600 de operații / cicluri pentru a procesa un cuvânt pe 32 de biți.

În opinia mea, încet cumva. În comparație cu memoria DDR3-1333 9-9-9, unde timpul întregului ciclu este de aproximativ 50 ns, dar calendarul diferă:

- timpul de acces la date este redus la 13,5 ns (1,5 ns * 9 cicluri);
- timpul de transmisie al unui pachet de opt cuvinte de 6 ns (0,75 * 8 în loc de 3,75 ns) și cu acces aleatoriu la memorie, diferența în rata de transfer a datelor dispare practic;
- viteza maximă va fi de 10 664 MB / s.

Nu prea departe. Situația este puțin salvată de prezența "băncilor" în modulele de memorie. Fiecare „bancă“ este un tabel de memorie separat, la care pot fi tratate separat, ceea ce face posibil să se înlocuiască un rând într-o singură bancă în timp ce există o citire / scriere a datelor dintr-un șir de alta, prin reducerea timpului de inactivitate permite „scor“ date glob ocular de schimb de autobuz în condiții optimizate.

De fapt, am ajuns la idei ridicole

Tabelul de memorie conține un număr specificat de coloane, egal cu 512, 1024, 2048 biți. Având în vedere durata ciclului liniilor de activare de 50 ns, obținem potențiale rate de date: "1 / 0.00000005 * cu 512 coloane * 64 biți cuvânt = 81 920 MB / s", în loc de curent 17 064 MB / s (163 840, și 327 680 MB / s pentru rândurile de coloane 1024 și 2048). Spune, „o singură dată în 5 (4.8) rapid“, la care am răspuns: „Aceasta este rata de schimb, atunci când toate cererile concurente sunt adresate aceleiași bănci de memorie, precum și posibilitatea de a crește lățimea de bandă disponibilă proporțional cu numărul de bănci și o creștere a lungimii fiecărui rând al tabelului (va necesita o crestere a lungimii liniei de operare), care, la randul sau, se bazeaza in special pe schimbul de viteze al magistralei. "

Schimbarea modului de schimb de date va necesita transferul tuturor conținutului liniei cache nivelul inferior, care este necesar să se împartă nivelurile cache, nu numai în viteză, dar, de asemenea, pe dimensiunea liniei cache. De exemplu, a realizat „lungimea“ linia cache N-lea nivel (coloană 512 * 64 dimensiune cuvânt) 32768 biți, putem prin reducerea numărului de operații de comparare pentru a crește numărul total de linii cache și în mod corespunzător crește domeniul de aplicare maxim al acestora. Dar, dacă faci un autobuz paralel în cache-ul de această dimensiune, putem obține o reducere a frecvenței de funcționare, din care este posibil să se aplice o altă organizații abordare cache, dacă vă rupe spus «Jumbo» -Row blocuri cache de-a lungul lungimii liniei de cache superioară și să facă schimb de porțiuni mici de ea Se va menține funcționarea frecvență împărțirea accesului la întârziere etapele: căutarea liniei cache, precum și o probă de „cuvintele“ dorite în șirul de potrivire.

În ceea ce privește schimbul direct între memoria cache și memoria principală: este necesar să se transfere date cu rata de acces la liniile unei singure bănci sau cu o anumită rezervă pentru distribuirea cererilor către diferite bănci. În plus, există o dificultate cu timpul de acces la liniile de date plasate în diferite domenii, pentru transmisia serială, în plus față de întârzierea inițială asociată cu linia de eșantionare, o întârziere de transmitere a datelor depinde de numărul de „pachet“ de date, precum și rata de transmisie. Chiar și abordarea rambus nu poate face față încărcării crescute. Situația ar putea salva tranziția către o magistrală serială (pentru diferential), ca urmare a reducerii în continuare a bit de date, putem crește viteza de transfer I pentru a reduce timpul între transmiterea primul și ultimul bit de date, se aplică transmisia linie despărțitoare pe mai multe canale. Aceasta va permite utilizarea unei frecvențe mai joase a unui canal.

Să estimăm viteza unui astfel de canal:

1 / 0.00000005 ns = 20 MHz (frecvența modificării liniei într-un singur bloc)
20 MHz * 32,768 de biți = 655,360 Mbps
Pentru transmisia diferențială cu aceeași dimensiune a magistralei de date, obținem:
655 360 Mbit / s / 32 canale = 20 480 Mbit / s pe canal.

Această viteză este acceptabil pentru semnalul electric (10 Gb / s semnal cu sincronizare încorporat 15 metri disponibile, 20 Gbit / s cu ceasul extern de 1 metru nu stăpânesc de ce și), dar necesară în continuare creșterea ratei de transmisie pentru a reduce întârzierea de transmisie între primul și ultimul bit de informație poate fi necesară o creștere a capacității, cu posibilitatea de a integra canalul de transmisie optică, dar este o întrebare pentru circuitele, nu am multă experiență cu astfel de frecvențe.

și apoi a fost suportată de Ostap

Schimbarea conceptului de cache de proiecție în memoria principală pentru a utiliza „memoria principală ca o memorie de bloc ultrarapid intermediar“ se va deplasa datele de încărcare predicție din circuitele controlerului cu algoritmul de procesare (și deci este mai bine să știe unde lomanetsya după un timp, în mod clar nu controler de memorie), care rândul său, va crește cantitatea de memorie cache de nivel extern, fără a sacrifica performanța.

Dacă mergem mai departe, putem schimba în plus conceptul de orientare a arhitecturii procesoarelor cu "schimbarea contextului dispozitivului executiv" în "mediul de lucru al programului". O astfel de schimbare poate îmbunătăți semnificativ securitatea codului prin definirea programului ca un set de funcții cu punctele de intrare specificate ale procedurilor individuale, locația de date disponibilă pentru procesare și capacitatea de a controla capacitatea de a apela o funcție din alte procese. O astfel de schimbare ar permite, de asemenea, o utilizare mai eficientă a procesoarelor multi-core prin eliminarea context de comutare pentru fluxurile de piese și pentru procesarea evenimentelor folosesc un fir separat în cadrul „procesului“ de mediu disponibile, care va permite o utilizare mai eficientă a sistemelor 100+ nucleare.

P.S. Utilizarea accidentală a mărcilor înregistrate sau a brevetelor este incidentală. Toate ideile originale sunt disponibile pentru utilizare în baza acordului de licență "anthill".







Trimiteți-le prietenilor: