Internet Windows Android

Tehnologia Hyper threading. Încă o dată despre Hyper Threading

Tehnologia Hyper-Threading (HT, hyperthreading) a apărut pentru prima dată în urmă cu 15 ani - în 2002, în procesoarele Pentium 4 și Xeon, și de atunci a apărut în procesoarele Intel (în linia Core i, unele Atom și recent și în Pentium), apoi a dispărut (suportul său nu era în liniile Core 2 Duo și Quad). Și în acest timp, a dobândit proprietăți mitice - se spune că prezența sa aproape dublează performanța procesorului, transformând i3-urile slabe în i5-urile puternice. În același timp, alții spun că HT este un truc obișnuit de marketing și este de puțin folos. Adevărul este, ca de obicei, la mijloc - în unele locuri există un sens din el, dar cu siguranță nu ar trebui să vă așteptați la o creștere de două ori.

Descrierea tehnică a tehnologiei

Să începem cu definiția dată pe site-ul Intel:

Tehnologia Intel® Hyper-Threading (Intel® HT) permite o utilizare mai eficientă a resurselor procesorului, permițând rularea mai multor fire de execuție pe fiecare nucleu. În ceea ce privește performanța, această tehnologie mărește debitul procesoarelor, îmbunătățind performanța generală a aplicațiilor multi-threaded.

În general, este clar că nimic nu este clar - doar fraze generale, dar ele descriu pe scurt tehnologia - HT permite unui nucleu fizic să proceseze simultan mai multe (de obicei două) fire logice. Dar cum? Procesor care acceptă hyperthreading:

  • poate stoca informații despre mai multe fire de execuție simultan;
  • conţine un set de registre (adică blocuri de memorie rapidă în interiorul procesorului) şi un controler de întrerupere (adică o unitate de procesor încorporată responsabilă de capacitatea de a procesa secvenţial cererile pentru apariţia oricărui eveniment care necesită atenţie imediată din partea dispozitive diferite) pentru fiecare CPU logic.
Să ne uităm la un exemplu simplu:

Să presupunem că procesorul are două sarcini. Dacă procesorul are un nucleu, atunci le va executa secvențial, dacă două, atunci în paralel pe două nuclee, iar timpul de execuție al ambelor sarcini va fi egal cu timpul petrecut pe sarcina mai grea. Dar dacă procesorul este single-core, dar acceptă hyperthreading? După cum puteți vedea în imaginea de mai sus, atunci când efectuați o sarcină, procesorul nu este 100% ocupat - unele blocuri de procesor pur și simplu nu sunt necesare în această sarcină, undeva modulul de predicție a ramurilor comite o eroare (care este necesară pentru a prezice dacă un ramura condiționată va fi executată în program), undeva există o eroare de acces la cache - în general, la executarea unei sarcini, procesorul este rareori ocupat mai mult de 70%. Și tehnologia HT doar „împinge” o a doua sarcină în blocuri de procesor neocupate și se dovedește că două sarcini sunt procesate simultan pe un nucleu. Cu toate acestea, dublarea performanței nu are loc din motive evidente - de foarte multe ori se dovedește că două sarcini au nevoie de aceeași unitate de calcul în procesor, iar apoi vedem una simplă: în timp ce o sarcină este procesată, execuția celei de-a doua. este pur și simplu oprit în acest moment (pătrate albastre - prima sarcină, verde - a doua, roșie - sarcini care accesează același bloc în procesor):

Ca urmare, timpul petrecut de un procesor cu HT pe două sarcini se dovedește a fi mai mare decât timpul necesar pentru a calcula cea mai grea sarcină, dar mai puțin decât timpul necesar pentru a evalua secvențial ambele sarcini.

Avantajele și dezavantajele tehnologiei

Luând în considerare faptul că matrița procesorului cu suport HT este mai mare din punct de vedere fizic decât matrița procesorului fără HT cu o medie de 5% (acesta este cât ocupă blocurile de registre suplimentare și controlerele de întrerupere), iar suportul HT vă permite să încărcați procesor cu 90-95%, apoi față de 70% fără HT obținem că creșterea va fi în cel mai bun caz de 20-30% - cifra este destul de mare.

Totuși, nu totul este atât de bun: se întâmplă să nu existe deloc un câștig de performanță de la HT și chiar se întâmplă ca HT să înrăutățească performanța procesorului. Acest lucru se întâmplă din mai multe motive:

  • Lipsa memoriei cache. De exemplu, i5-urile moderne quad-core au 6 MB de cache L3 - 1,5 MB per nucleu. În i7-urile quad-core cu HT, memoria cache este deja de 8 MB, dar deoarece există 8 nuclee logice, obținem doar 1 MB per nucleu - în timpul calculelor, este posibil ca unele programe să nu aibă suficient acest volum, ceea ce duce la o scădere a volumului. performanţă.
  • Lipsa de optimizare software. Problema cea mai de bază este că programele consideră că nucleele logice sunt fizice, motiv pentru care atunci când se execută sarcini în paralel pe un nucleu, apar adesea întârzieri din cauza accesării sarcinilor la aceeași unitate de calcul, ceea ce în cele din urmă reduce câștigul de performanță de la HT la nimic.
  • Dependența de date. Din punctul anterior rezultă - pentru a finaliza o sarcină, este necesar rezultatul alteia, dar nu a fost încă finalizat. Și din nou obținem timpi de nefuncționare, o reducere a încărcării procesorului și o creștere mică de la HT.
Programe care pot funcționa cu hyperthreading

Există multe dintre ele, deoarece pentru calculele HT aceasta este mana din cer - disiparea căldurii practic nu crește, procesorul nu devine mult mai mare, iar cu o optimizare adecvată puteți obține o creștere de până la 30%. Prin urmare, suportul său a fost implementat rapid în acele programe în care este ușor de paralelizat încărcarea - în arhive (WinRar), programe pentru modelare 2D/3D (3ds Max, Maya), programe pentru procesare foto și video (Sony Vegas, Photoshop, Corel Draw) .

Programe care nu funcționează bine cu hyperthreading

În mod tradițional, aceasta este majoritatea jocurilor - de obicei sunt dificil de paralelizat în mod competent, așa că adesea patru nuclee fizice la frecvențe înalte (seria i5 K) sunt mai mult decât suficiente pentru jocuri, paralelizarea care cu 8 nuclee logice în i7 se dovedește a fi o sarcină imposibilă. Totuși, merită luat în considerare și faptul că există procese de fundal, iar dacă procesorul nu acceptă HT, atunci procesarea lor cade pe nucleele fizice, ceea ce poate încetini jocul. Aici câștigă i7 cu HT - toate sarcinile de fundal au în mod tradițional o prioritate mai mică, așa că atunci când rulează simultan pe un nucleu fizic al jocului și o sarcină de fundal, jocul va primi o prioritate sporită, iar sarcina de fundal nu va „distrage” nucleele. ocupat cu jocul - de aceea Pentru jocuri de streaming sau inregistrare, este mai bine sa iei un i7 cu hyperthreading.

Rezultate

Poate că rămâne o singură întrebare aici - are sens să luăm procesoare cu HT sau nu? Dacă vă place să păstrați cinci programe deschise în același timp și să jucați jocuri în același timp sau sunteți implicat în procesarea foto, video sau modelare - da, bineînțeles că merită luat. Și dacă sunteți obișnuit să închideți toate celelalte înainte de a lansa un program greu și nu vă băgați în procesare sau modelare, atunci un procesor cu HT nu vă este de nici un folos.

15.03.2013

Tehnologia Hyper-Threading a apărut în procesoarele Intel, înfricoșător să spunem, cu mai bine de 10 ani în urmă. Și în acest moment este un element important al procesoarelor Core. Cu toate acestea, întrebarea privind necesitatea HT în jocuri nu este încă complet clară. Am decis să facem un test pentru a înțelege dacă jucătorii au nevoie de un Core i7 sau dacă un Core i5 este mai bun. Și, de asemenea, află cât de mai bun este Core i3 decât Pentium.


Tehnologia Hyper-Threading, dezvoltată de Intel și utilizată exclusiv în procesoarele companiei, începând cu memorabilul Pentium 4, este ceva ce este de la sine înțeles în acest moment. Un număr semnificativ de procesoare din generațiile actuale și anterioare sunt echipate cu acesta. Va fi folosit în viitorul apropiat.

Și trebuie să recunoaștem că tehnologia Hyper-Threading este utilă și are un efect pozitiv asupra performanței, altfel Intel nu ar folosi-o pentru a-și poziționa procesoarele în linie. Și nu ca element secundar, ci unul dintre cele mai importante, dacă nu și cele mai importante. Pentru a clarifica despre ce vorbim, am pregătit un tabel care facilitează evaluarea principiului de segmentare a procesoarelor Intel.


După cum puteți vedea, există foarte puține diferențe între Pentium și Core i3, precum și între Core i5 și Core i7. De fapt, modelele i3 și i7 diferă de Pentium și i5 doar prin dimensiunea cache-ului de al treilea nivel per nucleu (fără a număra frecvența de ceas, desigur). Prima pereche are 1,5 megaocteți, iar a doua pereche are 2 megaocteți. Această diferență nu poate afecta în mod fundamental performanța procesoarelor, deoarece diferența de dimensiune a memoriei cache este foarte mică. De aceea Core i3 și Core i7 au primit suport pentru tehnologia Hyper-Threading, care este principalul element care permite acestor procesoare să aibă un avantaj de performanță față de Pentium, respectiv Core i5.

Drept urmare, un cache ceva mai mare și suport pentru Hyper-Threading vor permite prețuri semnificativ mai mari pentru procesoare. De exemplu, procesoarele liniei Pentium (aproximativ 10 mii tenge) sunt de aproximativ două ori mai ieftine decât Core i3 (aproximativ 20 mii tenge), și asta în ciuda faptului că fizic, la nivel hardware, sunt absolut identice și, în consecință , au același cost . Diferența de preț dintre Core i5 (aproximativ 30 de mii de tenge) și Core i7 (aproximativ 50 de mii de tenge) este, de asemenea, foarte mare, deși de mai puțin de două ori la modelele mai tinere.


Cât de justificată este această creștere a prețului? Ce câștig real oferă Hyper-Threading? Răspunsul este cunoscut de mult: creșterea variază, totul depinde de aplicație și de optimizarea acesteia. Am decis să verificăm ce poate face HT în jocuri, ca fiind una dintre cele mai solicitante aplicații „casnice”. În plus, acest test va fi o completare excelentă la materialul nostru anterior asupra efectului numărului de nuclee din procesor asupra performanței în joc.

Înainte de a trece la teste, să ne amintim (sau să aflăm) ce este Tehnologia Hyper-Threading. După cum a spus Intel însuși când a introdus această tehnologie în urmă cu mulți ani, nu este nimic deosebit de complicat în ea. De fapt, tot ceea ce este necesar pentru a introduce HT la nivel fizic este să adăugați nu un set de registre și un controler de întrerupere la un nucleu fizic, ci două. La procesoarele Pentium 4, aceste elemente suplimentare au crescut numărul de tranzistori cu doar cinci procente. În nucleele moderne Ivy Bridge (precum și Sandy Bridge și viitorul Haswell), elementele suplimentare chiar și pentru patru nuclee nu măresc matrița cu nici măcar 1 la sută.


Registrele suplimentare și un controler de întrerupere, împreună cu suport software, permit sistemului de operare să vadă nu un nucleu fizic, ci două logice. În același timp, procesarea datelor din două fluxuri care sunt trimise de sistem are loc în continuare pe același nucleu, dar cu unele caracteristici. Un thread mai are la dispoziție întregul procesor, dar de îndată ce unele blocuri CPU sunt eliberate și inactive, acestea sunt imediat date celui de-al doilea thread. Datorită acestui fapt, a fost posibilă utilizarea simultană a tuturor blocurilor de procesor și, astfel, creșterea eficienței acestuia. După cum a afirmat chiar Intel, creșterea performanței în condiții ideale poate ajunge până la 30%. Adevărat, acești indicatori sunt valabili doar pentru Pentium 4, cu o conductă foarte lungă; procesoarele moderne beneficiază de HT mai puțin.

Dar condițiile ideale pentru Hyper-Threading nu sunt întotdeauna cazul. Și cel mai important, cel mai rău rezultat al HT nu este lipsa câștigului de performanță, ci scăderea acestuia. Adică, în anumite condiții, performanța unui procesor cu HT va scădea în comparație cu un procesor fără HT, datorită faptului că supraîncărcarea de diviziune a firelor și a punerii în așteptare va depăși semnificativ câștigul din procesarea firelor paralele, ceea ce este posibil în acest caz. caz. Și astfel de cazuri apar mult mai des decât și-ar dori Intel. Mai mult, mulți ani de utilizare a Hyper-Threading nu au îmbunătățit situația. Acest lucru este valabil mai ales pentru jocurile care sunt foarte complexe și deloc standard în ceea ce privește calculul datelor și aplicațiile.

Pentru a afla impactul Hyper-Threading asupra performanței jocurilor, am folosit din nou procesorul nostru de testare Core i7-2700K și am simulat patru procesoare simultan, dezactivând nuclee și pornind/dezactivând HT. În mod convențional, ele pot fi numite Pentium (2 nuclee, HT dezactivat), Core i3 (2 nuclee, HT activat), Core i5 (4 nuclee, HT dezactivat) și Core i7 (4 nuclee, HT activat). De ce conditionat? În primul rând, pentru că după unele caracteristici nu corespund unor produse reale. În special, dezactivarea nucleelor ​​nu duce la o reducere corespunzătoare a volumului cache-ului de al treilea nivel - volumul său pentru toți este de 8 megaocteți. Și, în plus, toate procesoarele noastre „condiționale” funcționează la aceeași frecvență de 3,5 gigaherți, ceea ce nu a fost încă atins de toate procesoarele din linia Intel.


Cu toate acestea, acest lucru este chiar și în bine, deoarece datorită schimbării constante a tuturor parametrilor importanți, vom putea afla impactul real al Hyper-Threading asupra performanței jocurilor fără nicio rezervă. Iar diferența procentuală de performanță dintre Pentium-ul nostru „condițional” și Core i3 va fi aproape de diferența dintre procesoarele reale, cu condiția ca frecvențele să fie egale. De asemenea, nu ar trebui să fie confuz faptul că folosim un procesor cu arhitectură Sandy Bridge, deoarece testele noastre de eficiență, despre care puteți citi în articolul „Bare Performance - Examining the Efficiency of ALU-uri și FPU-uri”, au arătat că influența Hyper- Threadingul în ultimele generații de procesoare Core rămâne neschimbat. Cel mai probabil, acest material va fi relevant și pentru viitoarele procesoare Haswell.

Ei bine, se pare că toate întrebările referitoare la metodologia de testare, precum și caracteristicile de operare ale tehnologiei Hyper-Threading au fost discutate și, prin urmare, este timpul să trecem la cel mai interesant lucru - testele.

Chiar și într-un test în care am studiat impactul numărului de nuclee de procesor asupra performanței în jocuri, am constatat că 3DMark 11 este complet relaxat în ceea ce privește performanța procesorului, funcționând perfect chiar și pe un singur nucleu. Hyper-Threading a avut aceeași influență „puternică”. După cum puteți vedea, testul nu observă diferențe între Pentium și Core i7, ca să nu mai vorbim de modelele intermediare.

Metroul 2033

Dar Metro 2033 a observat clar apariția Hyper-Threading. Și ea a reacționat negativ la el! Da, așa este: activarea HT în acest joc are un impact negativ asupra performanței. Un impact mic, desigur - 0,5 cadre pe secundă cu patru nuclee fizice și 0,7 cu două. Dar acest fapt dă toate motivele să spunem că Metro 2033 Pentium este mai rapid decât Core i3, iar Core i5 este mai bun decât Core i7. Aceasta este o confirmare a faptului că Hyper-Threading nu își arată eficiența întotdeauna și nu peste tot.

Crysis 2

Acest joc a dat rezultate foarte interesante. În primul rând, observăm că influența Hyper-Threading este clar vizibilă în procesoarele dual-core - Core i3 este înaintea Pentium cu aproape 9 procente, ceea ce este destul de mult pentru acest joc. Victorie pentru HT și Intel? Nu chiar, din moment ce Core i7 nu a prezentat niciun câștig în comparație cu Core i5 considerabil mai ieftin. Dar există o explicație rezonabilă pentru aceasta - Crysis 2 nu poate folosi mai mult de patru fluxuri de date. Din această cauză, vedem o creștere bună a dual-core-ului cu HT - totuși, patru fire, deși logice, sunt mai bune decât două. Pe de altă parte, nu a existat unde să puneți fire suplimentare Core i7; patru nuclee fizice au fost destul de suficiente. Deci, pe baza rezultatelor acestui test, putem observa impactul pozitiv al HT în Core i3, care este vizibil mai bun decât Pentium aici. Dar printre procesoarele quad-core, Core i5 pare din nou o soluție mai rezonabilă.

Câmpul de luptă 3

Rezultatele de aici sunt foarte ciudate. Dacă în testul pentru numărul de nuclee, câmpul de luptă a fost un exemplu de creștere microscopică, dar liniară, atunci includerea Hyper-Threading a introdus haos în rezultate. De fapt, putem afirma că Core i3, cu cele două nuclee și HT, s-a dovedit a fi cel mai bun dintre toate, înaintea chiar și Core i5 și Core i7. Este ciudat, desigur, dar, în același timp, Core i5 și Core i7 au fost din nou la același nivel. Ce explică acest lucru nu este clar. Cel mai probabil, metodologia de testare din acest joc a jucat un rol aici, ceea ce dă erori mai mari decât benchmark-urile standard.

În ultimul test, F1 2011 s-a dovedit a fi unul dintre jocurile care critică foarte mult numărul de nuclee, iar în acest test ne-a surprins din nou cu impactul excelent al tehnologiei Hyper-Threading asupra performanței. Și din nou, ca și în Crysis 2, includerea HT a funcționat foarte bine pe procesoarele dual-core. Uită-te la diferența dintre Core i3 și Pentium - este mai mult de două ori! Este clar că jocului îi lipsesc foarte mult două nuclee și, în același timp, codul său este paralelizat atât de bine încât efectul este uimitor. Pe de altă parte, nu te poți certa cu patru nuclee fizice - Core i5 este vizibil mai rapid decât Core i3. Dar Core i7, din nou, ca și în jocurile anterioare, nu a arătat nimic remarcabil în comparație cu Core i5. Motivul este același - jocul nu poate folosi mai mult de 4 fire de execuție, iar suprasolicitarea rulării HT reduce performanța Core i7 sub nivelul Core i5.

Un bătrân războinic are nevoie de Hyper-Threading nu mai mult decât un arici are nevoie de un tricou - influența sa nu este în niciun caz la fel de clar vizibilă ca în F1 2011 sau Crysis 2. Cu toate acestea, remarcăm în continuare că pornirea HT pe un procesor dual-core a adus 1 cadru suplimentar. Acest lucru cu siguranță nu este suficient pentru a spune că Core i3 este mai bun decât Pentium. Cel puțin, această îmbunătățire nu corespunde în mod clar diferenței de preț a acestor procesoare. Și nici măcar nu merită menționată diferența de preț dintre Core i5 și Core i7, deoarece procesorul fără suport HT s-a dovedit din nou a fi mai rapid. Și vizibil mai rapid - cu 7 la sută. Orice s-ar putea spune, afirmăm din nou faptul că patru fire este maximul pentru acest joc și, prin urmare, HyperThreading în acest caz nu ajută Core i7, ci împiedică.

Dacă ați căutat cu atenție conținutul BIOS Setup, atunci este posibil să fi observat acolo opțiunea CPU Hyper Threading Technology. Și poate v-ați întrebat ce este Hyper Threading (sau hyperthreading, numele oficial este Hyper Threading Technology, HTT) și pentru ce este această opțiune.

Hyper Threading este o tehnologie relativ nouă dezvoltată de Intel pentru procesoarele cu arhitectură Pentium. După cum a demonstrat practica, utilizarea tehnologiei Hyper Threading a făcut posibilă în multe cazuri creșterea performanței CPU cu aproximativ 20-30%.

Aici trebuie să vă amintiți cum funcționează, în general, procesorul central al unui computer. De îndată ce porniți computerul și rulați un program pe acesta, CPU începe să citească instrucțiunile conținute în el, scrise în așa-numitul cod mașină. Citește fiecare instrucțiune pe rând și le execută una după alta.

Cu toate acestea, multe programe au mai multe procese software care rulează simultan. În plus, sistemele de operare moderne permit utilizatorului să ruleze mai multe programe simultan. Și nu doar o permit - de fapt, o situație în care un singur proces rulează în sistemul de operare este complet de neconceput astăzi. Prin urmare, procesoarele dezvoltate folosind tehnologii mai vechi au avut performanțe scăzute în cazurile în care era necesară procesarea mai multor procese simultane.

Desigur, pentru a rezolva această problemă, puteți include mai multe procesoare sau procesoare care folosesc mai multe nuclee fizice de calcul în sistem. Dar o astfel de îmbunătățire este costisitoare, complexă din punct de vedere tehnic și nu întotdeauna eficientă din punct de vedere practic.

Istoricul dezvoltării

Prin urmare, s-a decis crearea unei tehnologii care să permită procesarea mai multor procese pe un nucleu fizic. În acest caz, pentru programe, va arăta în exterior ca și cum ar exista mai multe nuclee de procesor în sistem simultan.

Suportul pentru tehnologia Hyper Threading a apărut pentru prima dată în procesoare în 2002. Acestea erau procesoare din familia Pentium 4 și procesoare de server Xeon cu viteze de ceas de peste 2 GHz. Inițial, tehnologia a primit numele de cod Jackson, dar apoi numele a fost schimbat în Hyper Threading, ceea ce este mai ușor de înțeles pentru publicul larg - care poate fi tradus aproximativ ca „super-threading”.

În același timp, conform Intel, suprafața cristalului de procesor care suportă Hyper Threading a crescut față de modelul anterior care nu o suportă doar cu 5%, cu o creștere medie a performanței de 20%.

În ciuda faptului că tehnologia s-a dovedit în general bine, totuși, din mai multe motive, Intel a decis să dezactiveze tehnologia Hyper Threading în procesoarele din familia Core 2 care l-au înlocuit pe Pentium 4. Hyper Threading, totuși, a reapărut ulterior în procesoarele din Arhitecturile Sandy Bridge și Ivy Bridge și Haswell, fiind reproiectate semnificativ.

Esența tehnologiei

Înțelegerea tehnologiei Hyper Threading este importantă, deoarece este una dintre caracteristicile cheie ale procesoarelor Intel.

În ciuda întregului succes pe care l-au obținut procesoarele, acestea au un dezavantaj semnificativ - pot executa doar o instrucțiune la un moment dat. Să presupunem că ați lansat aplicații precum un editor de text, un browser și Skype în același timp. Din punctul de vedere al utilizatorului, acest mediu software poate fi numit multitasking, cu toate acestea, din punctul de vedere al procesorului, acest lucru este departe de a fi cazul. Nucleul procesorului va executa în continuare o instrucțiune pe o anumită perioadă de timp. În acest caz, sarcina procesorului este de a distribui resursele de timp ale procesorului între aplicațiile individuale. Deoarece această execuție secvențială a instrucțiunilor se întâmplă extrem de rapid, nu o observi. Și vi se pare că nu există întârziere.

Dar există încă o întârziere. Întârzierea apare din cauza modului în care fiecare program furnizează procesorului cu date. Fiecare flux de date trebuie să sosească la un moment specific și să fie procesat individual de procesor. Tehnologia Hyper Threading face posibil ca fiecare nucleu de procesor să programeze procesarea datelor și să distribuie resurse simultan pentru două fire.

Trebuie remarcat faptul că în nucleul procesoarelor moderne există mai multe așa-numite dispozitive de execuție, fiecare dintre ele proiectat pentru a efectua o operațiune specifică asupra datelor. În acest caz, unele dintre aceste dispozitive executive pot fi inactive în timp ce procesează date dintr-un fir.

Pentru a înțelege această situație, putem face o analogie cu muncitorii care lucrează într-un atelier de asamblare pe un transportor și prelucrează diferite tipuri de piese. Fiecare lucrător este echipat cu un instrument specific conceput pentru a îndeplini o sarcină. Cu toate acestea, dacă piesele ajung în ordinea greșită, apar întârzieri, deoarece unii lucrători așteaptă la coadă pentru a începe lucrul. Hyper Threading poate fi comparat cu o bandă transportoare suplimentară care a fost așezată în atelier, astfel încât lucrătorii anteriori inactivi să-și desfășoare operațiunile independent de ceilalți. Atelierul este încă unul, dar piesele sunt procesate mai rapid și mai eficient, ceea ce duce la reducerea timpului de nefuncționare. Astfel, Hyper Threading a făcut posibilă pornirea acelor unități de execuție a procesorului care erau inactive în timp ce executau instrucțiuni dintr-un fir.

De îndată ce porniți un computer cu un procesor dual-core care acceptă Hyper Threading și deschideți Windows Task Manager sub fila Performanță, veți găsi patru grafice în el. Dar asta nu înseamnă că ai de fapt 4 nuclee de procesor.

Acest lucru se întâmplă deoarece Windows crede că fiecare nucleu are două procesoare logice. Termenul „procesor logic” sună amuzant, dar înseamnă un procesor care nu există fizic. Windows poate trimite fluxuri de date către fiecare procesor logic, dar numai un nucleu realizează treaba. Prin urmare, un singur nucleu cu tehnologia Hyper Threading este semnificativ diferit de nucleele fizice separate.

Tehnologia Hyper Threading necesită suport de la următorul hardware și software:

  • CPU
  • Chipset placa de baza
  • sistem de operare

Beneficiile tehnologiei

Acum să luăm în considerare următoarea întrebare: cât de mult mărește tehnologia Hyper Threading performanța computerului? În sarcinile de zi cu zi, cum ar fi navigarea pe Internet și tastarea, beneficiile tehnologiei nu sunt atât de evidente. Cu toate acestea, rețineți că procesoarele de astăzi sunt atât de puternice încât sarcinile de zi cu zi rareori folosesc pe deplin procesorul. În plus, multe depind și de modul în care este scris software-ul. Este posibil să aveți mai multe programe care rulează simultan, dar dacă vă uitați la graficul de încărcare, veți vedea că este utilizat un singur procesor logic per nucleu. Acest lucru se întâmplă deoarece software-ul nu acceptă distribuția proceselor între nuclee.

Cu toate acestea, pentru sarcini mai complexe, Hyper Threading poate fi mai util. Aplicații precum programele de modelare 3D, jocurile 3D, programele de codare/decodare muzicală sau video și multe aplicații științifice sunt scrise pentru a profita din plin de multithreading. Astfel, puteți experimenta beneficiile de performanță ale unui computer compatibil cu Hyper Threading în timp ce jucați jocuri provocatoare, ascultați muzică sau vizionați filme. Creșterea performanței poate ajunge până la 30%, deși pot exista situații în care Hyper Threading nu oferă deloc un avantaj. Uneori, dacă ambele fire de execuție încarcă toate unitățile de execuție a procesorului cu aceleași sarcini, poate fi chiar observată o ușoară scădere a performanței.

Revenind la prezența unei opțiuni corespunzătoare în BIOS Setup care vă permite să setați parametrii Hyper Threading, în majoritatea cazurilor este recomandat să activați această funcție. Cu toate acestea, îl puteți dezactiva oricând dacă se dovedește că computerul rulează cu erori sau chiar are performanțe mai scăzute decât vă așteptați.

Concluzie

Deoarece creșterea maximă a performanței la utilizarea Hyper Threading este de 30%, nu se poate spune că tehnologia echivalează cu dublarea numărului de nuclee de procesor. Cu toate acestea, Hyper Threading este o opțiune utilă și, ca proprietar de computer, nu vă va răni. Beneficiul său este vizibil mai ales atunci când, de exemplu, editați fișiere multimedia sau folosiți computerul ca stație de lucru pentru programe profesionale precum Photoshop sau Maya.

Am scris că utilizarea sistemelor Xeon cu un singur procesor nu are sens, deoarece la un preț mai mare performanța lor va fi aceeași cu cea a unui Pentium 4 cu aceeași frecvență. Acum, după un studiu mai amănunțit, probabil că va trebui făcută o mică modificare la această afirmație. Tehnologia Hyper-Threading, implementată în Intel Xeon cu nucleul Prestonia, funcționează cu adevărat și dă un efect foarte vizibil. Deși apar multe întrebări când îl utilizați...

Oferi productivitate

"Mai repede, chiar mai repede..." Cursa pentru performanță se desfășoară de ani de zile și, uneori, este chiar dificil de spus care componentă a computerului accelerează mai repede. Pentru a realiza acest lucru, se inventează din ce în ce mai multe metode noi și, cu atât mai departe, cu atât mai multă muncă calificată și creiere de înaltă calitate sunt investite în acest proces asemănător avalanșelor.

O creștere constantă a performanței este cu siguranță necesară. Cel puțin, aceasta este o afacere profitabilă și există întotdeauna o modalitate frumoasă de a încuraja utilizatorii să facă un alt upgrade de la „procesorul super-eficient” de ieri la „și mai super...” de mâine. De exemplu, recunoașterea simultană a vorbirii și traducerea simultană într-o altă limbă - nu este acesta visul tuturor? Sau jocuri neobișnuit de realiste de calitate aproape de „cinema” (absorbând în întregime atenția și conducând uneori la schimbări serioase ale psihicului) - nu este aceasta dorința multor jucători, tineri și bătrâni?

Dar în acest caz, să scoatem din ecuație aspectele de marketing și să ne concentrăm pe cele tehnice. Mai mult, nu totul este atât de sumbru: există sarcini stringente (aplicații de server, calcule științifice, modelare etc.), unde performanțe din ce în ce mai mari, în special ale procesoarelor centrale, sunt cu adevărat necesare.

Deci, care sunt modalitățile de a le crește performanța?

Creșteți viteza ceasului. Este posibil să „subțiați” în continuare procesul tehnologic și să creșteți frecvența. Dar, după cum știți, acest lucru nu este ușor și este plin de tot felul de efecte secundare, cum ar fi probleme cu generarea de căldură.

Creșterea resurselor CPU- de exemplu, creșterea volumului cache-ului, adăugarea de noi blocuri (Execution Units). Toate acestea presupun o creștere a numărului de tranzistori, un procesor mai complex, o creștere a suprafeței cipului și, în consecință, a costului.

În plus, cele două metode anterioare, de regulă, nu asigură o creștere liniară a productivității. Acest lucru este bine cunoscut în Pentium 4: erorile în predicția ramurilor și întreruperile determină resetarea unei conducte lungi, ceea ce afectează foarte mult performanța generală.

Multiprocesare. Instalarea mai multor procesoare și distribuirea muncii între ele este adesea destul de eficientă. Dar această abordare nu este foarte ieftină - fiecare procesor suplimentar crește costul sistemului, iar o placă de bază dublă este mult mai scumpă decât una obișnuită (ca să nu mai vorbim de plăcile care suportă patru sau mai multe procesoare). În plus, nu toate aplicațiile beneficiază de multiprocesare în performanță suficient pentru a justifica costul.

Pe lângă multiprocesarea „pură”, există mai multe opțiuni „intermediare” care pot accelera execuția aplicației:

Multiprocesare cip (CMP)- două nuclee de procesor sunt situate fizic pe un cip, folosind un cache comun sau separat. Desigur, dimensiunea cristalului se dovedește a fi destul de mare, iar acest lucru nu poate decât să afecteze costul. Rețineți că mai multe dintre aceste procesoare „duale” pot funcționa și într-un sistem multiprocesor.

Time-slice Multithreading. Procesorul comută între firele de execuție a programului la intervale fixe. Taxa generală poate fi uneori destul de semnificativă, mai ales dacă un proces este în așteptare.

Multithreading cu evenimente de pornire. Comutarea sarcinilor atunci când au loc pauze lungi, de exemplu, pierderile de cache, dintre care un număr mare sunt tipice pentru aplicațiile server. În acest caz, procesul care așteaptă să încarce datele din memoria relativ lentă în cache este suspendat, eliberând resurse CPU pentru alte procese. Cu toate acestea, Switch-on-Event Multithreading, precum Time-Slice Multithreading, nu realizează întotdeauna utilizarea optimă a resurselor procesorului, în special din cauza erorilor de predicție a ramurilor, dependențelor de instrucțiuni etc.

Multithreading simultan. În acest caz, firele de execuție ale programului sunt executate pe un procesor „simultan”, adică fără a comuta între ele. Resursele CPU sunt distribuite dinamic, conform principiului „dacă nu le folosiți, dați-o altcuiva”. Această abordare stă la baza tehnologiei Intel Hyper-Threading, pe care o considerăm acum.

Cum funcționează Hyper-Threading

După cum știți, „paradigma de calcul” actuală implică calcularea multi-threaded. Acest lucru se aplică nu numai serverelor, unde un astfel de concept există inițial, ci și stațiilor de lucru și sistemelor desktop. Thread-urile pot aparține acelorași sau diferite aplicații, dar aproape întotdeauna există mai multe fire active (pentru a verifica acest lucru, deschideți Task Manager în Windows 2000/XP și activați afișarea numărului de fire). Cu toate acestea, un procesor obișnuit poate executa doar unul dintre fire la un moment dat și este forțat să comute constant între ele.

Pentru prima dată, tehnologia Hyper-Threading a fost implementată în procesorul Intel Xeon MP (Foster MP), pe care a fost testată. Să ne amintim că Xeon MP, prezentat oficial la IDF Spring 2002, folosește un nucleu legat de Pentium 4 Willamette, conține 256 KB cache L2 și 512 KB/1 MB cache L3 și acceptă funcționarea în configurații cu 4 procesoare. Suportul Hyper-Threading este disponibil și în procesorul stației de lucru - Intel Xeon (core Prestonia, cache L2 de 512 KB), care a intrat pe piață ceva mai devreme decât Xeon MP. Cititorii noștri sunt deja familiarizați cu configurațiile cu procesor dublu pe Intel Xeon, așa că ne vom uita la capacitățile Hyper-Threading folosind aceste procesoare ca exemplu - atât teoretic, cât și practic. Oricum ar fi, „simpluul” Xeon este un lucru mai banal și mai digerabil decât Xeon MP în sistemele cu 4 procesoare...

Principiul de funcționare al Hyper-Threading se bazează pe faptul că, în orice moment, doar o parte din resursele procesorului este utilizată la executarea codului programului. Resursele neutilizate pot fi, de asemenea, încărcate cu lucru - de exemplu, o altă aplicație (sau un alt fir al aceleiași aplicații) poate fi folosită pentru execuția paralelă. Într-un procesor fizic Intel Xeon, sunt formate două procesoare logice (LP - Logical Processor), care împart resursele de calcul ale procesorului. Sistemul de operare și aplicațiile „văd” exact două procesoare și pot distribui munca între ele, ca în cazul unui sistem cu dublu procesor cu drepturi depline.

Unul dintre obiectivele implementării Hyper-Threading este acela de a-i permite să ruleze la aceeași viteză ca pe un procesor obișnuit atunci când există un singur fir activ. Pentru a face acest lucru, procesorul are două moduri principale de operare: Single-Task (ST) și Multi-Task (MT). În modul ST, un singur procesor logic este activ și are utilizarea nedivizată a resurselor disponibile (modurile ST0 și ST1); un alt LP este oprit cu o comandă HALT. Când apare un al doilea thread de program, procesorul logic latent este activat (printr-o întrerupere) și CPU-ul fizic este pus în modul MT. Oprirea LP-urilor neutilizate cu comanda HALT este atribuită sistemului de operare, care este în cele din urmă responsabil pentru aceeași execuție rapidă a unui fir ca și în cazul fără Hyper-Threading.

Pentru fiecare dintre cele două LP este stocat așa-numitul stat de arhitectură (AS), care include starea registrelor de diferite tipuri - scop general, control, APIC și service. Fiecare LP are propriul său APIC (controller de întrerupere) și un set de registre, pentru funcționarea corectă a cărora este introdus conceptul de Register Alias ​​​​Table (RAT), care urmărește corespondența dintre opt registre de uz general IA-32 și 128. registre ale procesorului fizic (un RAT pentru fiecare LP).

Când rulați două fire de execuție, sunt acceptate două seturi corespunzătoare de indicatori de instrucțiune următoare. Majoritatea instrucțiunilor sunt preluate din Trace Cache (TC), unde sunt stocate în formă decodificată, iar cele două LP-uri active accesează TC alternativ, la fiecare alte ore. În același timp, când doar un LP este activ, acesta obține acces exclusiv la TC fără rotație a ceasului. Accesul la Microcode ROM are loc într-un mod similar. Blocurile ITLB (Instruction Translation Look-aside Buffer), care sunt folosite atunci când instrucțiunile necesare lipsesc din memoria cache a comenzilor, sunt duplicate și fiecare livrează comenzi pentru propriul thread. Blocul de decodare a instrucțiunilor IA-32 Instruction Decode este partajat și, în cazul în care instrucțiunile trebuie să fie decodificate pentru ambele fire, le deservește unul câte unul (din nou, fiecare celălalt ceas). Blocurile Uop Queue și Allocator sunt împărțite în două, alocând jumătate din elemente fiecărui LP. Planificatoarele, numerotate 5, procesează cozi de comenzi decodificate (Uops) în ciuda faptului că aparțin LP0/LP1 și comenzi directe care urmează să fie executate de Unitățile de execuție necesare - în funcție de pregătirea pentru executarea primei și de disponibilitatea celei de-a doua. Cache-urile de toate nivelurile (L1/L2 pentru Xeon, precum și L3 pentru Xeon MP) sunt complet partajate între două LP-uri, totuși, pentru a asigura integritatea datelor, intrările în DTLB (Data Translation Look-aside Buffer) sunt echipate cu descriptori în forma de ID-uri de procesor logic.

Astfel, instrucțiunile de la ambele procesoare logice pot fi executate simultan pe resursele unui procesor fizic, care sunt împărțite în patru clase:

  • duplicat;
  • Complet partajat;
  • cu descriptori de elemente (Entry Tagged);
  • partitionat dinamic (Partitioned) in functie de modul de operare ST0/ST1 sau MT.

Cu toate acestea, majoritatea aplicațiilor care primesc accelerare pe sisteme multiprocesor pot fi accelerate și pe un procesor cu Hyper-Threading activat fără nicio modificare. Dar există și probleme: de exemplu, dacă un proces este într-o buclă de așteptare, poate ocupa toate resursele procesorului fizic, interferând cu munca celui de-al doilea LP. Astfel, performanța la utilizarea Hyper-Threading poate scădea uneori (până la 20%). Pentru a preveni acest lucru, Intel recomandă utilizarea instrucțiunii PAUSE (introdusă în IA-32 începând cu Pentium 4) în loc de cicluri de așteptare goale. Se lucrează destul de serios și la optimizarea automată și semi-automată a codului în timpul compilării - de exemplu, seria de compilatoare Intel OpenMP C++/Fortran Compilers () a făcut progrese semnificative în acest sens.

Un alt obiectiv al primei implementări a Hyper-Threading, conform Intel, a fost acela de a minimiza creșterea numărului de tranzistori, a suprafeței cipului și a consumului de energie, obținând în același timp o creștere vizibilă a performanței. Prima parte a acestui angajament a fost deja îndeplinită: adăugarea suportului Hyper-Threading la Xeon/Xeon MP a crescut suprafața matriței și consumul de energie cu mai puțin de 5%. Mai trebuie să verificăm ce s-a întâmplat cu partea a doua (performanță).

Partea practică

Din motive evidente, nu am testat sisteme de server cu 4 procesoare pe Xeon MP cu Hyper-Threading activat. În primul rând, este destul de intensivă în muncă. Și în al doilea rând, chiar dacă ne-am hotărî asupra unei astfel de ispravă, ar fi totuși absolut imposibil să obținem acest echipament scump acum, la mai puțin de o lună de la anunțul oficial. Prin urmare, s-a decis să ne limităm la același sistem cu două Intel Xeon 2.2 GHz pe care a fost efectuată prima testare a acestor procesoare (vezi linkul de la începutul articolului). Sistemul era bazat pe o placă de bază Supermicro P4DC6+ (chipset Intel i860), conținea 512 MB memorie RDRAM, o placă video pe un cip GeForce3 (64 MB DDR, drivere Detonator 21.85), un hard disk Western Digital WD300BB și 6X DVD-ROM; Windows 2000 Professional SP2 a fost folosit ca sistem de operare.

În primul rând, câteva impresii generale. Când instalați un Xeon cu nucleul Prestonia, la pornirea sistemului, BIOS-ul afișează un mesaj despre prezența a două procesoare; dacă sunt instalate două procesoare, utilizatorul vede un mesaj despre patru procesoare. Sistemul de operare recunoaște în mod normal „ambele procesoare”, dar numai dacă sunt îndeplinite două condiții.

În primul rând, în CMOS Setup, cele mai recente versiuni BIOS ale plăcilor Supermicro P4DCxx au acum o opțiune Enable Hyper-Threading, fără de care sistemul de operare va recunoaște doar procesorul (procesoarele) fizice. În al doilea rând, capacitățile ACPI sunt utilizate pentru a informa sistemul de operare despre prezența procesoarelor logice suplimentare. Prin urmare, pentru a activa Hyper-Threading, opțiunea ACPI trebuie să fie activată în CMOS Setup și HAL (Hardware Abstraction Layer) cu suport ACPI trebuie instalat și pentru sistemul de operare în sine. Din fericire, în Windows 2000, schimbarea HAL de la Standard PC (sau MPS Uni-/Multiprocessor PC) la ACPI Uni-/Multiprocessor PC este ușoară - înlocuind „driverul de computer” în managerul de dispozitive. În același timp, pentru Windows XP, singura modalitate legală de a trece la ACPI HAL este reinstalarea sistemului peste instalația existentă.

Dar acum toate pregătirile au fost făcute, iar Windows 2000 Pro crede deja că rulează pe un sistem cu procesor dublu (deși, de fapt, există un singur procesor instalat). Acum, în mod tradițional, este timpul să decideți asupra obiectivelor de testare. Deci vrem:

  • Evaluați impactul Hyper-Threading asupra performanței aplicațiilor din diferite clase.
  • Comparați acest efect cu efectul instalării unui al doilea procesor.
  • Verificați cât de „echitabil” sunt alocate resursele procesorului logic activ atunci când al doilea LP este inactiv.

Pentru a evalua performanța, am luat un set de aplicații deja familiare cititorilor, utilizate în testarea sistemelor stațiilor de lucru. Să începem de la sfârșit și să verificăm „egalitatea” procesoarelor logice. Este foarte simplu: mai întâi rulăm teste pe un procesor cu Hyper-Threading dezactivat, apoi repetăm ​​procesul cu Hyper-Threading activat și folosind doar unul dintre cele două procesoare logice (folosind Task Manager). Deoarece în acest caz ne interesează doar valorile relative, rezultatele tuturor testelor sunt aduse în forma „mai mare este mai bine” și normalizate (indicatorii unui sistem cu un singur procesor fără Hyper-Threading sunt luați ca unul singur).

Ei bine, după cum puteți vedea, promisiunile Intel sunt îndeplinite aici: cu un singur fir activ, performanța fiecăruia dintre cele două LP-uri este exact egală cu performanța unui procesor fizic fără Hyper-Threading. LP inactiv (și atât LP0 cât și LP1) este într-adevăr suspendat, iar resursele partajate, în măsura în care se poate aprecia din rezultatele obținute, sunt complet transferate pentru utilizare către LP-ul activ.

Prin urmare, tragem prima concluzie: două procesoare logice sunt de fapt egale, iar activarea Hyper-Threading „nu interferează” cu munca unui fir (care în sine nu este rău). Să vedem acum dacă această includere „ajută” și dacă da, unde și cum?

Redare. Rezultatele a patru teste din pachetele de modelare 3D 3D Studio MAX 4.26, Lightwave 7b și A|W Maya 4.0.1 sunt combinate într-o singură diagramă datorită similitudinii lor.

În toate cele patru cazuri (pentru Lightwave - două scene diferite), încărcarea procesorului în prezența unui procesor cu Hyper-Threading dezactivat este aproape întotdeauna menținută la 100%. Cu toate acestea, atunci când Hyper-Threading este activat, calculele scenei sunt accelerate (ca urmare am avut chiar o glumă despre încărcarea procesorului de peste 100%). În trei teste, este vizibilă o creștere a performanței de la Hyper-Threading de 14-18% - pe de o parte, nu prea mult în comparație cu al doilea procesor, dar pe de altă parte, destul de bună, având în vedere natura „liberă” a acestui efect. . La unul dintre cele două teste cu Lightwave, creșterea performanței este aproape zero (se pare că asta se datorează specificului acestei aplicații, care este plină de lucruri ciudate). Dar nu există niciun rezultat negativ nicăieri, iar o creștere vizibilă în celelalte trei cazuri este încurajatoare. Și asta în ciuda faptului că procesele de randare paralele fac o muncă similară și probabil că nu pot utiliza simultan resursele CPU fizic în cel mai bun mod.

Photoshop și codare MP3. Codecul GOGO-no-coda 2.39c este unul dintre puținele care acceptă SMP și are o creștere vizibilă de 34% a performanței datorită procesoarelor duale. În același timp, efectul Hyper-Threading în acest caz este zero (nu considerăm semnificativă o diferență de 3%). Dar în testul cu Photoshop 6.0.1 (un script format dintr-un set mare de comenzi și filtre), o încetinire este vizibilă când Hyper-Threading este activat, deși al doilea CPU fizic adaugă 12% performanță în acest caz. Acesta este, de fapt, primul caz în care Hyper-Threading provoacă o scădere a performanței...

OpenGL profesional. Se știe de mult că SPEC ViewPerf și multe alte aplicații OpenGL încetinesc adesea pe sistemele SMP.

OpenGL și procesoare duale: de ce nu sunt prieteni

De multe ori în articolele noastre am atras atenția cititorilor asupra faptului că platformele cu procesor dublu arată foarte rar vreun avantaj semnificativ față de platformele cu un singur procesor atunci când efectuează teste profesionale OpenGL. Și mai mult, există adesea cazuri când instalarea unui al doilea procesor, dimpotrivă, înrăutățește performanța sistemului atunci când redarea scenelor tridimensionale dinamice.

Desigur, nu am fost singurii care au observat această ciudățenie. Unii testeri pur și simplu au evitat în tăcere acest fapt - de exemplu, prezentând rezultate de comparație din testele SPEC ViewPerf doar pentru configurațiile cu procesor dublu, evitând astfel explicațiile despre „de ce este un sistem cu procesor dublu mai lent?” Alții au făcut tot felul de presupuneri fantastice despre coerența cache-ului, necesitatea menținerii acesteia, cheltuielile generale care decurg din aceasta etc. Și dintr-un motiv oarecare, nimeni nu a fost surprins că, de exemplu, procesoarele au fost din anumite motive nerăbdătoare să monitorizeze coerența în mod specific în redarea OpenGL cu ferestre (în esența sa „computațională”, nu este mult diferită de orice altă sarcină de calcul).

De fapt, explicația, după părerea noastră, este mult mai simplă. După cum știți, o aplicație poate rula pe două procesoare mai repede decât pe unul dacă:

  • există mai mult de două sau mai multe fire de execuție de program simultan;
  • aceste fire nu interferează cu execuția celuilalt - de exemplu, nu concurează pentru o resursă partajată, cum ar fi o unitate externă sau o interfață de rețea.

Acum să aruncăm o privire simplificată la cum arată redarea OpenGL atunci când este efectuată de două fire. Dacă o aplicație, „văzând” două procesoare, creează două fire de redare OpenGL, atunci pentru fiecare dintre ele, conform regulilor OpenGL, se creează propriul context gl. În consecință, fiecare fir se redă în propriul său context gl. Dar problema este că pentru fereastra în care este afișată imaginea, un singur context gl poate fi actual în orice moment. În consecință, firele în acest caz pur și simplu „unul câte unul” afișează imaginea generată în fereastră, făcând alternativ contextul lor în cel curent. Inutil să spunem că acest tip de „intercalare a contextului” poate fi foarte costisitoare în ceea ce privește cheltuielile generale?

De asemenea, ca exemplu, vom arăta grafice ale utilizării a două procesoare în mai multe aplicații care afișează scene OpenGL. Toate măsurătorile au fost efectuate pe platformă cu următoarea configurație:

  • unul sau două Intel Xeon 2,2 GHz (Hyper-Threading dezactivat);
  • 512 MB memorie RDRAM;
  • Placa de baza Supermicro P4DC6+;
  • Placă video ASUS V8200 Deluxe (NVidia GeForce3, 64 MB DDR SDRAM, drivere Detonator 21.85);
  • Windows 2000 Professional SP2;
  • modul video 1280x1024x32 bpp, 85 Hz, Vsync dezactivat.

Albastru și roșu arată graficele de încărcare ale CPU 0 și, respectiv, CPU 1. Linia din mijloc este graficul final de utilizare a CPU. Cele trei grafice corespund a două scene din 3D Studio MAX 4.26 și fac parte din testul SPEC ViewPerf (AWadvs-04).


Utilizare CPU: animație 3D Studio MAX 4.26 - Anibal (cu manipulatoare).max


Utilizare CPU: Animation 3D Studio MAX 4.26 - Rabbit.max


Utilizare CPU: SPEC ViewPerf 6.1.2 - AWadvs-04

Aceeași imagine se repetă în multe alte aplicații care folosesc OpenGL. Cele două procesoare nu deranjează deloc, iar utilizarea generală a CPU este la nivelul de 50-60%. În același timp, pentru un sistem cu un singur procesor în toate aceste cazuri, Utilizarea CPU rămâne cu încredere la 100%.

Prin urmare, nu este de mirare că multe aplicații OpenGL nu accelerează foarte mult pe sistemele duale. Ei bine, faptul că uneori chiar încetinesc are, după părerea noastră, o explicație complet logică.

Putem afirma că cu două procesoare logice scăderea performanței este și mai semnificativă, ceea ce este de înțeles: două procesoare logice interferează unul cu celălalt în același mod ca și două procesoare fizice. Dar performanța lor generală, desigur, se dovedește a fi mai mică, așa că atunci când Hyper-Threading este activat, scade chiar mai mult decât pur și simplu atunci când rulează două procesoare fizice. Rezultatul este previzibil și concluzia este simplă: Hyper-Threading, ca SMP „adevărat”, este contraindicat pentru OpenGL.

aplicații CAD. Concluzia anterioară este confirmată de rezultatele a două teste CAD - SPECapc pentru SolidEdge V10 și SPECapc pentru SolidWorks. Performanța grafică a acestor teste Hyper-Threading este similară (deși sistemul SMP pentru SolidEdge V10 are scoruri puțin mai mari). Dar rezultatele testelor CPU_Score de încărcare a procesorului te pun pe gânduri: 5-10% creștere de la SMP și 14-19% încetinire de la Hyper-Threading.

Dar, la sfârșitul zilei, Intel admite sincer că Hyper-Threading poate provoca degradarea performanței în unele cazuri - de exemplu, atunci când se utilizează bucle de așteptare goale. Putem doar presupune că acesta este motivul (un studiu detaliat al codului SolidEdge și SolidWorks depășește scopul acestui articol). La urma urmei, toată lumea cunoaște conservatorismul dezvoltatorilor de aplicații CAD, care preferă fiabilitatea dovedită și nu se grăbesc în mod special să rescrie codul ținând cont de noile tendințe în programare.

Rezumat sau „Atenție, întrebarea corectă”

Hyper-Threading funcționează, nu există nicio îndoială. Desigur, tehnologia nu este universală: există aplicații care suferă de Hyper-Threading, iar dacă această tehnologie se răspândește, va fi de dorit să le modifici. Dar nu s-a întâmplat același lucru pe vremuri cu MMX și SSE și nu se întâmplă în continuare cu SSE2?...

Cu toate acestea, acest lucru ridică problema aplicabilității acestei tehnologii la realitățile noastre. Vom renunța imediat la opțiunea unui sistem cu un singur procesor pe Xeon cu Hyper-Threading (sau o vom permite doar temporar, în așteptarea achiziționării unui al doilea procesor): chiar și o creștere de 30% a performanței nu justifică prețul în oricum - atunci este mai bine să cumpărați un Pentium 4 obișnuit. Numărul de procesoare rămase este de la două și mai sus.

Acum să ne imaginăm că cumpărăm un sistem Xeon cu dublu procesor (să zicem, cu Windows 2000/XP Professional). Sunt instalate două procesoare, Hyper-Threading este activat, BIOS-ul găsește până la patru procesoare logice, acum suntem pe cale să decolăm... Stop. Dar câte procesoare va vedea sistemul nostru de operare? Așa e, doi. Doar două, deoarece pur și simplu nu este conceput pentru mai mult. Acestea vor fi două procesoare fizice, adică totul va funcționa exact la fel ca și cu Hyper-Threading dezactivat - nu mai lent (două procesoare logice „suplimentare” pur și simplu se vor opri), dar nici mai rapid (testat prin teste suplimentare, rezultatele nu sunt Noi prezentați-le pentru că sunt complet evidente). Hmmm, nu prea plăcut...

Ce ramane? Ei bine, nu ar trebui să instalăm cu adevărat Advanced Server sau .NET Server pe stația noastră de lucru? Nu, sistemul se va instala, va recunoaște toate cele patru procesoare logice și va funcționa. Dar sistemul de operare al serverului arată puțin ciudat pe o stație de lucru, ca să spunem ușor (ca să nu mai vorbim de aspectele financiare). Singurul caz rezonabil este când sistemul nostru Xeon cu dublu procesor va acționa ca un server (cel puțin unii asamblatori au început deja, fără ezitare, să producă servere pe procesoarele Xeon ale stațiilor de lucru). Dar pentru stațiile de lucru duale cu sistemul de operare corespunzător, aplicabilitatea Hyper-Threading rămâne sub semnul întrebării. Intel pledează acum în mod activ pentru licențierea sistemului de operare bazată pe numărul de procesoare fizice, mai degrabă decât pe cele logice. Discuțiile sunt încă în desfășurare și, în general, depind foarte mult dacă vom vedea un sistem de operare de stație de lucru cu suport pentru patru procesoare.

Ei bine, cu serverele totul se dovedește destul de simplu. De exemplu, Windows 2000 Advanced Server instalat pe un sistem Xeon cu dublu procesor cu Hyper-Threading activat va „vedea” patru procesoare logice și va rula fără probleme pe el. Pentru a evalua ce poate face Hyper-Threading în sistemele server, prezentăm rezultatele de la Intel Microprocessor Software Labs pentru sisteme Xeon MP cu procesor dublu și mai multe aplicații de server Microsoft.

O creștere a performanței de 20-30% pentru un server cu două procesoare „gratuit” este mai mult decât tentantă (mai ales în comparație cu cumpărarea unui sistem „adevărat” cu 4 procesoare).

Deci, se dovedește că în acest moment aplicabilitatea practică a Hyper-Threading este posibilă doar în servere. Problema cu stațiile de lucru depinde de decizia privind licențiarea OS. Deși o altă aplicație a Hyper-Threading este destul de posibilă - dacă procesoarele desktop primesc și suport pentru această tehnologie. De exemplu (să ne imaginăm), ce este rău la un sistem cu un Pentium 4 cu suport Hyper-Threading, pe care este instalat Windows 2000/XP Professional cu suport SMP?.. Totuși, nu este nimic incredibil în asta: dezvoltatorii Intel entuziaști promit implementarea pe scară largă a Hyper-Threading - de la servere la sisteme desktop și mobile.

20 ianuarie 2015 la 19:43

Încă o dată despre Hyper-Threading

  • testarea sistemelor IT,
  • Programare

A fost o perioadă când a fost necesară evaluarea performanței memoriei în contextul tehnologiei Hyper-threading. Am ajuns la concluzia că influența sa nu este întotdeauna pozitivă. Când a apărut un cuantum de timp liber, a existat dorința de a continua cercetările și de a lua în considerare procesele în desfășurare cu o precizie a ciclurilor de ceas al mașinii și a biților, folosind software-ul propriului nostru design.

Platformă în studiu

Obiectul experimentelor este un laptop ASUS N750JK cu procesor Intel Core i7-4700HQ. Frecvența de ceas 2,4 GHz, crescută în modul Intel Turbo Boost până la 3,4 GHz. S-au instalat 16 gigabytes de RAM DDR3-1600 (PC3-12800), care funcționează în modul dual-channel. Sistem de operare – Microsoft Windows 8.1 pe 64 de biți.

Fig.1 Configurarea platformei studiate.

Procesorul platformei studiate conține 4 nuclee, care, atunci când tehnologia Hyper-Threading este activată, oferă suport hardware pentru 8 fire sau procesoare logice. Firmware-ul platformei transmite aceste informații către sistemul de operare prin tabelul ACPI MADT (Multiple APIC Description Table). Deoarece platforma conține un singur controler RAM, nu există un tabel SRAT (System Resource Affinity Table), care să declare apropierea nucleelor ​​procesorului față de controlerele de memorie. Evident, laptopul studiat nu este o platformă NUMA, dar sistemul de operare, în scopul unificării, îl consideră ca fiind un sistem NUMA cu un singur domeniu, după cum indică linia NUMA Nodes = 1. Un fapt fundamental pentru noi. experimentele este că memoria cache de date de la primul nivel are dimensiunea de 32 de kiloocteți pentru fiecare dintre cele patru nuclee. Două procesoare logice care partajează un nucleu partajează cache-urile L1 și L2.

Operațiune în studiu

Vom studia dependența vitezei de citire a unui bloc de date de dimensiunea acestuia. Pentru a face acest lucru, vom alege cea mai productivă metodă, și anume citirea operanzilor pe 256 de biți folosind instrucțiunea AVX VMOVAPD. În grafice, axa X arată dimensiunea blocului, iar axa Y arată viteza de citire. În jurul punctului X, care corespunde mărimii cache-ului L1, ne așteptăm să vedem un punct de inflexiune, deoarece performanța ar trebui să scadă după ce blocul procesat părăsește limitele cache-ului. În testul nostru, în cazul procesării cu mai multe fire, fiecare dintre cele 16 fire inițiate funcționează cu un domeniu de adrese separat. Pentru a controla tehnologia Hyper-Threading în cadrul aplicației, fiecare thread folosește funcția API SetThreadAffinityMask, care setează o mască în care un bit corespunde fiecărui procesor logic. O valoare de un singur bit permite procesorului specificat să fie utilizat de un fir dat, o valoare zero o interzice. Pentru 8 procesoare logice ale platformei studiate, masca 11111111b permite utilizarea tuturor procesoarelor (Hyper-Threading este activat), masca 01010101b permite utilizarea unui procesor logic în fiecare nucleu (Hyper-Threading este dezactivat).

Următoarele abrevieri sunt folosite în grafice:

MBPS (megaocteți pe secundă)blocați viteza de citire în megaocteți pe secundă;

CPI (Ceasuri pe instrucțiune)numărul de cicluri de ceas per instrucțiune;

TSC (contor de marcaj de timp)Contor de cicluri CPU.

Notă: Este posibil ca viteza registrului TSC să nu se potrivească cu cea a procesorului atunci când rulează în modul Turbo Boost. Acest lucru trebuie luat în considerare la interpretarea rezultatelor.

În partea dreaptă a graficelor, este vizualizată un dump hexazecimal al instrucțiunilor care alcătuiesc corpul buclei al operației țintă executată în fiecare dintre firele de execuție a programului, sau primii 128 de octeți ai acestui cod.

Experiența nr. 1. Un fir



Fig.2 Citirea unui singur fir

Viteza maximă este de 213563 megaocteți pe secundă. Punctul de inflexiune apare la o dimensiune a blocului de aproximativ 32 de kiloocteți.

Experiența nr. 2. 16 fire pe 4 procesoare, Hyper-Threading dezactivat



Fig.3 Citirea în șaisprezece fire. Numărul de procesoare logice utilizate este de patru

Hyper-Threading este dezactivat. Viteza maximă este de 797598 megaocteți pe secundă. Punctul de inflexiune apare la o dimensiune a blocului de aproximativ 32 de kiloocteți. După cum era de așteptat, față de citirea cu un fir, viteza a crescut de aproximativ 4 ori, în funcție de numărul de nuclee de lucru.

Experiența nr. 3. 16 fire pe 8 procesoare, Hyper-Threading activat



Fig.4 Citirea în șaisprezece fire. Numărul de procesoare logice utilizate este de opt

Hyper-Threading este activat. Viteza maximă este de 800.722 megaocteți pe secundă; ca urmare a activării Hyper-Threading, aproape că nu a crescut. Marele minus este că punctul de inflexiune apare la o dimensiune a blocului de aproximativ 16 kiloocteți. Activarea Hyper-Threading a crescut ușor viteza maximă, dar scăderea vitezei are loc acum la jumătate din dimensiunea blocului - aproximativ 16 kiloocteți, astfel încât viteza medie a scăzut semnificativ. Acest lucru nu este surprinzător, fiecare nucleu are propriul său cache L1, în timp ce procesoarele logice ale aceluiași nucleu îl împart.

concluzii

Operația studiată se scalează destul de bine pe un procesor multi-core. Motive: Fiecare nucleu conține propriul său cache L1 și L2, dimensiunea blocului țintă este comparabilă cu dimensiunea cache-ului și fiecare fir funcționează cu propriul interval de adrese. În scopuri academice, am creat aceste condiții într-un test sintetic, recunoscând că aplicațiile din lumea reală sunt de obicei departe de optimizarea ideală. Dar activarea Hyper-Threading, chiar și în aceste condiții, a avut un efect negativ; cu o ușoară creștere a vitezei de vârf, există o pierdere semnificativă a vitezei de procesare a blocurilor a căror dimensiune variază de la 16 la 32 kilobytes.