Acasă / Diverse / Suport pentru tehnologia hyper threading. Tehnologia Hyper-Threading de la Intel. Productivitatea nu este niciodată suficientă

Suport pentru tehnologia hyper threading. Tehnologia Hyper-Threading de la Intel. Productivitatea nu este niciodată suficientă

Utilizatorii care au configurat cel puțin o dată BIOS-ul probabil au observat deja că există un parametru Intel Hyper Threading care este de neînțeles pentru mulți. Mulți nu știu ce este această tehnologie și în ce scop este folosită. Să încercăm să ne dăm seama ce este Hyper Threading și cum puteți activa utilizarea acestui suport. De asemenea, vom încerca să ne dăm seama ce avantaje oferă unui computer. această setare. În principiu, nu este nimic greu de înțeles aici.

Intel Hyper Threading: ce este?
Dacă nu intrați adânc în jungla terminologiei informatice, ci puneți-o într-un limbaj simplu, atunci această tehnologie a fost conceput pentru a crește fluxul de comenzi procesate simultan de CPU. Cipurile de procesoare moderne, de regulă, folosesc doar 70% din capabilitățile de calcul disponibile. Restul rămâne, ca să spunem așa, în rezervă. În ceea ce privește procesarea fluxului de date, în cele mai multe cazuri este utilizat un singur fir, în ciuda faptului că sistemul folosește un procesor multi-core.

Principii de bază ale muncii
Pentru a crește capacitățile procesorului central, a fost dezvoltată o tehnologie specială Hyper Threading. Această tehnologie face ușoară împărțirea unui flux de comandă în două. De asemenea, este posibil să adăugați un al doilea flux la unul existent. Doar un astfel de flux este virtual și nu funcționează la nivel fizic. Această abordare vă permite să creșteți semnificativ performanța procesorului. În consecință, întregul sistem începe să funcționeze mai repede. Creșterea performanței procesorului poate fluctua destul de mult. Acest lucru va fi discutat separat. Cu toate acestea, dezvoltatorii tehnologiei Hyper Threading susțin că nu ajunge la un nucleu cu drepturi depline. În unele cazuri, utilizarea acestei tehnologii este pe deplin justificată. Dacă cunoașteți esența procesoarelor Hyper Threading, atunci rezultatul nu va întârzia să apară.

Referință istorică
Să ne scufundăm puțin în istoria acestei dezvoltări. Suportul pentru Hyper Threading a apărut pentru prima dată doar în procesoarele Intel Pentium 4. Ulterior, implementarea acestei tehnologii a fost continuată în seria Intel Core iX (X înseamnă serie de procesoare aici). Trebuie remarcat faptul că din anumite motive este absent în linia de cipuri de procesor Core 2. Adevărat, atunci creșterea productivității a fost destul de slabă: undeva la nivelul de 15-20%. Acest lucru a indicat că procesorul nu avea puterea de procesare necesară, iar tehnologia creată era practic înaintea timpului său. Astăzi, suportul pentru tehnologia Hyper Threading este deja disponibil în aproape toate cipurile moderne. Pentru a crește puterea procesorului central, procesul în sine folosește doar 5% din suprafața de cristal, lăsând în același timp spațiu pentru procesarea comenzilor și a datelor.

O chestiune de conflicte și performanță
Toate acestea sunt cu siguranță bune, dar în unele cazuri, la procesarea datelor, poate exista o încetinire a activității. Acest lucru se datorează în mare parte așa-numitului modul de predicție a ramurilor și dimensiunii insuficiente a memoriei cache atunci când este reîncărcat constant. Dacă vorbim despre modulul principal, atunci în acest caz situatia se dezvolta in asa fel incat in unele cazuri primul thread poate necesita date de la al doilea, care pot sa nu fie procesate in acel moment sau sa fie in coada de procesare. De asemenea, nu mai puțin frecvente sunt situațiile în care nucleul procesorului central are o sarcină foarte serioasă, iar modulul principal, în ciuda acestui fapt, continuă să-i trimită date. Unele programe și aplicații, cum ar fi jocurile online care consumă mult resurse, pot încetini serios doar pentru că le lipsește optimizarea pentru utilizarea tehnologiei Hyper Threading. Ce se întâmplă cu jocurile? Sistemul informatic al utilizatorului, la rândul său, încearcă să optimizeze fluxurile de date de la aplicație la server. Problema este că jocul nu știe cum să distribuie în mod independent fluxurile de date, aruncând totul într-o singură grămadă. În general, este posibil să nu fie conceput pentru asta. Uneori, la procesoarele dual-core, creșterea performanței este semnificativ mai mare decât la cele cu 4 nuclee. Pur și simplu nu au putere de procesare.

Cum se activează Hyper Threading în BIOS?
Ne-am dat deja seama puțin despre ce este tehnologia Hyper Threading și ne-am familiarizat cu istoria dezvoltării acesteia. Am ajuns aproape de a înțelege ce este tehnologia Hyper Threading. Cum se activează această tehnologie pentru utilizare în procesor? Aici totul se face destul de simplu. Trebuie să utilizați subsistemul de gestionare a BIOS. Subsistemul este introdus folosind tastele Del, F1, F2, F3, F8, F12, F2+Del etc. Dacă utilizați un laptop Sony Vaio, atunci acestea au o intrare specifică atunci când utilizați tasta dedicată ASSIST. În setările BIOS, dacă procesorul pe care îl utilizați acceptă tehnologia Hyper Threading, ar trebui să existe o linie de setare specială. În cele mai multe cazuri, arată ca Hyper Threading Technology, iar uneori arată ca Function. În funcție de dezvoltatorul subsistemului și versiunea BIOS, setarea acestui parametru poate fi conținută fie în meniul principal, fie în setările avansate. Pentru a activa această tehnologie, trebuie să intrați în meniul de opțiuni și să setați valoarea la Activat. După aceea, trebuie să salvați modificările făcute și să reporniți sistemul.

De ce este util Hyper Threading?
În concluzie, aș vrea să vorbesc despre beneficiile pe care le oferă utilizarea tehnologiei Hyper Threading. Pentru ce sunt toate acestea? De ce este necesar să creștem puterea procesorului atunci când procesăm informații? Acei utilizatori care lucrează cu aplicații și programe care consumă mult resurse nu trebuie să explice nimic. Mulți oameni știu probabil că pachetele software grafice, matematice, de proiectare necesită o mulțime de resurse de sistem în procesul de lucru. Din această cauză, întregul sistem este încărcat atât de mult încât începe să încetinească teribil. Pentru a preveni acest lucru, este recomandat să activați suportul Hyper Threading.

Multe procesoare Intel includ module cu Hiper suport-Threading Technology, care, în conformitate cu ideea dezvoltatorilor, ar trebui să contribuie la creșterea performanței cipului și la accelerarea computerului în ansamblu. Care este specificul acestei soluții de la o corporație americană? Cum poți profita de Hyper-Threading?

Bazele tehnologiei

Să aruncăm o privire la detaliile cheie despre Hyper-Threading. Ce este această tehnologie? A fost dezvoltat de Intel și prezentat pentru prima dată publicului în 2001. Scopul creării sale a fost creșterea performanței serverelor. Principiul principal implementat în Hyper-Threading este distribuirea calculelor procesorului pe mai multe fire. Mai mult, acest lucru este posibil chiar dacă pe tipul corespunzător de microcircuit este instalat un singur nucleu (la rândul său, dacă există 2 sau mai multe dintre ele, iar firele din procesor sunt deja distribuite, tehnologia completează cu succes acest mecanism).

Asigurarea funcționării cipului principal al PC-ului în mai multe fire de execuție se realizează prin crearea de copii ale stărilor arhitecturale în cursul calculelor. În acest caz, se utilizează același set de resurse de pe cip. Dacă aplicația folosește capacitatea corespunzătoare, atunci operațiunile practic semnificative sunt efectuate mult mai rapid. De asemenea, este important ca tehnologia în cauză să fie suportată de sistemul de intrare/ieșire al computerului - BIOS-ul.

Activarea Hyper-Threading

Dacă procesorul instalat în PC acceptă standardul corespunzător, atunci acesta este de obicei activat automat. Dar, în unele cazuri, trebuie să efectuați manual acțiunile necesare pentru ca tehnologia Hyper-Threading să funcționeze. Cum să-l activezi? Foarte simplu.

Trebuie să intrați în interfața principală a BIOS-ului. Pentru a face acest lucru, chiar la începutul pornirii computerului, trebuie să apăsați DEL, uneori - F2, F10, mai rar - alte taste, dar cea dorită apare întotdeauna într-una dintre rândurile de text afișate pe ecran imediat după pornind PC-ul. În interfața BIOS, trebuie să găsiți elementul Hyper-Threading: în versiunile sistemului I/O care îl acceptă, acesta este de obicei situat într-un loc proeminent. După ce ați selectat opțiunea corespunzătoare, ar trebui să apăsați Enter și să o activați, marcând-o ca Activată. Dacă acest mod este deja setat, atunci tehnologia Hyper-Threading funcționează. Puteți folosi toate avantajele sale. După activarea tehnologiei în setări, ar trebui să salvați toate intrările din BIOS selectând Salvare și ieșire din configurare. După aceea, computerul va reporni în modul când procesorul funcționează cu suport Hyper-Theading. În mod similar, Hyper-Threading este dezactivat. Pentru a face acest lucru, selectați o altă opțiune în elementul corespunzător - Dezactivat și salvați setările.

După ce am studiat cum să activați Hyper-Threading și să dezactivați această tehnologie, să aruncăm o privire mai atentă la caracteristicile acesteia.

Procesoare cu suport Hyper Threading

Primul procesor pe care a fost implementat conceptul companiei, conform unor surse, este Intel Xeon MP, cunoscut și sub numele de Foster MP. Acest cip este similar într-un număr de componente arhitecturale cu Pentium 4, care a implementat ulterior tehnologia în cauză. Ulterior, caracteristica de calcul multi-threaded a fost implementată pe procesoarele server Xeon cu nucleu Prestonia.

Dacă vorbim despre prevalența actuală a Hyper-Threading - care „profesori” îl susțin? Printre cele mai populare cipuri de acest tip se numără cele care aparțin familiilor Core și Xeon. Există, de asemenea, informații că algoritmi similari sunt implementați în procesoare precum Itanium și Atom.

După ce am studiat informațiile de bază despre Hyper-Threading, procesoarele cu suportul său, să ne uităm la cele mai remarcabile fapte despre istoria dezvoltării tehnologiei.

Istoricul dezvoltării

După cum am menționat mai sus, Intel a arătat publicului conceptul în cauză în 2001. Dar primii pași în crearea tehnologiei au fost făcuți la începutul anilor 90. Inginerii companiei americane au observat că resursele procesoarelor PC nu sunt utilizate pe deplin atunci când se efectuează o serie de operațiuni.

După cum au calculat experții Intel, în timpul lucrului utilizatorului pe un computer, microcircuitul nu este utilizat în mod activ la intervale semnificative - aproape de cele mai multe ori - cu aproximativ 30%. Opiniile experților cu privire la această cifră sunt foarte diferite - cineva o consideră clar subestimată, alții sunt pe deplin de acord cu teza dezvoltatorilor americani.

Cu toate acestea, cei mai mulți specialiști IT au fost de acord că, chiar dacă nu 70% din capacitatea procesorului este inactivă, ci o cantitate foarte semnificativă din ele.

Sarcina principală a dezvoltatorilor

Intel a decis să corecteze această stare de fapt printr-o nouă abordare calitativ pentru asigurarea eficienței principalelor cipuri PC. S-a propus crearea unei tehnologii care să contribuie la o utilizare mai activă a capacităţilor procesoarelor. În 1996, specialiștii Intel și-au început dezvoltarea practică.

Conform conceptului de corporație americană, procesorul, care prelucrează date dintr-un program, ar putea direcționa resursele inactive pentru a lucra cu o altă aplicație (sau o componentă a celei actuale, dar având o structură diferită și necesitând utilizarea unor resurse suplimentare). Algoritmul corespunzător presupunea, de asemenea, o interacțiune eficientă cu alte componente hardware ale PC-ului - RAM, chipset și programe.

Intel a reusit sa rezolve problema. Inițial, tehnologia a fost numită Willamette. În 1999, a fost introdus în arhitectura unor procesoare, iar testarea lui a început. În curând tehnologia și-a primit numele modern - Hyper-Threading. Este greu de spus ce anume a fost - o simplă rebranding sau ajustări fundamentale ale platformei. Cunoaștem deja alte fapte referitoare la apariția tehnologiei în public și la implementarea acesteia în diferite modele de procesoare Intel. Printre denumirile de dezvoltare comune astăzi se numără Tehnologia Hyper-Threading.

Aspecte de compatibilitate cu tehnologia

Cât de bine este implementat suportul pentru tehnologia Hyper-Threading în sistemele de operare? Se poate observa că dacă vorbim de modern versiuni Windows, atunci nu vor fi probleme pentru ca utilizatorul să utilizeze pe deplin beneficiile tehnologiei Intel Hyper-Threading. Desigur, este, de asemenea, foarte important ca sistemul I/O să accepte tehnologia - despre asta am vorbit mai sus.

Factori software și hardware

În ceea ce privește versiunile mai vechi ale sistemului de operare - Windows 98, NT și XP relativ învechit, o condiție necesară pentru compatibilitatea cu Hyper-Threading este suportul ACPI. Dacă nu este implementat în sistemul de operare, atunci nu toate fluxurile de calcul care sunt formate de modulele corespunzătoare vor fi recunoscute de computer. Rețineți că Windows XP în ansamblu asigură utilizarea avantajelor tehnologiei în cauză. De asemenea, este foarte de dorit ca algoritmii multithreading să fie implementați în aplicațiile utilizate de proprietarul PC-ului.

Uneori este posibil să aveți nevoie de un PC - dacă instalați pe el procesoare cu suport Hyper-Threading în loc de cele care au fost instalate inițial pe el și nu erau compatibile cu tehnologia. Totuși, ca și în cazul sistemelor de operare, nu vor fi probleme deosebite dacă utilizatorul are un PC modern sau cel puțin componentele hardware corespunzătoare primelor procesoare Hyper Threading, așa cum am menționat mai sus, implementate în linia Core și adaptate. chipset-urile de pe plăcile de bază suportă pe deplin funcțiile corespunzătoare ale cipului.

Criterii de accelerare

Dacă computerul la nivel de componente hardware și software nu este compatibil cu Hyper-Threading, atunci această tehnologie, teoretic, îl poate chiar încetini. Această stare de lucruri i-a determinat pe unii profesioniști IT să se îndoiască de perspectivele soluției de la Intel. Au decis că nu a fost un salt tehnologic, ci o mișcare de marketing care stă la baza conceptului de Hyper Threading, care, datorită arhitecturii sale, nu este capabil să accelereze semnificativ PC-ul. Însă îndoielile criticilor au fost înlăturate rapid de inginerii Intel.

Deci, condițiile de bază pentru ca tehnologia să fie utilizată cu succes:

Suport pentru Hyper-Threading de către sistemul I/O;

Compatibilitatea plăcii de bază cu procesorul de tipul corespunzător;

Suportul unei tehnologii de către sistemul de operare și aplicația specifică care rulează pe aceasta.

Dacă nu ar trebui să apară probleme speciale în primele două puncte, atunci în ceea ce privește compatibilitatea programelor cu Hyper-Threading, pot exista totuși unele suprapuneri. Dar se poate observa că dacă aplicația acceptă, de exemplu, lucrul cu procesoare dual-core, atunci va fi compatibil, aproape garantat, cu tehnologia de la Intel.

Cel puțin există studii care confirmă creșterea performanței programelor adaptate microcircuitelor dual-core cu aproximativ 15-18% dacă în procesor funcționează modulele Intel Hyper Threading. Știm deja cum să le dezactivăm (în cazul în care utilizatorul are îndoieli cu privire la oportunitatea utilizării tehnologiei). Dar probabil că există foarte puține motive tangibile pentru apariția lor.

Utilitatea practică a Hyper-Threading

Tehnologia în cauză a avut un impact tangibil asupra Intel? Există păreri diferite în această chestiune. Dar mulți oameni observă că tehnologia Hyper-Threading a devenit atât de populară încât această soluție a devenit indispensabilă pentru mulți producători de sisteme de server și a fost primită pozitiv și de utilizatorii obișnuiți de PC-uri.

Hardware de prelucrare a datelor

Principalul avantaj al tehnologiei este că este implementată într-un format hardware. Adică, cea mai mare parte a calculelor va fi efectuată în interiorul procesorului pe module speciale, și nu sub formă de algoritmi software transmiși la nivelul nucleului principal al microcircuitului - ceea ce ar implica o scădere a performanței generale a PC. În general, conform experților IT, inginerii Intel au reușit să rezolve problema pe care o identificaseră la începutul dezvoltării tehnologiei - să facă procesorul să funcționeze mai eficient. Într-adevăr, după cum au arătat testele, atunci când se rezolvă multe sarcini care sunt practic semnificative pentru utilizator, utilizarea Hyper-Threading a făcut posibilă accelerarea semnificativă a lucrării.

Se poate observa că dintre 4 acele microcircuite care au fost echipate cu module suport pentru tehnologia luată în considerare au funcționat mult mai eficient decât primele modificări. Acest lucru a fost în mare măsură exprimat în capacitatea PC-ului de a funcționa în modul real multitasking - atunci când mai multe tipuri diferite de aplicații Windows, și este extrem de nedorit ca din cauza consumului crescut de resurse de sistem de către unul dintre ei, viteza celorlalți să scadă.

Rezolvarea simultană a diferitelor sarcini

Astfel, procesoarele cu suport pentru Hyper-Threading sunt mai bine adaptate decât microcircuitele care nu sunt compatibile cu acesta, pentru a lansa simultan, de exemplu, un browser, a reda muzică și a lucra cu documente. Desigur, toate aceste avantaje sunt resimțite de utilizator în practică doar dacă componentele software și hardware ale PC-ului sunt suficient de compatibile cu acest mod de operare.

Evoluții similare

Hyper-Threading nu este singura tehnologie concepută pentru a îmbunătăți performanța PC-ului prin calcularea multi-threaded. Are analogi.

De exemplu, procesoarele POWER5 de la IBM acceptă și multithreading. Adică, fiecare dintre (în total, 2 elemente corespunzătoare sunt instalate pe el) poate îndeplini sarcini în cadrul a 2 fire. Astfel, microcircuitul procesează 4 fluxuri de calcule simultan.

AMD are, de asemenea, o muncă grozavă în zona conceptelor de multithreading. Deci, se știe că arhitectura Bulldozer folosește algoritmi similari Hyper-Threading. O caracteristică a soluției AMD este că fiecare dintre fire procesează blocuri separate de procesor. Când al doilea nivel rămâne comun. Concepte similare sunt implementate în arhitectura Bobcat dezvoltată de AMD, care este adaptată pentru laptopuri și PC-uri mici.

Desigur, analogii direcți ai conceptului de la AMD, IBM și Intel pot fi considerați foarte condiționat. Precum și abordări ale proiectării arhitecturii procesoarelor în general. Însă principiile implementate în tehnologiile respective pot fi considerate destul de asemănătoare, iar obiectivele stabilite de dezvoltatori în ceea ce privește îmbunătățirea eficienței funcționării microcircuitelor sunt foarte apropiate în esență, dacă nu identice.

Acestea sunt faptele cheie referitoare la cea mai interesantă tehnologie de la Intel. Ce este, cum să activați Hyper-Threading sau, dimpotrivă, cum să-l dezactivați, am stabilit. Ideea este probabil în utilizarea practică a avantajelor sale, care pot fi utilizate asigurându-vă că PC-ul în componente hardware și software acceptă tehnologia.

Hyper Threading (hyper threading, „hiper threading”, hyper threading - rus.) - o tehnologie dezvoltată de companie Intel, care permite nucleului procesorului să execute mai multe fluxuri de date decât unul (de obicei două). Din moment ce s-a constatat că un procesor convențional în majoritatea sarcinilor folosește nu mai mult de 70% din toată puterea de calcul, s-a decis să se folosească o tehnologie care permite, atunci când anumite unități de calcul sunt inactive, să le încarce cu lucru cu un alt fir. Acest lucru vă permite să creșteți performanța nucleului de la 10 la 80% in functie de sarcina.

Vedeți cum funcționează Hyper-Threading .

Să presupunem că procesorul efectuează calcule simple și, în același timp, un bloc de instrucțiuni este inactiv și SIMD extensii.

Modulul de adresare detectează acest lucru și trimite date acolo pentru calcule suplimentare. Dacă datele sunt specifice, atunci aceste blocuri le vor executa mai lent, dar datele nu vor fi inactive. Sau le vor preprocesa, pentru o procesare rapidă ulterioară de către blocul corespunzător. Acest lucru oferă un câștig suplimentar de performanță.

Desigur, firul virtual nu ajunge la miezul cu drepturi depline, dar acest lucru vă permite să realizați aproape 100% eficiența puterii de calcul, încărcând aproape întregul procesor cu lucru, nu lăsându-l inactiv. Cu toate acestea, pentru a implementa tehnologia HT doar aprox. 5% spațiu suplimentar pentru matriță, iar performanța poate fi uneori adăugată 50% . Această zonă suplimentară include blocuri suplimentare de registre și predicție de ramuri, care calculează în flux unde puterea de calcul poate fi utilizată la un moment dat și trimit date dintr-un bloc de adrese suplimentar acolo.

Pentru prima dată, tehnologia a apărut pe procesoare Pentium 4, dar nu a existat o creștere mare a performanței, deoarece procesorul în sine nu avea putere mare de calcul. Creșterea a fost în cel mai bun caz 15-20% , iar în multe sarcini procesorul a funcționat mult mai lent decât fără HT.

Încetini procesor datorită tehnologiei Hyper Threading, se întâmplă dacă:

  • Cache nu este suficient pentru toate date și se repornește ciclic, încetinind procesorul.
  • Datele nu pot fi procesate corect de către predictorul de ramură. Apare în principal din cauza lipsa de optimizare pentru software specific sau suport din partea sistemului de operare.
  • Poate apărea și din cauza dependențe de date, când, de exemplu, primul thread necesită date imediate de la al doilea, dar nu sunt încă gata, sau așteaptă la coadă un alt thread. Sau datele ciclice au nevoie de anumite blocuri pentru procesare rapidă și sunt încărcate cu alte date. Pot exista multe variații ale dependenței de date.
  • Dacă nucleul este deja încărcat puternic și modulul de predicție a ramurilor „nu suficient de inteligent” trimite în continuare date care încetinesc procesorul (relevant pentru Pentium 4).

După Pentium 4, Intel a început să folosească tehnologia numai de la Core i7 prima generație, sărind peste seria 2 .

Puterea de procesare a procesoarelor a devenit suficientă pentru implementarea completă a hyperthreading-ului fără prea mult rău, chiar și pentru aplicațiile neoptimizate. Mai tarziu, Hyper Threading a apărut pe procesoarele clasei de mijloc și chiar bugetare și portabile. Folosit pe toate seriile miezul i (i3; i5; i7) și pe procesoare mobile atom(deloc). Interesant, procesoare dual-core cu HT, primesc un câștig de performanță mai mare decât quad-core din utilizarea Hyper Threading, în picioare 75% cu drepturi depline patru nucleare.

Unde este util HyperThreading?

Va fi util pentru utilizare împreună cu programe profesionale, grafice, analitice, matematice și științifice, editori video și audio, arhivatori ( Photoshop, Corel Draw, Maya, 3D's Max, WinRar, Sony Vegas &etc). Toate programele care folosesc o mulțime de calcule, HT cu siguranta va fi de folos. Din fericire, în 90% cazuri, astfel de programe sunt bine optimizate pentru utilizarea sa.

hiperthreading indispensabil pentru sistemele server. De fapt, pentru această nișă a fost parțial dezvoltat. Mulțumită HT, puteți crește semnificativ randamentul procesorului atunci când există un număr mare de sarcini. Fiecare thread va fi descărcat la jumătate, ceea ce are un efect benefic asupra adresei datelor și predicției ramurilor.

Mulți jocuri pe calculator , sunt legate negativ de prezență Hyper Threading, ceea ce reduce numărul de cadre pe secundă. Acest lucru se datorează lipsei de optimizare pentru Hyper Threading din partea jocului. O optimizare din partea sistemului de operare nu este întotdeauna suficientă, mai ales atunci când lucrați cu date neobișnuite, eterogene și complexe.

Pe plăcile de bază care suportă HT, puteți oricând dezactiva tehnologia hyperthreading.

20 ianuarie 2015 la 19:43

Mai multe 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 cuantumul timpului 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 și biților mașinii, folosind software propria dezvoltare.

Platformă cercetată

Obiectul experimentelor - Laptop ASUS N750JK cu procesor Intel Core i7-4700HQ. Viteza ceasului este de 2,4 GHz, mărită de modul Intel Turbo Boost până la 3,4 GHz. 16 gigaocteți instalați memorie cu acces aleator DDR3-1600 (PC3-12800) care funcționează în modul dual-channel. Sistem de operare - Microsoft Windows 8.1 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 sistemului de operare prin tabelul ACPI MADT (Multiple APIC Description Table). Deoarece platforma conține un singur controler RAM, nu există niciun SRAT (System Resource Affinity Table) care să declare apropierea nucleelor ​​procesorului față de controlerele de memorie. Evident, laptopul în cauză nu este o platformă NUMA, dar sistem de operare, în scopul unificării, îl consideră un sistem NUMA cu un singur domeniu, așa cum este indicat de linia NUMA Nodes = 1. Faptul care este fundamental pentru experimentele noastre este că memoria cache de date de la primul nivel are o dimensiune de 32 kilobytes pentru fiecare dintre cele patru nuclee. Două procesoare logice care partajează același nucleu partajează cache-urile L1 și L2.

Operațiune investigată

Vom investiga dependența vitezei de citire a blocului 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 VMOVAPD AVX. Pe diagrame, axa X arată dimensiunea blocului, iar axa Y arată viteza de citire. În vecinătatea punctului X, corespunzătoare dimensiunii cache-ului L1, ne așteptăm să vedem un punct de inflexiune, deoarece performanța ar trebui să scadă după ce blocul care este procesat iese din cache. În testul nostru, în cazul multithreading-ului, fiecare dintre cele 16 fire inițiate funcționează cu un interval de adrese separat. Pentru a controla tehnologia Hyper-Threading în cadrul unei aplicații, fiecare thread folosește funcția API SetThreadAffinityMask, care setează o mască în care fiecărui procesor logic îi corespunde un bit. O singură valoare a bitului permite utilizarea procesorului specificat de către firul specificat, o valoare zero o interzice. Pentru 8 procesoare logice ale platformei studiate, masca 11111111b permite utilizarea tuturor procesoarelor (Hyper-Threading activat), masca 01010101b permite utilizarea unui procesor logic în fiecare nucleu (Hyper-Threading dezactivat).

Următoarele abrevieri sunt folosite pe grafice:

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

CPI (Clocks per Instruction)numărul de cicluri pe instrucțiune;

TSC (Contor de marcaj de timp)contor ciclului procesorului.

Notă: Este posibil ca viteza de ceas a registrului TSC să nu se potrivească cu viteza de ceas 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 ciclului operației țintă efectuate în fiecare dintre firele de execuție a programului, sau primii 128 de octeți ai acestui cod.

Experienta numarul 1. Un fir



Fig.2 Citind într-un singur fir

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

Experienta numarul 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 are loc la o dimensiune a blocului de aproximativ 32 de kiloocteți. Așa cum era de așteptat, față de citirea într-un fir, viteza a crescut de aproximativ 4 ori, în ceea ce privește numărul de nuclee de lucru.

Experiența numărul 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 activat. Viteza maximă de 800722 megaocteți pe secundă, ca urmare a includerii 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 din același nucleu îl împart.

concluzii

Operația investigată se scalează destul de bine pe un procesor multi-core. Motivele sunt că fiecare dintre nuclee conține propria sa memorie cache de primul și al doilea nivel, dimensiunea blocului țintă este comparabilă cu dimensiunea memoriei cache și fiecare dintre fire funcționează cu propria sa gamă de adrese. În scopuri academice, am creat astfel de condiții într-un test sintetic, realizând că aplicațiile reale sunt de obicei departe de optimizarea ideală. Dar includerea 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 este în intervalul de la 16 la 32. kiloocteți.

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 de aceeași frecvență. Acum, după o examinare mai atentă, această afirmație va trebui probabil să fie ușor modificată. Tehnologia Hyper-Threading implementată în Intel Xeon cu nucleul Prestonia funcționează cu adevărat și oferă un efect destul de tangibil. Deși există și multe întrebări când îl utilizați...

Oferă performanță

„Mai repede, chiar mai repede...”. Cursa pentru performanță durează de ani de zile și, uneori, este chiar greu de spus care dintre componentele computerului accelerează mai repede. Pentru aceasta, se inventează din ce în ce mai multe moduri 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, desigur, necesară. Cel puțin, este o afacere profitabilă și există întotdeauna o modalitate frumoasă de a încuraja utilizatorii să facă upgrade „procesorul super-performant” 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 „cine” (absorbând complet 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 să lăsăm deoparte aspectele de marketing în acest caz, concentrându-ne pe cele tehnice. Mai mult, nu totul este atât de sumbru: există sarcini urgente (aplicații de server, calcule științifice, modelare etc.), unde totul este mai mult performanta ridicata, în special unitățile centrale de procesare, este cu adevărat necesar.

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

Creșterea ceasului. Poate fi mai „subțiat” proces tehnologicși crește 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 disiparea căldurii.

Creșterea resurselor procesorului- de exemplu, creșterea volumului cache-ului, adăugarea de noi blocuri (Execution Units). Toate acestea implică o creștere a numărului de tranzistori, a complexității procesorului, o creștere a zonei cristalului și, în consecință, a costului.

În plus, cele două metode anterioare dau, de regulă, în nici un caz o creștere liniară a productivității. Acest lucru este bine cunoscut în exemplul Pentium 4: erorile în predicția ramurilor și întreruperile provoacă 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ă (să nu mai vorbim de plăcile de bază care suportă patru sau mai multe procesoare). În plus, nu toate aplicațiile beneficiază de multiprocesare suficient pentru a justifica costul.

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

Multiprocesare cip (CMP)- două nuclee de procesor sunt situate fizic pe același 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 mare, mai ales dacă un proces așteaptă.

Multithreading de pornire a evenimentului. Schimbarea sarcinilor atunci când au loc pauze lungi, cum ar fi „cache miss” (cache miss), dintre care un număr mare este tipic pentru aplicațiile server. În acest caz, un proces care așteaptă să încarce date 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 se execută pe același procesor „simultan”, adică fără a comuta între ele. Resursele CPU sunt distribuite dinamic, după principiul „dacă nu îl folosești, dă-l altcuiva”. Această abordare este cea care stă la baza tehnologii Intel Hyper-Threading, la care ne întoarcem acum.

Cum funcționează Hyper-Threading

După cum știți, actuala „paradigma de calcul” implică calcul multithreaded. 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 vedea acest lucru, este suficient să deschideți Task Manager în Windows 2000/XP și să activați afișarea numărului de fire). În același timp, un procesor convențional poate executa doar unul dintre fire odată ș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 „rolăcea”. Reamintim că Xeon MP, prezentat oficial la IDF Spring 2002, folosește un nucleu Pentium 4 Willamette, conține 256 KB cache L2 și 512 KB/1 MB cache L3 și acceptă configurații cu 4 procesoare. Suportul Hyper-Threading este prezent și în procesorul Intel Xeon pentru stațiile de lucru (core Prestonia, cache L2 de 512 KB), care a intrat pe piață puțin mai devreme decât Xeon MP. Cititorii noștri sunt deja familiarizați cu configurațiile cu procesor dublu de pe Intel Xeon, așa că vom lua în considerare posibilitățile Hyper-Threading folosind aceste procesoare ca exemplu - atât teoretic, cât și practic. Oricum ar fi, „simpluul” Xeon este 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, încă o 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 două procesoare cu drepturi depline.

Unul dintre obiectivele implementării Hyper-Threading este acela de a permite doar unui fir activ să ruleze la aceeași viteză ca pe un procesor normal. Pentru a face acest lucru, procesorul are două moduri principale de funcționare: Single-Task (ST) și Multi-Task (MT). În modul ST, un singur procesor logic este activ și utilizează resursele disponibile nedivizat (modurile ST0 și ST1); celălalt LP este oprit de comanda HALT. Când apare un al doilea thread de program, procesorul logic inactiv este activat (printr-o întrerupere) și CPU-ul fizic este pus în modul MT. Oprirea LP-urilor neutilizate cu comanda HALT este responsabilitatea 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 lucrul corect cu care 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 fizice ale CPU (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 pe rând, în fiecare ceas. În același timp, atunci când este activ un singur LP, acesta obține acces exclusiv la TC fără a se intercala pe ceasuri. În mod similar, are loc accesul la Microcode ROM. Blocurile ITLB (Instruction Translation Look-aside Buffer), care sunt activate în absența instrucțiunilor necesare din memoria cache a instrucțiunilor, sunt duplicate și livrează instrucțiuni fiecare pentru propriul thread. Blocul de decodare a instrucțiunilor IA-32 Instruction Decode este partajat și, în cazul în care decodificarea instrucțiunilor este necesară pentru ambele fluxuri, le servește unul câte unul (din nou, fiecare ciclu). Blocurile Uop Queue și Allocator sunt împărțite în două, jumătate din elemente fiind alocate pentru fiecare LP. Planificatoarele din 5 bucăți procesează cozi de comenzi decodificate (Uops) în ciuda faptului că aparțin LP0 / LP1 și comenzi directe care urmează să fie executate de către Unitățile de execuție necesare - în funcție de disponibilitatea 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 din DTLB (Data Translation Look-aside Buffer) sunt furnizate cu descriptori în forma de ID-uri de procesor logic.

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

  • duplicat (duplicat);
  • partajat complet (Partajat complet);
  • cu descriptori de elemente (Entry Tagged);
  • divizat dinamic (Partitionat) in functie de modul de operare al ST0/ST1 sau MT.

Cu toate acestea, majoritatea aplicațiilor care sunt accelerate 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, împiedicând funcționarea 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 în loc de bucle de așteptare goale (introduse în IA-32 începând cu Pentium 4). De asemenea, se lucrează serios la optimizarea automată și semi-automată a codului în timpul compilării - de exemplu, compilatoarele din seria Intel OpenMP C ++ / Fortran Compilers () au 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 zonei matrițelor și a consumului de energie, în timp ce crește semnificativ performanța. 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%. Ce s-a întâmplat cu partea a doua (performanță), încă trebuie să verificăm.

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, dacă ne hotărâm la o astfel de ispravă, este încă acum, la mai puțin de o lună de la anunțul oficial, este absolut nerealist să obținem acest echipament scump. Prin urmare, s-a decis să ne reținem la același sistem cu două Intel Xeon 2.2 GHz, pe care au fost efectuate primele teste ale acestor procesoare (vezi linkul de la începutul articolului). Sistemul se baza pe placa de baza Supermicro P4DC6+ ( Chipset Intel i860), conținea 512 MB de RDRAM, o placă video pe un cip GeForce3 (64 MB DDR, drivere Detonator 21.85), HDD 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 kernel Prestonia la pornire BIOS-ul sistemului 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, acesta din urmă versiuni de BIOS Plăcile Supermicro P4DCxx au introdus elementul Enable Hyper-Threading, fără de care sistemul de operare va recunoaște doar procesorul (procesoarele) fizice. În al doilea rând, ACPI este folosit pentru a spune sistemului de operare că există procesoare 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 însuși. Din fericire, în Windows 2000, schimbarea HAL de la PC standard (sau PC-ul MPS Uni-/Multiprocessor) la PC-ul ACPI Uni-/Multiprocessor este ușoară - prin schimbarea „driverului de computer” în managerul de dispozitive. În același timp, pentru Windows XP, singura modalitate legală de migrare la ACPI HAL este reinstalarea sistemului peste instalația existentă.

Dar acum toate pregătirile sunt făcute, iar Windows 2000 Pro al nostru crede deja ferm că funcționează pe un sistem cu două procesoare (deși, de fapt, există un singur procesor instalat). Acum, ca de obicei, este timpul să decideți asupra obiectivelor testării. 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 date 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, care a fost folosit în testarea sistemelor stațiilor de lucru. Să începem, poate, de la capăt și să verificăm „egalitatea” procesoarelor logice. Totul este extrem de simplu: mai întâi rulăm teste pe un procesor cu Hyper-Threading dezactivat, apoi repetă 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 reduse la forma „mai mare este mai bine” și normalizate (indicatorii unui sistem cu un singur procesor fără Hyper-Threading sunt luați ca unitate).

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-ul inactiv (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 către utilizarea LP-ului activ.

Prin urmare, tragem prima concluzie: două procesoare logice sunt de fapt egale în drepturi, iar activarea Hyper-Threading „nu interferează” cu funcționarea unui fir (ceea ce nu este rău în sine). Acum să vedem dacă această includere „ajută”, și dacă da, unde și cum?

redare. Rezultatele a patru teste în 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 constant menținută la 100%. Cu toate acestea, atunci când Hyper-Threading este activat, calculul scenelor este accelerat (ca urmare, am avut chiar o glumă despre utilizarea procesorului peste 100%). În trei teste, putem observa o creștere a performanței de la Hyper-Threading de 14--18% - pe de o parte, nu mult în comparație cu al doilea procesor, dar pe de altă parte, destul de bună, având în vedere efectul „liber” al acest efect. La unul dintre cele două teste cu Lightwave, câștigul de performanță este aproape nul (se pare că specificul acestei aplicații pline de ciudățeni afectează). Dar nu există niciun rezultat negativ nicăieri, iar o creștere notabilă în celelalte trei cazuri este încurajatoare. Și asta în ciuda faptului că procesele de randare paralele fac o muncă similară și, cu siguranță, nu pot folosi resursele procesorului fizic în același timp în cel mai bun mod.

Photoshop și codare MP3. Codecul GOGO-no-coda 2.39c este unul dintre puținele care acceptă SMP și arată o creștere a performanței cu 34% de la procesorul dublu. Î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), puteți observa o încetinire când Hyper-Threading este activat, deși al doilea CPU fizic adaugă 12% performanță în acest caz. Iată, 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 procesor dublu: de ce nu sunt prieteni

De multe ori în articole am atras atenția cititorilor asupra faptului că platformele cu procesor dublu prezintă rareori vreun avantaj semnificativ față de cele cu un singur procesor atunci când efectuează teste profesionale OpenGL. Și, în plus, există cazuri în care instalarea unui al doilea procesor, dimpotrivă, înrăutățește performanța sistemului la redarea scenelor dinamice tridimensionale.

Desigur, nu numai noi am observat această ciudățenie. Unii testeri pur și simplu au ocolit în tăcere acest fapt - de exemplu, furnizând rezultate de comparație SPEC ViewPerf doar pentru configurații cu două procesoare, evitând astfel explicațiile „de ce este un sistem cu două procesoare mai lent?”. Alții au făcut tot felul de presupuneri fanteziste despre coerența memoriei cache, necesitatea de a o menține, costul general rezultat și așa mai departe. Și din anumite motive, nimeni nu a fost surprins că, de exemplu, procesoarele erau nerăbdătoare să monitorizeze coerența tocmai î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, în opinia noastră, este mult mai simplă. După cum știți, o aplicație poate rula mai rapid pe două procesoare decât pe unul dacă:

  • există mai mult de două sau mai multe fire de execuție de program simultan (fire de execuție);
  • 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, realizată 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, este creat propriul său 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” scot imaginea generată în fereastră, făcând contextul lor alternativ curent. Inutil să spun că această „intercalare a contextului” poate fi foarte costisitoare în ceea ce privește cheltuielile generale?

De asemenea, ca exemplu, vom oferi 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 o platformă cu următoarea configurație:

  • unul sau două Intel Xeon 2,2 GHz (Hyper-Threading dezactivat);
  • 512 MB 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 sunt grafice de încărcare 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: Animation 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

Același model se repetă într-o serie de alte aplicații care folosesc OpenGL. Două procesoare nu se deranjează deloc cu lucrul, iar utilizarea totală 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 este menținută cu încredere la nivelul de 100%.

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

Putem afirma că la două procesoare logice, scăderea performanței este și mai semnificativă, ceea ce este destul de de înțeles: două procesoare logice interferează unul cu celălalt în același mod ca două procesoare fizice. Dar performanța lor generală, desigur, se dovedește a fi mai mică în acest caz, așa că atunci când Hyper-Threading este activat, scade chiar mai mult decât doar atunci când rulează două procesoare fizice. Rezultatul este previzibil și concluzia este simplă: Hyper-Threading, ca SMP „adevărat”, este uneori 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 pentru Hyper-Threading este similară (deși rezultatul este puțin mai mare în cazul unui sistem SMP pentru SolidEdge V10). Dar rezultatele testelor CPU_Score care încarcă procesorul 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 recunoaște sincer potențialul de degradare a performanței cu Hyper-Threading în unele cazuri - de exemplu, atunci când se utilizează bucle de așteptare goale. Putem doar presupune că acesta este motivul (o examinare detaliată a 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 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 pentru care Hyper-Threading „devine prost”, iar în cazul răspândirii acestei tehnologii, ar fi de dorit să le modifici. Dar nu s-a întâmplat același lucru cu MMX și SSE și continuă să se întâmple 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 considerăm doar temporară, în așteptarea achiziționării unui al doilea procesor): nici măcar o creștere a performanței cu 30% nu justifică prețul în niciun caz. mod - atunci este mai bine să cumpărați un Pentium obișnuit 4. Numărul de procesoare rămase este de la două sau mai multe.

Acum să ne imaginăm că cumpărăm un sistem Xeon cu două procesoare (să zicem, cu Windows 2000/XP Professional). Două procesoare sunt instalate, Hyper-Threading este activat, BIOS-ul găsește până la patru procesoare logice, acum să decolăm... Stop. Dar câte procesoare va vedea sistemul nostru de operare? Așa e, doi. Doar două, pentru că pur și simplu nu este conceput pentru un număr mai mare. 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 nu mai rapid (verificat prin teste suplimentare, rezultatele nu sunt citate pentru evidenta lor). Hmmm, nu prea distractiv...

Ce ramane? Ei bine, nu instalați Advanced Server sau .NET Server pe stația noastră de lucru, chiar? Nu, sistemul se va instala, va recunoaște toate cele patru procesoare logice și va funcționa. Acesta este doar sistemul de operare al serverului care se uită la stația de lucru, ca să spunem ușor, puțin ciudat (ca să nu mai vorbim de aspectele financiare). Singurul caz rezonabil este când sistemul nostru Xeon cu două procesoare va acționa ca un server (cel puțin unii constructori nu ezită să lanseze servere pe procesoarele Xeon ale stațiilor de lucru). Dar pentru stațiile de lucru duale cu sistemele de operare corespunzătoare, aplicabilitatea Hyper-Threading rămâne sub semnul întrebării. Intel susține acum în mod activ licențierea sistemului de operare pe baza numărului de procesoare nu logice, ci fizice. Discuțiile sunt încă în desfășurare și, în general, depind foarte mult dacă vedem un sistem de operare de stație de lucru cu suport pentru patru procesoare.

Ei bine, cu serverele, totul iese destul de simplu. De exemplu, un Windows 2000 Advanced Server instalat pe un sistem Xeon cu două socluri cu Hyper-Threading activat va vedea patru procesoare logice și va funcționa fără probleme pe el. Pentru a evalua ce aduce Hyper-Threading sistemelor server, prezentăm rezultatele Intel Microprocessor Software Labs pentru sisteme cu două procesoare pe Xeon MP ș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 soluția cu licențiere OS. Deși încă o aplicație a Hyper-Threading este destul de reală - dacă procesoarele desktop primesc suport pentru această tehnologie. De exemplu (să ne imaginăm) ce este în neregulă cu un sistem Pentium 4 cu suport Hyper-Threading, pe care este instalat Windows 2000/XP Professional cu suport SMP? - de la servere la sisteme desktop și mobile.