hiper-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ă un mod bine cunoscut de rezolvare a acestei probleme. Acesta constă în folosirea a două procesoare - în cazul în care un procesor la un moment dat poate transporta un flux, cele două procesoare pentru aceeași unitate de timp poate transporta deja două fluxuri. Rețineți că această metodă nu este perfectă. Când se ridică o mulțime de alte probleme. Cu unii, vă sunt, probabil, deja familiarizați cu. În primul rând, mai multe procesoare sunt întotdeauna mai scumpe decât o singură. În al doilea rând, pentru a controla două procesoare este, de asemenea, nu este atât de ușor. De asemenea, nu uita despre împărțirea resurselor între procesoare. De exemplu, înainte de apariția de chipset-ul AMD 760MP, toate platformele x86 cu suport multiprocesor împarte lățimea de bandă a magistralei de sistem între toate procesoarele. Dar principalul dezavantaj în celălalt - pentru locuri de muncă și cererea și sistemul de operare trebuie să sprijine multiprocesare. Capacitatea de a distribui executarea de mai multe fire pe resursele de calculator sunt adesea numite multi-threading. În același timp, iar sistemul de operare trebuie să suport multi-threading. Cererile trebuie să sprijine, de asemenea, multi-threading pentru a maximiza utilizarea resurselor informatice. Păstrați acest lucru în minte atunci când luăm în considerare o altă abordare pentru rezolvarea problemelor de multi-threading, o noua tehnologie Hyper-Threading de la Intel.

Performanța nu este niciodată suficient

Pe eficiența este întotdeauna o mulțime de convorbire. Și nu numai în mediul corporatist, în unele proiecte serioase, dar, de asemenea, în viața de zi cu zi. Se spune, homo sapiens implică doar parțial posibilitatea creierului său. Același lucru este valabil și pentru procesoarele de calculatoare 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ă ne imaginăm că acest procesor pentru a efectua fluxul este trimis din următoarele instrucțiuni:

1 + 1
10 + 1
Salvați rezultatul anterior

Figura de mai jos ilustrează nivelul actuatoare congestie (gri notată dispozitiv unactuated albastru - dispozitiv de lucru):

Deci, vedeți că în fiecare ciclu este de doar 33% din toate dispozitivele de acționare. De data aceasta, în general, FPU rămâne neexploatat. În conformitate cu datele Intel, cele mai multe programe pentru IA-32 nu a utilizat mai mult de 35 x 86% actuatori Pentium 4 procesor.

Imaginați-vă un alt flux, trimite-l la performanța procesorului. În acest moment, aceasta va consta din operațiunile de încărcare a datelor, adăugarea și stocarea datelor. Acestea vor fi efectuate în ordinea următoare:

Din nou, servomotoare de sarcină este de numai 33%.

Un randament bun al acestei situații ar fi paralelism nivel de instruire (nivel de instrucțiuni Paralelism - ILP). În acest caz, efectuate simultan pe mai multe instrucțiuni, deoarece procesorul poate umple mai multe elemente de acționare paralele. Din păcate, majoritatea programelor x86 nu sunt adaptate la ILP la gradul dreapta. Prin urmare, este necesar să se caute alte modalități de a crește productivitatea. De exemplu, în cazul în care sistemul a fost utilizat imediat două procesoare, s-ar putea executa simultan două fire dintr-o dată. Această soluție se numește paralelism la nivel de fir (paralelism la nivel de fir, TLP). Apropo, această soluție este destul de scump.

Care sunt cele mai bune moduri de a crește puterea executivă a procesoarelor moderne arhitectura x86?

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 pentru a îmbunătăți viteza procesorului prin creșterea vitezei de ceas și dimensiunea memoriei cache. Desigur, în acest fel puteți crește productivitatea, dar, de asemenea, potențialul procesorului nu va fi utilizat pe deplin. Dacă am putea rula simultan mai multe fire, atunci am putea folosi procesorul mult mai eficient. Că aceasta este esența tehnologiei Hyper-Threading.

Hyper-Threading - este numele tehnologiei care a existat înainte este lumea x86, multi-threading tehnologie simultană (simultana multi-threading, SMT). Ideea din spatele acestei tehnologii este simplu. Un procesor fizic pare a sistemului de operare ca două procesoare logice, iar sistemul de operare nu vede diferența dintre un procesor SMT sau două procesoare convenționale. În ambele cazuri, sistemul de operare direcționează fluxul atât a sistemului dual-procesor. Mai mult, toate problemele sunt rezolvate la nivel de 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. Cu alte cuvinte, aceste instrucțiuni sunt executate unul câte unul. În paralel, echipa a efectuat o rutină.

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 este dezactivată în mod implicit. Cu toate acestea, ea poate fi transformat pur și simplu actualizarea BIOS-ului. Toate acestea se aplică pentru stații de lucru și servere, ca și pentru piața calculator personal în viitorul apropiat, planurile companiei pentru această tehnologie nu este disponibilă. Deși este posibil, producătorii de plăci de bază va oferi o oportunitate de a include Hyper-Threading cu un BIOS specială.

Rămâne o întrebare foarte interesantă ca de ce Intel vrea să părăsească această opțiune dezactivată?

Noi îngropa în tehnologia

Amintiți-vă aceste două fluxuri de exemplele anterioare? Să acest timp, să presupunem că procesorul nostru este echipat cu Hyper-Threading. Să vedem ce se întâmplă dacă încercăm să efectueze aceste două fire:

Ca și înainte, dreptunghiurile albastre indică performanța primului flux de instrucțiuni, și verde - pentru executarea celui de al doilea flux de instrucțiuni. cenușii arată că actuatori neutilizate, și roșu - conflict, atunci când un dispozitiv este doar două instrucțiuni diferite din fire diferite.

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 ca aceasta, așa cum este descris în acest exemplu. Procesorul efectuează mai multe operații sunt foarte asemănătoare. Din păcate, atunci când este vorba de clase de tranzacții, există probleme suplimentare cu managementul. Există situații când aveți nevoie să tastați actuatori nu mai există, și reglementările, din păcate, de două ori mai mult decât de obicei. În cele mai multe cazuri, în cazul în care procesoarele de calculator acasă utiliza Hyper-Threading, performanța aceasta nu ar crește, și poate fi chiar a scăzut cu 0-10%.

La aceleași posturi de operare capabilități pentru a îmbunătăți performanța la Hyper-Threading mai mult. Dar, pe de altă parte, totul depinde de utilizarea specifică a calculatorului. Stația de lucru poate însemna atât calculator high-end pentru procesarea grafica 3D, și un computer puternic încărcate.

Cea mai mare boost de performanță din utilizarea Hyper-Threading observate în aplicații de server. În principal acest lucru se datorează unei game largi de tranzacții efectuate de către procesorul. Serverul de baze de date folosind tranzacția poate funcționa la 20-30% mai rapid cu opțiuni activate Hyper-Threading. O creștere ușor mai mică a performanței are loc pe servere Web și în alte domenii.

Eficiența maximă a Hyper-Threading

Crezi că, Intel a dezvoltat Hyper-Threading numai pentru linia sa de procesoare de server? Bineînțeles că nu. Dacă ar fi așa, nu ar trebui să deșeuri spațiu pe alte procesoare cip. De fapt, arhitectura NetBurst, utilizat in Pentium 4 si Xeon, este perfect potrivit pentru kernel-ul cu suport pentru utilizarea simultană multi-threading. Să ne imaginăm din nou un procesor. De data aceasta va fi un alt element de acționare - a doua unitate de număr întreg. Să vedem ce se întâmplă dacă fluxurile vor fi efectuate de către ambele dispozitive:

Utilizarea dispozitivului de-al doilea număr întreg, singurul conflictul a avut loc numai în ultima operație. Procesorul nostru teoretic în ceva similar cu Pentium 4. Acesta are cîte trei unități de număr întreg (ALU două lentă și o unitate întreagă pentru schimburi ciclice). Și mai important, atât la unitatea întreagă Pentium 4 poate funcționa la viteză dublă - a efectua două micro-op pe ceas. Aceasta, la rândul său, înseamnă că oricare dintre aceste două dispozitive întreg Pentium 4 / Xeon ar putea efectua două operații de adăugare a diferitelor fluxuri într-un singur ciclu.

Dar aceasta nu rezolvă problema noastră. Ar fi prea mult sens pentru a adăuga pur și simplu unități suplimentare de execuție procesorului pentru a crește productivitatea din utilizarea Hyper-Threading. În ceea ce privește suprafața de siliciu ocupată ar fi extrem de costisitoare. În schimb, Intel a invitat dezvoltatorii pentru a optimiza programe pentru Hyper-Threading.

Folosind instrucțiuni HALT, puteți suspenda funcționarea unuia dintre procesoare logice, și de a crește astfel performanța aplicațiilor care nu beneficiază de Hyper-Threading. Astfel, aplicația nu va încetini, dar în schimb unul dintre procesoare logice este oprit, iar sistemul va funcționa pe un singur procesor logic - performanța va fi la fel ca în computerele cu un singur procesor. Apoi, în cazul în care cererea consideră că va beneficia în îndeplinirea celui de al doilea procesor logic, pur și simplu își reia activitatea pe Hyper-Threading.

site-ul Intel are o prezentare. care descrie modul în care aceasta trebuie să fie programat să învețe de la beneficii maxime Hyper-Threading.

Deși am fost foarte mulțumit când am auzit zvonuri despre utilizarea Hyper-Threading în nucleele tuturor Pentium curent 4 / Xeon, dar nu va fi un spectacol gratuit pentru toate ocaziile. Motivele sunt clare, iar tehnologia trebuie să depășească mult mai mult, înainte de a vedea Hyper-Threading, funcționează pe toate platformele, inclusiv computerele de acasă. Și cu sprijinul dezvoltatorilor, tehnologia poate fi cu siguranta un bun aliat al Pentium 4, Xeon și procesoare viitoare generație de la Intel.

În conformitate cu restricțiile existente și cu tehnologia de ambalare existente, Hyper-Threading pare alegere mai sensibilă pentru piața de consum decât, de exemplu, AMD abordare baros - în aceste procesoare este folosit la fel de mult ca două nuclee. Și până atunci, până când devin tehnologii de ambalare perfecte, cum ar fi Bumpless Build-Up Layer. costul de a dezvolta procesor multi-core poate fi prea mare.

Este interesant de observat modul în care diferite de oțel AMD și Intel, în ultimii ani. La urma urmei, o dată pe AMD, practic, copiat procesoare Intel. Acum, compania a dezvoltat o abordare radical diferită de procesoare viitoare pentru servere și stații de lucru. AMD făcut într-adevăr un mod foarte lung. Și dacă în procesoarele Sledge Hammer se vor folosi de fapt două nuclee, performanța unei astfel de soluție ar fi mai eficientă decât Hyper-Threading. Într-adevăr, în acest caz, în plus față de dublarea numărului de dispozitive de acționare a elimina problema, pe care le-am descris mai sus.

Hyper-Threading de ceva timp nu apar pe piata de PC-uri convenționale, dar cu sprijin bun de la dezvoltatori, ea poate deveni următoarea tehnologie care va scădea de la nivelul serverului la computer este inactiv.

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

articole similare