Internet Windows Android

Și ia în considerare ce se va întâmpla în două cazuri diferite. Scenă și obiecte versatile

Introducere. Tehnologia computerelor se dezvoltă rapid. Dispozitivele de calcul devin mai puternice, mai compacte și mai convenabile, dar recent, îmbunătățirea performanței dispozitivelor a devenit o mare problemă. În 1965, Gordon Moore (unul dintre fondatorii Intel) a concluzionat că „numărul tranzistoarelor plasate pe un cip de circuit integrat se dublează la fiecare 24 de luni”.

Primele dezvoltări în domeniul creării sistemelor multiprocesor au început în anii '70. Pentru o lungă perioadă de timp, performanța procesoarelor convenționale single-core a crescut prin creșterea frecvenței ceasului (până la 80% din performanță a fost determinată doar de frecvența ceasului), cu o creștere simultană a numărului de tranzistoare pe cip. Legile fundamentale ale fizicii 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 condus la faptul că:

  • curenții de scurgere au crescut, în urma cărora a crescut generarea de căldură și consumul de energie.
  • procesorul a devenit mult mai "rapid" decât memoria. Performanță degradată din cauza latenței în accesare memorie cu acces aleatorși încărcarea datelor în cache.
  • există așa ceva ca „gâtul de sticlă al lui von Neumann”. Înseamnă ineficiența arhitecturii procesorului atunci când executați un program.

Sistemele multiprocesor (ca una dintre modalitățile de a rezolva problema) nu au fost utilizate pe scară largă, deoarece au necesitat sisteme multiprocesor costisitoare și dificil de fabricat. plăci de bază... 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 Hyper-Threading, care permite unui procesor să execute mai multe fire de execuție pe un singur nucleu. Este HTT care, potrivit multor experți, a devenit o condiție prealabilă pentru crearea de procesoare multi-core. Executarea mai multor fire de către un procesor în același timp se numește paralelism la nivel de fir (TLP - paralelism la nivel de fir).

Pentru a elibera potențialul unui procesor multicore, un program executabil trebuie să utilizeze toate nucleele de calcul, ceea ce nu este întotdeauna realizabil. Vechile programe secvențiale care pot utiliza un singur nucleu nu vor mai rula mai repede pe noua 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 în sensul cel mai larg este o descriere a unui sistem complex format din mai multe elemente.

În procesul de dezvoltare, structurile semiconductoare (microcircuite) evoluează, prin urmare, principiile procesorilor de construcție, numărul elementelor incluse în compoziția lor, modul în care interacțiunea lor este organizată, se schimbă constant. Astfel, procesoarele cu aceleași principii de proiectare de bază sunt denumite de obicei procesoare de aceeași arhitectură. Și aceste principii în sine sunt numite arhitectură de procesor (sau microarhitectură).

Un microprocesor (sau procesor) este componenta principală a unui computer. Procesează informații, execută programe și controlează alte dispozitive din sistem. Cât de repede vor rula programele depinde de puterea procesorului.

Nucleul este coloana vertebrală a oricărui microprocesor. Este format din milioane de tranzistoare situate pe un cip de siliciu. Microprocesorul este împărțit în celule speciale numite registre scop general(RON) Lucrarea procesorului în total constă în recuperarea instrucțiunilor și datelor din memorie într-o anumită succesiune și executarea acestora. În plus, pentru a crește viteza computerului, microprocesorul este echipat cu o memorie cache internă. Memoria cache este memoria interioară procesor folosit ca tampon (pentru a proteja împotriva întreruperilor în comunicarea cu RAM).

Procesoarele Intel utilizate în computerele compatibile IBM au mai mult de o mie de instrucțiuni și sunt denumite procesoare cu un set de instrucțiuni extins - procesoare CISC (CISC - Complex Instruction Set Computing).

1.1 Calcul de înaltă performanță. Paralelism

Ritmul dezvoltării tehnologie de calcul ușor de urmărit: de la ENIAC (primul computer digital electronic de uz general) cu o capacitate de câteva mii de operații pe secundă la supercomputerul Tianhe-2 (1000 trilioane de operații în virgulă mobilă pe secundă). Aceasta înseamnă că viteza de calcul a crescut de un trilion de ori în 60 de ani. Crearea sistemelor de calcul performante este una dintre cele mai dificile probleme științifice și tehnice. Având în vedere că viteza calculelor mijloace tehnice a crescut doar de câteva milioane de ori, viteza generală de calcul a crescut de miliarde de ori. Acest efect se realizează datorită utilizării paralelismului în toate etapele de calcul. Calculul paralel necesită o căutare a alocării raționale a memoriei, metode fiabile de transfer de informații și coordonarea proceselor de calcul.

1.2 Multiprocesare simetrică

Multiprocesarea simetrică (SMP prescurtată) sau multiprocesarea simetrică este o arhitectură specială a sistemelor multiprocesor în care mai multe procesoare au acces la memoria partajată. Aceasta este o arhitectură foarte comună, care a fost utilizată destul de mult în ultima vreme.

Atunci când utilizați SMP, mai multe procesoare funcționează simultan pe un computer, fiecare având propria sarcină. Un sistem SMP cu un sistem de operare de înaltă calitate distribuie rațional sarcinile între procesoare, oferind o încărcare uniformă pe fiecare dintre ele. Cu toate acestea, există o problemă cu accesul la memorie, deoarece chiar și sistemele uniprocesor necesită un timp relativ mare pentru a face acest lucru. Astfel, accesul la RAM în SMP are loc secvențial: mai întâi un procesor, apoi al doilea.

Datorită caracteristicilor enumerate mai sus, sistemele SMP sunt utilizate exclusiv în domeniul științific, industrie, afaceri și extrem de rar în birourile de lucru. În plus față de costul ridicat al implementării hardware, astfel de sisteme necesită software foarte scump și de înaltă calitate, care să asigure executarea multithread a sarcinilor. Programe regulate (jocuri, editori de text) nu va funcționa eficient în sistemele SMP, deoarece acestea nu asigură acest grad de paralelism. Dacă adaptați orice program pentru un sistem SMP, atunci va deveni extrem de ineficient să lucrați pe sisteme uniprocesor, ceea ce duce la necesitatea creării mai multor versiuni ale aceluiași program pentru sisteme diferite. O excepție este, de exemplu, programul ABLETON LIVE (conceput pentru a crea muzică și a pregăti DJ-seturi), care are suport pentru sistemele multiprocesor. Dacă rulați un program obișnuit pe un sistem multiprocesor, acesta va rula încă puțin mai repede decât pe un sistem uniprocesor. Acest lucru se datorează așa-numitei întreruperi hardware (oprirea programului pentru procesare de către nucleu), care se execută pe un alt procesor gratuit.

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

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

Neutilizarea notificărilor privind modificarea datelor va duce la o eroare. Coerența cache-ului este concepută pentru a rezolva astfel de conflicte și pentru a menține coerența datelor în cache.

Sistemele SMP sunt un subgrup de MIMD (multi in-struction multi data) din clasificarea Flynn a sistemelor de calcul (profesor la Universitatea Stanford, cofondator al Palyn Associates). Conform acestei clasificări, aproape toate tipurile de sisteme paralele pot fi clasificate ca MIMD.

Împărțirea sistemelor multiprocesor în tipuri are loc pe baza împărțirii în conformitate cu principiul utilizării memoriei. Această abordare a făcut posibilă distincția între următoarele tipuri importante

sisteme multiprocesor - multiprocesoare (sisteme multiprocesor cu memorie partajată partajată) și multicomputere (sisteme cu memorie separată). Datele partajate utilizate în calcul paralel necesită sincronizare. Sarcina de sincronizare a datelor este una dintre cele mai importante probleme și soluția sa în dezvoltarea multiprocesorului și a multicorei și, în consecință, necesarul software este o prioritate pentru ingineri și programatori. Partajarea datelor se poate face cu alocarea fizică a memoriei. Această abordare se numește acces neuniform la memorie (NUMA).

Aceste sisteme includ:

  • Sisteme în care sunt utilizate numai cache-uri individuale ale procesorului pentru prezentarea datelor (arhitectură de memorie numai cache).
  • Sisteme cu furnizarea de coerență a cache-urilor locale pentru diferite procesoare (NUMA coerente în cache).
  • Sisteme colateralizate acces general la memoria individuală a procesoarelor fără implementarea hardware a coerenței cache (non-cache coerent NUMA).

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

1.3 Multithreading simultan

Pe baza tuturor dezavantajelor de mai sus ale multiprocesării simetrice, are sens să dezvoltăm și să dezvoltăm alte modalități de îmbunătățire a performanței. Dacă analizați activitatea fiecărui tranzistor individual din procesor, puteți acorda atenție unui foarte fapt interesant- la efectuarea majorității operațiilor de calcul, nu sunt implicate toate componentele procesorului (conform studiilor recente, 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, atunci o operație aritmetică întreagă poate fi încărcată în partea liberă. Pentru a crește sarcina pe procesor, puteți crea execuția speculativă (sau anticipativă) a operațiilor, care necesită multă complexitate în logica hardware a procesorului. Dacă în program definiți în avans firele (secvențele de comenzi) care pot fi executate independent unul de celălalt, atunci acest lucru va simplifica semnificativ sarcina ( Pe aici ușor de implementat în hardware). Această idee, care aparține lui Dean Tulsen (dezvoltată de el în 1955 la Universitatea din Washington), se numește multithreading simultan. Ulterior a fost dezvoltat de Intel numit hiper threading. De exemplu, un singur procesor care rulează mai multe fire este perceput de sistemul de operare Windows ca mai multe procesoare. Utilizarea acestei tehnologii necesită din nou un nivel adecvat de software. Efectul maxim al utilizării tehnologiei multithreading este de aproximativ 30%.

1.4 Multicore

Tehnologia Multithreading este o implementare software a multicore. Creșterea suplimentară a performanței, ca întotdeauna, necesită modificări ale hardware-ului procesorului. Complicația sistemelor și arhitecturilor nu este întotdeauna eficientă. Există o părere opusă: „totul ingenios este simplu!”. Într-adevăr, pentru a crește performanța procesorului, nu este deloc necesar să-l măriți. frecvența ceasului, pentru a complica componentele logice și hardware, deoarece este suficient doar să raționalizați și să rafinați tehnologia existentă. Această metodă este foarte benefică - nu este necesar să se rezolve problema creșterii disipării căldurii procesorului, dezvoltarea de noi echipamente scumpe pentru producerea de microcircuite. Această abordare a fost implementată în cadrul tehnologiei multicore - implementarea mai multor nuclee de calcul pe un singur cristal. Dacă luăm procesorul original și comparăm câștigurile de performanță atunci când implementăm mai multe metode de îmbunătățire a performanței, atunci este evident că utilizarea tehnologiei multicore este cea mai bună opțiune.

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

Privind piața modernă tehnologia calculatoarelor, atunci puteți vedea că dispozitivele cu procesoare cu patru și opt nuclee domină. În plus, producătorii de procesoare susțin că în curând vor fi pe piață procesoare cu sute de nuclee de procesare. Așa cum s-a spus de multe ori înainte, întregul potențial al unei arhitecturi multicore este dezvăluit numai cu software de înaltă calitate. Astfel, sfera producției de hardware și software pentru computer este foarte strâns legată.

Dar odată cu cucerirea noilor vârfuri de indicatori de frecvență, a devenit mai dificil să-l creștem, deoarece acest lucru a afectat creșterea TDP a procesoarelor. Prin urmare, dezvoltatorii au început să crească procesoare în lățime, și anume să adauge nuclee, și așa a apărut conceptul de multi-core.

Chiar și literalmente în urmă cu 6-7 ani, practic nu se menționau procesoarele multi-core. Nu, mulți procesoare nucleare de la aceeași companie IBM a existat mai devreme, dar apariția primului procesor dual-core pentru calculatoare desktop, a avut loc abia în 2005, iar acest procesor s-a numit Pentium D. De asemenea, în 2005 a fost lansat un Opteron dual-core de la AMD, dar pentru sistemele server.

În acest articol, nu vom intra în detaliu în fapte istorice, dar vom discuta despre procesoarele moderne multi-core ca una dintre caracteristicile unui procesor. Și cel mai important, trebuie să ne dăm seama ce oferă acest multi-core în ceea ce privește performanța procesorului și pentru dvs. și pentru mine.

Performanță crescută datorită multi-core

Principiul creșterii performanței procesorului în detrimentul mai multor nuclee este împărțirea execuției threadurilor (diverse sarcini) în mai multe nuclee. Pentru a rezuma, putem spune că aproape fiecare proces care rulează pe sistemul dvs. are mai multe fire.

Voi face imediat o rezervare sistem de operare poate crea virtual un set de fire pentru el însuși și poate efectua totul ca și cum ar fi simultan, chiar dacă procesorul este fizic și monocore. Acest principiu implementează multitasking-ul Windows (de exemplu, ascultarea muzicii și tastarea în același timp).


Să luăm ca exemplu un program antivirus. Un flux va scana computerul, celălalt se va actualiza baza de date antivirus(am simplificat totul foarte mult pentru a înțelege conceptul general).

Și ia în considerare ce se va întâmpla în două cazuri diferite:

a) Procesorul este single-core. Deoarece două fire sunt executate în același timp, trebuie să creăm pentru utilizator (vizual) această simultaneitate de execuție. Sistemul de operare face inteligent:există o comutare între executarea acestor două fire (aceste comutatoare sunt instantanee și timpul trece în milisecunde). Adică sistemul a „efectuat” puțin actualizarea, apoi a trecut brusc la scanare, apoi a revenit la actualizare. Astfel, pentru dvs. și pentru mine, impresia este că aceste două sarcini sunt îndeplinite simultan. Dar ce se pierde? Performanță, desigur. Așadar, să ne uităm la a doua opțiune.

b) Procesor multi-core.În acest caz, acest comutator nu va avea loc. Sistemul va trimite în mod clar fiecare thread către un nucleu separat, ceea ce, ca rezultat, ne va permite să scăpăm de performanța distructivă trecând de la thread la thread (idealizăm situația). Două fire sunt executate în același timp, acesta este principiul multicore și multithreading. În cele din urmă, vom efectua scanări și actualizări mult mai rapide pe un procesor multi-core decât pe unul single-core. Dar există o problemă - nu toate programele acceptă multicore. Nu fiecare program poate fi optimizat în acest fel. Și totul este departe de a fi la fel de perfect precum am descris. Dar în fiecare zi, dezvoltatorii creează din ce în ce mai multe programe care au un cod perfect optimizat pentru execuție pe procesoare multi-core.

Aveți nevoie de procesoare multi-core? Motivul cotidian

La alegerea procesorului pentru un computer (și anume, atunci când vă gândiți la numărul de nuclee), ar trebui să determinați principalele tipuri de sarcini pe care le va îndeplini.

Pentru a îmbunătăți cunoștințele în domeniu hardware pentru computer, puteți citi materialul despre prize de procesor .

Punctul de plecare poate fi numit procesoare dual-core, deoarece nu are rost să ne întoarcem la soluțiile single-core. Dar și procesoarele dual-core sunt diferite. Poate că nu este cel mai „proaspăt” Celeron, dar poate Core i3 Podul Ivy, în mod similar cu AMD - Sempron sau Phenom II. Bineînțeles, datorită altor indicatori, performanța lor va fi foarte diferită, deci trebuie să priviți totul în mod cuprinzător și să comparați multicore cu alții. caracteristicile procesoarelor.

De exemplu, Core i3 pe Ivy Bridge are tehnologia Hyper-Treading, care permite procesarea a 4 fire simultan (sistemul de operare vede 4 nuclee logice în loc de 2 fizice). Și același Celeron nu se laudă cu așa ceva.

Dar să revenim direct la gândirea la sarcinile necesare. Dacă este necesar un computer pentru munca de birou și pentru navigarea pe Internet, atunci este suficient un procesor dual-core.

Când vine vorba de performanța jocurilor, sunt necesare 4 sau mai multe nuclee pentru a vă simți confortabil în majoritatea jocurilor. Dar aici apare același obstacol: nu toate jocurile au un cod optimizat pentru procesoarele cu 4 nuclee și, dacă acestea sunt optimizate, nu atât de eficient pe cât ne-am dori. Dar, în principiu, pentru jocuri acum soluția optimă este tocmai cel de-al patrulea procesor core.


Astăzi, același 8-core Procesoare AMD, pentru că jocurile sunt redundante, este numărul de nuclee care este redundant, dar performanța este scurtă, dar au și alte avantaje. Aceleași 8 nuclee vă vor ajuta foarte mult în sarcinile în care aveți nevoie muncă puternică cu sarcină multi-filet de înaltă calitate. Acestea includ, de exemplu, redarea (redarea) video sau computerul de pe server. Prin urmare, astfel de sarcini necesită 6, 8 sau mai multe nuclee. Și în viitorul apropiat, jocurile vor putea încărca 8 sau mai multe nuclee de înaltă calitate, așa că, în viitor, totul este foarte roz.

Nu uitați că există o mulțime de sarcini care creează o încărcare cu un singur fir. Și merită să vă puneți o întrebare: am nevoie sau nu de acest 8-core?

Rezumând rezultate mici, aș dori să menționez încă o dată că avantajele multicore se manifestă în munca de calcul multithread "greutăți". Și dacă nu jucați jocuri cu cerințe exorbitante și nu faceți tipuri specifice de muncă care necesită o putere de calcul bună, atunci pur și simplu nu are rost să cheltuiți bani pe procesoare multi-core scumpe (

După ce ne-am ocupat de teoria multithreadingului, să luăm în considerare un exemplu practic - Pentium 4. Deja în stadiul dezvoltării acestui procesor, inginerii Intel au continuat să lucreze la creșterea performanței sale fără a introduce modificări în interfața programului. Au fost luate în considerare cinci moduri simple:

Creșterea frecvenței ceasului;

Amplasarea a două procesoare pe un microcircuit;

Introducerea de noi blocuri funcționale;

Extinderea transportorului;

Folosind multithreading.

Cel mai evident mod 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 ceva mai mare decât precedentul. Din păcate, cu o creștere liniară a frecvenței ceasului, dezvoltatorii se confruntă cu două probleme: o creștere a consumului de energie (care este importantă pentru computerele portabile și alte dispozitive de calcul care funcționează cu baterii) și supraîncălzirea (care necesită radiatoare mai eficiente).

A doua metodă - plasarea a două procesoare pe un microcircuit - este relativ simplă, dar implică dublarea suprafeței ocupate de microcircuit. Dacă fiecare procesor este furnizat cu propria memorie cache, numărul de jetoane de pe platou se reduce la jumătate, dar aceasta înseamnă și o dublare a costurilor de producție. Prin furnizarea unei cache partajate pentru ambele procesoare, se poate evita o creștere semnificativă a amprentei, dar în acest caz apare o altă problemă - cantitatea de memorie cache pe procesor este redusă la jumătate și acest lucru afectează inevitabil performanța. În plus, în timp ce aplicațiile server profesionale sunt capabile să utilizeze pe deplin resursele mai multor procesoare, în programele desktop obișnuite, paralelismul intern este mult mai puțin dezvoltat.

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 blocuri ALU dacă microcircuitul nu poate emite comenzi către transportor la o viteză atât de mare încât să poată fi încărcate toate aceste blocuri?

Un transportor cu un număr crescut de trepte, capabil să împartă sarcinile în segmente mai mici și să le proceseze în perioade scurte de timp, pe de o parte, crește productivitatea, pe de altă parte, mărește consecințele negative ale tranzițiilor nepredictite, pierderile din cache, întreruperile și alte evenimente care perturbă comenzile normale de procesare a fluxului în procesor. În plus, pentru a realiza pe deplin capabilitățile conductei extinse, este necesar să creșteți frecvența ceasului, 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 pentru a aduce resurse hardware care altfel ar fi inactive. Pe baza rezultatelor studiilor experimentale, dezvoltatorii Intel au descoperit că o creștere de 5% a suprafeței cipurilor atunci când implementează multithreading pentru multe aplicații are ca rezultat un câștig de performanță de 25%. Primul procesor Intel care a acceptat multithreading a fost Heon din 2002. Ulterior, începând de la 3,06 GHz, multithreading-ul a fost introdus în linia Pentium 4. Intel solicită implementarea multithreading-ului în Pentium 4 hyperthreading.

După ce ne-am ocupat de teoria multithreadingului, să luăm în considerare un exemplu practic - Pentium 4. Deja în stadiul dezvoltării acestui procesor, inginerii Intel au continuat să lucreze la creșterea performanței sale fără a introduce modificări în interfața programului. Au fost luate în considerare cinci moduri simple:
1. Măriți frecvența ceasului.
2. Amplasarea a două procesoare pe un microcircuit.
3. Introducerea de noi blocuri funcționale.
1. Extinderea transportorului.
2. Folosirea multithreading-ului.
Cel mai evident mod 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 ceva mai mare decât precedentul. Din păcate, cu o creștere liniară a frecvenței ceasului, dezvoltatorii se confruntă cu două probleme: o creștere a consumului de energie (care este importantă pentru computerele portabile și alte dispozitive de calcul care funcționează cu baterii) și supraîncălzirea (care necesită radiatoare mai eficiente).
A doua metodă - plasarea a două procesoare pe un microcircuit - este relativ simplă, dar implică dublarea suprafeței ocupate de microcircuit. Dacă fiecare procesor este furnizat cu propria memorie cache, numărul de jetoane de pe platou se reduce la jumătate, dar aceasta înseamnă și o dublare a costurilor de producție. Prin furnizarea unei cache partajate pentru ambele procesoare, se poate evita o creștere semnificativă a amprentei, dar în acest caz apare o altă problemă - cantitatea de memorie cache pe procesor este redusă la jumătate și acest lucru afectează inevitabil performanța. În plus, în timp ce aplicațiile server profesionale sunt capabile să utilizeze pe deplin resursele mai multor procesoare, în programele desktop obișnuite, paralelismul intern este mult mai puțin dezvoltat.
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 blocuri ALU dacă microcircuitul nu poate emite comenzi către transportor la o viteză atât de mare încât să poată fi încărcate toate aceste blocuri?
Un transportor cu un număr crescut de trepte, capabil să împartă sarcinile în segmente mai mici și să le proceseze în perioade scurte de timp, pe de o parte, crește productivitatea, pe de altă parte, mărește consecințele negative ale tranzițiilor nepredictite, pierderile din cache, întreruperile și alte evenimente care perturbă comenzile normale de procesare a fluxului în procesor. În plus, pentru a realiza pe deplin capabilitățile conductei extinse, este necesar să creșteți frecvența ceasului, 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 pentru a aduce resurse hardware care altfel ar fi inactive. Pe baza rezultatelor studiilor experimentale, dezvoltatorii Intel au descoperit că o creștere de 5% a suprafeței cipurilor atunci când implementează multithreading pentru multe aplicații are ca rezultat un câștig de performanță de 25%. Primul procesor Intel care a acceptat multithreading a fost Xeon din 2002. Ulterior, începând de la 3,06 GHz, multithreading-ul a fost introdus în linia Pentium 4. Intel solicită implementarea multithreading-ului în Pentium 4 hyperthreading.
Principiul de bază al hiper-threading-ului este executarea simultană a două fire de software (sau procese - procesorul nu face distincție între procese și fire de software). Sistemul de operare vede procesorul hiper-thread Pentium 4 ca un complex cu procesor dual cu cache-uri 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ția interactivă - adică daemonul și programul utilizatorului rulează concomitent, ca și cum ar exista două procesoare disponibile pentru sistem.
Programele de aplicații care pot rula sub formă de fire multiple de program pot folosi ambele „procesoare virtuale”. De exemplu, programele de editare video permit de obicei utilizatorilor să aplice filtre tuturor cadrelor. Aceste filtre reglează luminozitatea, contrastul, echilibrul culorilor și alte proprietăți ale cadrelor. Într-o astfel de situație, programul poate atribui un procesor virtual pentru procesarea cadrelor pare și altul pentru procesarea cadrelor impare. În acest caz, cele două procesoare vor funcționa complet independent unul de celălalt.
Deoarece firele software accesează aceleași resurse hardware, este necesară coordonarea acestor fire. În contextul hiperthreading-ului, Intel a identificat patru strategii utile pentru gestionarea partajării resurselor: duplicarea resurselor și partajarea dură, prag și resursă completă. Să aruncăm o privire asupra acestor strategii.
Să începem cu duplicarea resurselor. După cum știți, unele resurse sunt duplicate în scopul organizării fluxurilor de programe. De exemplu, deoarece fiecare fir de program are nevoie de control individual, este necesar un al doilea contor de instrucțiuni. În plus, este necesar să introduceți un 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.
Următoarea este tehnica divizare grea resurse (partajarea resurselor partiționate) între fluxurile de programe. De exemplu, dacă procesorul oferă o coadă între două etape funcționale ale conductei, atunci jumătate din sloturi pot fi date la firul 1, cealaltă jumătate la firul 2. Partajarea resurselor este ușor de implementat, nu duce la dezechilibru și asigură independența completă a firelor de programe unul față de celălalt. Cu partajarea 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 program nu utilizează resurse care ar putea fi utile celui de-al doilea fir, dar pentru care nu are autorizare de acces. Ca urmare, resursele care altfel ar putea fi utilizate sunt inactive.
Opusul partajării dificile este partajarea completă a resurselor. În această schemă, orice fir de program poate accesa resursele necesare și sunt deservite în ordinea în care sunt primite cererile de acces. Luați în considerare o situație în care un flux rapid, constând în principal din operațiuni de adunare și scădere, coexista cu un flux lent care implementează operații de multiplicare și divizare. Dacă instrucțiunile sunt apelate din memorie mai repede decât se efectuează operațiile de multiplicare și divizare, numărul instrucțiunilor apelate în firul lent și în coadă la 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. Partajarea completă a resurselor rezolvă problema utilizării non-optime a resurselor partajate, dar creează un dezechilibru în consumul lor - un fir poate încetini sau opri altul.
Schema intermediară este implementată în cadrul partajării resurselor prag. Conform acestei scheme, orice fir de program poate primi dinamic o anumită cantitate (limitată) de resurse. Atunci când este aplicată resurselor replicate, această abordare oferă flexibilitate fără amenințarea timpului de nefuncționare pentru unul dintre firele de program datorită incapacității de a obține resurse. Dacă, de exemplu, interziceți fiecărui fir să ocupe mai mult de 3/4 din coada de comandă, consumul crescut de resurse al unui fir lent nu va împiedica executarea unuia rapid.
Modelul Pentium 4 hyper-threading combină diferite strategii de partajare a resurselor. Astfel, se încearcă rezolvarea tuturor problemelor asociate fiecărei strategii. Duplicarea este implementată în legătură cu resursele care sunt solicitate în mod constant de ambele fire de program (în special, în legătură cu contorul de instrucțiuni, tabelul de mapare a registrului și controlerul de întrerupere). Duplicarea acestor resurse mărește suprafața microcircuitului cu doar 5% - de acord, un preț destul de rezonabil pentru multithreading. Resursele disponibile într-un astfel de volum încât este practic imposibil ca acestea să fie capturate de un fir (de exemplu, liniile cache) sunt alocate dinamic. Accesul la resursele care controlează funcționarea conductei (în special, numeroasele sale cozi) este împărțit - jumătate din sloturi sunt alocate fiecărui fir de program. Principala conductă a arhitecturii Pentium 4 Netburst este prezentată în Fig. 8,7; zonele albe și gri din această ilustrație reprezintă mecanismul de alocare a resurselor între fluxurile de programe albe și gri.
După cum puteți vedea, toate cozile din această ilustrație sunt separate - jumătate din sloturi sunt alocate fiecărui fir de program. 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 unui anumit prag, astfel încât niciun fir să nu poată ocupa toate sloturile din coadă. Pentru toate celelalte etape ale transportorului, are loc o separare completă.
Cu toate acestea, multithreading-ul nu este atât de simplu. Chiar și această tehnică progresivă are dezavantaje. Partajarea rigidă a resurselor nu vine cu cheltuieli generale semnificative, dar partiționarea dinamică, în special în ceea ce privește pragurile, necesită urmărirea consumului de resurse în timpul rulării. În plus, în unele cazuri, programele au performanțe semnificativ mai bune fără multithreading decât cu acesta. Să presupunem, de exemplu, că dacă aveți două fire, fiecare dintre ele necesită 3/4 din cache pentru a funcționa corect. Dacă ar fi executate la rândul lor, fiecare ar arăta o eficiență suficientă cu un număr mic de rate de cache (după cum știți, asociate cu costuri suplimentare). În cazul execuției paralele, fiecare ar avea semnificativ mai multe rate de cache, iar rezultatul final ar fi mai rău decât fără multithreading.
Mai multe informații despre mecanismul multithreading al RepPit 4 pot fi găsite în.

Nu veți surprinde pe nimeni cu procesoare multi-core în zilele noastre. Dimpotrivă, toată lumea încearcă să-și sprijine computerul cât mai multe nuclee posibil și, prin urmare, să funcționeze mai repede și acest lucru este corect.
În ceea ce privește procesoarele, de mult timp au existat pe piață doar doi producători - aceștia sunt Intel și AMD. Și dacă aceștia din urmă vorbesc despre procesoarele lor cu 8 și 10 nuclee (ceea ce înseamnă că sunt foarte mulți, ceea ce înseamnă că sunt mai puternici), atunci primii au 2 și 4 nuclee, dar se concentrează pe firele lor (nu există trebuie să scriu comentarii furioase că există nuclee și multe altele, deoarece în continuare sunt descrise procesoarele pentru uz casnic).

Și dacă te uiți la graficele comparative ale performanței procesorului, poți vedea că procesorul cu 4 nuclee (nu toate) de la Intel va depăși performanța celor 8 nuclee de la AMD. De ce este așa? La urma urmei, 4 este mai mic decât 8, ceea ce înseamnă că ar trebui să fie mai slab ... Dar dacă săpați mai adânc (nu direct în cache, frecvență, autobuz etc.), puteți vedea un cuvânt interesant, care este adesea descris Procesoare Intel - Suport hiper-filet.

Tehnologia hiper-threading („hiper-threading” la oamenii obișnuiți) a fost inventată de Intel și este utilizată doar în procesoarele lor (nu în toate). Nu voi intra în detaliile sale foarte profund, dacă doriți, puteți citi despre asta la. Această tehnologie permite, ca să spunem așa, să împărțim fiecare nucleu în două și, ca rezultat, în loc de un fizic, avem două logice (sau virtuale) și o funcționare Sistem Windows crede că două sunt instalate în loc de una.

Cum să aflați câte fire există în procesor?

Dacă doriți să aflați despre un anumit procesor, atunci cel mai adesea în descrierile din magazine acestea indică suport pentru Hyper-threading, fie prin inserarea acestei fraze, fie pur și simplu prin abrevierea HT. Dacă nu există o astfel de descriere, puteți utiliza întotdeauna cele mai veridice informații pe pagina oficială Intel http://ark.intel.com/ru/search/advanced/?s=t&HyperThreading=true
Vă recomand să utilizați numai aceste informații, deoarece acestea sunt cele mai exacte.

Dacă doriți să aflați că sunteți deja în sistem și că aceleași fluxuri sunt utilizate în mod specific în sistemul dvs., atunci nu este nimic mai ușor.

Rulați orice într-un mod convenabil(cel mai simplu mod este să utilizați comanda rapidă Ctrl + Shift + Esc) de oriunde (chiar și în timp ce citiți acest articol) și, dacă aveți Windows 7, accesați fila Performanță.


fi atent la linia de sus cu încărcarea procesorului și în mod specific pe numărul de „pătrate”. Cam atât vor fi - vor fi atât de multe nuclee, inclusiv toate firele. Mai precis, toate nucleele logice / virtuale sunt afișate aici, iar firele sunt exact ceea ce sunt.

Dacă aveți Windows 8, 8.1 sau 10, atunci nu va exista o astfel de filă, dar există Performanță.


Aici am evidențiat unde trebuie să fii atent. Apropo, nu degeaba am făcut clic dreapta pe acest grafic, deoarece dacă selectați elementul Procese logice, graficul se va schimba și va arăta ca cel din Windows 7, adică vor exista 8 „pătrate” și grafice de încărcare pentru fiecare nucleu.
Dacă aveți imaginea opusă, adică nu sunt afișate una, ci mai multe diagrame, ceea ce înseamnă că acest element este selectat în proprietățile diagramei în sine.

Desigur, există mai multe modalități de a face și, în acest caz, fluxuri.

De exemplu, puteți apela proprietatea sistemului (comanda rapidă de la tastatură Win + R și introduceți systeminfo) și o puteți vedea acolo.