Casa / Skype / Quali sono i core nel processore. Cosa influenza il numero di core del processore? Processore multicore. Multi-core virtuale o Hyper-Threading

Quali sono i core nel processore. Cosa influenza il numero di core del processore? Processore multicore. Multi-core virtuale o Hyper-Threading

Ma con la conquista di nuovi picchi negli indicatori di frequenza, è diventato più difficile aumentarlo, poiché ciò ha influito sull'aumento del TDP dei processori. Pertanto, gli sviluppatori hanno iniziato a far crescere i processori in larghezza, vale a dire ad aggiungere core, ed è nato il concetto di multi-core.

Letteralmente 6-7 anni fa, i processori multi-core erano praticamente sconosciuti. No, molto processori nucleari dalla stessa azienda IBM esisteva prima, ma l'aspetto del primo processore dual-core per computer desktop, si è svolto solo nel 2005, e questo è stato chiamato Processore Pentium D. Inoltre, l'Opteron dual-core di AMD è stato rilasciato nel 2005, ma per sistemi server.

In questo articolo, non approfondiremo i fatti storici in dettaglio, ma discuteremo dei moderni processori multi-core come una delle caratteristiche della CPU. E, soprattutto, dobbiamo capire cosa offre questo multi-core in termini di prestazioni per il processore e per te e me.

Aumento delle prestazioni con multi-core

Il principio per aumentare le prestazioni del processore a causa di più core è dividere l'esecuzione dei thread (varie attività) in più core. In sintesi, quasi tutti i processi in esecuzione sul tuo sistema hanno più thread.

Prenoterò subito che il sistema operativo può creare virtualmente molti thread per se stesso e farlo tutto allo stesso tempo, anche se il processore è fisicamente single-core. Questo principio implementa lo stesso multitasking di Windows (ad esempio, ascoltare musica e digitare contemporaneamente).


Prendiamo ad esempio programma antivirus. Avremo un thread che scansiona il computer, l'altro - aggiorna il database antivirus (abbiamo semplificato tutto per comprendere il concetto generale).

E considera cosa accadrà in due diversi casi:

a) Processore single core. Poiché due thread sono in esecuzione contemporaneamente, è necessario creare per l'utente (visivamente) proprio questa simultaneità di esecuzione. Il sistema operativo è complicato:c'è uno switch tra l'esecuzione di questi due thread (questi switch sono istantanei e il tempo è in millisecondi). Cioè, il sistema ha "eseguito" un po' l'aggiornamento, quindi è passato bruscamente alla scansione, quindi di nuovo all'aggiornamento. Quindi, per te e per me, sembra che questi due compiti vengano svolti contemporaneamente. Ma cosa si perde? Certo, prestazioni. Quindi diamo un'occhiata alla seconda opzione.

b) Il processore è multi-core. In questo caso, questo passaggio non si verificherà. Il sistema invierà chiaramente ogni thread a un core separato, il che, di conseguenza, ci consentirà di eliminare il passaggio da un thread all'altro che è dannoso per le prestazioni (idealizziamo la situazione). Due thread vengono eseguiti contemporaneamente, questo è il principio del multi-core e del multi-threading. In definitiva, eseguiremo scansioni e aggiornamenti molto più velocemente su un processore multi-core rispetto a uno single-core. Ma c'è un problema: non tutti i programmi supportano il multi-core. Non tutti i programmi possono essere ottimizzati in questo modo. E tutto accade ben lungi dall'essere perfetto come abbiamo descritto. Ma ogni giorno, gli sviluppatori creano sempre più programmi il cui codice è perfettamente ottimizzato per l'esecuzione su processori multi-core.

Sono necessari processori multi-core? Ragionevolezza quotidiana

In scelta del processore per un computer (vale a dire, quando si pensa al numero di core), è necessario determinare i principali tipi di attività che eseguirà.

Per migliorare le conoscenze nel campo dell'hardware dei computer, puoi leggere il materiale su prese del processore .

Il punto di partenza può essere chiamato processori dual-core, poiché non ha senso tornare alle soluzioni single-core. Ma i processori dual-core sono diversi. Potrebbe non essere il Celeron "più" fresco, o potrebbe essere un Core i3 su Ivy Bridge, proprio come AMD - Sempron o Phenom II. Naturalmente, a causa di altri indicatori, le loro prestazioni saranno molto diverse, quindi è necessario esaminare tutto in modo completo e confrontare il multi-core con gli altri. caratteristiche del processore.

Ad esempio, il Core i3 su Ivy Bridge ha la tecnologia Hyper-Treading, che permette di processare 4 thread contemporaneamente (il sistema operativo vede 4 core logici, invece di 2 fisici). E lo stesso Celeron non se ne vanta.

Ma torniamo direttamente alle riflessioni sui compiti richiesti. Se è necessario un computer per lavoro d'ufficio e navigare in Internet, allora gli basta un processore dual-core.

Quando si tratta di prestazioni di gioco, hai bisogno di 4 core o più per sentirti a tuo agio nella maggior parte dei giochi. Ma qui viene fuori il problema: non tutti i giochi hanno un codice ottimizzato per processori a 4 core e, se sono ottimizzati, non è efficiente come vorremmo. Ma, in linea di principio, per i giochi ora la soluzione ottimale è proprio il 4° core processor.


Oggi gli stessi processori AMD a 8 core sono ridondanti per i giochi, è il numero di core che è ridondante, ma le prestazioni non sono all'altezza, ma hanno altri vantaggi. Questi stessi 8 core aiuteranno molto nelle attività in cui è necessario un lavoro potente con un carico multi-thread di alta qualità. Ciò include, ad esempio, il rendering (calcolo) di video o l'elaborazione server. Pertanto, per tali attività sono necessari 6, 8 o più core. E presto i giochi saranno in grado di caricare 8 o più core di alta qualità, quindi in futuro tutto sarà molto roseo.

Non dimenticare che ci sono ancora molte attività che creano un carico a thread singolo. E dovresti farti la domanda: ho bisogno di questo 8 core o no?

Riassumendo, vorrei sottolineare ancora una volta che i vantaggi del multi-core si manifestano durante il lavoro computazionale multi-thread "pesante". E se non giochi a giochi con requisiti esorbitanti e non svolgi tipi di lavoro specifici che richiedono una buona potenza di calcolo, spendere soldi per costosi processori multi-core semplicemente non ha senso (

Qual è il vantaggio dei processori dual core?

Quando acquisti un laptop, probabilmente hai notato che alcuni di essi hanno delle etichette: " processore Intel 2 Duo" o "AMD Turion 64 x2". Queste etichette indicano che i notebook sono basati sulla tecnologia di elaborazione dual-core.

Processori Dual Core

I processori dual-core si riferiscono al tipo di sistemi costituiti da due core di processori indipendenti combinati in un circuito integrato (IC) o, come dicono i professionisti, in un singolo chip. Tali sistemi combinano due core in un processore. Una tecnologia simile è stata applicata per la prima volta personal computer e a casa console di gioco, ma molto presto è stato adattato all'ambiente di elaborazione mobile. I laptop con tecnologia simile sono disponibili da AMD e Intel.

I processori dual-core hanno una struttura diversa rispetto ai processori dual-core. Si riferiscono a un sistema in cui due processori sono combinati in un circuito integrato. E i due processori single-core, a loro volta, si riferiscono a un sistema in cui due processori indipendenti (ciascuno con il proprio die) sono direttamente collegati a scheda madre.

Ciascuno dei processori in un sistema dual-core ha una cache incorporata (cache principale) che offre loro il proprio potenziale per il ripristino e l'elaborazione rapida ed efficiente delle istruzioni utilizzate di frequente. Inoltre, la cache di secondo livello si trova sullo stesso circuito integrato. La cache secondaria sul chipset Intel Mobile Core 2 Duo è condivisa tra due processori. Nel chipset Turion AMD 64x2, ciascuno dei due processori ha una cache dedicata - 512 KB per ciascun core. La cache di secondo livello è una riserva per il caso se il primario non basta.

Vantaggi della tecnologia dual core

I vantaggi più importanti di tali processori sono la velocità e l'efficienza. L'elaborazione dei comandi e il recupero dei dati sono effettuati da due processori; quindi, si ottengono prestazioni maggiori senza riscaldare i processori. Il fatto che questi due processori abbiano una propria cache primaria facilmente accessibile garantisce anche prestazioni veloci. Inoltre, soprattutto nel caso dell'Intel Core 2 Duo in cui la cache secondaria è divisa, l'intera cache secondaria può essere utilizzata da uno o da entrambi i processori contemporaneamente, se necessario.

In poche parole, un laptop con un processore dual-core è più veloce e più fresco, pur avendo un multitasking migliore. I processori dual-core consumano meno energia rispetto ai processori dual-core.

Un altro vantaggio dell'utilizzo di processori dual-core nei laptop è il peso e le dimensioni più leggere, il che rende computer portatile più conveniente, pur offrendo prestazioni simili a quelle di un PC.

È importante notare che con i programmi meno recenti, se esegui un solo programma alla volta, non sperimenterai nessuno dei vantaggi dei processori dual-core. I vecchi programmi non erano progettati per questa tecnologia, quindi erano in grado di utilizzare solo un core. Tuttavia, in questo caso, il vantaggio del multitasking rimane comunque. Se hai più programmi aperti contemporaneamente, un processore con due core fornirà prestazioni più veloci rispetto a un singolo core.

Il tempo passa e sempre più sviluppatori Software creare i propri programmi tenendo conto dei processori dual-core; quindi, gli utenti nel prossimo futuro potranno sperimentare tutti i vantaggi di tali processori.

Trovato un brutto problema con il limite dell'orologio. Avendo raggiunto la soglia dei 3 GHz, gli sviluppatori si trovano ad affrontare un aumento significativo del consumo energetico e della dissipazione del calore dei loro prodotti. Il livello della tecnologia nel 2004 non ha consentito di ridurre significativamente le dimensioni dei transistor in un cristallo di silicio e la via d'uscita da questa situazione è stata un tentativo non di aumentare la frequenza, ma di aumentare il numero di operazioni eseguite per ciclo. Avendo adottato l'esperienza piattaforme server, dove il layout multiprocessore era già stato testato, si è deciso di unire due processori su un unico chip.

È passato molto tempo da allora, le CPU con due, tre, quattro, sei e persino otto core sono apparse in ampio accesso. Ma la quota di mercato principale è ancora occupata dai modelli a 2 e 4 core. AMD sta cercando di cambiare la situazione, ma la loro architettura Bulldozer non è stata all'altezza delle aspettative e gli otto core economici non sono ancora molto popolari nel mondo. Quindi la domandache è meglio: processore a 2 o 4 core, è ancora rilevante.

Differenza tra processore a 2 e 4 core

A livello hardwarela principale differenza tra un processore a 2 core e un 4 coreè il numero di blocchi funzionali. Ogni core, infatti, è una CPU separata, dotata di propri nodi di calcolo. 2 o 4 di queste CPU sono interconnesse da un bus interno ad alta velocità e da un comune controller di memoria per interagire con la RAM. Possono essere condivisi anche altri nodi funzionali: nella maggior parte delle moderne CPU, la memoria cache del primo (L1) e del secondo (L2) livello, i blocchi di calcoli interi e le operazioni in virgola mobile sono individuali. La cache L3, che è relativamente grande, è singola e disponibile per tutti i core. A parte, possiamo notare i già citati AMD FX (così come la CPU Athlon e l'APU serie A): condividono non solo la memoria cache e il controller, ma anche unità a virgola mobile: ciascuno di questi moduli appartiene contemporaneamente a due core.

Schema AMD Athlon Quad-Core

Dal punto di vista dell'utentedifferenza tra 2 e 4 core cpuè il numero di task che la CPU può elaborare in un ciclo di clock. Con la stessa architettura, la differenza teorica sarà 2 volte per 2 e 4 core, o 4 volte per 2 e 8 core, rispettivamente. Pertanto, con il funzionamento simultaneo di più processi, un aumento del numero dovrebbe portare ad un aumento della velocità del sistema. Dopotutto, invece di 2 operazioni, una CPU quad-core può eseguirne quattro alla volta.

Perché le CPU Dual Core sono popolari

Sembrerebbe che se un aumento del numero di core comporta un aumento delle prestazioni, sullo sfondo dei modelli con quattro, sei o otto core, i processori dual-core non hanno alcuna possibilità. Tuttavia, il leader mondiale nel mercato delle CPU, Intel, aggiorna annualmente la sua gamma di prodotti e rilascia nuovi modelli con solo un paio di core (Core i3, Celeron, Pentium). E questo sullo sfondo del fatto che anche negli smartphone e nei tablet gli utenti guardano a tali CPU con diffidenza o disprezzo. Per capire perché i modelli più popolari sono processori con due core, è necessario prendere in considerazione diversi fattori principali.

Intel Core i3: i processori a 2 core più popolari per i PC domestici

Problema di compatibilità. Durante la creazione del software, gli sviluppatori si sforzano di farlo funzionare sia sui nuovi computer che sui modelli esistenti di CPU e GPU. Data la varietà sul mercato, è importante assicurarsi che il gioco funzioni senza problemi sia su due core che su otto. La maggior parte di tutti i PC domestici esistenti sono dotati di un processore dual-core, quindi il supporto per tali computer riceve la massima attenzione.

Complessità della parallelizzazione dei compiti. Per garantire l'uso efficiente di tutti i core, i calcoli eseguiti durante il programma dovrebbero essere suddivisi in thread uguali. Ad esempio, un'attività che può utilizzare in modo ottimale tutti i core dedicando uno o due processi a ciascuno di essi è la compressione simultanea di più video. Con i giochi è più difficile, poiché tutte le operazioni eseguite in essi sono interconnesse. Nonostante il fatto che il lavoro principale sia svolto da GPU schede video, è la CPU che prepara le informazioni per la formazione di un'immagine 3d. È piuttosto difficile fare in modo che ogni core elabori la propria porzione di dati e poi la alimenti alla GPU in modo sincrono con gli altri. Più thread di calcolo simultanei devi elaborare, più difficile sarà implementare l'attività.

Continuità delle tecnologie. Gli sviluppatori di software utilizzano gli sviluppi esistenti per i loro nuovi progetti, che sono soggetti a ripetuti ammodernamenti. In alcuni casi, si arriva al fatto che tali tecnologie sono radicate nel passato per 10-15 anni. Uno sviluppo basato su un progetto vecchio di dieci anni è riluttante, se non completamente riprogettato per una perfetta ottimizzazione. Di conseguenza, vi è un'incapacità del software di utilizzare razionalmente le capacità hardware del PC. MOLESTATORE. Call of Pripyat, rilasciato nel 2009 (durante il periodo di massimo splendore delle CPU multi-core), è basato su un motore del 2001, quindi non può caricare più di un core.

MOLESTATORE. utilizza completamente solo un core di una CPU a 4 core

La situazione è la stessa con il popolare gioco di ruolo online World of Tanks: il motore Big World su cui si basa è stato creato nel 2005, quando le CPU multi-core non erano ancora percepite come l'unica via di sviluppo possibile.

Inoltre, World of Tanks non sa come distribuire uniformemente il carico sui core

Difficoltà finanziarie. Una conseguenza di questo problema è il punto precedente. Se crei ogni applicazione da zero, senza utilizzare le tecnologie esistenti, la sua implementazione costerà somme favolose. Ad esempio, il costo di sviluppo di GTA V è stato di oltre $ 200 milioni. Allo stesso tempo, alcune tecnologie non sono state ancora create “da zero”, ma mutuate da progetti precedenti, dal momento che il gioco è stato scritto per 5 piattaforme contemporaneamente (Sony PS3, PS4, Xbox 360 e One, oltre che PC).

GTA V è ottimizzato per multi-core e può caricare uniformemente il processore

Tutte queste sfumature non consentono di sfruttare appieno il potenziale dei processori multi-core nella pratica. Interdipendenza dei produttori hardware e gli sviluppatori di software creano un circolo vizioso.

Quale processore è migliore: 2 o 4 core

Ovviamente, con tutti i vantaggi, il potenziale dei processori multi-core rimane ancora irrealizzato fino alla fine. Alcune attività non sanno come distribuire uniformemente il carico e funzionano in un thread, altre lo fanno con un'efficienza mediocre e solo una piccola parte del software interagisce completamente con tutti i core. Quindi la domandaquale processore migliore, 2 o 4 core, acquistare, richiede un'attenta considerazione della situazione attuale.

Ci sono prodotti di due produttori sul mercato: Intel e AMD, che differiscono per le caratteristiche di implementazione. Advanced Micro Devices tradizionalmente enfatizza il multi-core, mentre Intel è riluttante a fare questo passo e aumentare il numero di core solo se ciò non porta a una diminuzione delle prestazioni specifiche per core (cosa molto difficile da evitare).

L'aumento del numero di core riduce le prestazioni complessive di ciascuno di essi.

Di norma, le prestazioni teoriche e pratiche complessive di una CPU multi-core sono inferiori rispetto a una simile (costruita sulla stessa microarchitettura, con lo stesso processore tecnico) con un singolo core. Ciò è causato dal fatto che i kernel utilizzano risorse condivise, e questo non lo è nel modo migliore influisce sulla velocità. Pertanto, non puoi semplicemente acquistare un potente processore quad o hexa-core con l'aspettativa che non sarà sicuramente più debole di un dual-core della stessa serie. In alcune situazioni, sarà, inoltre, tangibile. Un esempio è l'esecuzione di vecchi giochi su un computer con un processore AMD FX a otto core: l'FPS a volte è inferiore rispetto a un PC simile, ma con una CPU quad-core.

Oggi è necessario il multi-core

Questo significa che molti core non sono necessari? Nonostante il fatto che la conclusione sembri logica - no. Le attività quotidiane leggere (come navigare sul Web o lavorare con più programmi contemporaneamente) rispondono positivamente all'aumento del numero di core del processore. È per questo motivo che i produttori di smartphone puntano sulla quantità, abbassando le prestazioni specifiche in secondo piano. Opera (e altri browser su Motore al cromo), Firefox si avvia ciascuno scheda aperta come processo separato, rispettivamente, maggiore è il numero di core - più veloce è la transizione tra le schede. File manager, programmi d'ufficio, i giocatori da soli non richiedono molte risorse. Ma se è necessario passare frequentemente da uno all'altro, un processore multi-core migliorerà le prestazioni del sistema.

Il browser Opera assegna un processo separato a ciascuna scheda

Intel ne è consapevole, perché la tecnologia HuperThreading, che consente al core di elaborare il secondo thread utilizzando risorse inutilizzate, è apparsa ai tempi del Pentium 4. Ma non compensa del tutto la mancanza di prestazioni.

La CPU a 2 core con Huper Threading si presenta come a 4 core in Task Manager

I creatori di giochi, nel frattempo, stanno gradualmente recuperando terreno. L'emergere di nuove generazioni di console Sony Play Station e Microsoft Xbox ha stimolato gli sviluppatori a prestare maggiore attenzione al multi-core. Entrambe le console sono basate su chip AMD a otto core, quindi ora i programmatori non devono dedicare molti sforzi all'ottimizzazione durante il porting di un gioco su un PC. Con la crescente popolarità di queste console, coloro che sono rimasti delusi dall'acquisto dell'AMD FX 8xxx hanno potuto tirare un sospiro di sollievo. I processori multi-core stanno guadagnando attivamente posizioni di mercato, come si può vedere dalle recensioni.

Una delle fasi del miglioramento dell'architettura di von Neumann è la parallelizzazione dei thread ( Filo Livello Parallelismo, TLP). Distinguere multithreading simultaneo (Simultaneo Multithreading, SMT) e multithreading a livello di chip (patata fritta- livello Multithreading, CMT). I due approcci differiscono principalmente nella loro idea di cosa sia un thread. Un tipico rappresentante SMTè la cosiddetta tecnologia HTT (Iper- filettatura tecnologia).

P i primi rappresentanti dell'architettura CMP sono diventati processori progettati per l'uso nei server. Era un semplice tandem, in tali dispositivi, infatti, due nuclei indipendenti erano posizionati su un substrato (Fig. 8,). Lo sviluppo di questo schema è diventato inizialmente una struttura con una cache comune - memoria fig. 9, e poi una struttura con multithreading in ogni core.

I vantaggi dei processori multi-core sono i seguenti.

    Semplicità (naturalmente relativa) di progettazione e produzione. Avendo sviluppato un core efficace, può essere replicato in un cristallo, integrando l'architettura con i componenti di sistema necessari.

    Il consumo di energia è notevolmente ridotto. Se, ad esempio, si posizionano due core su un chip e li si fa funzionare a una frequenza di clock che fornisce prestazioni pari a quelle di un "fratello" single core, e quindi si confronta il consumo energetico di entrambi, si scopre che la potenza il consumo diminuisce più volte, poiché cresce quasi in proporzione alle frequenze quadrate.

In generale, se si osservano attentamente le Figure 8 e 9, si può notare che non vi è alcuna differenza fondamentale, ad esempio, tra un sistema a 2 processori e un computer con un processore a 2 core. I problemi sono gli stessi. E uno dei primi è il sistema operativo corrispondente.

Modi per organizzare il lavoro dei processori

Lo stimolo principale per lo sviluppo dell'architettura dei computer è l'aumento della produttività. Uno dei modi per aumentare la produttività dei computer è la specializzazione (sia i singoli elementi di un computer che la creazione di sistemi informatici specializzati).

La specializzazione dei processori è iniziata negli anni '60, quando il processore centrale dei grandi computer è stato liberato dalle operazioni di routine delle informazioni di input-output. Questa funzione è stata trasferita al processore I/O, che comunica con i dispositivi periferici.

Un altro modo per migliorare le prestazioni è allontanarsi dall'architettura seriale von Neumann e concentrarsi sul parallelismo. M. Flynn ha richiamato l'attenzione sul fatto che ci sono solo due ragioni che danno origine al parallelismo computazionale: l'indipendenza dei flussi di comandi che esistono contemporaneamente nel sistema e la disconnessione dei dati elaborati in un flusso di comandi. Se la prima ragione del parallelismo del processo computazionale è ben nota (questo è il semplice multiprocessing), allora ci soffermeremo sul parallelismo dei dati in modo più dettagliato, poiché nella maggior parte dei casi esiste nascosto ai programmatori ed è utilizzato da una ristretta cerchia di professionisti .

L'esempio più semplice di parallelismo dei dati è una sequenza di due comandi: A=B+C; RE=MI*FA;

Se seguiamo rigorosamente il principio di von Neumann, la seconda operazione può essere avviata per l'esecuzione solo dopo il completamento della prima operazione. Tuttavia, è ovvio che l'ordine di esecuzione di queste istruzioni non ha importanza: gli operandi A, B e C della prima istruzione non sono in alcun modo correlati agli operandi D, E ed F della seconda istruzione. In altre parole, entrambe le operazioni sono parallele proprio perché gli operandi di queste istruzioni non sono correlati. Puoi fornire molti esempi di una sequenza di tre o più comandi con dati non correlati che porteranno a una conclusione inequivocabile: quasi tutti i programmi contengono gruppi di operazioni su dati paralleli.

D Un altro tipo di parallelismo dei dati si verifica in genere nei programmi di elaborazione dati ciclici. Ad esempio, quando si aggiungono gli elementi di due array, un comando può elaborare una grande matrice (flusso multiplo) di dati. Tali istruzioni sono chiamate vettore e il processore che implementa questa modalità è chiamato vettore. È possibile fornire la seguente definizione: “Il processore vettoriale è un processore che fornisce l'esecuzione parallela di operazioni su array di dati (vettori). È caratterizzato da un'architettura speciale costruita su un gruppo di elementi di elaborazione paralleli ed è progettato per elaborare immagini, matrici e array di dati.

Esistono diverse classificazioni del parallelismo software che hanno un significato abbastanza simile, di cui la classificazione più riconosciuta è considerata basata su sei livelli (Fig. 10). I primi tre livelli di parallelismo sono occupati da oggetti di programma di grandi dimensioni: lavori, programmi e procedure di programma indipendenti. Dichiarazioni, cicli e operazioni non correlati costituiscono i livelli inferiori di parallelismo. Se combiniamo tale classifica con le categorie di M. Flyn "flussi di comandi paralleli" e "flussi di dati paralleli", allora possiamo vedere che il parallelismo di primo livello è ottenuto principalmente grazie a molti flussi di comandi indipendenti e al livello inferiore il parallelismo deve la sua esistenza principalmente a flussi di dati non correlati.

Strutture di tubazioni e condotte

o giorno di modi efficaci il miglioramento delle prestazioni dei computer è la pipeline. Sulla fig. undici un) viene mostrata l'elaborazione in un unico blocco universale e in Fig. 11 b) e in)- nel trasportatore. L'idea dell'elaborazione della pipeline è di dividere la funzione implementata dal blocco funzionale universale (FB) tra diverse specializzate. Tutti i blocchi funzionali della pipeline devono funzionare alla stessa velocità (almeno in media). In pratica, quest'ultimo viene raramente raggiunto e, di conseguenza, si riducono le prestazioni della pipeline, poiché il periodo di ricezione dei dati in ingresso è determinato dal tempo massimo di elaborazione in ciascun blocco funzionale. Per compensare le fluttuazioni nel tempo di funzionamento dell'FB, sono inclusi tra di loro dei registri di buffer. Una tecnica più universale consiste nell'includere dispositivi di archiviazione buffer di tipo FIFO (Fig. 11 in). Un'altra differenza dovrebbe essere notata tra le figure. b) e in). Nella struttura in) non esiste una linea di sincronizzazione SI. Ciò non significa che non possa trovarsi in una struttura simile, solo che esistono due tipi di condotte: sincrono con una linea di sincronizzazione comune e asincrono, senza uno. I primi sono anche chiamati con gestione dei comandi, e i secondi con la gestione dei dati. Gli array sistolici sono un esempio di pipeline asincrone.

Per la pipeline non è sempre una catena lineare di blocchi. A volte è vantaggioso blocchi funzione saranno interconnessi non in sequenza, ma secondo uno schema più complesso secondo la logica di elaborazione, mentre alcuni blocchi della catena possono essere saltati, mentre altri possono formare strutture cicliche. In Fig. 12

  • 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. Tipi diversi il parallelismo nella CPU IA-32 è apparso 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".

A mondo moderno il processore è quello (pacchetto) che acquistiamo in una bella scatola al dettaglio o in un pacchetto OEM non molto bello. 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.

Supporto multiplo CPU in un sistema richiede numerose modifiche nella sua progettazione. Come minimo, è necessario garantire 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), il coordinamento dell'accesso alla memoria e la 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, ma Wikipedia afferma che Sequent Computer Systems li ha forniti già nel 1987 utilizzando processori Intel 80386. Sta diventando disponibile un supporto diffuso per diversi chip in un sistema a partire dall'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.


Micrografia di un quad-core Processore Intel 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 con nome in codice Foster (Netburst), sono stati introdotti nuova tecnologia- hyperthread o hyperthread, - 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".

Scenari tipici per applicazioni desktop e server progettate per architetture di macchine scopo generale, hanno il potenziale per il parallelismo implementato con 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. Questo è influenzato Impostazioni del BIOS(multi-core e multi-threading sono disabilitati indipendentemente), considerazioni sulla 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) sul resto). 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.


finestre responsabile delle attività 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. Possibilità di eterogeneità nell'organizzazione memoria ad accesso casuale complica anche 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 al momento è l'ultima parola in "apico-costruzione".

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 ognuno di loro nel sistema deve avere valore unico APICID. 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 consentirà di supportare la descrizione di topologie con un numero maggiore di livelli, qualora se ne presenti la necessità 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

Sistemi operativi fornire informazioni sulla topologia dei processori logici alle applicazioni utilizzando 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 non HT, lasciando solo 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.