Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Sisteme de operare
  • Hyper-Threading: „două-în-unul” de la Intel sau funcții ascunse ale Xeon. Procesoare multi-core: cum funcționează

Hyper-Threading: „două-în-unul” de la Intel sau funcții ascunse ale Xeon. Procesoare multi-core: cum funcționează

ov în mașină și am găsit câteva postări, dar sunt confuz, deoarece unii au menționat că obțineți nuclee logice și nuclee fizice etc.
Deci, care este diferența dintre nucleele logice și cele fizice și există o modalitate de a obține nuclee fizice? Sau are sens să includem nuclee logice în numărătoarea noastră?

4 Soluții colectează formulare web pentru „Deci care sunt nucleele logice ale unui procesor (spre deosebire de nucleele fizice ale unui procesor)?”

Miezurile fizice sunt pur și simplu nuclee fizice dintr-un procesor. Miezurile logice sunt abilitățile unui singur nucleu de a face două sau mai multe lucruri în același timp. Acest lucru a apărut din procesoarele Pentium 4 timpurii capabile să facă ceea ce s-a numit Hyper Threading (HTT).

Era un joc care se juca atunci când componentele auxiliare ale nucleului nu erau folosite pentru anumite tipuri de instrucțiuni, în timp ce se puteau face alte lucrări lungi. Deci, procesorul ar putea lucra la două lucruri în același timp.

Nucleele mai noi sunt procesoare cu mai multe caracteristici, așa că funcționează pe mai multe lucruri în același timp, dar nu sunt procesoare adevărate ca nuclee fizice. Puteți citi mai multe despre limitările funcției de hyperthreading și capacitățile fizice ale nucleului aici pe tomshardware în acest articol intitulat: Intel Core i5 și Core i7: Intel Mainstream Magnum Opus.

Puteți vedea defalcarea ferestrei dvs. cu comanda lscpu:

$ lscpu Arhitectură: x86_64 Modul operațional al procesorului: CPU pe 32 de biți, 64 de biți: 4 fire per nucleu: 2 nuclee pe soclu: 2 soclu(e) CPU: 1 NUMA nod(e): 1 ID furnizor: GenuineIntel CPU Family: 6 Model: 37 Stepping: 5 CPU MHz: 2667.000 Virtualization: VT-x L1d cache: 32K L1i cache: 32K L2 cache: 256K L3 cache: 3072K NUMA node0 CPU ): 0-3

În cele de mai sus, laptopul meu intel i5 are 4 „procesoare” în total

Procesor(e): 4

dintre care sunt 2 nuclee fizice

Miez(e) per soclu: 2

dintre care fiecare poate rula până la 2 fire

Subiecte per nucleu: 2

în același timp. Aceste fire sunt capabilități logice ale nucleului.

Miezurile fizice reprezintă numărul de nuclee fizice, componentele hardware reale.

Miezurile logice reprezintă numărul de nuclee fizice înmulțit cu numărul de fire care pot rula pe fiecare nucleu folosind hyperthreading.

de exemplu, procesorul meu cu 4 nuclee rulează pe două fire per nucleu, așa că am 8 procesoare logice.

$ sudo dmidecode |egrep "Desemnare socket: Proc|((Thread|Core) Count)" Desemnare socket: Proc 1 Număr miez: 14 Număr fire: 28 Denumire socket: Proc 2 Număr miez: 14 Număr fire: 28

Două cuiburi. Fiecare soclu are 14 nuclee fizice. Fiecare miez are două fire (28/14). Numărul total de „procesoare” logice sau unități de procesare logică este de 56 (asta este „top” și alte comenzi vă arată ca număr „procesor”).

Tehnologia Hyperthreading permite unui nucleu de procesor fizic să se comporte ca două procesoare logice.

Deci, un nucleu de procesor poate executa două fire independente în același timp.

Intel se referă la procesorul fizic ca un socket.

Hyperthreading permite unui procesor fizic să se comporte ca și cum ar avea două procesoare fizice, care sunt numite procesoare logice. Pentru ce?

Deși hyperthreadingul nu dublează performanța sistemului, poate îmbunătăți performanța prin utilizarea resurselor inactive, rezultând un debit mai mare pentru anumite tipuri de încărcături de lucru critice. O aplicație care rulează pe un procesor logic al unui nucleu ocupat se poate aștepta la puțin mai mult de jumătate din lățimea de bandă pe care o primește atunci când rulează în modul unic pe un procesor care nu acceptă hyperthreading.

rezumat

Procesorul fizic este ceea ce putem vedea și cădea.

Procesorul logic este similar cu: Nucleul fizic care acționează ca două nuclee fizice

Pe piața din Sankt Petersburg a apărut un procesor Intel Pentium 4 cu o frecvență de ceas de 3,06 GHz, unde a fost aplicată tehnologia Hyper-Threading (HT).
Utilizată anterior doar în sistemele server, această tehnologie a introdus o nouă clasă de computere personale desktop de înaltă performanță, spun producătorii.
Cu tehnologia HT, un procesor fizic este tratat de sistemul de operare al PC-ului și de aplicații ca două procesoare logice. Potrivit lui Aleksey Navolokin, șeful reprezentanței Intel în Rusia și CSI, datele preliminare arată că noul procesor cu tehnologie HT asigură o creștere medie a performanței de 25%.

În afara rândului
Tehnologia HT permite utilizatorilor să îmbunătățească performanța PC-ului în două moduri: atunci când lucrează cu software care utilizează procesarea datelor cu mai multe fire și când lucrează în medii multitasking. Aplicațiile scrise cu capacitatea noului procesor de a rula mai multe bucăți de cod (numite „threads” în același timp) vor „vedea” un singur procesor fizic Intel Pentium 4 de 3,06 GHz cu tehnologie HT ca două procesoare logice. Tehnologia HT permite procesorului să proceseze două fluxuri de date independente nu pe rând, ci în același timp.

Pentru afaceri
Cu ajutorul tehnologiei HT, puteți, de exemplu, să începeți să redați un album muzical și, în același timp, să schimbați mesaje într-un chat fără a compromite calitatea sunetului. Descărcând un fișier MP3 de pe Internet în arhiva muzicală, puteți rula simultan un program antivirus care vă va proteja computerul de programele nedorite din exterior.
HT oferă o gamă largă de oportunități în lumea afacerilor - șeful întreprinderii poate vizualiza simultan rapoarte și indici de acțiuni, poate urmări indicatorii unui sistem automat de management al întreprinderii și poate fi în contact cu contractanții. Inginerii și oamenii de știință care folosesc un PC bazat pe procesorul Intel Pentium 4 cu tehnologie Hyper-Threading vor putea lucra cel mai eficient cu sursele de informații, descarcându-l simultan prin Internet și primindu-l de la colegi într-o varietate de formate de fișiere - de la PDF la XLS.
Firmele integratoare din Sankt Petersburg (Svega+, Computer Service 320-80-80, Computer Center KEY și Computer World) plănuiesc să vândă cel puțin 15-20 de computere bazate pe procesorul Intel Pentium 4 în fiecare lună 3,06 GHz cu tehnologie HT.

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 performanțe tot 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șterea 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 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ă (ca să nu mai vorbim de plăcile de bază cu suport pentru 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:

Chip Multiprocessing (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 stă la baza tehnologiei Intel Hyper-Threading, pe care o considerăm acum.

Cum funcționează Hyper-Threading

După cum știți, „paradigma informatică” 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 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 functionare 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 o placă de bază Supermicro P4DC6+ (chipset Intel i860), conținea 512 MB de RDRAM, o placă video bazată pe 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 un nucleu Prestonia, BIOS-ul afișează un mesaj despre prezența a două procesoare la pornirea sistemului; 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 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 mult 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 de fapt suspendat, iar resursele partajate, în măsura în care se poate aprecia din rezultatele obținute, sunt transferate complet 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.

Codare Photoshop și 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% din 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 mai lent un sistem cu două procesoare?”. 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.

  • tutorial

În acest articol, voi încerca să descriu terminologia folosită pentru a descrie sisteme capabile să execute mai multe programe în paralel, adică multi-core, multi-procesor, multi-threaded. Diferite tipuri de paralelism în procesorul IA-32 au apărut în momente diferite și într-o ordine oarecum inconsecventă. Este ușor să fii confuz în toate acestea, mai ales având în vedere că sistemele de operare au grijă să ascundă detaliile din programele de aplicații mai puțin sofisticate.

Scopul articolului este de a arăta că, cu toată varietatea de configurații posibile ale sistemelor multiprocesor, multi-core și multi-threaded pentru programele care rulează pe acestea, sunt create oportunități atât pentru abstracție (ignorând diferențele), cât și pentru luarea în considerare a specificului ( capacitatea de a învăța programatic configurația).

Avertisment despre semne ®, ™, în articol

Comentariul meu explică de ce angajații companiei ar trebui să folosească mărcile de drepturi de autor în comunicațiile publice. În acest articol, acestea trebuiau folosite destul de des.

CPU

Desigur, termenul cel mai vechi, cel mai des folosit și ambiguu este „procesor”.

În lumea modernă, un procesor este ceea ce cumpărăm într-o cutie frumoasă de vânzare cu amănuntul sau într-un pachet OEM nu prea frumos. O entitate indivizibilă introdusă într-o priză de pe o placă de bază. Chiar dacă nu există conector și nu poate fi îndepărtat, adică dacă este lipit strâns, acesta este un cip.

Sistemele mobile (telefoane, tablete, laptopuri) și majoritatea desktop-urilor au un singur procesor. Stațiile de lucru și serverele au uneori două sau mai multe procesoare pe aceeași placă de bază.

Suportul pentru mai multe procesoare într-un singur sistem necesită numeroase modificări de design. Cel puțin, este necesar să le furnizați conexiunea fizică (prevăzuți mai multe prize pe placa de bază), să rezolvați problemele de identificare a procesorului (a se vedea mai târziu în acest articol, precum și nota mea anterioară), coordonarea accesului la memorie și întreruperea livrării ( controlerul de întrerupere trebuie să poată direcționa întreruperi pe mai multe procesoare) și, bineînțeles, suport din partea sistemului de operare. Din păcate, nu am putut găsi o mențiune documentată a momentului în care a fost creat primul sistem multiprocesor pe procesoare Intel, totuși Wikipedia susține că Sequent Computer Systems le-a furnizat deja în 1987 folosind procesoare Intel 80386. Suportul larg răspândit pentru mai multe cipuri într-un singur sistem devine disponibil începând cu cu Intel® Pentium.

Dacă există mai multe procesoare, atunci fiecare dintre ele are propriul conector pe placă. În același timp, fiecare dintre ele are copii complete independente ale tuturor resurselor, cum ar fi registre, dispozitive de execuție, cache. Ei au o memorie comună - RAM. Memoria poate fi conectată la ele în moduri diferite și destul de netriviale, dar aceasta este o poveste separată care depășește scopul acestui articol. Important este că, în orice caz, programele executabile trebuie să creeze iluzia unei memorie partajată omogenă, accesibilă de la toate procesoarele din sistem.


Gata de decolare! Placă pentru desktop Intel® D5400XS

Nucleu

Din punct de vedere istoric, multi-core în Intel IA-32 a apărut mai târziu decât Intel® HyperThreading, dar urmează în ierarhia logică.

S-ar părea că dacă există mai multe procesoare în sistem, atunci performanța acestuia este mai mare (la sarcini care pot folosi toate resursele). Cu toate acestea, dacă costul comunicațiilor dintre ele este prea mare, atunci tot câștigul din paralelism este ucis de întârzierile mari în transferul de date comune. Este exact ceea ce se observă în sistemele multiprocesor - atât fizic, cât și logic, sunt foarte departe unul de celălalt. Pentru a comunica eficient în astfel de condiții, trebuie inventate autobuze specializate, cum ar fi Intel® QuickPath Interconnect. Consumul de energie, dimensiunea și prețul soluției finale, desigur, nu scad din toate acestea. Integrarea ridicată a componentelor ar trebui să vină în ajutor - circuitele care execută părți ale unui program paralel ar trebui să fie târâte mai aproape unele de altele, de preferință pe un singur cip. Cu alte cuvinte, un procesor ar trebui să organizeze mai multe nuclee, identice între ele în toate, dar lucrând independent.

Primele procesoare multi-core IA-32 de la Intel au fost introduse în 2005. De atunci, numărul mediu de nuclee în platformele server, desktop și acum mobile a crescut constant.

Spre deosebire de două procesoare cu un singur nucleu din același sistem, care împart doar memoria, două nuclee pot partaja, de asemenea, cache-urile și alte resurse responsabile de interacțiunea cu memoria. Cel mai adesea, cache-urile primului nivel rămân private (fiecare nucleu are propriul său), în timp ce al doilea și al treilea nivel pot fi fie partajate, fie separate. Această organizare a sistemului reduce întârzierea în livrarea datelor între nucleele vecine, mai ales dacă lucrează la o sarcină comună.


O micrografie a unui procesor Intel quad-core cu numele de cod Nehalem. Sunt evidențiate nuclee separate, un cache L3 partajat, precum și legături QPI către alte procesoare și un controler de memorie partajat.

hiperthread

Până în jurul anului 2002, singura modalitate de a obține un sistem IA-32 capabil să execute două sau mai multe programe în paralel a fost să folosești sistemele multiprocesor în mod specific. Intel® Pentium® 4, precum și linia Xeon, cu numele de cod Foster (Netburst), au introdus o nouă tehnologie - hyperthreading sau hyperthreading - Intel® HyperThreading (denumit în continuare HT).

Nu este nimic nou sub soare. HT este un caz special a ceea ce se face referire în literatură drept simultaneous multithreading (SMT). Spre deosebire de nucleele „reale”, care sunt copii complete și independente, în cazul HT, doar o parte din nodurile interne sunt duplicate într-un singur procesor, responsabil în primul rând de stocarea stării arhitecturale - registre. Nodurile executive responsabile cu organizarea și prelucrarea datelor rămân la singular și sunt folosite în orice moment de cel mult unul dintre fire. La fel ca nucleele, hyperthreadurile partajează cache-urile între ele, dar începând de la ce nivel depinde de sistemul specific.

Nu voi încerca să explic toate avantajele și dezavantajele modelelor SMT în general și ale modelelor HT în special. Cititorul interesat poate găsi o discuție destul de detaliată despre tehnologie în multe surse și, desigur, Wikipedia. Cu toate acestea, voi nota următorul punct important, care explică restricțiile actuale privind numărul de hyperthreads în producția reală.

Limitele firelor
În ce cazuri este justificată prezența multi-corelor „necinstite” sub formă de HT? Dacă un fir de execuție al aplicației nu poate încărca toate nodurile de execuție din interiorul nucleului, atunci acestea pot fi „împrumutate” unui alt fir. Acest lucru este tipic pentru aplicațiile care au un „gât de sticlă” nu în calcule, ci în accesul la date, adică generează adesea erori de cache și trebuie să aștepte ca datele să fie livrate din memorie. În acest timp, nucleul fără HT va fi forțat să rămână inactiv. Prezența HT vă permite să comutați rapid nodurile de execuție gratuite la o altă stare arhitecturală (pentru că este doar duplicat) și să executați instrucțiunile acestuia. Acesta este un caz special al unui truc numit ascunderea latenței, când o operațiune lungă, în timpul căreia resursele utile sunt inactive, este mascată de execuția paralelă a altor sarcini. Dacă aplicația are deja un grad ridicat de utilizare a resurselor kernel-ului, prezența hyperthreading-ului nu va permite accelerare - aici sunt necesare nuclee „cinstite”.

Scenariile tipice pentru aplicațiile desktop și server concepute pentru arhitecturi de mașini de uz general au potențialul de paralelism implementat folosind HT. Cu toate acestea, acest potențial este rapid „utilizat”. Poate din acest motiv, pe aproape toate procesoarele IA-32, numărul de hyperthread-uri hardware nu depășește două. În scenariile tipice, câștigul din utilizarea a trei sau mai multe hyperthreading-uri ar fi mic, dar pierderea în dimensiunea matriței, consumul de energie și costul este semnificativă.

O altă situație se observă în sarcinile tipice efectuate pe acceleratoare video. Prin urmare, aceste arhitecturi se caracterizează prin utilizarea tehnologiei SMT cu un număr mai mare de fire. Deoarece coprocesoarele Intel® Xeon Phi (introduse în 2010) sunt destul de apropiate din punct de vedere ideologic și genealogic de plăcile video, acestea pot avea patru hyperthreading pe fiecare nucleu - o configurație unică pentru IA-32.

procesor logic

Dintre cele trei „niveluri” de paralelism descrise (procesoare, nuclee, hyperthreading-uri), unele sau chiar toate pot lipsi într-un anumit sistem. Acest lucru este afectat de setările BIOS (multi-core și multi-threading sunt dezactivate independent), caracteristicile de microarhitectură (de exemplu, HT a fost absent din Intel® Core™ Duo, dar a fost adus înapoi odată cu lansarea lui Nehalem) și evenimentele de sistem (serverele cu mai multe procesoare pot închide procesoarele eșuate în cazul unor defecțiuni și pot continua să „zboare” pe cele rămase). Cum este această grădină zoologică multistratificată de concurență vizibilă pentru sistemul de operare și, în cele din urmă, pentru aplicații?

În plus, pentru comoditate, notăm numărul de procesoare, nuclee și fire de execuție dintr-un sistem cu un triplu ( X, y, z), Unde X este numărul de procesoare y este numărul de nuclee din fiecare procesor și z este numărul de hyperthreads din fiecare miez. În continuare, mă voi referi la acest trio topologie- un termen consacrat care are prea puţin de-a face cu secţiunea de matematică. Muncă p = xyz definește numărul de entități numite procesoare logice sisteme. Acesta definește numărul total de contexte independente de proces de aplicație într-un sistem cu memorie partajată care se execută în paralel, pe care sistemul de operare trebuie să ia în considerare. Spun „forțat” pentru că nu poate controla ordinea de execuție a două procese care sunt pe procesoare logice diferite. Acest lucru este valabil și pentru hyperthread-urile: deși rulează „secvențial” pe același nucleu, ordinea specifică este dictată de hardware și nu este vizibilă sau controlată de programe.

Cel mai adesea, sistemul de operare ascunde de aplicațiile finale caracteristicile topologiei fizice a sistemului pe care rulează. De exemplu, următoarele trei topologii: (2, 1, 1), (1, 2, 1) și (1, 1, 2) - sistemul de operare va fi reprezentat ca două procesoare logice, deși primul dintre ele are două procesoare , al doilea are două nuclee, iar al treilea este doar două fire.


Windows Task Manager arată 8 procesoare logice; dar cât este asta în procesoare, nuclee și hyperthread-uri?


Linux de sus arată 4 procesoare logice.

Acest lucru este destul de convenabil pentru creatorii de aplicații aplicate - nu trebuie să se ocupe de caracteristici hardware care sunt adesea nesemnificative pentru ei.

Definiția software a topologiei

Desigur, abstracția topologiei într-un singur număr de procesoare logice în unele cazuri creează suficiente motive pentru confuzie și neînțelegere (în dispute aprinse pe internet). Aplicațiile de calcul care doresc să obțină cea mai mare performanță din hardware necesită un control fin asupra locului în care vor fi plasate firele lor: mai apropiate unele de altele pe hyperthread-urile adiacente sau invers, mai departe pe diferite procesoare. Viteza de comunicare între procesoarele logice din același nucleu sau procesor este mult mai rapidă decât viteza de transfer de date între procesoare. Posibilitatea de eterogenitate în organizarea RAM complică, de asemenea, imaginea.

Informațiile despre topologia sistemului în ansamblu, precum și poziția fiecărui procesor logic în IA-32, sunt disponibile folosind instrucțiunea CPUID. De la apariția primelor sisteme multiprocesor, schema de identificare a procesorului logic a fost extinsă de mai multe ori. Până în prezent, părți ale acestuia sunt conținute în foile 1, 4 și 11 ale CPUID. Care dintre foile de urmărit poate fi determinată din următoarea diagramă bloc, preluată din articol:

Nu mă voi plictisi aici cu toate detaliile părților individuale ale acestui algoritm. Dacă există interes, atunci următoarea parte a acestui articol poate fi dedicată acestui lucru. Mă voi referi la cititorul interesat, în care această problemă este analizată cât mai detaliat. Aici voi descrie mai întâi pe scurt ce este APIC și cum se leagă de topologie. Apoi, luați în considerare lucrul cu foaia 0xB (unsprezece în zecimală), care este în prezent cel mai recent cuvânt din „apico-building”.

ID APIC
Local APIC (controller de întrerupere programabil avansat) este un dispozitiv (acum parte a procesorului) responsabil pentru lucrul cu întreruperile care vin la un anumit procesor logic. Fiecare procesor logic are propriul său APIC. Și fiecare dintre ele din sistem trebuie să aibă o valoare unică APIC ID. Acest număr este utilizat de controlorii de întrerupere pentru adresarea la livrarea mesajelor și de către toți ceilalți (cum ar fi sistemul de operare) pentru a identifica procesoarele logice. Specificația pentru acest controler de întrerupere a evoluat de la Intel 8259 PIC prin Dual PIC, APIC și xAPIC la x2APIC.

În prezent, lățimea numărului stocat în ID-ul APIC a atins cei 32 de biți, deși în trecut era limitată la 16, și chiar mai devreme la doar 8 biți. Astăzi, rămășițele din vremurile vechi sunt împrăștiate pe tot CPUID-ul, dar toți cei 32 de biți ai ID-ului APIC sunt returnați în CPUID.0xB.EDX. Fiecare procesor logic care execută independent instrucțiunea CPUID va returna o valoare diferită.

Clarificarea legăturilor de familie
Valoarea ID-ului APIC nu spune nimic despre topologie. Pentru a afla care două procesoare logice se află în interiorul aceluiași procesor fizic (adică sunt „frați” de hyperthreads), care două sunt în interiorul aceluiași procesor și care sunt procesoare complet diferite, trebuie să comparați valorile lor APIC ID. În funcție de gradul de relație, unele dintre părțile lor se vor potrivi. Aceste informații sunt conținute în sublistele CPUID.0xB, care sunt codificate cu un operand în ECX. Fiecare dintre ele descrie poziția câmpului de biți al unuia dintre nivelurile de topologie din EAX (mai precis, numărul de biți care trebuie mutați în ID-ul APIC la dreapta pentru a elimina nivelurile inferioare ale topologiei), precum și ca tipul acestui nivel - hyperthread, nucleu sau procesor - în ECX.

Procesoarele logice din același nucleu se vor potrivi cu toți biții ID APIC, cu excepția celor din câmpul SMT. Pentru procesoarele logice care se află în același procesor, toți biții, cu excepția câmpurilor Core și SMT. Deoarece numărul de subfoi pentru CPUID.0xB poate crește, această schemă va suporta descrierea topologiilor cu un număr mai mare de niveluri, dacă este necesar în viitor. Mai mult, se vor putea introduce niveluri intermediare între cele existente.

O consecință importantă a organizării acestei scheme este că în setul tuturor ID-urilor APIC ale tuturor procesoarelor logice ale sistemului pot exista „găuri”, adică. nu vor merge secvenţial. De exemplu, într-un procesor multi-core cu HT dezactivat, toate ID-urile APIC se pot dovedi a fi egale, deoarece bitul cel mai puțin semnificativ responsabil pentru codificarea numărului de hyperthread va fi întotdeauna zero.

Rețineți că CPUID.0xB nu este singura sursă de informații despre procesoarele logice disponibile pentru sistemul de operare. Lista tuturor procesoarelor disponibile, împreună cu valorile lor APIC ID, este codificată în tabelul MADT ACPI.

Sisteme de operare și topologie

Sistemele de operare furnizează informații despre topologia procesorului logic aplicațiilor prin propriile interfețe.

Pe Linux, informațiile de topologie sunt conținute în pseudo-fișierul /proc/cpuinfo, precum și în rezultatul comenzii dmidecode. În exemplul de mai jos, filtrez conținutul cpuinfo pe un sistem quad-core non-HT, lăsând doar intrări legate de topologie:

Text ascuns

[email protected]:~$ cat /proc/cpuinfo |grep „procesor\|physical\ id\|frați\|core\|cores\|apicid” procesor: 0 fizic id: 0 frați: 4 core id: 0 cpu cores: 2 apicid: 0 apicid inițial: 0 procesor: 1 id fizic: 0 frați: 4 id de nucleu: 0 nuclee CPU: 2 apicid: 1 apicid inițial: 1 procesor: 2 id fizic: 0 frați: 4 id nucleu: 1 nuclee CPU: 2 apicid: 2 apicid inițial: 2 procesor: 3 id fizic: 0 frați: 4 id de nucleu: 1 nuclee CPU: 2 apicid: 3 apicid inițial: 3

În FreeBSD, topologia este raportată prin mecanismul sysctl în variabila kern.sched.topology_spec ca XML:

Text ascuns

[email protected]:~$ sysctl kern.sched.topology_spec kern.sched.topology_spec: 0, 1, 2, 3, 4, 5, 6, 7 0, 1, 2, 3, 4, 5, 6, 7 0, 1 grup THREADgrupul SMT 2, 3 grup THREADgrupul SMT 4, 5 grup THREADgrupul SMT 6, 7 grup THREADgrupul SMT

În MS Windows 8, informațiile despre topologie pot fi văzute în Managerul de activități.

Top articole similare