Acasă Copaci și arbuști Miezuri și fire ale microprocesoarelor moderne. Anexa B. Schema de interacțiune între motor și sisteme

Miezuri și fire ale microprocesoarelor moderne. Anexa B. Schema de interacțiune între motor și sisteme

  • tutorial

În acest articol, voi încerca să descriu terminologia folosită pentru a descrie sisteme capabile să execute mai multe programe în paralel, adică multi-core, multi-procesor, multi-threaded. Tipuri diferite paralelismul în procesorul IA-32 a apărut în timp diferitși într-o ordine oarecum inconsecventă. Este ușor să fii confuz în toate acestea, mai ales având în vedere că sistemele de operare au grijă să ascundă detaliile din programele de aplicații mai puțin sofisticate.

Scopul articolului este de a arăta că, cu toată varietatea de configurații posibile ale sistemelor multiprocesor, multi-core și multi-threaded pentru programele care rulează pe acestea, sunt create oportunități atât pentru abstracție (ignorând diferențele), cât și pentru luarea în considerare a specificului ( capacitatea de a învăța programatic configurația).

Avertisment despre semne ®, ™, în articol

Al meu explică de ce angajații companiei ar trebui să folosească mărcile de drepturi de autor în comunicațiile publice. În acest articol, acestea trebuiau folosite destul de des.

CPU

Desigur, termenul cel mai vechi, cel mai des folosit și ambiguu este „procesor”.

În lumea modernă, un procesor este ceea ce cumpărăm într-o cutie frumoasă de vânzare cu amănuntul sau într-un pachet OEM nu prea frumos. O entitate indivizibilă introdusă într-o priză de pe o placă de bază. Chiar dacă nu există conector și nu poate fi îndepărtat, adică dacă este lipit strâns, acesta este un cip.

Sistemele mobile (telefoane, tablete, laptopuri) și majoritatea desktop-urilor au un singur procesor. Stațiile de lucru și serverele au uneori două sau mai multe procesoare pe aceeași placă de bază.

Suport multiplu CPU-uriîntr-un sistem necesită numeroase modificări în designul său. Cel puțin, este necesar să se asigure conexiunea fizică a acestora (prevăzuți mai multe prize pe placa de bază), să rezolvați problemele de identificare a procesoarelor (a se vedea mai târziu în acest articol, precum și nota mea), coordonarea acceselor la memorie și furnizarea de întreruperi (cel controlerul de întrerupere trebuie să poată direcționa întreruperile către mai multe procesoare) și, desigur, suport din partea sistemului de operare. Din păcate, nu am putut găsi o mențiune documentată a momentului în care a fost creat primul sistem multiprocesor pe procesoare Intel, dar Wikipedia susține că Sequent Computer Systems le-a furnizat deja în 1987 folosind procesoare Intel 80386. Suportul larg răspândit pentru mai multe cipuri într-un singur sistem devine disponibil. începând cu Intel® Pentium.

Dacă există mai multe procesoare, atunci fiecare dintre ele are propriul conector pe placă. În același timp, fiecare dintre ele are copii complete independente ale tuturor resurselor, cum ar fi registre, dispozitive de execuție, cache. Ei au o memorie comună - RAM. Memoria poate fi conectată la ele în diverse și destul de multe în moduri non-triviale, dar asta poveste separată care este în afara domeniului de aplicare al acestui articol. Important este că, în orice caz, programele executabile trebuie să creeze iluzia unei memorie partajată omogenă, accesibilă de la toate procesoarele din sistem.


Gata de decolare! Placă pentru desktop Intel® D5400XS

Nucleu

Din punct de vedere istoric, multi-core în Intel IA-32 a apărut mai târziu decât Intel® HyperThreading, dar urmează în ierarhia logică.

S-ar părea că dacă sistemul mai multe procesoare, atunci performanța sa este mai mare (la sarcini care pot folosi toate resursele). Cu toate acestea, dacă costul comunicațiilor dintre ele este prea mare, atunci tot câștigul din paralelism este ucis de întârzierile mari în transferul de date comune. Este exact ceea ce se observă în sistemele multiprocesor - atât fizic, cât și logic, sunt foarte departe unul de celălalt. Pentru a comunica eficient în astfel de condiții, trebuie inventate autobuze specializate, cum ar fi Intel® QuickPath Interconnect. Consumul de energie, dimensiunea și prețul soluției finale, desigur, nu scad din toate acestea. Integrarea ridicată a componentelor ar trebui să vină în ajutor - circuitele care execută părți ale unui program paralel ar trebui să fie târâte mai aproape unele de altele, de preferință pe un singur cip. Cu alte cuvinte, un procesor ar trebui să organizeze mai multe nuclee, identice între ele în toate, dar lucrând independent.

Primele procesoare multi-core IA-32 de la Intel au fost introduse în 2005. De atunci, numărul mediu de nuclee de pe server, desktop și acum platforme mobile este în creștere constantă.

Spre deosebire de două procesoare cu un singur nucleu din același sistem, care împart doar memoria, două nuclee pot partaja, de asemenea, cache-urile și alte resurse responsabile de interacțiunea cu memoria. Cel mai adesea, cache-urile primului nivel rămân private (fiecare nucleu are propriul său), în timp ce al doilea și al treilea nivel pot fi fie partajate, fie separate. Această organizare a sistemului reduce întârzierea în livrarea datelor între nucleele vecine, mai ales dacă lucrează la o sarcină comună.


O micrografie a unui procesor Intel quad-core cu numele de cod Nehalem. Sunt evidențiate nuclee separate, un cache L3 partajat, precum și legături QPI către alte procesoare și un controler de memorie partajat.

hiperthread

Până în jurul anului 2002, singura modalitate de a obține un sistem IA-32 capabil să execute două sau mai multe programe în paralel a fost să folosești sistemele multiprocesor în mod specific. Intel® Pentium® 4, precum și linia Xeon, cu numele de cod Foster (Netburst), au introdus o nouă tehnologie - hyperthreading sau hyperthreading - Intel® HyperThreading (denumit în continuare HT).

Nu este nimic nou sub soare. HT este un caz special a ceea ce este denumit în literatură simultaneous multithreading (SMT). Spre deosebire de nucleele „reale”, care sunt copii complete și independente, în cazul HT, doar o parte din nodurile interne sunt duplicate într-un singur procesor, responsabil în primul rând de stocarea stării arhitecturale - registre. Nodurile executive responsabile de organizarea și prelucrarea datelor rămân la singular și sunt folosite în orice moment de cel mult unul dintre fire. La fel ca nucleele, hyperthread-urile partajează cache-urile între ele, dar începând de la ce nivel depinde de sistemul specific.

Nu voi încerca să explic toate avantajele și dezavantajele modelelor SMT în general și ale modelelor HT în special. Cititorul interesat poate găsi o discuție destul de detaliată despre tehnologie în multe surse și, desigur, Wikipedia. Cu toate acestea, notez următoarele punct important, explicând limitele actuale ale numărului de hyperthreading-uri în producția reală.

Limitele firelor
În ce cazuri este justificată prezența multi-corelor „necinstite” sub formă de HT? Dacă un fir de execuție nu poate încărca toate nodurile de execuție din interiorul nucleului, atunci acestea pot fi „împrumutate” unui alt fir. Acest lucru este tipic pentru aplicațiile care au un „gât de sticlă” nu în calcule, ci în accesul la date, adică generează adesea erori de cache și trebuie să aștepte ca datele să fie livrate din memorie. În acest timp, nucleul fără HT va fi forțat să rămână inactiv. Prezența HT vă permite să comutați rapid nodurile de execuție gratuite la o altă stare arhitecturală (pentru că este doar duplicat) și să executați instrucțiunile acestuia. Acesta este un caz special al unui truc numit ascunderea latenței, atunci când o operație lungă, în timpul căreia resurse utile inactiv, mascat de executarea paralelă a altor sarcini. Dacă aplicația are deja un grad înalt utilizarea resurselor kernel-ului, prezența hyperthreading-ului nu vă va permite să obțineți accelerare - aici aveți nevoie de nuclee „cinstite”.

Scenarii tipice pentru aplicații desktop și server concepute pentru arhitecturi de mașini scop general, au potențialul de paralelism implementat cu HT. Cu toate acestea, acest potențial este rapid „utilizat”. Poate din acest motiv, pe aproape toate procesoarele IA-32, numărul de hyperthread-uri hardware nu depășește două. În scenariile tipice, câștigul din utilizarea a trei sau mai multe hyperthreading-uri ar fi mic, dar pierderea în dimensiunea matriței, consumul de energie și costul este semnificativă.

O altă situație se observă în sarcinile tipice efectuate pe acceleratoare video. Prin urmare, aceste arhitecturi se caracterizează prin utilizarea tehnologiei SMT cu un număr mai mare de fire. Deoarece coprocesoarele Intel® Xeon Phi (introduse în 2010) sunt destul de apropiate din punct de vedere ideologic și genealogic de plăcile video, acestea pot avea patru hyperthreading pe fiecare nucleu - o configurație unică pentru IA-32.

procesor logic

Dintre cele trei „niveluri” de paralelism descrise (procesoare, nuclee, hyperthreading-uri), unele sau chiar toate pot lipsi într-un anumit sistem. Acest lucru este afectat de setările BIOS (multi-core și multi-threading sunt dezactivate independent), microarhitectură (de exemplu, HT a fost absent din Intel® Core™ Duo, dar a fost adus înapoi odată cu lansarea Nehalem) și evenimente de sistem ( serverele multiprocesor pot închide procesoarele eșuate în cazul unor defecțiuni și pot continua să „zboare” pe cele rămase). Cum este această grădină zoologică multistratificată de concurență vizibilă pentru sistemul de operare și, în cele din urmă, pentru aplicații?

În plus, pentru comoditate, notăm numărul de procesoare, nuclee și fire de execuție dintr-un sistem cu un triplu ( X, y, z), Unde X este numărul de procesoare y este numărul de nuclee din fiecare procesor și z este numărul de hyperthreads din fiecare miez. În continuare, mă voi referi la acest trio topologie- un termen consacrat care are prea puţin de-a face cu secţiunea de matematică. Muncă p = xyz definește numărul de entități numite procesoare logice sisteme. Acesta definește numărul total de contexte independente de proces de aplicație într-un sistem cu memorie partajată care se execută în paralel și pe care sistemul de operare trebuie să le ia în considerare. Spun „forțat” pentru că nu poate controla ordinea de execuție a două procese care sunt pe procesoare logice diferite. Acest lucru este valabil și pentru hyperthread-urile: deși rulează „secvențial” pe același nucleu, ordinea specifică este dictată de hardware și nu este vizibilă sau controlată de programe.

Cel mai adesea, sistemul de operare ascunde de aplicațiile finale caracteristicile topologiei fizice a sistemului pe care rulează. De exemplu, următoarele trei topologii: (2, 1, 1), (1, 2, 1) și (1, 1, 2) - sistemul de operare va fi reprezentat ca două procesoare logice, deși primul dintre ele are două procesoare , al doilea are două nuclee, iar al treilea este doar două fire.


Windows Task Manager arată 8 procesoare logice; dar cât este asta în procesoare, nuclee și hyperthread-uri?


Linux de sus arată 4 procesoare logice.

Acest lucru este destul de convenabil pentru creatorii de aplicații aplicate - nu trebuie să se ocupe de caracteristici hardware care sunt adesea nesemnificative pentru ei.

Definiția software a topologiei

Desigur, abstracția topologiei într-un singur număr de procesoare logice în unele cazuri creează suficiente motive pentru confuzie și neînțelegere (în dispute aprinse pe internet). Aplicațiile de calcul care doresc să obțină cea mai mare performanță din hardware necesită un control fin asupra locului în care vor fi plasate firele lor: mai apropiate unele de altele pe hyperthread-urile adiacente sau invers, mai departe pe diferite procesoare. Viteza de comunicare între procesoarele logice din același nucleu sau procesor este mult mai mare decât viteza de transfer de date între procesoare. Posibilitatea de eterogenitate în organizație memorie cu acces aleator complică și imaginea.

Informațiile despre topologia sistemului în ansamblu, precum și poziția fiecărui procesor logic în IA-32, sunt disponibile folosind instrucțiunea CPUID. De la apariția primelor sisteme multiprocesor, schema de identificare a procesorului logic a fost extinsă de mai multe ori. Până în prezent, părți din acesta sunt conținute în foile 1, 4 și 11 ale CPUID. Care dintre foile de urmărit poate fi determinată din următoarea diagramă bloc, preluată din articol:

Nu mă voi plictisi aici cu toate detaliile părților individuale ale acestui algoritm. Dacă există interes, atunci următoarea parte a acestui articol poate fi dedicată acestui lucru. Mă voi referi la cititorul interesat, în care această problemă este analizată cât mai detaliat. Aici voi descrie mai întâi pe scurt ce este APIC și cum se leagă de topologie. Apoi luați în considerare lucrul cu foaia 0xB (unsprezece în zecimală), care este activată acest moment este ultimul cuvantîn Apicoconstruction.

ID APIC
Local APIC (controller de întrerupere programabil avansat) este un dispozitiv (acum parte a procesorului) responsabil pentru lucrul cu întreruperile care vin la un anumit procesor logic. Fiecare procesor logic are propriul său APIC. Și fiecare dintre ele din sistem trebuie să aibă o valoare unică APIC ID. Acest număr este folosit de controlorii de întrerupere pentru adresarea la livrarea mesajelor și de către toți ceilalți (cum ar fi sistemul de operare) pentru a identifica procesoarele logice. Specificația pentru acest controler de întrerupere a evoluat de la Intel 8259 PIC prin Dual PIC, APIC și xAPIC la x2APIC.

În acest moment, lățimea numărului stocat în ID-ul APIC a atins cei 32 de biți, deși în trecut era limitată la 16, și chiar mai devreme la doar 8 biți. Astăzi, rămășițele din vremurile vechi sunt împrăștiate pe tot CPUID-ul, dar toți cei 32 de biți ai ID-ului APIC sunt returnați în CPUID.0xB.EDX. Fiecare procesor logic care execută independent instrucțiunea CPUID va returna o valoare diferită.

Clarificarea legăturilor de familie
Valoarea ID-ului APIC nu spune nimic despre topologie. Pentru a afla care două procesoare logice se află în interiorul aceluiași procesor fizic (adică sunt „frații” de hyperthreads), care două sunt în interiorul aceluiași procesor și care sunt procesoare complet diferite, trebuie să comparați valorile lor APIC ID. În funcție de gradul de relație, unele dintre părțile lor se vor potrivi. Aceste informații sunt conținute în sublistele CPUID.0xB, care sunt codificate cu un operand în ECX. Fiecare dintre ele descrie poziția câmpului de biți al unuia dintre nivelurile de topologie din EAX (mai precis, numărul de biți care trebuie mutați în ID-ul APIC la dreapta pentru a elimina nivelurile inferioare ale topologiei), precum și ca tipul acestui nivel - hyperthread, nucleu sau procesor - în ECX.

Procesoarele logice din același nucleu se vor potrivi cu toți biții ID APIC, cu excepția celor din câmpul SMT. Pentru procesoarele logice care se află în același procesor, toți biții, cu excepția câmpurilor Core și SMT. Deoarece numărul de subfoi pentru CPUID.0xB poate crește, această schemă va permite susținerea descrierii topologiilor cu un număr mai mare de niveluri, dacă va fi nevoie în viitor. Mai mult, se va putea intra niveluri intermediareîntre cele existente.

O consecință importantă a organizării acestei scheme este că în setul tuturor ID-urilor APIC ale tuturor procesoarelor logice ale sistemului pot exista „găuri”, adică. nu vor merge secvenţial. De exemplu, într-un procesor multi-core cu HT dezactivat, toate ID-urile APIC se pot dovedi a fi egale, deoarece bitul cel mai puțin semnificativ responsabil pentru codificarea numărului de hyperthread va fi întotdeauna zero.

Rețineți că CPUID.0xB nu este singura sursă de informații despre procesoarele logice disponibile pentru sistemul de operare. Lista tuturor procesoarelor disponibile, împreună cu valorile lor APIC ID, este codificată în tabelul MADT ACPI.

Sisteme de operare și topologie

Sistemele de operare furnizează informații despre topologia procesorului logic aplicațiilor prin propriile interfețe.

Pe Linux, informațiile de topologie sunt conținute în pseudo-fișierul /proc/cpuinfo, precum și în rezultatul comenzii dmidecode. În exemplul de mai jos, filtrez conținutul cpuinfo pe un sistem quad-core non-HT, lăsând doar intrări legate de topologie:

Text ascuns

[email protected]:~$ cat /proc/cpuinfo |grep "procesor\|physical\ id\|frati\|core\|cores\|apicid" procesor: 0 fizic id: 0 frati: 4 core id: 0 cpu cores: 2 apicid: 0 apicid inițial: 0 procesor: 1 id fizic: 0 frați: 4 id de nucleu: 0 nuclee de procesor: 2 apicid: 1 apicid inițial: 1 procesor: 2 id-ul fizic: 0 frați: 4 id de nucleu: 1 nuclee de procesor: 2 apicid: 2 apicid inițial: 2 procesor: 3 id fizic: 0 frați: 4 id de nucleu: 1 nuclee CPU: 2 apicid: 3 apicid inițial: 3

În FreeBSD, topologia este raportată prin mecanismul sysctl în variabila kern.sched.topology_spec ca XML:

Text ascuns

[email protected]:~$ sysctl kern.sched.topology_spec kern.sched.topology_spec: 0, 1, 2, 3, 4, 5, 6, 7 0, 1, 2, 3, 4, 5, 6, 7 0, 1 grup THREADgrupul SMT 2, 3 grup THREADgrupul SMT 4, 5 grup THREADgrupul SMT 6, 7 grup THREADgrupul SMT

În MS Windows 8, informațiile de topologie pot fi văzute în Managerul de activități.

După ce ne-am ocupat de teoria multithreading-ului, să luăm în considerare un exemplu practic - Pentium 4. Deja în stadiul de dezvoltare a acestui procesor, inginerii Intel au continuat să lucreze la creșterea performanței acestuia fără a aduce modificări interfeței programului. Au fost luate în considerare cinci metode simple:
1. Creșterea frecvenței ceasului.
2. Plasarea a două procesoare pe un cip.
3. Introducerea de noi blocuri funcționale.
1. Prelungirea transportorului.
2. Folosind multithreading.
Cea mai evidentă modalitate de a îmbunătăți performanța este de a crește viteza ceasului fără a modifica alți parametri. De regulă, fiecare model de procesor ulterior are o viteză de ceas puțin mai mare decât precedentul. Din păcate, cu o creștere în linie dreaptă a vitezei de ceas, dezvoltatorii se confruntă cu două probleme: un consum crescut de energie (care este relevant pentru laptopuri și alte dispozitive de calcul care funcționează cu baterii) și supraîncălzire (care necesită radiatoare mai eficiente).
A doua metodă - plasarea a două procesoare pe un cip - este relativ simplă, dar presupune dublarea suprafeței ocupate de cip. Dacă fiecare procesor este prevăzut cu propria sa memorie cache, numărul de cipuri per wafer se reduce la jumătate, dar asta înseamnă și costul de producție de două ori. Dacă ambele procesoare au o memorie cache partajată, se poate evita o creștere semnificativă a spațiului ocupat, dar în acest caz apare o altă problemă - cantitatea de memorie cache per procesor este înjumătățită, iar acest lucru afectează inevitabil performanța. În plus, în timp ce aplicațiile de server profesionale pot profita din plin de resursele mai multor procesoare, convenționale programe desktop paralelismul intern este dezvoltat într-o măsură mult mai mică.
Introducerea de noi blocuri funcționale nu este, de asemenea, dificilă, dar este important să găsim un echilibru aici. Ce rost are o duzină de ALU dacă cipul nu poate emite comenzi către conductă la o rată care să poată încărca toate acele blocuri?
O conductă cu un număr crescut de etape, capabilă să împartă sarcinile în segmente mai mici și să le proceseze în perioade scurte de timp, pe de o parte, îmbunătățește performanța, pe de altă parte, crește consecințele negative ale previziunii greșite a tranzițiilor, ratelor de cache, întreruperi și alte evenimente care perturbă procesarea normală a instrucțiunilor de curs în procesor. În plus, pentru a realiza pe deplin capacitățile conductei extinse, este necesară creșterea frecvenței de ceas, iar acest lucru, după cum știm, duce la un consum crescut de energie și la disiparea căldurii.
În cele din urmă, puteți implementa multithreading. Avantajul acestei tehnologii este că introduce un fir software suplimentar care permite folosirea resurselor hardware care altfel ar fi inactive. Pe baza rezultatelor studiilor experimentale, dezvoltatorii Intel au descoperit că o creștere cu 5% a suprafeței cipului atunci când se implementează multithreading pentru multe aplicații oferă o creștere a performanței de 25%. Primul procesor Intel multi-threaded a fost Xeon din 2002. Ulterior, începând cu 3,06 GHz, multithreading-ul a fost introdus în linia Pentium 4. Intel numește implementarea multithreading-ului în hyperthreading-ul Pentium 4.
Principiul principal al hyperthreading-ului este executarea simultană a două fire de execuție de program (sau procese - procesorul nu face distincție între procese și fire de execuție). Sistemul de operare tratează procesorul Pentium 4 hyper-threaded ca pe un complex cu două procesoare cu cache partajate și memorie principală. Sistemul de operare efectuează planificarea pentru fiecare fir de program separat. Astfel, două aplicații pot rula în același timp. De exemplu, program de mail poate trimite sau primi mesaje în fundal în timp ce utilizatorul interacționează cu aplicație interactivă- adică demonul și programul utilizator rulează simultan, de parcă două procesoare ar fi disponibile pentru sistem.
Programele de aplicație capabile să se execute în mai multe fire pot folosi atât „procesoare virtuale”. De exemplu, programele de editare video permit utilizatorilor să aplice filtre pentru toate cadrele. Astfel de filtre corectează luminozitatea, contrastul, echilibrul de culoare și alte proprietăți ale cadrelor. Într-o astfel de situație, programul poate atribui unui procesor virtual să proceseze cadrele pare, iar altul să proceseze cadrele impare. În acest caz, cele două procesoare vor funcționa complet independent unul de celălalt.
Deoarece firele de execuție software accesează aceleași resurse hardware, este necesară coordonarea acestor fire. În contextul hyperthreading-ului, dezvoltatorii Intel au identificat patru strategii utile de gestionare a partajării resurselor: duplicarea resurselor și partajarea hard, threshold și completă a resurselor. Să aruncăm o privire asupra acestor strategii.
Să începem cu duplicarea resurselor. După cum știți, unele resurse sunt duplicate pentru a organiza fluxurile de programe. De exemplu, deoarece fiecare fir de program are nevoie de control individual, este necesar un al doilea contor de program. În plus, este necesară introducerea unui al doilea tabel pentru maparea registrelor arhitecturale (EAX, EBX etc.) la registrele fizice; în mod similar, controlerul de întrerupere este duplicat, deoarece gestionarea întreruperilor pentru fiecare fir se face individual.
Aceasta este urmată de o tehnică de partiţionare solidă a resurselor (partajarea resurselor partiţionate) între firele de execuţie a programului. De exemplu, dacă procesorul are o coadă între două etape funcționale ale conductei, atunci jumătate din sloturi pot fi date firului 1, cealaltă jumătate a firului 2. Partajarea resurselor este ușor de implementat, nu duce la dezechilibru și oferă deplină independență programul curge unul de la celălalt. Odată cu separarea completă a tuturor resurselor, un procesor se transformă de fapt în două. Pe de altă parte, poate apărea o situație în care un fir de execuție de program nu utilizează resurse care ar putea fi utile celui de-al doilea fir, dar pentru care nu are drepturi de acces. Ca urmare, resursele care ar putea fi utilizate altfel sunt inactive.
Opusul partajării dure este partajarea completă a resurselor. În această schemă, resursele dorite pot fi accesate de orice fir de program și sunt deservite în ordinea în care sunt primite cererile de acces. Să considerăm o situație în care un flux rapid, constând în principal din operații de adunare și scădere, coexistă cu un flux lent, care implementează operații de înmulțire și împărțire. Dacă instrucțiunile sunt apelate din memorie mai repede decât sunt efectuate operațiunile de înmulțire și împărțire, numărul de instrucțiuni apelate în firul lent și puse în coadă pe conductă va crește treptat. În cele din urmă, aceste comenzi vor umple coada, ca urmare, fluxul rapid se va opri din cauza lipsei de spațiu în el. Separarea completă a resurselor rezolvă problema cheltuielilor suboptime resurse comune, dar creează un dezechilibru în consumul lor - un fir poate încetini sau opri altul.
Schema intermediară este implementată în cadrul partajării resurselor de prag. Conform acestei scheme, orice fir de program poate primi dinamic o anumită cantitate (limitată) de resurse. Când este aplicată resurselor replicate, această abordare oferă flexibilitate fără amenințarea ca unul dintre firele de execuție a programului să fie inactiv din cauza incapacității de a obține resurse. Dacă, de exemplu, fiecăreia dintre fire i se interzice să ocupe mai mult de 3/4 din coada de comenzi, consumul crescut de resurse de către firul lent nu va interfera cu execuția celui rapid.
Modelul de hyperthreading al Pentium 4 integrează diferite strategii de partajare a resurselor. Astfel, se încearcă rezolvarea tuturor problemelor asociate fiecărei strategii. Duplicarea este implementată în ceea ce privește resursele la care ambele fire de execuție au nevoie constant de acces (în special, în ceea ce privește contorul de programe, tabelul de mapare a registrului și controlerul de întreruperi). Dublarea acestor resurse crește aria microcircuitului cu doar 5% - veți fi de acord că este un preț destul de rezonabil pentru multithreading. Resursele care sunt disponibile într-un astfel de volum încât este practic imposibil ca acestea să fie capturate de un singur fir (de exemplu, linii cache) sunt alocate dinamic. Accesul la resursele care controlează funcționarea conductei (în special, numeroasele sale cozi) este împărțit - fiecărui fir de program i se acordă jumătate din sloturi. Conducta principală a arhitecturii Netburst implementată în Pentium 4 este prezentată în Fig. 8,7; zonele albe și gri din această ilustrație reprezintă mecanismul de alocare a resurselor între firele de execuție albe și gri ale programului.
După cum puteți vedea, toate cozile din această ilustrație sunt împărțite - fiecărui fir de program îi este alocată jumătate din sloturi. Niciun fir nu poate restricționa munca celuilalt. Blocul de distribuție și substituție este de asemenea împărțit. Resursele planificatorului sunt partajate dinamic, dar pe baza unor valori de prag - astfel, niciun fir nu poate ocupa toate sloturile cozii. Pentru toate celelalte etape ale transportorului, există o separare completă.
Cu toate acestea, multithreadingul nu este atât de simplu. Chiar și această tehnică avansată are dezavantajele ei. Partiționarea hard a resurselor nu este asociată cu costuri serioase, dar partiționarea dinamică, în special în ceea ce privește pragurile, necesită monitorizarea consumului de resurse în timpul execuției. În plus, în unele cazuri programele funcționează mult mai bine fără multithreading decât cu acesta. Să presupunem, de exemplu, că dacă există două fire de execuție de program, fiecare dintre ele are nevoie de 3/4 din memoria cache pentru a funcționa corect. Dacă ar fi executate pe rând, fiecare ar funcționa rezonabil de bine cu un număr mic de erori de cache (care sunt cunoscute a fi asociate cu supraîncărcare suplimentară). În cazul execuției paralele, ar exista semnificativ mai multe rateuri de cache pentru fiecare, iar rezultatul final ar fi mai rău decât fără multithreading.
Pentru mai multe informații despre mecanismul multithreading RepPit 4, consultați .

Introducere. Tehnologia informatică se dezvoltă într-un ritm rapid. Dispozitivele de calcul devin din ce în ce mai puternice, mai mici, mai convenabile, dar recent creșterea performanței dispozitivului a devenit problema mare. În 1965, Gordon Moore (unul dintre fondatorii Intel) a ajuns la concluzia că „numărul de tranzistori plasați pe un cip de circuit integrat se dublează la fiecare 24 de luni”.

Primele dezvoltări în domeniul creării de sisteme multiprocesoare au început în anii 70. perioadă lungă de timp performanța procesoarelor obișnuite single-core a fost crescută prin creșterea frecvenței de ceas (până la 80% din performanță a fost determinată doar de frecvența de ceas) cu o creștere simultană a numărului de tranzistori pe un cip. legi fundamentale fizicienii au oprit acest proces: cipurile au început să se supraîncălzească, cel tehnologic a început să se apropie de dimensiunea atomilor de siliciu. Toți acești factori au dus la:

  • curenții de scurgere au crescut, în urma cărora au crescut disiparea căldurii și consumul de energie.
  • Procesorul a devenit mult mai „rapid” decât memoria. Performanța a fost degradată din cauza latenței în accesarea memoriei RAM și încărcarea datelor în cache.
  • există un „gât de sticlă von Neumann”. Înseamnă ineficiența arhitecturii procesorului la executarea unui program.

Sistemele multiprocesor (ca una dintre modalitățile de a rezolva problema) nu au fost utilizate pe scară largă, deoarece necesitau plăci de bază multiprocesoare costisitoare și dificil de fabricat. Pe baza acestui fapt, productivitatea a crescut în alte moduri. Conceptul de multithreading sa dovedit a fi eficient - procesarea simultană a mai multor fluxuri de comenzi.

Tehnologia Hyper-Threading (HTT) sau tehnologia superthreading care permite unui procesor să ruleze mai multe fire de execuție de program pe un singur nucleu. Potrivit multor experți, HTT a devenit condiția prealabilă pentru creare procesoare multi-core. Executarea de către procesor a mai multor fire de execuție în același timp se numește paralelism la nivel de fir (TLP –thread-level parallelism).

Pentru a debloca potențialul unui procesor multi-core, programul executabil trebuie să folosească toate nucleele de calcul, ceea ce nu este întotdeauna realizabil. Programele seriale vechi care ar putea folosi un singur nucleu nu vor mai rula mai repede pe o nouă generație de procesoare, astfel încât programatorii sunt din ce în ce mai implicați în dezvoltarea de noi microprocesoare.

1. Concepte generale

arhitectura in în sens larg este o descriere a unui sistem complex format din mai multe elemente.

În procesul de dezvoltare, structurile semiconductoare (microcircuite) evoluează, prin urmare, principiile construcției procesoarelor, numărul de elemente incluse în compoziția lor, modul în care este organizată interacțiunea lor, sunt în continuă schimbare. Astfel, procesoarele cu aceleași principii de bază de structură sunt de obicei numite procesoare cu aceeași arhitectură. Și aceste principii în sine sunt numite arhitectură procesor (sau microarhitectură).

Microprocesorul (sau procesorul) este componenta principală a unui computer. Procesează informații, execută programe și controlează alte dispozitive din sistem. Puterea procesorului determină cât de repede vor rula programele.

Nucleul este baza oricărui microprocesor. Este format din milioane de tranzistori situati pe un cip de siliciu. Microprocesorul este împărțit în celule speciale, care se numesc registre de uz general (RON). Munca procesorului în general constă în extragerea comenzilor și a datelor din memorie într-o anumită secvență și executarea acestora. În plus, pentru a crește viteza PC-ului, microprocesorul este echipat cu o memorie cache internă. Cache-ul este memoria internă a procesorului folosită ca buffer (pentru a proteja împotriva întreruperilor comunicării cu RAM).

Procesoarele Intel utilizate în PC-urile compatibile cu IBM au mai mult de o mie de instrucțiuni și aparțin procesoarelor cu un set de instrucțiuni extins - CISC-processors (CISC - Complex Instruction Set Computing).

1.1 Calcul de înaltă performanță. Paralelism

Ritmul de dezvoltare informatică ușor de urmărit: de la ENIAC (primul computer digital electronic de uz general) cu o performanță de câteva mii de operații pe secundă până la supercomputerul Tianhe-2 (1000 de trilioane de operațiuni în virgulă mobilă pe secundă). Aceasta înseamnă că viteza de calcul a crescut de un trilion de ori în 60 de ani. Crearea de sisteme de calcul de înaltă performanță este una dintre cele mai dificile sarcini științifice și tehnice. În timp ce viteza de calcul mijloace tehnice a crescut de doar câteva milioane de ori, viteza totală a calculului a crescut de un trilion de ori. Acest efect este obținut prin utilizarea paralelismului în toate etapele de calcul. Calculul paralel necesită căutarea unei distribuții raționale a memoriei, modalități fiabile de transfer a informațiilor și coordonarea proceselor de calcul.

1.2 Multiprocesare simetrică

Symmetric Multiprocessing (abreviat SMP) sau simetric multiprocessing este o arhitectură specială a sistemelor multiprocesoare în care mai multe procesoare au acces la o memorie comună. Aceasta este o arhitectură foarte comună, utilizată pe scară largă în ultima vreme.

Când se utilizează SMP, mai multe procesoare lucrează simultan într-un computer, fiecare pe propria sa sarcină. Un sistem SMP cu un sistem de operare de înaltă calitate distribuie rațional sarcinile între procesoare, asigurând o încărcare uniformă pentru fiecare dintre ele. Cu toate acestea, există o problemă cu inversarea memoriei, deoarece chiar și sistemele uniprocesor necesită relativ mare vreme. Astfel, accesul la RAM în SMP are loc secvenţial: mai întâi un procesor, apoi al doilea.

Datorită caracteristicilor de mai sus, sistemele SMP sunt folosite exclusiv în domeniul științific, industrie, afaceri, extrem de rar în birourile de lucru. Pe lângă costul ridicat al implementării hardware, astfel de sisteme necesită un software foarte scump și de înaltă calitate, care asigură executarea sarcinilor cu mai multe fire. Programele obișnuite (jocuri, editori de text) nu vor funcționa eficient în sistemele SMP, deoarece nu oferă acest grad de paralelism. Dacă adaptați orice program pentru un sistem SMP, atunci va deveni extrem de ineficient să lucrați pe sisteme cu un singur procesor, ceea ce duce la necesitatea de a crea mai multe versiuni ale aceluiași program pentru sisteme diferite. Excepție este, de exemplu, programul ABLETON LIVE (conceput pentru crearea muzicii și pregătirea Dj-set-urilor), care are suport pentru sisteme multiprocesor. Dacă rulați un program normal pe un sistem multiprocesor, acesta va rula totuși puțin mai rapid decât pe un singur procesor. Acest lucru se datorează așa-numitei întreruperi hardware (oprirea programului pentru procesarea de către nucleu), care este executată pe un alt procesor liber.

Un sistem SMP (ca orice alt sistem bazat pe calcul paralel) impune cerințe crescute pentru un astfel de parametru de memorie precum lățimea de bandă a magistralei de memorie. Acest lucru limitează adesea numărul de procesoare dintr-un sistem (sistemele SMP moderne funcționează eficient cu până la 16 procesoare).

Deoarece procesoarele au memorie partajată, devine necesar să o utilizați rațional și să coordonați datele. Într-un sistem multiprocesor, se dovedește că mai multe cache-uri funcționează pentru o resursă de memorie partajată. Coerența cache este o proprietate cache care asigură integritatea datelor stocate în cache-urile individuale pentru o resursă partajată. Acest concept este un caz special al conceptului de coerență a memoriei, în care mai multe nuclee au acces la o memorie comună (este omniprezent în sistemele moderne multi-core). Dacă aceste concepte sunt descrise în in termeni generali, atunci imaginea va fi după cum urmează: același bloc de date poate fi încărcat în cache-uri diferite, unde datele sunt procesate diferit.

Dacă nu sunt utilizate notificări de modificare a datelor, va apărea o eroare. Coerența cache-ului este concepută pentru a rezolva astfel de conflicte și pentru a menține consistența datelor din cache.

Sistemele SMP sunt un subgrup de clasificare a sistemelor de calcul MIMD (multi-instruction multi data - computing system with multiple instruction stream and multiple data stream), conform lui Flynn (profesor la Universitatea Stanford, co-fondator al Palyn Associates). Conform acestei clasificări, aproape toate soiurile de sisteme paralele pot fi atribuite MIMD.

Împărțirea sistemelor multiprocesor în tipuri are loc pe baza divizării conform principiului utilizării memoriei. Această abordare a făcut posibilă distingerea următoarelor tipuri importante

sisteme multiprocesoare - multiprocesoare (sisteme multiprocesoare cu memorie partajată) și multicalculatoare (sisteme cu memorie separată). Datele partajate utilizate în calculul paralel necesită sincronizare. Sarcina de sincronizare a datelor este una dintre cele mai importante probleme importante, și soluția sa în dezvoltarea de multiprocesor și multicore și, în consecință, necesarul software este o prioritate pentru ingineri și programatori. Datele pot fi partajate cu alocare de memorie fizică. Această abordare se numește acces neuniform la memorie (NUMA).

Aceste sisteme includ:

  • Sisteme în care doar memoria cache a procesorului individual este utilizată pentru a reprezenta datele (arhitectura memoriei doar cache).
  • Sisteme cu coerență cache locală pentru diferite procesoare (NUMA coerent în cache).
  • Sisteme cu dotare acces public la memoria individuală a procesoarelor fără implementarea unui NUMA coerent non-cache la nivel hardware.

Simplificarea problemei creării sistemelor multiprocesor se realizează prin utilizarea memoriei partajate distribuite, dar această metodă duce la o creștere semnificativă a complexității programării paralele.

1.3 Multithreading simultan

Pe baza tuturor dezavantajelor de mai sus ale multiprocesării simetrice, este logic să dezvoltați și să dezvoltați alte modalități de îmbunătățire a performanței. Dacă analizați funcționarea fiecărui tranzistor individual din procesor, puteți acorda o atenție foarte mare fapt interesant- atunci când se efectuează majoritatea operațiilor de calcul, sunt implicate departe de toate componentele procesorului (conform ultimele cercetări- aproximativ 30% din toate tranzistoarele). Astfel, dacă procesorul efectuează, să zicem, o operație aritmetică simplă, atunci cea mai mare parte a procesorului este inactiv, prin urmare, poate fi folosit pentru alte calcule. Deci, dacă în acest moment procesorul efectuează operații reale, apoi în parte gratuită puteți încărca o operație aritmetică cu numere întregi. Pentru a crește sarcina procesorului, puteți crea execuția speculativă (sau avansată) a operațiunilor, ceea ce necesită o mare complicație a logicii hardware a procesorului. Dacă programul pre-determină fire (secvențe de comenzi) care pot fi executate independent unul de celălalt, atunci acest lucru va simplifica semnificativ sarcina (această metodă este ușor de implementat la nivel hardware). Această idee, care îi aparține lui Dean Tulsen (dezvoltată de el în 1955 la Universitatea din Washington), se numește simul-taneous multithreading. Mai târziu a fost dezvoltat de Intel sub numele de hyperthreading. Astfel, un procesor care execută multe fire este perceput ca o operare sistem Windows ca mai multe procesoare. Utilizarea acestei tehnologii necesită din nou nivel adecvat software. Efectul maxim al utilizării tehnologiei multithreading este de aproximativ 30%.

1.4 Multi-core

Tehnologia multithreading este implementarea multi-core la nivel de software. O creștere suplimentară a performanței, ca întotdeauna, necesită modificări în hardware-ul procesorului. Complicația sistemelor și arhitecturilor nu este întotdeauna eficientă. Există o părere opusă: „totul este ingenios simplu!”. Într-adevăr, pentru a crește performanța procesorului, nu este deloc necesar să-i creșteți frecvența de ceas, să complicați componentele logice și hardware, deoarece este suficient doar să raționalizați și să rafinați tehnologia existentă. Această metodă este foarte profitabilă - nu este nevoie să se rezolve problema creșterii disipării de căldură a procesorului, dezvoltarea de noi echipamente scumpe pentru producția de microcircuite. Această abordare a fost implementată ca parte a tehnologiei multi-core - implementarea mai multor nuclee de calcul pe un singur cip. Dacă luați procesorul original și comparați câștigurile de performanță din implementarea mai multor îmbunătățiri de performanță, este clar că tehnologia multi-core este cea mai bună opțiune.

Dacă comparăm arhitecturile unui multiprocesor simetric și a unuia multi-core, acestea se vor dovedi a fi aproape identice. Memoria cache a nucleelor ​​poate fi pe mai multe niveluri (locală și partajată, iar datele din RAM pot fi încărcate direct în memoria cache de al doilea nivel). Pe baza avantajelor considerate ale arhitecturii multi-core a procesoarelor, producătorii se concentrează asupra acesteia. Această tehnologie s-a dovedit a fi destul de ieftin de implementat și universală, ceea ce a făcut posibilă aducerea ei pe o piață largă. În plus, această arhitectură a făcut propriile ajustări la legea lui Moore: „numărul de nuclee de calcul din procesor se va dubla la fiecare 18 luni”.

Dacă te uiți la piata moderna tehnologia computerelor, puteți vedea că dispozitivele cu procesoare cu patru și opt nuclee domină. În plus, producătorii de procesoare spun că în curând vor fi văzute pe piață procesoare cu sute de nuclee de procesare. După cum s-a spus în mod repetat înainte, întregul potențial al unei arhitecturi multi-core este dezvăluit numai cu software de înaltă calitate. Astfel, sfera producției de hardware și software de calculator este foarte strâns legată.

* mereu probleme de actualitate, la ce ar trebui să fii atent atunci când alegi un procesor, ca să nu te înșeli.

Scopul nostru în acest articol este să descriem toți factorii care afectează performanța procesorului și alte caracteristici de performanță.

Probabil că nu este un secret pentru nimeni faptul că procesorul este principala unitate de calcul a unui computer. Ai putea spune chiar - cea mai importantă parte a computerului.

El este cel care se ocupă de aproape toate procesele și sarcinile care apar în computer.

Fie că este vorba de vizionarea videoclipurilor, muzică, navigarea pe internet, scrierea și citirea în memorie, procesarea 3D și video, jocuri. Si multe altele.

Prin urmare, să alegeți C central P procesor, trebuie tratat cu foarte mare atenție. Se poate dovedi că decideți să instalați o placă video puternică și un procesor care nu corespunde nivelului său. În acest caz, procesorul nu va dezvălui potențialul plăcii video, ceea ce îi va încetini activitatea. Procesorul va fi complet încărcat și va fierbe literalmente, iar placa video își va aștepta rândul, lucrând la 60-70% din capabilitățile sale.

De aceea, atunci când alegeți un computer echilibrat, nu cheltuieli neglijează procesorulîn favoarea unei plăci video puternice. Puterea procesorului ar trebui să fie suficientă pentru a debloca potențialul plăcii video, altfel sunt doar bani aruncați.

Intel vs. AMD

*alungă pentru totdeauna

corporație Intel, are resurse umane uriașe și finanțe aproape inepuizabile. Multe inovații în industria semiconductoarelor și noile tehnologii vin de la această companie. Procesoare și evoluții Intel, în medie pentru 1-1,5 cu ani înaintea dezvoltării inginerilor AMD. Dar după cum știți, pentru oportunitatea de a avea cel mai mult tehnologii moderne- trebuie sa plateasca.

Politica de prețuri pentru procesoare Intel, se bazeaza pe numărul de nuclee, cantitatea de cache, dar și pe „prospețimea” arhitecturii, performanță pe ceaswatt,tehnologie de procesare a cipurilor. Semnificația memoriei cache, „subtilitățile procesului tehnic” și altele caracteristici importante procesorul va fi discutat mai jos. Pentru deținerea unor astfel de tehnologii precum un multiplicator de frecvență gratuit, va trebui să plătiți și o sumă suplimentară.

Companie AMD, spre deosebire de companie Intel, depune eforturi pentru disponibilitatea procesatorilor săi pentru consumatorul final și pentru o politică de prețuri competentă.

S-ar putea chiar spune asta AMD– « Ştampila oamenilor". În etichetele sale de preț veți găsi ceea ce aveți nevoie la un preț foarte atractiv. De obicei, la un an de la debut tehnologie nouă la companie Intel, un analog al tehnologiei de la AMD. Dacă nu urmăriți cea mai înaltă performanță și acordați mai multă atenție prețului decât prezenței tehnologiilor avansate, atunci produsele companiei AMD- doar pentru tine.

Politica de pret AMD, se bazează mai mult pe numărul de nuclee și foarte puțin pe cantitatea de memorie cache, prezența îmbunătățirilor arhitecturale. În unele cazuri, pentru a avea posibilitatea de a avea o memorie cache de al treilea nivel, va trebui să plătiți puțin în plus ( Fenomul are un nivel de memorie cache 3, Athlon conținut doar limitat, 2 nivele). Dar cateodata AMD isi rasfata fanii capacitatea de a debloca procesoare mai ieftine la altele mai scumpe. Puteți debloca nuclee sau memoria cache. Îmbunătăţi Athlon inainte de Fenomul. Acest lucru este posibil datorită arhitecturii modulare și lipsei unor modele mai ieftine, AMD pur și simplu dezactivează unele blocuri mai scumpe pe cip (prin software).

Nuclei– rămân practic neschimbate, doar numărul lor diferă (valabil pentru procesoare 2006-2011 ani). Datorită modularității procesoarelor sale, compania face o treabă excelentă de a vinde cipuri respinse, care, atunci când unele blocuri sunt oprite, devin un procesor dintr-o linie mai puțin productivă.

Compania lucrează la o arhitectură complet nouă de mulți ani sub numele de cod Buldozer, dar la momentul lansării 2011 anul, noile procesoare nu au prezentat cele mai bune performanțe. AMD au păcătuit pe sistemele de operare că nu înțeleg caracteristicile arhitecturale ale dual-core-urilor și ale „altelor multithreading”.

Potrivit reprezentanților companiei, ar trebui să așteptați remedieri și patch-uri speciale pentru a simți performanța deplină a acestor procesoare. Cu toate acestea, la început 2012 anul, reprezentanții companiei au amânat lansarea unei actualizări pentru a susține arhitectura Buldozer pentru a doua jumătate a anului.

Frecvența procesorului, numărul de nuclee, multithreading.

Câteodată Pentium 4 iar înaintea lui frecvența procesorului, a fost principalul factor de performanță al procesorului la alegerea unui procesor.

Acest lucru nu este surprinzător, deoarece arhitecturile procesoarelor au fost special concepute pentru a obține frecvențe înalte, acest lucru s-a reflectat în special în procesor. Pentium 4 asupra arhitecturii netburst. Frecvența înaltă nu a fost eficientă cu conducta lungă care a fost folosită în arhitectură. Chiar Athlon XP frecvență 2GHz, în ceea ce privește performanța a fost mai mare decât Pentium 4 c 2,4 GHz. Asa a fost apă curată marketing. După această eroare, compania Intel mi-am dat seama de greșelile mele și înapoi în partea bună Am început să lucrez nu la componenta de frecvență, ci la performanța pe ceas. Din arhitectura netburst trebuia să refuze.

Ce ne oferă multi-core?

Procesor quad-core 2,4 GHz, în aplicațiile cu mai multe fire, ar fi, teoretic, aproximativ echivalent cu un procesor cu un singur nucleu cu o frecvență de 9,6 GHz sau procesor cu 2 nuclee cu o frecvență 4,8 GHz. Dar doar asta teoretic. Practic pe de altă parte, două procesoare dual-core din două plăci de bază socket vor fi mai rapide decât un procesor cu 4 nuclee la aceeași frecvență de operare. Limitele de viteză ale autobuzului și latența memoriei se fac simțite.

* supuse acelorași arhitecturi și cantității de memorie cache

Multi-core, face posibilă executarea instrucțiunilor și calculelor în părți. De exemplu, trebuie să efectuați trei operații aritmetice. Primele două sunt executate pe fiecare dintre nucleele procesorului și rezultatele sunt adăugate în memoria cache, unde următoarea acțiune poate fi efectuată cu ele de către oricare dintre nucleele libere. Sistemul este foarte flexibil, dar fără o optimizare adecvată este posibil să nu funcționeze. Prin urmare, optimizarea pentru multi-core pentru arhitectura procesoarelor din mediul OS este foarte importantă.

Aplicații care „iubesc” și utilizare multithreading: arhivatorii, playere și codificatoare video, antivirusuri, programe de defragmentare, editor grafic , browsere, Flash.

De asemenea, „fanii” multithreading-ului includ sisteme de operare precum Windows 7și Windows Vista, precum și multe OS, bazat pe nucleu linux, care rulează considerabil mai repede cu un procesor multi-core.

Cel mai jocuri, uneori un procesor cu 2 nuclee la o frecvență înaltă este suficient. Acum, însă, există tot mai multe jocuri „sharpened” pentru multithreading. Luați măcar astea cutie cu nisip jocuri ca GTA 4 sau prototip, în care pe un procesor cu 2 nuclee cu o frecvență mai jos 2,6 GHz- nu te simți confortabil, rata de cadre scade sub 30 de cadre pe secundă. Deși în acest caz, cel mai probabil cauza unor astfel de incidente este optimizarea „slabă” a jocurilor, lipsa de timp sau mâinile „nedirecte” ale celor care au transferat jocuri de pe console în PC.

Când cumpărați un procesor nou pentru jocuri, acum ar trebui să acordați atenție procesoarelor cu 4 sau mai multe nuclee. Dar totuși, nu neglijați procesoarele cu 2 nuclee din „categoria superioară”. În unele jocuri, aceste procesoare se simt uneori mai bine decât unele cu mai multe nuclee.

Cache-ul procesorului.

- aceasta este o zonă dedicată a cipului procesorului, în care datele intermediare sunt procesate și stocate între nucleele procesorului, RAM și alte magistrale.

Funcționează la o viteză de ceas foarte mare (de obicei la frecvența procesorului însuși), are o lățime de bandă foarte mare, iar nucleele procesorului lucrează direct cu el ( L1).

Din cauza ei deficit, procesorul poate fi inactiv în sarcini consumatoare de timp, așteptând ca date noi să fie procesate în cache. De asemenea, memoria cache serveste pentruînregistrări de date repetate frecvent, care pot fi restaurate rapid dacă este necesar, fără calcule inutile, fără a forța procesorul să petreacă din nou timp cu ele.

Performanța adaugă și faptul că, dacă memoria cache este combinată, și toate nucleele pot folosi în mod egal datele din ea. Acest lucru oferă oportunități suplimentare pentru optimizarea multi-threaded.

Această tehnică este acum folosită pentru cache de nivel 3. Pentru procesoare Intel existau procesoare cu un cache combinat de nivel 2 ( C2D E 7***,E8***), datorită căruia această metodă pare să mărească performanța multithreaded.

La overclockarea procesorului, memoria cache poate deveni punct slab, împiedicând procesorul să overclockeze mai mult decât frecvența maximă de operare fără erori. Cu toate acestea, avantajul este că va rula la aceeași frecvență ca și procesorul overclockat.

În general, cu cât memoria cache este mai mare, cu atât Mai repede CPU. În ce aplicații?

În toate aplicațiile în care sunt utilizate o mulțime de date, instrucțiuni și fire de execuție în virgulă mobilă, memoria cache este utilizată în mod activ. Memoria cache este foarte populară arhivatorii, codificatoare video, antivirusuriși editor grafic etc.

favorabil pentru un numar mare cache-urile sunt jocuri. În special strategii, auto-sim-uri, RPG-uri, SandBox și toate jocurile în care există o mulțime de mici detalii, particule, elemente de geometrie, fluxuri de informații și efecte fizice.

Memoria cache joacă un rol foarte important în deblocarea potențialului sistemelor cu 2 sau mai multe plăci video. La urma urmei, o parte din sarcină cade pe interacțiunea nucleelor ​​procesorului atât între ele, cât și pentru lucrul cu fluxurile mai multor cipuri video. În acest caz este importantă organizarea memoriei cache, iar memoria cache a nivelului 3 al unui volum mare este foarte utilă.

Memoria cache este întotdeauna echipată cu protecție împotriva posibilelor erori ( ECC), la detectarea cărora, acestea sunt corectate. Acest lucru este foarte important, deoarece o mică eroare în memoria cache, în timpul procesării, se poate transforma într-o eroare gigantică, continuă, din care întregul sistem se va „întinde”.

Tehnologii corporative.

(hiper-threading, HT)–

pentru prima dată tehnologia a fost aplicată în procesoare Pentium 4, dar nu a funcționat întotdeauna corect și adesea a încetinit procesorul mai mult decât l-a accelerat. Motivul a fost o conductă prea lungă și un sistem de predicție a ramurilor neterminat. Aplicat de companie Intel, nu există încă analogi ai tehnologiei, dacă nu este considerat un analog atunci? ce au implementat inginerii companiei AMDîn arhitectură Buldozer.

Principiul sistemului este astfel încât pentru fiecare nucleu fizic, două fire de calcul, în loc de unul. Adică dacă ai un procesor cu 4 nuclee HT (Core i 7), atunci aveți fire virtuale 8 .

Câștigul de performanță este atins datorită faptului că datele pot intra în conductă deja la mijloc, și nu neapărat la început. Dacă unele unități de procesor capabile să efectueze această acțiune sunt inactive, ele primesc o sarcină care urmează să fie executată. Creșterea performanței nu este aceeași ca la nucleele fizice reale, dar comparabilă (~ 50-75%, în funcție de tipul de aplicație). Este destul de rar ca în unele aplicații, HT afectează negativ asupra performanței. Acest lucru se datorează optimizării slabe a aplicațiilor pentru această tehnologie, incapacității de a înțelege că există fire „virtuale” și lipsei limitatoarelor pentru încărcarea uniformă a firelor.

TurboBoost - o tehnologie foarte utila care mareste frecventa celor mai folosite nuclee de procesor, in functie de nivelul lor de sarcina de lucru. Este foarte util atunci când o aplicație nu poate folosi toate cele 4 nuclee și încarcă doar unul sau două, în timp ce frecvența acestora crește, ceea ce compensează parțial performanța. Un analog al acestei tehnologii în companie AMD, este tehnologia Turbo Core.

, 3 acum! instrucțiuni. Proiectat pentru a accelera procesorul multimedia calcule (video, muzică, grafică 2D/3D etc.), precum și accelerarea activității unor programe precum arhivare, programe de lucru cu imagini și videoclipuri (cu sprijinul instrucțiunilor acestor programe).

3acum! - tehnologie destul de veche AMD, care conține instrucțiuni suplimentare pentru procesarea conținutului multimedia, pe lângă SSE prima versiune.

* Și anume, posibilitatea de procesare în flux a numerelor reale de precizie unică.

Prezența celei mai recente versiuni este un mare plus, procesorul începe să efectueze anumite sarcini mai eficient cu o optimizare software adecvată. Procesoare AMD purta titluri similare, dar ușor diferit.

* Exemplu - SSE 4.1 (Intel) - SSE 4A (AMD).

În plus, aceste seturi de instrucțiuni nu sunt identice. Acestea sunt analogi, în care există mici diferențe.

cool si linistit, pas rapid, CoolCore, Îmbunătățit jumătate Stat (C1E) șit. d.

Aceste tehnologii, la sarcină mică, reduc frecvența procesorului prin reducerea tensiunii multiplicatorului și a miezului, dezactivând o parte a memoriei cache etc. Acest lucru permite procesorului să se încălzească mult mai puțin și să consume mai puțină energie, să facă mai puțin zgomot. Dacă este nevoie de alimentare, procesorul va reveni la starea sa normală într-o fracțiune de secundă. La setările standard bios aproape întotdeauna activate, dacă se dorește, pot fi dezactivate pentru a reduce posibilele „frize” la comutarea în jocuri 3D.

Unele dintre aceste tehnologii controlează viteza ventilatoarelor din sistem. De exemplu, dacă procesorul nu are nevoie de o disipare îmbunătățită a căldurii și nu este sub sarcină, viteza ventilatorului procesorului este redusă ( AMD Cool'n'Quiet, Intel Speed ​​​​Step).

Tehnologia de virtualizare Intelși Virtualizare AMD.

Aceste tehnologii hardware permit, cu ajutorul unor programe speciale, rularea mai multor sisteme de operare imediat, fără pierderi semnificative de performanță. De asemenea, este folosit pentru funcționarea corectă a serverelor, deoarece adesea, acestea au mai mult de un sistem de operare instalat pe ele.

A executa Dezactivați PicșiNu a executa Pic o tehnologie concepută pentru a proteja un computer împotriva atacurilor de viruși și a erorilor software care pot cauza o prăbușire a sistemului depășirea tamponului.

Intel 64 , AMD 64 , EM 64 T - aceasta tehnologie permite procesorului sa functioneze atat in OS cu arhitectura pe 32 de biti cat si in OS cu arhitectura pe 64 de biti. Sistem pe 64 de biți- din punct de vedere al beneficiilor, pentru utilizatorul mediu, se deosebește prin faptul că în acest sistem se pot folosi mai mult de 3,25 GB de RAM. Pe sistemele pe 32 de biți, utilizați b despre Mai mult RAM nu este posibilă din cauza cantității limitate de memorie adresabilă* .

Majoritatea aplicațiilor cu o arhitectură pe 32 de biți pot fi rulate pe un sistem cu un sistem de operare pe 64 de biți.

* Ce să faci dacă, în 1985, nimeni nu s-ar fi putut gândi la cantități atât de gigantice, conform standardelor de atunci, de RAM.

În plus.

Câteva cuvinte despre

Acest punct merită să acordați o atenție deosebită. Cu cât procesul tehnic este mai subțire, cu atât procesorul consumă mai puțină energie și, ca urmare, se încălzește mai puțin. Și printre altele - are o marjă de siguranță mai mare pentru overclockare.

Cu cât procesul tehnic este mai subțire, cu atât poți „înfășura” mai mult în cip (și nu numai) și crește capacitățile procesorului. Disiparea căldurii și consumul de energie scad, de asemenea, proporțional, din cauza pierderilor de curent mai mici și a scăderii zonei centrale. Puteți observa o tendință că, cu fiecare nouă generație a aceleiași arhitecturi pe o nouă tehnologie de proces, consumul de energie crește și el, dar nu este așa. Doar că producătorii se îndreaptă către performanțe și mai mari și trec peste linia de disipare a căldurii a generației anterioare de procesoare din cauza creșterii numărului de tranzistori, care nu este proporțională cu o scădere a procesului tehnic.

încorporat în procesor.

Dacă nu aveți nevoie de un nucleu video integrat, atunci nu ar trebui să cumpărați un procesor cu acesta. Veți obține doar o disipare mai proastă a căldurii, căldură suplimentară (nu întotdeauna), un potențial de overclocking mai slab (nu întotdeauna) și bani plătiți în exces.

În plus, acele nuclee care sunt încorporate în procesor sunt potrivite doar pentru încărcarea sistemului de operare, navigarea pe Internet și vizionarea videoclipurilor (și chiar și atunci nu de nicio calitate).

Tendințele pieței sunt încă în schimbare și oportunitatea de a cumpăra un procesor productiv de la Intel Fără un nucleu video, dispare din ce în ce mai puțin. Politica de impunere forțată a nucleului video încorporat, a apărut cu procesoare Intel sub nume de cod Podul de nisip, a cărei inovație principală a fost nucleul încorporat în același proces de fabricație. Nucleul video este localizat de comun acord cu procesor pe un cristal, și nu la fel de simplu ca în generațiile anterioare de procesoare Intel. Pentru cei care nu-l folosesc, există dezavantaje sub forma unei plăți excesive pentru procesor, deplasarea sursei de încălzire față de centrul capacului de distribuție a căldurii. Cu toate acestea, există și plusuri. Miez video dezactivat, poate fi folosit pentru codificare video foarte rapidă folosind tehnologie Sincronizare rapidă cuplat cu software special care acceptă această tehnologie. In viitor, Intel promite să extindă orizonturile utilizării nucleului video încorporat pentru calculul paralel.

Prize pentru procesoare. Durata de viață a platformei.


Intel conduce o politică aspră pentru platformele lor. Durata de viață a fiecăruia (data începutului și sfârșitului vânzărilor de procesoare pentru acesta) nu depășește de obicei 1,5 - 2 ani. În plus, compania are mai multe platforme de dezvoltare paralelă.

Companie AMD, are politica de compatibilitate opusă. Pe platforma ei AM 3, toți procesoarele generațiilor viitoare care suportă DDR3. Chiar și atunci când platforma merge la AM3+ iar mai târziu, fie procesoare noi sub AM 3, sau procesoarele noi vor fi compatibile cu cele vechi plăci de bază, și se va putea face un upgrade fără durere pentru portofel schimbând doar procesorul (fără a schimba placa de bază, RAM, etc.) și flashing placa de bază. Singurele nuanțe de incompatibilitate pot fi atunci când se schimbă tipul, deoarece va fi necesar un controler de memorie diferit încorporat în procesor. Deci compatibilitatea este limitată și nu este acceptată de toate plăcile de bază. Dar, în general, pentru un utilizator economic sau pentru cei care nu sunt obișnuiți să schimbe complet platforma la fiecare 2 ani - alegerea producătorului procesorului este de înțeles - aceasta AMD.

Răcire CPU.

Vine cu procesor ca standard CUTIE- cooler nou care va face doar treaba. Este o bucată de aluminiu cu o zonă de dispersie nu foarte mare. Răcitoarele eficiente bazate pe conducte de căldură și plăci atașate la acestea sunt proiectate pentru o disipare foarte eficientă a căldurii. Dacă nu doriți să auziți un zgomot excesiv al ventilatorului, atunci ar trebui să luați în considerare achiziționarea unui răcitor alternativ, mai eficient, sau a unui sistem de răcire cu lichid cu circuit închis sau neînchis. Astfel de sisteme de răcire vor permite în plus overclockarea procesorului.

Concluzie.

Au fost luate în considerare toate aspectele importante care afectează performanța și performanța procesorului. Să recapitulăm la ce să ne uităm:

  • Selectați producătorul
  • Arhitectura procesorului
  • Proces tehnologic
  • frecvența procesorului
  • Numărul de nuclee de procesor
  • Mărimea și tipul cache-ului procesorului
  • Suport pentru tehnologii și instrucțiuni
  • Răcire de calitate

Noi speram materialul dat vă va ajuta să înțelegeți și să decideți asupra alegerii procesorului care corespunde așteptărilor dumneavoastră.

După ce ne-am ocupat de teoria multithreading-ului, să luăm în considerare un exemplu practic - Pentium 4. Deja în stadiul de dezvoltare a acestui procesor, inginerii Intel au continuat să lucreze la creșterea performanței acestuia fără a aduce modificări interfeței programului. Au fost luate în considerare cinci metode simple:

Creșterea frecvenței ceasului;

Plasarea a două procesoare pe un cip;

Introducerea de noi blocuri funcționale;

Extensie transportoare;

Folosind multithreading.

Cea mai evidentă modalitate de a îmbunătăți performanța este de a crește viteza ceasului fără a modifica alți parametri. De regulă, fiecare model de procesor ulterior are o viteză de ceas puțin mai mare decât precedentul. Din păcate, cu o creștere în linie dreaptă a vitezei de ceas, dezvoltatorii se confruntă cu două probleme: un consum crescut de energie (care este relevant pentru laptopuri și alte dispozitive de calcul care funcționează cu baterii) și supraîncălzire (care necesită radiatoare mai eficiente).

A doua metodă - plasarea a două procesoare pe un cip - este relativ simplă, dar presupune dublarea suprafeței ocupate de cip. Dacă fiecare procesor este prevăzut cu propria sa memorie cache, numărul de cipuri per wafer se reduce la jumătate, dar asta înseamnă și costul de producție de două ori. Dacă ambele procesoare au o memorie cache partajată, se poate evita o creștere semnificativă a spațiului ocupat, dar în acest caz apare o altă problemă - cantitatea de memorie cache per procesor este înjumătățită, iar acest lucru afectează inevitabil performanța. În plus, în timp ce aplicațiile de server profesionale sunt capabile să utilizeze pe deplin resursele mai multor procesoare, în programele desktop obișnuite, paralelismul intern este dezvoltat într-o măsură mult mai mică.

Introducerea de noi blocuri funcționale nu este, de asemenea, dificilă, dar este important să găsim un echilibru aici. Ce rost are o duzină de ALU dacă cipul nu poate emite comenzi către conductă la o rată care să poată încărca toate acele blocuri?

O conductă cu un număr crescut de etape, capabilă să împartă sarcinile în segmente mai mici și să le proceseze în perioade scurte de timp, pe de o parte, îmbunătățește performanța, pe de altă parte, crește consecințele negative ale previziunii greșite a tranzițiilor, ratelor de cache, întreruperi și alte evenimente care perturbă procesarea normală a instrucțiunilor de curs în procesor. În plus, pentru a realiza pe deplin capacitățile conductei extinse, este necesară creșterea frecvenței de ceas, iar acest lucru, după cum știm, duce la un consum crescut de energie și la disiparea căldurii.

În cele din urmă, puteți implementa multithreading. Avantajul acestei tehnologii este că introduce un fir software suplimentar care permite folosirea resurselor hardware care altfel ar fi inactive. Pe baza rezultatelor studiilor experimentale, dezvoltatorii Intel au descoperit că o creștere cu 5% a suprafeței cipului atunci când se implementează multithreading pentru multe aplicații oferă o creștere a performanței de 25%. Xeon a fost primul procesor Intel care a suportat multithreading în 2002. Ulterior, începând cu 3,06 GHz, multithreading-ul a fost introdus în linia Pentium 4. Intel numește implementarea multithreading-ului în hyperthreading-ul Pentium 4.

Nou pe site

>

Cel mai popular