Tehnologia Hyper-Threading de la Intel

In trecut, am vorbit despre tehnologia multithreading simultan (simultane multi-threading - SMT), care este utilizat în procesoare Intel. Deși inițial a fost creat sub numele de cod „Tehnologie Jackson“ (Jackson Technology), ca o posibilă variantă, probabil, Intel a anunțat oficial tehnologia sa de la IDF toamna trecută. Numele de cod Jackson a fost înlocuit cu un mai potrivit Hyper-Threading. Deci, pentru a înțelege modul în care noua tehnologie, avem nevoie de ceva cunoștințe de bază. Și anume, trebuie să știm ce fluxul, modul în care aceste fluxuri. De ce nu funcționează? Procesorul știe ce operație și pe ce date el ar trebui să facă? Toate aceste informații sunt conținute în cererea de cod care rulează compilat. Și, de îndată ce cererea este primită de la utilizator orice comandă, orice date - procesor trimis imediat să curgă, astfel încât el face ceea ce trebuie făcut ca răspuns la o solicitare de utilizator. În ceea ce privește procesorul, fluxul - un set de instrucțiuni care trebuie urmați. Când coajă cade în Quake III Arena, sau atunci când deschideți un document Microsoft Word, procesorul trimite un anumit set de instrucțiuni pe care trebuie să execute.







Există o metodă bine cunoscută pentru rezolvarea acestei probleme. Aceasta constă în utilizarea a două procesoare - dacă un procesor poate executa câte un fir la un moment dat, doi procesori pot executa două fluxuri în aceeași unitate de timp. Rețineți că această metodă nu este ideală. Există multe alte probleme cu ea. Cu unii, probabil sunteți deja familiarizați. În primul rând, mai multe procesoare sunt întotdeauna mai scumpe decât una. În al doilea rând, gestionarea a două procesoare nu este, de asemenea, atât de ușoară. În plus, nu uitați de împărțirea resurselor între procesoare. De exemplu, înainte de apariția chipset-ului AMD 760MP, toate platformele x86 cu suport multiprocesor au împărtășit întreaga lățime de bandă a magistralei între toate procesoarele existente. Dar principalul dezavantaj în celălalt este că pentru astfel de lucrări și aplicații, sistemul de operare în sine trebuie să susțină procesarea multiplă. Abilitatea de a distribui execuția mai multor fire pe resursele calculatorului este adesea numită multithreading. În același timp, sistemul de operare trebuie să suporte multithreading. De asemenea, aplicațiile trebuie să suporte multi-threading pentru a maximiza utilizarea resurselor de calculatoare. Nu uitați acest lucru atunci când luăm în considerare o altă abordare pentru rezolvarea problemei multithreading, noua tehnologie a tehnologiei Hyper-Threading de la Intel.

Productivitatea este întotdeauna mică

Eficiența este întotdeauna spusă foarte mult. Și nu numai în mediul corporativ, în unele proiecte serioase, dar și în viața de zi cu zi. Ei spun că homo sapiens utilizează doar parțial posibilitățile creierului lor. Același lucru este valabil și pentru procesoarele computerelor moderne.

Pentru a ilustra situația, să ne imaginăm un procesor cu trei elemente de acționare: logică aritmetică (număr întreg - ALU), un dispozitiv pentru punctul (FPU) plutitoare, precum și dispozitivul de încărcare / magazin (pentru scrierea și citirea datelor din memorie). Mai mult decât atât, presupunem că procesorul nostru poate efectua orice operațiune într-un singur ciclu de ceas și poate distribui tranzacțiile în toate cele trei dispozitive simultan. Să presupunem că un thread este trimis către acest procesor pentru a fi executat din următoarele instrucțiuni:

1 + 1
10 + 1
Salvați rezultatul anterior

Figura de mai jos ilustrează nivelul de încărcare a servomotoarelor (gri indică un dispozitiv neutilizat, albastrul indică un dispozitiv de lucru):

Deci, vedeți că, în orice măsură, doar 33% din toate dispozitivele executive sunt folosite. De data aceasta, FPU rămâne în general neutilizat. Potrivit datelor Intel, majoritatea programelor pentru IA-32 x86 nu folosesc mai mult de 35% din unitățile de procesare Pentium 4.

Imaginați-vă un alt fir, trimiteți-l procesorului. De data aceasta vor fi operațiuni de încărcare a datelor, adăugarea și salvarea datelor. Acestea vor fi executate în următoarea ordine:

Din nou, încărcătura dispozitivelor executive este de numai 33%.

O bună cale de ieșire din această situație va fi paralelismul nivelului de instruire (Instrument Level Parallelism - ILP). În acest caz, mai multe instrucțiuni sunt executate simultan, deoarece procesorul poate umple simultan mai multe dispozitive de executare paralelă. Din păcate, cele mai multe programe x86 nu sunt adaptate la ILP la gradul corespunzător. Prin urmare, trebuie să găsim alte modalități de creștere a productivității. De exemplu, dacă două procesoare au fost folosite simultan în sistem, ar fi posibil să executați simultan două fire simultan. Această soluție se numește paralelism la nivel de fir (TLP). Apropo, această soluție este destul de scumpă.

Care sunt celelalte modalități de creștere a puterii procesoarelor x86 moderne?

Hyper-Threading

utilizarea incompletă a servomotoarelor este o problemă cu cauze multiple. În general, în cazul în care procesorul nu poate recepționa date la viteza dorită (acest lucru se datorează capacității insuficiente a magistralei sistemului și magistrala de memorie), actuatoarele vor fi utilizate nu la fel de eficient. În plus, există un alt motiv - lipsa de paralelism la nivel de instruire în majoritatea fluxurilor de comenzi.

În prezent, majoritatea producătorilor îmbunătățesc viteza procesoarelor prin creșterea frecvenței ceasului și a mărimilor cache-ului. Desigur, în acest fel puteți crește performanța, însă potențialul procesorului nu va fi pe deplin utilizat. Dacă am putea executa simultan mai multe fire, atunci am putea folosi procesorul mult mai eficient. Aceasta este esența tehnologiei Hyper-Threading.







Hyper-Threading este numele unei tehnologii care exista înainte și în afara lumii x86, Simultaneous Multi-Threading (SMT). Ideea acestei tehnologii este simplă. Un procesor fizic este reprezentat sistemului de operare ca două procesoare logice, iar sistemul de operare nu vede o diferență între un procesor SMT sau două procesoare convenționale. În ambele cazuri, sistemul de operare direcționează fluxurile ca sistem cu două procesoare. Apoi, toate problemele sunt rezolvate la nivel hardware.

Procesorul cu Hyper-Threading fiecare procesor logic are propriul set registru (inclusiv un contor program separat), și pentru a nu complica tehnologia, nu poate fi realizat simultan efectua preluarea instrucțiunii / decoda două fluxuri. Asta este, aceste instrucțiuni sunt efectuate la rândul lor. În paralel, sunt executate numai comenzi obișnuite.

Tehnologia nu a fost încă lansat, dar cei care au achiziționat Xeon 0,13 microni, și setați cartela de procesor cu BIOS-ul actualizat, trebuie să fi fost surprinși să vadă opțiunea de BIOS pentru a activa / dezactiva Hyper-Threading.

Între timp, Intel va lăsa opțiunea Hyper-Threading dezactivată în mod implicit. Cu toate acestea, pentru a le permite, trebuie doar să actualizați BIOS-ul. Toate acestea se referă la stațiile de lucru și la servere, în ceea ce privește piața calculatoarelor personale, în viitorul apropiat compania nu are planuri pentru această tehnologie. Deși este posibil, producătorii de plăci de bază vor oferi oportunitatea de a permite Hyper-Threading folosind un BIOS special.

Rămâne o întrebare foarte interesantă, de ce Intel vrea să renunțe la această opțiune?

Adânciți-vă în tehnologie

Amintiți-vă cele două fluxuri din exemplele anterioare? Să presupunem de această dată că procesorul nostru este echipat cu Hyper-Threading. Să vedem ce se întâmplă dacă încercăm să realizăm simultan aceste două fire:

Ca și înainte, dreptunghiurile albastre indică executarea primei instrucțiuni de fir, iar cele verde indică execuția celei de-a doua instrucțiuni de fir. Rectangele gri prezintă unelte neutilizate, iar cele roșii indică conflicte atunci când două instrucțiuni diferite de la fire diferite au ajuns la un dispozitiv simultan.

Deci, ce vedem? la nivel de fir de paralelism nu a reușit - elemente de acționare a început să fie folosit chiar și mai puțin eficient. În loc de fire de execuție paralele, procesorul le execută mai lent decât în ​​cazul în care acesta le-ar fi efectuat fără Hyper-Threading. Motivul este destul de simplu. Am încercat să efectueze simultan doar două flux foarte asemănătoare. La urma urmei, ambele constau din operațiunile de încărcare / magazin și a operațiunilor de adăugare. Dacă am alergat paralel cu „întreg“ cerere și o aplicație care rulează cu un punct plutitor, ne-ar fi undeva în cea mai bună situație. După cum puteți vedea, eficiența Hyper-Threading este puternic dependentă de tipul de sarcină pe PC.

În prezent, majoritatea utilizatorilor de PC-uri folosesc computerul în aproximativ același mod ca cel descris în exemplul nostru. Procesorul efectuează multe operații foarte asemănătoare. Din păcate, atunci când vine vorba de aceleași operațiuni, există dificultăți suplimentare cu managementul. Există situații în care servomotoarele de tipul dorit nu mai există și instrucțiunile, ca noroc, ar avea de două ori mai mult decât de obicei. În majoritatea cazurilor, dacă procesoarele computerelor de uz casnic foloseau tehnologia Hyper-Threading, performanța nu ar fi crescut de la aceasta, și poate chiar ar scădea cu 0-10%.

La stațiile de lucru, există mai multe oportunități pentru sporirea performanței Hyper-Threading. Dar, pe de altă parte, totul depinde de utilizarea specifică a calculatorului. O stație de lucru poate însemna atât un computer de ultimă generație pentru procesarea graficelor 3D, cât și un computer încărcat cu greu.

Cea mai mare creștere a performanțelor din utilizarea Hyper-Threading este observată în aplicațiile server. Acest lucru se datorează în principal varietății de operațiuni trimise procesorului. Un server de baze de date care utilizează tranzacții poate rula cu 20-30% mai rapid cu opțiunea Hyper-Threading activată. O creștere ușoară a performanței este observată pe serverele web și în alte domenii.

Eficacitate maximă de la Hyper-Threading

Credeți că Intel a dezvoltat Hyper-Threading doar pentru linia de procesoare de servere? Bineînțeles că nu. Dacă s-ar întâmpla acest lucru, ei nu vor pierde spațiu pe chipul celorlalți procesatori. De fapt, arhitectura NetBurst, utilizată în Pentium 4 și Xeon, nu poate fi mai bună pentru un kernel cu suport pentru multithreading simultan. Să ne imaginăm din nou procesorul. De data aceasta va avea încă un dispozitiv executiv - al doilea dispozitiv întreg. Să vedem ce se întâmplă dacă firele sunt executate de ambele dispozitive:

Cu ajutorul celui de-al doilea dispozitiv întreg, singurul conflict a avut loc numai în ultima operație. Procesorul nostru teoretic este oarecum similar cu cel al Pentium 4. Are cel mult trei dispozitive întregi (două unități ALU și un dispozitiv integrat lent pentru schimburi ciclice). Mai important, ambele dispozitive Pentium 4 sunt capabile să ruleze la viteză dublă - efectuând două micro-operații pe ceas. Și aceasta, la rândul său, înseamnă că oricare dintre aceste două dispozitive Pentium 4 / Xeon întreg ar putea efectua cele două operații de adunare din fire diferite într-un singur ciclu de ceas.

Dar asta nu ne rezolvă problema. Nu s-ar face prea bine să adăugați pur și simplu actuatori suplimentari la procesor pentru a crește performanța utilizării Hyper-Threading. Din punctul de vedere al spațiului ocupat în siliciu, acest lucru ar fi extrem de costisitor. În schimb, Intel a sugerat dezvoltatorilor să optimizeze programele pentru Hyper-Threading.

Folosind instrucțiunea HALT, puteți suspenda funcționarea unuia dintre procesoarele logice și, astfel, crește performanța aplicațiilor care nu beneficiază de Hyper-Threading. Deci, aplicația nu va funcționa mai încet, în schimb, unul dintre procesoarele logice va fi oprit și sistemul va funcționa pe același procesor logic - performanța va fi aceeași ca și pe computerele uniprocesor. Apoi, atunci când aplicația constată că va beneficia de performanța Hyper-Threading, cel de-al doilea procesor logic își va relua pur și simplu activitatea.

Există o prezentare pe site-ul Intel. Descrie modul în care este necesar să programați pentru a extrage beneficiul maxim din Hyper-Threading.

Deși am fost extrem de mulțumiți când am auzit zvonuri despre utilizarea Hyper-Threading în nucleul tuturor modelelor moderne Pentium 4 / Xeon, nu va fi o performanță gratuită pentru toate ocaziile. Motivele sunt clare, iar tehnologia nu trebuie încă depășită înainte de a vedea că Hyper-Threading rulează pe toate platformele, inclusiv computerele de acasă. Și cu sprijinul dezvoltatorilor, tehnologia poate fi cu siguranță un aliat bun al Pentium 4, Xeon și generațiile viitoare de procesoare de la Intel.

Cu limitările existente și cu tehnologia de ambalare existentă, Hyper-Threading pare a fi o alegere mai rezonabilă pentru piața de consum decât, de exemplu, abordarea AMD din SledgeHammer - acești procesori utilizează câte două nuclee. Și până când tehnologiile de ambalare cum ar fi Bumpless Build-Up Layer devin perfecte. costul dezvoltării procesoarelor multi-core poate fi prea mare.

Este interesant de remarcat cat de diferiti AMD si Intel au devenit in ultimii ani. La urma urmei, AMD a folosit pentru a copia procesoare Intel. Acum, companiile au dezvoltat abordări fundamentale diferite pentru procesoarele viitoare pentru servere și stații de lucru. AMD de fapt a călătorit foarte mult. Și dacă utilizați cu adevărat două nuclee în procesoarele Hammer Hammer, atunci această performanță va fi mai eficientă decât Hyper-Threading. În acest caz, pe lângă dublarea numărului tuturor dispozitivelor executive, problemele pe care le-am descris mai sus sunt eliminate.

Hyper-Threading nu va apărea pentru o perioadă de timp pe piața computerelor convenționale, dar cu un bun suport pentru dezvoltatori, acesta poate deveni o altă tehnologie care va scădea de la nivelul serverului la computerele simple.

Consimțământul la prelucrarea datelor cu caracter personal







Trimiteți-le prietenilor: