Come configurare smartphone e PC. Portale informativo
  • casa
  • Sistema operativo
  • Hyper-Threading: "due in uno" di Intel o funzionalità nascoste di Xeon. Processori multi-core: come funzionano

Hyper-Threading: "due in uno" di Intel o funzionalità nascoste di Xeon. Processori multi-core: come funzionano

ov nella macchina e ho trovato alcuni post ma sono confuso poiché alcuni hanno menzionato che ottieni core logici e core fisici ecc.
Quindi qual è la differenza tra core logici e fisici ed esiste un modo per ottenere core fisici? O ha senso includere i nuclei logici nel nostro conteggio?

4 Le soluzioni raccolgono dal web per "Quindi quali sono i core logici di un processore (in contrapposizione ai core fisici di un processore)?"

I core fisici sono semplicemente core fisici in un processore. I core logici sono le capacità di un singolo core di fare due o più cose contemporaneamente. Questo è nato dai primi processori Pentium 4 in grado di fare ciò che è stato chiamato Hyper Threading (HTT).

Era un gioco che si giocava quando i componenti ausiliari del kernel non venivano usati per certi tipi di istruzioni, mentre si poteva fare altro lungo lavoro. Quindi la CPU potrebbe lavorare su due cose contemporaneamente.

I core più recenti sono processori più completi, quindi funzionano su più cose contemporaneamente, ma non sono veri processori come core fisici. Puoi leggere di più sui limiti della funzionalità di hyperthreading e sulle capacità fisiche del core qui su tomshardware in questo articolo intitolato: Intel Core i5 e Core i7: Intel Mainstream Magnum Opus.

Puoi vedere la suddivisione della tua finestra con il comando lscpu:

$ lscpu Architettura: x86_64 CPU op-mode: 32-bit, 64-bit CPU(s): 4 Thread(s) per core: 2 Core(s) per socket: 2 CPU socket(s): 1 NUMA nodo(i): 1 ID fornitore: Famiglia di CPU Intel originale: 6 Modello: 37 Stepping: 5 CPU MHz: 2667.000 Virtualizzazione: VT-x L1d cache: 32K L1i cache: 32K L2 cache: 256K L3 cache: 3072K NUMA node0 CPU(s) ): 0-3

In quanto sopra, il mio laptop Intel i5 ha 4 "processori" in totale

Processore(i): 4

di cui ci sono 2 core fisici

Core(s) per presa: 2

di cui ciascuno può eseguire fino a 2 thread

Argomento/i per core: 2

allo stesso tempo. Questi thread sono capacità logiche del kernel.

I core fisici è il numero di core fisici, i componenti hardware effettivi.

I core logici sono il numero di core fisici moltiplicato per il numero di thread che possono essere eseguiti su ciascun core utilizzando l'hyperthreading.

ad esempio, il mio processore a 4 core funziona su due thread per core, quindi ho 8 processori logici.

$ sudo dmidecode |egrep "Denominazione socket: Proc|((Thread|Core) Count)" Designazione socket: Proc 1 Conteggio core: 14 Conteggio thread: 28 Designazione socket: Proc 2 Conteggio core: 14 Conteggio thread: 28

Due nidi. Ogni slot ha 14 core fisici. Ogni core ha due thread (28/14). Il numero totale di "cpus" logici o unità di elaborazione logica è 56 (questo è ciò che è "top" e alcuni altri comandi ti mostrano come numero "cpus").

La tecnologia Hyperthreading consente a un core del processore fisico di comportarsi come due processori logici.

Quindi un core del processore può eseguire due thread indipendenti contemporaneamente.

Intel si riferisce al processore fisico come a un socket.

L'hyperthreading consente a un processore fisico di comportarsi come se avesse due processori fisici, chiamati processori logici. Per che cosa?

Sebbene l'hyperthreading non raddoppi le prestazioni del sistema, può migliorare le prestazioni utilizzando risorse inattive, con conseguente aumento della velocità effettiva per determinati tipi di carichi di lavoro critici. Un'applicazione in esecuzione su un processore logico di un core occupato può aspettarsi poco più della metà della larghezza di banda che riceve durante l'esecuzione in modalità singola su un processore che non supporta l'hyperthreading.

Riepilogo

Il processore fisico è ciò che possiamo vedere e cadere.

Il processore logico è simile a: Phsical Core che agisce come due core fisici

Sul mercato di San Pietroburgo è apparso un processore Intel Pentium 4 con una frequenza di clock di 3,06 GHz, dove è stata applicata la tecnologia Hyper-Threading (HT).
In precedenza utilizzata solo nei sistemi server, questa tecnologia ha inaugurato una nuova classe di personal computer desktop ad alte prestazioni, affermano i produttori.
Con la tecnologia HT, un processore fisico viene trattato dal sistema operativo del PC e dalle applicazioni come due processori logici. Secondo Aleksey Navolokin, capo dell'ufficio di rappresentanza di Intel in Russia e CSI, i dati preliminari mostrano che il nuovo processore con tecnologia HT fornisce un aumento medio delle prestazioni del 25%.

Fuori turno
La tecnologia HT consente agli utenti di migliorare le prestazioni del PC in due modi: quando si lavora con software che utilizza l'elaborazione dati multi-thread e quando si lavora in ambienti multitasking. Le applicazioni scritte con la capacità del nuovo processore di eseguire più parti di codice (chiamate "thread" contemporaneamente) "vedranno" un singolo processore fisico Intel Pentium 4 da 3,06 GHz con tecnologia HT come due processori logici. La tecnologia HT consente al processore di elaborare due flussi di dati indipendenti non a turno, ma contemporaneamente.

Per affari
Con l'aiuto della tecnologia HT, puoi, ad esempio, iniziare a riprodurre un album musicale e allo stesso tempo scambiare messaggi in chat senza compromettere la qualità del suono. Scaricando un file MP3 da Internet nel tuo archivio musicale, puoi eseguire contemporaneamente un programma antivirus che proteggerà il tuo PC da programmi indesiderati dall'esterno.
HT offre un'ampia gamma di opportunità nel mondo degli affari: il capo dell'impresa può visualizzare contemporaneamente rapporti e indici azionari, tenere traccia degli indicatori di un sistema di gestione aziendale automatizzato ed essere in contatto con gli appaltatori. Ingegneri e scienziati che utilizzano un PC basato sul processore Intel Pentium 4 con tecnologia Hyper-Threading saranno in grado di lavorare con le fonti di informazioni in modo più efficiente, scaricandole contemporaneamente tramite Internet e ricevendole dai colleghi in una varietà di formati di file, dal PDF al XLS.
Le società di integrazione di San Pietroburgo (Svega+, Computer Service 320-80-80, Computer Center KEY e Computer World) prevedono di vendere almeno 15-20 computer basati sul processore Intel Pentium 4 ogni mese a 3,06 GHz con tecnologia HT.

Abbiamo scritto che l'uso di sistemi Xeon a processore singolo non ha senso, poiché ad un prezzo più alto le loro prestazioni saranno le stesse di un Pentium 4 della stessa frequenza. Ora, dopo un esame più approfondito, questa affermazione dovrà probabilmente essere leggermente modificata. La tecnologia Hyper-Threading implementata nell'Intel Xeon con il core Prestonia funziona davvero e dà un effetto abbastanza tangibile. Anche se ci sono anche molte domande quando lo si utilizza ...

Dare prestazioni

"Più veloce, ancora più veloce...". La corsa alle prestazioni va avanti da anni ea volte è persino difficile dire quale dei componenti del computer stia accelerando più velocemente. Per questo, vengono inventati sempre più nuovi modi e più, più manodopera qualificata e cervelli di alta qualità vengono investiti in questo processo simile a una valanga.

Ovviamente è necessario un costante aumento delle prestazioni. Per lo meno, è un'attività redditizia e c'è sempre un bel modo per incoraggiare gli utenti ad aggiornare la "CPU super performante" di ieri a "ancora più super..." di domani. Ad esempio, riconoscimento vocale simultaneo e traduzione simultanea in un'altra lingua: non è questo il sogno di tutti? O giochi insolitamente realistici di qualità quasi "cinesca" (che assorbono completamente l'attenzione e talvolta portano a seri cambiamenti nella psiche) - non è questo il desiderio di molti giocatori, giovani e meno giovani?

Ma tralasciamo in questo caso gli aspetti di marketing, concentrandoci su quelli tecnici. Inoltre, non tutto è così cupo: ci sono compiti urgenti (applicazioni server, calcoli scientifici, modellazione, ecc.) dove sono davvero necessarie prestazioni sempre più elevate, in particolare dei processori centrali.

Quindi, quali sono i modi per aumentare le loro prestazioni?

Aumento dell'orologio. È possibile "sottilere" ulteriormente il processo tecnologico e aumentare la frequenza. Ma, come sai, questo non è facile ed è irto di ogni sorta di effetti collaterali, come problemi di dissipazione del calore.

Aumento delle risorse del processore- ad esempio, aumentando il volume della cache, aggiungendo nuovi blocchi (Execution Unit). Tutto ciò comporta un aumento del numero di transistor, la complessità del processore, un aumento dell'area del cristallo e, di conseguenza, dei costi.

Inoltre, i due metodi precedenti non danno, di regola, un aumento lineare della produttività. Questo è ben noto nell'esempio del Pentium 4: gli errori nella previsione del ramo e gli interrupt causano il ripristino di una lunga pipeline, che influisce notevolmente sulle prestazioni complessive.

multielaborazione. L'installazione di più CPU e la distribuzione del lavoro tra di esse è spesso abbastanza efficiente. Ma questo approccio non è molto economico: ogni processore aggiuntivo aumenta il costo del sistema e una doppia scheda madre è molto più costosa di una normale (per non parlare delle schede madri con supporto per quattro o più CPU). Inoltre, non tutte le applicazioni beneficiano di un multiprocessing sufficiente a giustificare il costo.

Oltre al multiprocessing "puro", esistono diverse opzioni "intermedie" che consentono di velocizzare l'esecuzione dell'applicazione:

Chip Multiprocessing (CMP)- due core del processore si trovano fisicamente sullo stesso chip, utilizzando una cache comune o separata. Naturalmente, la dimensione del cristallo risulta essere abbastanza grande, e questo non può che incidere sul costo. Si noti che molte di queste CPU "doppie" possono funzionare anche in un sistema multiprocessore.

Multithreading Time Slice. Il processore passa da un thread di programma all'altro a intervalli fissi. Il sovraccarico a volte può essere piuttosto pesante, soprattutto se un processo è in attesa.

Multithreading di eventi di accensione. Commutazione di attività quando si verificano lunghe pause, ad esempio "cache misses" (cache miss), molte delle quali sono tipiche per le applicazioni server. In questo caso, un processo in attesa di caricare i dati dalla memoria relativamente lenta nella cache viene sospeso, liberando risorse della CPU per altri processi. Tuttavia, il multithreading Switch-on-Event, come il multithreading Time-Slice, non ottiene sempre un uso ottimale delle risorse del processore, in particolare a causa di errori nella previsione dei rami, nelle dipendenze delle istruzioni, ecc.

Multithreading simultaneo. In questo caso, i thread del programma vengono eseguiti sullo stesso processore "simultaneamente", cioè senza passare da uno all'altro. Le risorse della CPU sono distribuite dinamicamente, secondo il principio "se non la usi, consegnala a qualcun altro". È questo approccio che costituisce la base della tecnologia Intel Hyper-Threading, che ora consideriamo.

Come funziona l'Hyper-Threading

Come sapete, l'attuale "paradigma informatico" coinvolge l'elaborazione multi-thread. Questo vale non solo per i server, dove inizialmente esiste un tale concetto, ma anche per le workstation e i sistemi desktop. I thread possono appartenere alla stessa o ad applicazioni diverse, ma quasi sempre ci sono più thread attivi (per vederlo è sufficiente aprire il Task Manager di Windows 2000/XP e attivare la visualizzazione del numero di thread). Allo stesso tempo, un processore convenzionale può eseguire solo uno dei thread alla volta ed è costretto a passare continuamente da uno all'altro.

Per la prima volta, la tecnologia Hyper-Threading è stata implementata nel processore Intel Xeon MP (Foster MP), su cui era "in esecuzione". Ricordiamo che Xeon MP, presentato ufficialmente all'IDF Spring 2002, utilizza un Pentium 4 Willamette core, contiene 256 KB di cache L2 e 512 KB/1 MB di cache L3 e supporta configurazioni a 4 processori. Il supporto all'Hyper-Threading è presente anche nel processore Intel Xeon per workstation (core Prestonia, cache L2 da 512 KB), entrato nel mercato un po' prima dello Xeon MP. I nostri lettori hanno già familiarità con le configurazioni a doppio processore su Intel Xeon, quindi considereremo le possibilità dell'Hyper-Threading utilizzando queste CPU come esempio, sia in teoria che in pratica. Comunque sia, il "semplice" Xeon è più banale e digeribile dello Xeon MP nei sistemi a 4 processori...

Il principio di funzionamento dell'Hyper-Threading si basa sul fatto che in un dato momento solo una parte delle risorse del processore viene utilizzata durante l'esecuzione del codice del programma. Le risorse non utilizzate possono anche essere caricate con il lavoro, ad esempio è possibile utilizzare un'altra applicazione (o un altro thread della stessa applicazione) per l'esecuzione parallela. In un processore Intel Xeon fisico si formano due processori logici (LP - Logical Processor), che condividono le risorse di calcolo della CPU. Il sistema operativo e le applicazioni "vedono" esattamente due CPU e possono distribuire il lavoro tra di loro, come nel caso di un vero e proprio sistema a due processori.

Uno degli obiettivi dell'implementazione dell'Hyper-Threading è consentire a un solo thread attivo di funzionare alla stessa velocità di una normale CPU. Per fare ciò, il processore ha due modalità operative principali: Single-Task (ST) e Multi-Task (MT). In modalità ST è attivo un solo processore logico e utilizza indivise le risorse disponibili (modalità ST0 e ST1); l'altro LP viene fermato dal comando HALT. Quando viene visualizzato un secondo thread di programma, il processore logico inattivo viene attivato (tramite un interrupt) e la CPU fisica viene messa in modalità MT. L'arresto di LP inutilizzati con il comando HALT è responsabilità del sistema operativo, che in definitiva è responsabile della stessa rapida esecuzione di un thread come nel caso senza Hyper-Threading.

Per ciascuno dei due LP viene memorizzato il cosiddetto Architecture State (AS), che comprende lo stato dei registri di vario tipo - general purpose, di controllo, APIC e di servizio. Ogni LP ha il proprio APIC (interrupt controller) e un set di registri, per un corretto funzionamento con cui viene introdotto il concetto di Register Alias ​​Table (RAT), che traccia la corrispondenza tra otto registri IA-32 general-purpose e 128 registri fisici della CPU (un RAT per ogni LP).

Quando si eseguono due thread, sono supportati due set corrispondenti di Next Instruction Pointer. La maggior parte delle istruzioni sono prese dalla Trace Cache (TC), dove sono memorizzate in forma decodificata, ei due LP attivi accedono a turno al TC, ogni orologio. Allo stesso tempo, quando è attivo un solo LP, ottiene l'accesso esclusivo al TC senza interleaving sugli orologi. Allo stesso modo, si verifica l'accesso alla ROM Microcode. I blocchi ITLB (Instruction Translation Look-aside Buffer), che vengono attivati ​​in assenza delle istruzioni necessarie nella cache delle istruzioni, vengono duplicati e forniscono istruzioni ciascuno per il proprio thread. Il blocco di decodifica dell'istruzione IA-32 Instruction Decode è condiviso e, nel caso in cui sia richiesta la decodifica dell'istruzione per entrambi i flussi, li serve uno per uno (di nuovo, ogni ciclo). I blocchi Uop Queue e Allocator sono divisi in due, con metà degli elementi allocati per ogni LP. Gli Scheduler da 5 pezzi elaborano code di comandi decodificati (Uops) pur appartenendo a LP0/LP1 e comandi diretti da eseguire dalle Execution Unit necessarie - a seconda della prontezza per l'esecuzione del primo e della disponibilità del secondo. Le cache di tutti i livelli (L1/L2 per Xeon, così come L3 per Xeon MP) sono completamente condivise tra due LP, tuttavia, per garantire l'integrità dei dati, le voci in DTLB (Data Translation Look-aside Buffer) sono fornite con i descrittori nel forma di ID del processore logico.

Pertanto, le istruzioni di entrambe le CPU logiche possono essere eseguite contemporaneamente sulle risorse di un processore fisico, che sono divise in quattro classi:

  • duplicato (duplicato);
  • completamente condiviso (Completamente condiviso);
  • con descrittori di elementi (Entry Tagged);
  • divisa dinamicamente (Partizionata) a seconda della modalità di funzionamento di ST0/ST1 o MT.

Tuttavia, la maggior parte delle applicazioni che vengono accelerate su sistemi multiprocessore possono essere accelerate anche su una CPU con Hyper-Threading abilitato senza alcuna modifica. Ma ci sono anche problemi: ad esempio, se un processo è in un ciclo di attesa, può occupare tutte le risorse della CPU fisica, impedendo il funzionamento del secondo LP. Pertanto, le prestazioni quando si utilizza Hyper-Threading a volte possono diminuire (fino al 20%). Per evitare ciò, Intel consiglia di utilizzare l'istruzione PAUSE invece di cicli di attesa vuoti (introdotti in IA-32 a partire da Pentium 4). È inoltre in corso un serio lavoro sull'ottimizzazione automatica e semiautomatica del codice durante la compilazione: ad esempio, i compilatori della serie Intel OpenMP C++ / Fortran Compilers () hanno compiuto progressi significativi in ​​questo senso.

Un altro obiettivo della prima implementazione dell'Hyper-Threading, secondo Intel, era ridurre al minimo la crescita del numero di transistor, dell'area del die e del consumo energetico, aumentando al contempo in modo apprezzabile le prestazioni. La prima parte di questo impegno è già stata rispettata: l'aggiunta del supporto Hyper-Threading a Xeon/Xeon MP ha aumentato l'area dello stampo e il consumo energetico di meno del 5%. Cosa è successo con la seconda parte (performance), dobbiamo ancora verificare.

Parte pratica

Per ovvie ragioni, non abbiamo testato sistemi server a 4 processori su Xeon MP con Hyper-Threading abilitato. Innanzitutto, è piuttosto laborioso. E in secondo luogo, se decidiamo su un'impresa del genere, è ancora ora, a meno di un mese dall'annuncio ufficiale, che non è assolutamente realistico ottenere questa costosa attrezzatura. Si è quindi deciso di limitarci allo stesso sistema con due Intel Xeon da 2.2 GHz, sui quali sono stati effettuati i primi test di questi processori (si veda il link ad inizio articolo). Il sistema era basato su una scheda madre Supermicro P4DC6+ (chipset Intel i860), conteneva 512 MB di RDRAM, una scheda video basata su GeForce3 (64 MB DDR, driver Detonator 21.85), un disco rigido Western Digital WD300BB e 6X DVD-ROM; Come sistema operativo è stato utilizzato Windows 2000 Professional SP2.

Innanzitutto, alcune impressioni generali. Quando si installa uno Xeon con un core Prestonia, il BIOS visualizza un messaggio sulla presenza di due CPU all'avvio del sistema; se sono installati due processori, l'utente vede un messaggio su quattro CPU. Il sistema operativo normalmente riconosce "entrambi i processori", ma solo se sono soddisfatte due condizioni.

Innanzitutto, nella configurazione CMOS, le ultime versioni BIOS delle schede Supermicro P4DCxx ora hanno la voce Abilita Hyper-Threading, senza la quale il sistema operativo riconoscerà solo i processori fisici. In secondo luogo, ACPI viene utilizzato per dire al sistema operativo che ci sono processori logici aggiuntivi. Pertanto, per abilitare l'Hyper-Threading, è necessario abilitare l'opzione ACPI nella configurazione CMOS e installare anche l'HAL (Hardware Abstraction Layer) con supporto ACPI per il sistema operativo stesso. Fortunatamente, in Windows 2000 cambiare HAL da PC standard (o PC MPS Uni-/Multiprocessor) a PC ACPI Uni-/Multiprocessor è facile, cambiando il "driver del computer" in Gestione dispositivi. Allo stesso tempo, per Windows XP, l'unico modo legale per migrare ad ACPI HAL è reinstallare il sistema sopra l'installazione esistente.

Ma ora tutti i preparativi sono fatti e il nostro Windows 2000 Pro crede già fermamente che funzioni su un sistema a due processori (sebbene in realtà sia installato un solo processore). Ora, come al solito, è il momento di decidere gli obiettivi dei test. Quindi vogliamo:

  • Valuta l'impatto dell'Hyper-Threading sulle prestazioni delle applicazioni di varie classi.
  • Confronta questo effetto con l'effetto dell'installazione di un secondo processore.
  • Controlla come le risorse "equamente" vengono fornite al processore logico attivo quando il secondo LP è inattivo.

Per valutare le prestazioni, abbiamo preso una serie di applicazioni già familiari ai lettori, che è stata utilizzata per testare i sistemi di workstation. Cominciamo, forse, dalla fine e controlliamo l'"uguaglianza" delle CPU logiche. Tutto è estremamente semplice: eseguiamo prima i test su un processore con Hyper-Threading disabilitato, quindi ripetiamo il processo con Hyper-Threading abilitato e utilizzando solo una delle due CPU logiche (usando Task Manager). Poiché in questo caso ci interessano solo i valori relativi, i risultati di tutti i test vengono ridotti alla forma "più è meglio" e normalizzati (gli indicatori di un sistema a processore singolo senza Hyper-Threading vengono presi come unità).

Ebbene, come potete vedere, qui le promesse di Intel vengono mantenute: con un solo thread attivo, le prestazioni di ciascuno dei due LP sono esattamente uguali alle prestazioni di una CPU fisica senza Hyper-Threading. Il LP inattivo (sia LP0 che LP1) è di fatto sospeso, e le risorse condivise, per quanto si può giudicare dai risultati ottenuti, sono completamente trasferite all'uso del LP attivo.

Pertanto, traiamo la prima conclusione: due processori logici sono effettivamente uguali nei diritti e l'abilitazione dell'Hyper-Threading "non interferisce" con il funzionamento di un thread (che di per sé non è male). Ora vediamo se questa inclusione "aiuta", e se sì, dove e come?

resa. I risultati di quattro test nei pacchetti di modellazione 3D 3D Studio MAX 4.26, Lightwave 7b e A|W Maya 4.0.1 sono combinati in un diagramma a causa della loro somiglianza.

In tutti e quattro i casi (per Lightwave - due diverse scene), il carico della CPU in presenza di un processore con Hyper-Threading disabilitato viene mantenuto quasi costantemente al 100%. Tuttavia, quando l'Hyper-Threading è abilitato, il calcolo delle scene viene accelerato (di conseguenza, abbiamo anche scherzato sull'utilizzo della CPU oltre il 100%). In tre test possiamo notare un aumento delle prestazioni dell'Hyper-Threading del 14--18% - da un lato non molto rispetto alla seconda CPU, ma dall'altro abbastanza buono, considerando l'effetto "libero" di questo effetto. In uno dei due test con Lightwave, il guadagno di prestazioni è quasi pari a zero (a quanto pare, la specificità di questa applicazione piena di stranezze influisce). Ma non c'è nessun risultato negativo da nessuna parte, e un notevole aumento negli altri tre casi è incoraggiante. E questo nonostante i processi di rendering parallelo svolgano un lavoro simile e, di sicuro, non possano utilizzare contemporaneamente nel migliore dei modi le risorse della CPU fisica.

Codifica di Photoshop e MP3. Il codec GOGO-no-coda 2.39c è uno dei pochi che supporta SMP e mostra un aumento delle prestazioni del 34% rispetto al doppio processore. Allo stesso tempo, l'effetto dell'Hyper-Threading in questo caso è zero (non consideriamo significativa una differenza del 3%). Ma nel test con Photoshop 6.0.1 (uno script composto da un ampio set di comandi e filtri), puoi notare un rallentamento quando l'Hyper-Threading è abilitato, sebbene la seconda CPU fisica aggiunga il 12% delle prestazioni in questo caso. Ecco, infatti, il primo caso in cui Hyper-Threading provoca un calo delle prestazioni...

OpenGL professionale. È noto da tempo che SPEC ViewPerf e molte altre applicazioni OpenGL spesso rallentano sui sistemi SMP.

OpenGL e dual processor: perché non sono amici

Molte volte negli articoli abbiamo attirato l'attenzione dei lettori sul fatto che le piattaforme a doppio processore raramente mostrano vantaggi significativi rispetto a quelle a processore singolo durante l'esecuzione di test OpenGL professionali. Inoltre, ci sono casi in cui l'installazione di un secondo processore, al contrario, peggiora le prestazioni del sistema durante il rendering di scene tridimensionali dinamiche.

Naturalmente, non solo abbiamo notato questa stranezza. Alcuni tester hanno semplicemente aggirato silenziosamente questo fatto, ad esempio fornendo risultati di confronto SPEC ViewPerf solo per configurazioni a due processori, evitando così spiegazioni "perché un sistema a due processori è più lento?". Altri hanno formulato ogni sorta di ipotesi fantasiose sulla coerenza della cache, sulla necessità di mantenerla, sull'overhead risultante e così via. E per qualche ragione, nessuno è rimasto sorpreso dal fatto che, ad esempio, i processori fossero impazienti di monitorare la coerenza con precisione nel rendering OpenGL in finestra (nella sua essenza "computazionale", non è molto diverso da qualsiasi altro compito computazionale).

In effetti, la spiegazione, a nostro avviso, è molto più semplice. Come sapete, un'applicazione può essere eseguita più velocemente su due processori che su uno se:

  • ci sono più di due o più thread di programma in esecuzione simultaneamente (thread);
  • questi thread non interferiscono con l'esecuzione reciproca, ad esempio non competono per una risorsa condivisa come un'unità esterna o un'interfaccia di rete.

Ora, diamo uno sguardo semplificato a come appare il rendering OpenGL, eseguito da due thread. Se un'applicazione, "vedendo" due processori, crea due thread di rendering OpenGL, per ciascuno di essi, secondo le regole di OpenGL, viene creato il proprio contesto gl. Di conseguenza, ogni thread esegue il rendering nel proprio contesto gl. Ma il problema è che per la finestra in cui viene visualizzata l'immagine, può essere corrente un solo gl-context alla volta. Di conseguenza, i thread in questo caso semplicemente "uno per uno" inviano l'immagine generata alla finestra, rendendo il loro contesto alternativamente corrente. Inutile dire che questo "interlacciamento del contesto" può essere molto costoso in termini di spese generali?

Inoltre, a titolo di esempio, forniremo grafici dell'utilizzo di due CPU in diverse applicazioni che visualizzano scene OpenGL. Tutte le misurazioni sono state effettuate su una piattaforma con la seguente configurazione:

  • uno o due Intel Xeon 2.2 GHz (Hyper-Threading disabilitato);
  • 512 MB di RAM RD;
  • Scheda madre Supermicro P4DC6+;
  • Scheda video ASUS V8200 Deluxe (NVidia GeForce3, 64 MB DDR SDRAM, driver Detonator 21.85);
  • Windows 2000 Professional SP2;
  • modalità video 1280x1024x32 bpp, 85 Hz, Vsync disabilitato.

Il blu e il rosso sono rispettivamente i grafici di carico della CPU 0 e della CPU 1. La linea al centro è il grafico finale dell'utilizzo della CPU. I tre grafici corrispondono a due scene di 3D Studio MAX 4.26 e parte del test SPEC ViewPerf (AWadvs-04).


Utilizzo CPU: Animazione 3D Studio MAX 4.26 - Anibal (con manipolatori).max


Utilizzo CPU: Animazione 3D Studio MAX 4.26 - Rabbit.max


Utilizzo CPU: SPEC ViewPerf 6.1.2 - AWadvs-04

Lo stesso schema si ripete in una miriade di altre applicazioni che utilizzano OpenGL. Due processori non si preoccupano affatto del lavoro e l'utilizzo totale della CPU è al livello del 50-60%. Allo stesso tempo, per un sistema a processore singolo, in tutti questi casi, l'utilizzo della CPU viene mantenuto con sicurezza al livello del 100%.

Quindi non sorprende che molte applicazioni OpenGL non diventino molto più veloci su sistemi doppi. Ebbene, il fatto che a volte rallentino anche ha, a nostro avviso, una spiegazione del tutto logica.

Possiamo affermare che con due CPU logiche il calo di prestazioni è ancora più significativo, il che è abbastanza comprensibile: due processori logici interferiscono tra loro allo stesso modo di due fisici. Ma le loro prestazioni complessive, ovviamente, in questo caso risultano essere inferiori, quindi quando l'Hyper-Threading è abilitato, diminuisce ancora di più rispetto a quando sono in esecuzione due CPU fisiche. Il risultato è prevedibile e la conclusione è semplice: l'Hyper-Threading, come il "vero" SMP, è talvolta controindicato per OpenGL.

Applicazioni CAD. La conclusione precedente è confermata dai risultati di due test CAD: SPECapc per SolidEdge V10 e SPECapc per SolidWorks. Le prestazioni grafiche di questi test per Hyper-Threading sono simili (sebbene il risultato sia leggermente superiore nel caso di un sistema SMP per SolidEdge V10). Ma i risultati dei test CPU_Score che caricano il processore fanno pensare: aumento del 5-10% da SMP e rallentamento del 14-19% da Hyper-Threading.

Ma alla fine della giornata, Intel riconosce onestamente il potenziale di degrado delle prestazioni con Hyper-Threading in alcuni casi, ad esempio, quando si utilizzano loop di attesa vuoti. Possiamo solo presumere che questo sia il motivo (un esame dettagliato del codice SolidEdge e SolidWorks va oltre lo scopo di questo articolo). Dopotutto, tutti conoscono il conservatorismo degli sviluppatori di applicazioni CAD che preferiscono l'affidabilità comprovata e non hanno fretta di riscrivere il codice tenendo conto delle nuove tendenze nella programmazione.

Riassumendo, o "Attenzione, la domanda giusta"

Hyper-Threading funziona, non ci sono dubbi. Certo, la tecnologia non è universale: ci sono applicazioni per le quali l'Hyper-Threading "diventa cattivo", e nel caso della diffusione di questa tecnologia, sarebbe auspicabile modificarle. Ma non è successa la stessa cosa a MMX e SSE e continua ad accadere a SSE2?..

Tuttavia, questo solleva la questione dell'applicabilità di questa tecnologia alle nostre realtà. Scarteremo immediatamente l'opzione di un sistema a processore singolo su Xeon con Hyper-Threading (o la consideriamo solo temporanea, in previsione di acquistare un secondo processore): anche un aumento delle prestazioni del 30% non giustifica il prezzo in nessun caso modo - allora è meglio acquistare un normale Pentium 4. Il numero di CPU rimaste è di due o più.

Ora immaginiamo di acquistare un sistema Xeon a due processori (ad esempio con Windows 2000/XP Professional). Sono installate due CPU, Hyper-Threading è abilitato, il BIOS trova ben quattro processori logici, ora decolliamo... Stop. Ma quanti processori vedrà il nostro sistema operativo? Esatto, due. Solo due, perché semplicemente non è progettato per un numero maggiore. Questi saranno due processori fisici, ovvero tutto funzionerà esattamente come con Hyper-Threading disabilitato - non più lento (due CPU logiche "aggiuntive" si fermeranno semplicemente), ma non più veloce (verificato da test aggiuntivi, i risultati non sono citati per loro ovvietà). Hmmm, non molto divertente...

Cosa rimane? Bene, non installiamo Advanced Server o .NET Server sulla nostra workstation, davvero? No, il sistema si installerà, riconoscerà tutti e quattro i processori logici e funzionerà. Questo è solo il sistema operativo del server che guarda alla workstation, per usare un eufemismo, un po' strano (per non parlare degli aspetti finanziari). L'unico caso ragionevole è quando il nostro sistema Xeon a due processori fungerà da server (almeno alcuni costruttori non esitano a rilasciare server su processori Xeon per workstation). Ma per le dual workstation con i corrispondenti sistemi operativi, l'applicabilità dell'Hyper-Threading rimane in discussione. Intel ora sostiene attivamente la licenza del sistema operativo in base al numero di CPU non logiche, ma fisiche. Le discussioni sono ancora in corso e, in generale, molto dipende dal fatto che vediamo un sistema operativo workstation con supporto per quattro processori.

Bene, con i server, tutto viene fuori semplicemente. Ad esempio, un Windows 2000 Advanced Server installato su un sistema Xeon a due socket con Hyper-Threading abilitato vedrà quattro processori logici e funzionerà senza problemi. Per valutare ciò che l'Hyper-Threading offre ai sistemi server, presentiamo i risultati di Intel Microprocessor Software Labs per sistemi a due processori su Xeon MP e diverse applicazioni server Microsoft.

Un aumento delle prestazioni del 20-30% per un server a due processori "gratuitamente" è più che allettante (soprattutto rispetto all'acquisto di un "vero" sistema a 4 processori).

Quindi si scopre che al momento l'applicabilità pratica dell'Hyper-Threading è possibile solo nei server. Il problema con le workstation dipende dalla soluzione con la licenza del sistema operativo. Sebbene un'altra applicazione dell'Hyper-Threading sia abbastanza reale, se i processori desktop ottengono il supporto per questa tecnologia. Ad esempio (immaginiamo) cosa c'è che non va in un sistema Pentium 4 con supporto Hyper-Threading, su cui è installato Windows 2000/XP Professional con supporto SMP?.. Tuttavia, non c'è niente di incredibile in questo: entusiasti sviluppatori Intel promettono il diffuso introduzione dell'Hyper-Threading - dai server ai sistemi desktop e mobili.

  • tutorial

In questo articolo cercherò di descrivere la terminologia utilizzata per descrivere i sistemi in grado di eseguire più programmi in parallelo, ovvero multi-core, multi-processore, multi-thread. Diversi tipi di parallelismo nella CPU IA-32 sono apparsi in momenti diversi e in un ordine alquanto incoerente. È facile confondersi in tutto questo, soprattutto considerando che i sistemi operativi sono attenti a nascondere i dettagli da programmi applicativi meno sofisticati.

Lo scopo dell'articolo è mostrare che con tutta la varietà di possibili configurazioni di sistemi multiprocessore, multi-core e multi-thread per i programmi in esecuzione su di essi, vengono create opportunità sia per l'astrazione (ignorando le differenze) sia per tenere conto delle specifiche ( la capacità di apprendere a livello di codice la configurazione).

Avvertimento sui segni ®, ™, nell'articolo

Il mio commento spiega perché i dipendenti dell'azienda dovrebbero utilizzare i marchi di copyright nelle comunicazioni pubbliche. In questo articolo, dovevano essere usati abbastanza spesso.

processore

Naturalmente, il termine più antico, più comunemente usato e ambiguo è "processore".

Nel mondo moderno, un processore è ciò che acquistiamo in una bella scatola al dettaglio o in un pacchetto OEM non così carino. Un'entità indivisibile inserita in un socket su una scheda madre. Anche se non c'è un connettore e non può essere rimosso, cioè se è ben saldato, questo è un chip.

I sistemi mobili (telefoni, tablet, laptop) e la maggior parte dei desktop hanno un unico processore. Le workstation e i server a volte vantano due o più processori sulla stessa scheda madre.

Il supporto per più CPU in un unico sistema richiede numerose modifiche alla progettazione. Come minimo, è necessario fornire la loro connessione fisica (prevedere diversi socket sulla scheda madre), risolvere i problemi di identificazione del processore (vedi più avanti in questo articolo, così come la mia nota precedente), coordinamento dell'accesso alla memoria e consegna degli interrupt ( il controller degli interrupt deve essere in grado di instradare gli interrupt su più processori) e, naturalmente, il supporto del sistema operativo. Sfortunatamente, non sono riuscito a trovare una menzione documentata del momento in cui è stato creato il primo sistema multiprocessore su processori Intel, tuttavia Wikipedia afferma che Sequent Computer Systems li ha forniti già nel 1987 utilizzando processori Intel 80386. Il supporto diffuso per diversi chip in un sistema diventa disponibile a partire da con l'Intel® Pentium.

Se sono presenti più processori, ognuno di essi ha il proprio connettore sulla scheda. Allo stesso tempo, ognuno di loro ha copie indipendenti complete di tutte le risorse, come registri, dispositivi di esecuzione, cache. Condividono una memoria comune: la RAM. La memoria può essere collegata a loro in vari modi non banali, ma questa è una storia separata che va oltre lo scopo di questo articolo. L'importante è che in ogni caso i programmi eseguibili devono creare l'illusione di una memoria condivisa omogenea, accessibile da tutti i processori del sistema.


Pronto per il decollo! Scheda madre Intel® per computer desktop D5400XS

Nucleo

Storicamente, il multi-core nell'Intel IA-32 è apparso dopo l'Intel® HyperThreading, ma è il successivo nella gerarchia logica.

Sembrerebbe che se ci sono più processori nel sistema, le sue prestazioni siano più elevate (su attività che possono utilizzare tutte le risorse). Tuttavia, se il costo delle comunicazioni tra di loro è troppo elevato, tutto il guadagno derivante dal parallelismo viene annullato da lunghi ritardi nel trasferimento di dati comuni. Questo è esattamente ciò che si osserva nei sistemi multiprocessore: sia fisicamente che logicamente sono molto lontani l'uno dall'altro. Per comunicare efficacemente in tali condizioni, è necessario inventare bus specializzati come Intel® QuickPath Interconnect. Il consumo di energia, le dimensioni e il prezzo della soluzione finale, ovviamente, non diminuiscono da tutto questo. L'elevata integrazione dei componenti dovrebbe venire in soccorso: i circuiti che eseguono parti di un programma parallelo dovrebbero essere avvicinati l'uno all'altro, preferibilmente su un chip. In altre parole, un processore dovrebbe organizzarne diversi nuclei, identici tra loro in tutto, ma indipendenti.

I primi processori multi-core IA-32 di Intel sono stati introdotti nel 2005. Da allora, il numero medio di core nelle piattaforme server, desktop e ora mobile è cresciuto costantemente.

A differenza di due processori single-core nello stesso sistema, che condividono solo la memoria, due core possono anche condividere cache e altre risorse responsabili dell'interazione con la memoria. Molto spesso, le cache del primo livello rimangono private (ogni core ha il suo), mentre il secondo e il terzo livello possono essere condivisi o separati. Questa organizzazione del sistema riduce il ritardo nella consegna dei dati tra i core vicini, soprattutto se stanno lavorando su un'attività comune.


Una micrografia di un processore Intel quad-core con nome in codice Nehalem. Vengono evidenziati core separati, una cache L3 condivisa, nonché collegamenti QPI ad altri processori e un controller di memoria condivisa.

iperthread

Fino al 2002 circa, l'unico modo per ottenere un sistema IA-32 in grado di eseguire due o più programmi in parallelo era utilizzare specificamente i sistemi multiprocessore. L'Intel® Pentium® 4, così come la linea Xeon, nome in codice Foster (Netburst), hanno introdotto una nuova tecnologia - hyperthreading o hyperthreading - Intel® HyperThreading (di seguito HT).

Non c'è niente di nuovo sotto il sole. HT è un caso speciale di ciò che in letteratura viene definito multithreading simultaneo (SMT). A differenza dei core "reali", che sono copie complete e indipendenti, nel caso di HT, solo una parte dei nodi interni viene duplicata in un processore, il principale responsabile della memorizzazione dei registri di stato dell'architettura. I nodi esecutivi preposti all'organizzazione e all'elaborazione dei dati rimangono al singolare, e in qualsiasi momento sono utilizzati al massimo da uno dei thread. Come i core, gli hyperthread condividono le cache tra loro, ma a partire da quale livello dipende dal sistema specifico.

Non cercherò di spiegare tutti i pro ei contro dei design SMT in generale e dei design HT in particolare. Il lettore interessato può trovare una discussione abbastanza dettagliata della tecnologia in molte fonti e, naturalmente, in Wikipedia. Tuttavia, prenderò nota del seguente punto importante, che spiega le attuali restrizioni sul numero di hyperthread nella produzione reale.

Limiti del filo
In quali casi è giustificata la presenza di multicore "disonesti" sotto forma di HT? Se un thread dell'applicazione non è in grado di caricare tutti i nodi in esecuzione all'interno del kernel, possono essere "presi in prestito" a un altro thread. Questo è tipico per le applicazioni che hanno un "collo di bottiglia" non nei calcoli, ma nell'accesso ai dati, ovvero generando spesso mancate cache e dovendo attendere che i dati vengano consegnati dalla memoria. Durante questo periodo, il kernel senza HT sarà costretto a rimanere inattivo. La presenza di HT consente di passare rapidamente da nodi di esecuzione liberi a un altro stato architettonico (perché è solo duplicato) ed eseguirne le istruzioni. Questo è un caso speciale di un trucco chiamato latency hidden, quando una lunga operazione, durante la quale le risorse utili sono inattive, è mascherata dall'esecuzione parallela di altre attività. Se l'applicazione ha già un alto grado di utilizzo delle risorse del kernel, la presenza dell'hyperthreading non consentirà l'accelerazione: qui sono necessari kernel "onesti".

Gli scenari tipici per applicazioni desktop e server progettate per architetture di macchine generiche hanno il potenziale per il parallelismo implementato utilizzando HT. Tuttavia, questo potenziale viene rapidamente "esaurito". Forse per questo, su quasi tutti i processori IA-32, il numero di hyperthread hardware non supera i due. In scenari tipici, il guadagno derivante dall'utilizzo di tre o più hyperthreading sarebbe minimo, ma la perdita di dimensioni dello stampo, consumo energetico e costi è significativa.

Un'altra situazione si osserva nelle attività tipiche eseguite su acceleratori video. Pertanto, queste architetture sono caratterizzate dall'utilizzo della tecnologia SMT con un numero maggiore di thread. Poiché i coprocessori Intel® Xeon Phi (introdotti nel 2010) sono ideologicamente e genealogicamente abbastanza vicini alle schede video, potrebbero avere quattro hyperthreading su ogni core - una configurazione unica per IA-32.

processore logico

Dei tre "livelli" di parallelismo descritti (processori, core, hyperthreading), alcuni o addirittura tutti possono mancare in un particolare sistema. Ciò è influenzato dalle impostazioni del BIOS (multi-core e multi-threading sono disabilitati indipendentemente), microarchitettura (ad esempio, HT era assente da Intel® Core™ Duo, ma è stato ripristinato con il rilascio di Nehalem) ed eventi di sistema ( i server multiprocessore possono spegnere i processori guasti in caso di malfunzionamenti e continuare a "volare" sui restanti). In che modo questo zoo multistrato di concorrenza è visibile al sistema operativo e, in definitiva, alle applicazioni?

Inoltre, per comodità, indichiamo il numero di processori, core e thread in alcuni sistemi con un triplo ( X, y, z), dove Xè il numero di processori yè il numero di core in ciascun processore e zè il numero di hyperthread in ciascun core. Di seguito, mi riferirò a questo trio topologia- un termine consolidato che ha poco a che fare con la sezione di matematica. Opera P = xyz definisce il numero di entità denominate processori logici sistemi. Definisce il numero totale di contesti di processo applicativo indipendenti in un sistema di memoria condivisa in esecuzione in parallelo che il sistema operativo deve considerare. Dico "forzato" perché non può controllare l'ordine di esecuzione di due processi che si trovano su processori logici diversi. Questo vale anche per gli hyperthread: sebbene vengano eseguiti "in sequenza" sullo stesso core, l'ordine specifico è dettato dall'hardware e non è visibile o controllato dai programmi.

Molto spesso, il sistema operativo nasconde alle applicazioni finali le caratteristiche della topologia fisica del sistema su cui è in esecuzione. Ad esempio, le tre topologie seguenti: (2, 1, 1), (1, 2, 1) e (1, 1, 2) - il sistema operativo sarà rappresentato come due processori logici, sebbene il primo abbia due processori , il secondo ha due core e il terzo ha solo due thread.


Task Manager di Windows mostra 8 processori logici; ma quanto costa in processori, core e hyperthread?


La parte superiore di Linux mostra 4 processori logici.

Questo è abbastanza conveniente per i creatori di applicazioni applicate: non devono avere a che fare con funzionalità hardware che sono spesso insignificanti per loro.

Definizione software della topologia

Naturalmente, l'astrazione della topologia in un unico numero di processori logici in alcuni casi crea sufficienti motivi di confusione e incomprensione (in accese controversie su Internet). Le applicazioni informatiche che vogliono ottenere le massime prestazioni dall'hardware richiedono un controllo granulare su dove verranno posizionati i loro thread: più vicini su hyperthread adiacenti o viceversa, più lontani su processori diversi. La velocità di comunicazione tra processori logici all'interno dello stesso core o processore è molto più veloce della velocità di trasferimento dei dati tra processori. Anche la possibilità di eterogeneità nell'organizzazione della RAM complica il quadro.

Le informazioni sulla topologia del sistema nel suo insieme, nonché la posizione di ciascun processore logico nell'IA-32, sono disponibili utilizzando l'istruzione CPUID. Dall'avvento dei primi sistemi multiprocessore, lo schema di identificazione del processore logico è stato ampliato più volte. Ad oggi, parti di esso sono contenute nei fogli 1, 4 e 11 del CPUID. Quale dei fogli guardare può essere determinato dal seguente diagramma a blocchi, tratto dall'articolo:

Non mi annoierò qui con tutti i dettagli delle singole parti di questo algoritmo. Se c'è interesse, la parte successiva di questo articolo può essere dedicata a questo. Rimanderò il lettore interessato, in cui questo problema viene analizzato nel modo più dettagliato possibile. Qui descriverò prima brevemente cos'è l'APIC e come si collega alla topologia. Quindi, considera di lavorare con il foglio 0xB (undici in decimale), che è attualmente l'ultima parola in "apico-building".

ID APIC
L'APIC locale (advanced programmable interrupt controller) è un dispositivo (ora parte del processore) responsabile del lavoro con gli interrupt che arrivano a un processore logico specifico. Ogni processore logico ha il proprio APIC. E ciascuno di essi nel sistema deve avere un valore ID APIC univoco. Questo numero viene utilizzato dai controller di interrupt per l'indirizzamento durante la consegna dei messaggi e da tutti gli altri (come il sistema operativo) per identificare i processori logici. La specifica per questo controller di interrupt si è evoluta da Intel 8259 PIC a Dual PIC, APIC e xAPIC a x2APIC.

Al momento, la larghezza del numero memorizzato nell'APIC ID ha raggiunto i 32 bit completi, sebbene in passato fosse limitata a 16, e anche prima a soli 8 bit. Oggi, i resti dei vecchi tempi sono sparsi in tutto il CPUID, ma tutti i 32 bit dell'ID APIC vengono restituiti in CPUID.0xB.EDX. Ciascun processore logico che esegue indipendentemente l'istruzione CPUID restituirà un valore diverso.

Chiarimento dei legami familiari
Il valore dell'ID APIC di per sé non dice nulla sulla topologia. Per scoprire quali due processori logici si trovano all'interno dello stesso processore fisico (cioè sono "fratelli" di hyperthread), quali due sono all'interno dello stesso processore e quali processori completamente diversi, è necessario confrontare i loro valori ID APIC. A seconda del grado di relazione, alcuni dei loro pezzi corrisponderanno. Queste informazioni sono contenute nelle sottoliste CPUID.0xB, che sono codificate con un operando in ECX. Ciascuno di essi descrive la posizione del campo di bit di uno dei livelli di topologia in EAX (più precisamente, il numero di bit che devono essere spostati nell'ID APIC a destra per rimuovere i livelli inferiori della topologia), nonché come il tipo di questo livello - hyperthread, core o processore - in ECX.

I processori logici all'interno dello stesso core corrisponderanno a tutti i bit ID APIC ad eccezione di quelli nel campo SMT. Per i processori logici che si trovano nello stesso processore, tutti i bit tranne i campi Core e SMT. Poiché il numero di fogli secondari per CPUID.0xB può aumentare, questo schema supporterà la descrizione di topologie con un numero maggiore di livelli, se necessario in futuro. Inoltre, sarà possibile introdurre livelli intermedi tra quelli esistenti.

Una conseguenza importante dell'organizzazione di questo schema è che nell'insieme di tutti gli ID APIC di tutti i processori logici del sistema possono esserci dei "buchi", cioè non andranno in sequenza. Ad esempio, in un processore multi-core con HT disabilitato, tutti gli ID APIC potrebbero risultare pari, poiché il bit meno significativo responsabile della codifica del numero di hyperthread sarà sempre zero.

Si noti che CPUID.0xB non è l'unica fonte di informazioni sui processori logici disponibili per il sistema operativo. L'elenco di tutti i processori a sua disposizione, insieme ai relativi valori ID APIC, è codificato nella tabella MADT ACPI.

Sistemi operativi e topologia

I sistemi operativi forniscono informazioni sulla topologia del processore logico alle applicazioni tramite le proprie interfacce.

Su Linux, le informazioni sulla topologia sono contenute nello pseudo-file /proc/cpuinfo, così come nell'output del comando dmidecode. Nell'esempio seguente, sto filtrando il contenuto di cpuinfo su alcuni sistemi quad-core senza HT, lasciando solo le voci relative alla topologia:

Testo nascosto

[email protetta]:~$ cat /proc/cpuinfo |grep "processore\|fisico\id\|fratelli\|core\|core\|apicid" processore: 0 id fisico: 0 fratelli: 4 id core: 0 core cpu: 2 apicid: 0 apicid iniziale: 0 processore: 1 id fisico: 0 fratelli: 4 id core: 0 core cpu: 2 apicid: 1 apicid iniziale: 1 processore: 2 id fisico: 0 fratelli: 4 id core: 1 core cpu: 2 apicid: 2 apicid iniziale: 2 processore: 3 id fisico: 0 fratelli: 4 id core: 1 core cpu: 2 apicid: 3 apicid iniziale: 3

In FreeBSD, la topologia viene riportata tramite il meccanismo sysctl nella variabile kern.sched.topology_spec come XML:

Testo nascosto

[email protetta]:~$ 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 Gruppo FILOgruppo SMT 2, 3 Gruppo FILOgruppo SMT 4, 5 Gruppo FILOgruppo SMT 6, 7 Gruppo FILOgruppo SMT

In MS Windows 8, le informazioni sulla topologia possono essere visualizzate nel Task Manager.

Articoli correlati in alto