Processore multicore: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Domenique43 (discussione | contributi)
Sezioni, rimozione senza fonte
Riga 3:
In [[elettronica]] il termine '''multi core''' viene utilizzato per indicare due o più [[Core (informatica)|core]], ovvero più nuclei "fisici" montati sullo stesso [[Package (elettronica)|package]].
 
Il termine ''multi core'' è generico e, sebbene adatto a descrivere unità contenenti più di due core, può essere affiancato da altri termini specifici. cheSe specificanosi ilvolessere numerodescrivere di100 essio più core, quali:anziché ''multi core'' viene comunemente usato '''''many cores''''', tuttavia vi sono nomi specifici anche per unità con 128 core (octacosahecta core), 256 core (hexapentacontadicta core), 512 core (dodecapenta core), 1000 core (kilo core), 1024 core (tetracosakilia core) e 2048 core (octatetracontadilia core).
 
Ci sono casi in cui ci possono essere prodotti con un numero dispari di core, come il triple core di AMD (Athlon II X3 435). Questo tipo di architettura, rispetto alla [[single core]], consente di aumentare la potenza di calcolo di una CPU senza aumentare la [[Clock|frequenza di clock]] di lavoro, a tutto vantaggio del [[calore]] dissipato (che diminuisce rispetto nel caso di più processori separati) così come l'energia assorbita.
 
== Evoluzione storica==
=== Le prime CPU della IBM e della SUN ===
I primi esemplari di CPU multi core vennero presentati da [[IBM]] con il suo [[PowerPC]] nel [[2003]], ma solo nel 2005 si hanno prodotti per il mercato consumer, con [[Intel]] alla fine del [[2005]], mediante i processori [[Pentium D]] basati su core [[Smithfield (informatica)|Smithfield]], mentre la rivale [[Advanced Micro Devices|AMD]] lanciò i nuovi [[Athlon 64 X2]] nel 2005.
 
Intel ha avuto il merito di rendere i processori quad core (4 core) disponibili per il grande pubblico mediante i [[Core 2 Extreme]] e [[Core 2 Quad]] basati su core [[Kentsfield]], ma i primi processori multi core con più di 2 core vennero presentati sul mercato verso la fine del [[2005]]; si tratta del [[Cell (processore)|Cell]], sviluppato congiuntamente da [[IBM]], [[Sony]] e [[Toshiba]] per il mercato [[Console (videogiochi)|console]]/[[blade server]] e composto da 8 core ''eterogenei'', e l'[[UltraSPARC T1]], processore a 8 core ''omogenei'' sviluppato da [[Sun Microsystems]] per il mercato server (In particolare per [[Web server]] con numerosi accessi) capace di gestire 32 [[Thread (informatica)|thread]] simultaneamente.
Questo tipo di architettura, al pari dei sistemi dual core e più generalmente, di tutti i sistemi [[biprocessore]] e [[multiprocessore]], consente di aumentare la potenza di calcolo senza aumentare la frequenza di lavoro, a tutto vantaggio del calore dissipato, oltre a garantire maggiori prestazioni in ambiti molto specifici dove più che un'alta potenza di calcolo è richiesto un grande [[calcolo parallelo|parallelismo]].
 
L'octa core è stato progettato per far lavorare quattro core per volta a seconda del carico di operazioni, mentre il processore hexa core (6 core) fa lavorare contemporaneamente tutti e 6 i core per prestazioni più performanti.
 
=== L'evoluzione a partire dal 2005 ===
Nel corso del [[2005]] arrivarono i primi chip dual core per mercato desktop, sempre grazie a Intel che presentò i primi [[Pentium D]] [[Smithfield (informatica)|Smithfield]]; in quel periodo si era giunti a un livello tecnologico di sviluppo hardware che non consentiva più di aumentare la potenza di elaborazione incrementando semplicemente la frequenza di [[clock]]. Fino a quel momento il continuo aumento delle prestazioni era stato basato soprattutto sull'aumento della frequenza operativa grazie alle innovazioni offerte dai processi produttivi sempre più miniaturizzati. Si giunse però a un punto tale per cui aumentare ulteriormente le frequenze delle CPU single core, malgrado le dimensioni minime dei [[transistor]], comportava ormai consumi troppo elevati in relazione al modesto aumento di prestazioni (a quei tempi un processore single core top di gamma superava abbondantemente i 100 W di consumo massimo) e questo aveva serie ripercussioni anche sul gravoso problema del raffreddamento dei circuiti.
 
La soluzione che sembrò più ovvia ai progettisti di microprocessori fu quella di puntare tutto sul [[calcolo parallelo|parallelismo]] in modo da poter aumentare il numero di operazioni eseguibili in un unico ciclo di clock. Questo nuovo approccio comunque non era del tutto indolore e comportava anche alcuni svantaggi, in quanto i programmi dovevano essere ottimizzati per un utilizzo [[multi-thread]] parallelizzati anch'essi (ciascun programma eseguito in più parti) per poter sfruttare appieno le caratteristiche di questi processori, in caso contrario essi avrebbero impegnato solo uno dei core, lasciando l'altro pressoché inutilizzato. Paradossalmente, era anche possibile che un programma applicativo non pensato per un'esecuzione di tipo parallelo, risultasse di più lenta esecuzione su un processore multi core rispetto a uno single core, e infatti al momento del lancio dei primi esemplari, erano veramente pochi i [[software]] già pronti per queste nuove architetture. Tale incapacità di raggiungere i livelli di prestazione teorici dei sistemi a parallelismo massiccio è nota come ''[[sindrome di von Neumann]]''.
 
== Analisi ==
{{vedi anche|Architetture di sistemi multiprocessore}}
Esistono differenti approcci attraverso i quali si possono realizzare chip multi core, ciascuno con precise peculiarità; per ulteriori informazioni si rimanda alle seguenti voci di approfondimento che, sebbene riferite a processori dual core, espongono comunque concetti di carattere generale che ben si dattano a considerazioni su CPU a più core in generale:
* ''[[Dual core (tecniche di realizzazione)]]'' - illustra i dettagli sulla realizzazione fisica di queste CPU.
* ''[[Dual core (gestione della cache)]]'' - descrive le differenze tra i vari metodi di gestione della cache da parte di ciascun core.
 
== Utilizzo da parte dei sistemi operativi ==
Ogni [[sistema operativo]] gestisce in modo differente le potenzialità dei processori multicore, in alcuni casi queste gestioni variano anche a seconda della versione del sistema operativo (Windows XP, Windows XP SP2 professional, ecc), tuttavia pur implementando il supporto a varie tecnologie hardware e soluzioni software non è detto che si possa assistere a reali vantaggi, in quanto i programmi non sempre supportano queste architetture hardware in modo efficiente, limitando i vantaggi all'utilizzo di più programmi contemporaneamente, per questo bisognerebbe riscrivere il kernel per poter sfruttare le potenzialità multicore a pieno.<ref>[http://www.tomshw.it/cont/news/windows-poco-efficiente-con-le-cpu-multi-core/24514/1.html?pag_commenti=1 Windows poco efficiente con le CPU multi-core]</ref><ref>[http://tesi.cab.unipd.it/26364/1/Tesi_Lorenzo_Baesso_578440.pdf Sistemi multiprocessore e multicore]</ref>
 
Le prime implementazioni nei sistemi Microsoft si ha con la versione SP2 professional di Windows XP, con un supporto limitato all'architettura hardware SMP ([[Symmetric multiprocessing]] o [[Symmetric multiprocessor]]) dove i core o processori accedono ad uno spazio di memoria condiviso, mentre dal punto di vista software viene usata la funzionalità processor affinity che identifica i core come Core0 e Core1, consentendo all'utente di decidere su quale di essi avviare ed eseguire l'applicazione, successivamente l'approccio venne rivisto prima con Windows Vista poi con Windows 7, quest'ultimo supporta soluzioni hardware NUMA ([[Non-Uniform Memory Access]])<ref>[http://www.storiainformatica.it/windows/44-sistemi-operativi/windows/22-windows-e-le-cpu-multi-core Windows e le CPU Multi-Core]</ref>.
 
Nei sistemi Apple [[macOS]] con la versione 10.6 c'è l'introduzione del [[Grand Central Dispatch]] per implementare il [[parallelismo a livello di thread]], migliorando il supporto ai multicore.
 
Nei sistemi basati su kernel Linux, si ha il primo supporto all'hardware SMP con la versione 2 del kernel, che comprendeva un big kernel lock (BKL) per la gestione degli interrupt, successivamente con la versione 2.2 i gestori d'interrupt avevano [[spinlock]] differenziati, alcune distribuzioni e ottimizzazioni inclusero il codice di supporto per sistemi NUMA. Nella versione 2.4 sempre più sottosistemi vennero gestiti al di fuori del BKL, grazie all'introduzione di nuovi database lock, ma presenta ancora spinlocks che coprono interi sottosistemi, questo permise di migliorare la scalabilità, che migliorò ulteriormente con la versione 2.5 del kernel, che ottimizzò la cache della pagina dei lock di conversione da un singolo blocco di codice a più blocchi di dati.<br />Con la versione 2.6 il BKL venne relegato ad una piccola parte del codice del kernel, in quanto la maggior parte del BKL venne convertito in database lock con elevata sintonizzazione e scalabilità per eliminare il ripetersi della linea di cache condivisa, mentre nei sottosistemi critici c'è un certo uso di approcci di lock meno avanzati, quali [[Read-Copy-Update|Read-Copy-Update (RCU)]], venne introdotto un nuovo programmatore multi CPU di coda, risolvendo le contese sulle code di esecuzione globali condivise da più CPU, riducendo il sovraccarico dei processi di pianificazione in parallelo. Questo scheduler venne introdotto anche su alcuni kernel 2.4 delle ultime distribuzioni.<ref>[http://halobates.de/lk09-scalability.pdf Linux multi-core scalability]</ref><ref>[http://www.tuxradar.com/answers/501 How well does Linux support multi-core CPUs?]</ref>
Questa strategia ha permesso al kernel linux in elevata scalabilità ed effettivi miglioramenti con sistemi multicore<ref>[http://www.oneopensource.it/08/03/2011/linux-2-6-38-benchmark-del-kernel-multi-core-scaling/ Linux 2.6.38: benchmark del kernel multi-core scaling] {{webarchive|url=https://web.archive.org/web/20140929193541/http://www.oneopensource.it/08/03/2011/linux-2-6-38-benchmark-del-kernel-multi-core-scaling/ |data=29 settembre 2014 }}</ref>
 
In ambito videoludico e in particolar modo delle librerie grafiche le [[DirectX 12]], [[Vulkan (API)]] e [[Mantle]] hanno permesso il migliore sfruttamento dei diversi core del processore, permettendone il dialogo attivo e diretto con la GPU, cosa che in precedenza non era attuabile se non in modo limitato<ref>[http://www.tmag.it/2015/03/18/brad-wardell-svela-perche-microsoft-amd-nvidia-e-intel-non-vogliono-parlare-dei-benefici-delle-directx-12/ Brad Wardell svela perché Microsoft, AMD, Nvidia e Intel non vogliono parlare dei benefici delle DirectX 12]</ref>
 
Lo sfruttamento da parte delle applicazioni e situazioni operative varia molto a seconda degli stessi e a seconda del sistema operativo utilizzato<ref>[https://www.phoronix.com/scan.php?page=article&item=multi_os_scaling&num=1 Multi-Core, Multi-OS Scaling Performance]</ref>
 
== Terminologia di riferimento ==
{{Div col|2}}
* '''[[single core]]''' (un unico core, es. Intel Atom Z650)
* '''[[dual core]]''' (2 core, es. Intel Core i3-7310U)
Line 32 ⟶ 70:
* '''tetrahexaconta core''' (64 core, es. Intel Xeon Phi 7230)
* '''doheptaconta core''' (72 core, es. Intel Xeon Phi 7290)
{{Div col end}}
 
Se si vogliono descrivere 100 o più core, anziché ''multi core'' viene comunemente usato '''''many cores''''', tuttavia vi sono nomi specifici anche per unità con 128 core (octacosahecta core), 256 core (hexapentacontadicta core), 512 core (dodecapenta core), 1000 core (kilo core), 1024 core (tetracosakilia core) e 2048 core (octatetracontadilia core).
 
Ci sono casi in cui ci possono essere prodotti con un numero dispari di core, come il triple core di AMD (Athlon II X3 435). Questo tipo di architettura, rispetto alla [[single core]], consente di aumentare la potenza di calcolo di una CPU senza aumentare la [[Clock|frequenza di clock]] di lavoro, a tutto vantaggio del [[calore]] dissipato (che diminuisce rispetto nel caso di più processori separati) così come l'energia assorbita.
 
== Descrizione ==
=== Dal dual core al multi core ===
Nel corso del [[2005]] arrivarono i primi chip dual core per mercato desktop, sempre grazie a Intel che presentò i primi [[Pentium D]] [[Smithfield (informatica)|Smithfield]]; in quel periodo si era giunti a un livello tecnologico di sviluppo hardware che non consentiva più di aumentare la potenza di elaborazione incrementando semplicemente la frequenza di [[clock]]. Fino a quel momento il continuo aumento delle prestazioni era stato basato soprattutto sull'aumento della frequenza operativa grazie alle innovazioni offerte dai processi produttivi sempre più miniaturizzati. Si giunse però a un punto tale per cui aumentare ulteriormente le frequenze delle CPU single core, malgrado le dimensioni minime dei [[transistor]], comportava ormai consumi troppo elevati in relazione al modesto aumento di prestazioni (a quei tempi un processore single core top di gamma superava abbondantemente i 100 W di consumo massimo) e questo aveva serie ripercussioni anche sul gravoso problema del raffreddamento dei circuiti.
 
La soluzione che sembrò più ovvia ai progettisti di microprocessori fu quella di puntare tutto sul [[calcolo parallelo|parallelismo]] in modo da poter aumentare il numero di operazioni eseguibili in un unico ciclo di clock. Questo nuovo approccio comunque non era del tutto indolore e comportava anche alcuni svantaggi, in quanto i programmi dovevano essere ottimizzati per un utilizzo [[multi-thread]] parallelizzati anch'essi (ciascun programma eseguito in più parti) per poter sfruttare appieno le caratteristiche di questi processori, in caso contrario essi avrebbero impegnato solo uno dei core, lasciando l'altro pressoché inutilizzato. Paradossalmente, era anche possibile che un programma applicativo non pensato per un'esecuzione di tipo parallelo, risultasse di più lenta esecuzione su un processore multi core rispetto a uno single core, e infatti al momento del lancio dei primi esemplari, erano veramente pochi i [[software]] già pronti per queste nuove architetture. Tale incapacità di raggiungere i livelli di prestazione teorici dei sistemi a parallelismo massiccio è nota come ''[[sindrome di von Neumann]]''.
 
Il problema citato si presentò già con i primi processori dual core, e a maggior ragione era evidente con i primi processori a 4 core che richiedevano ancora di più l'esistenza di applicazioni ottimizzate per poter esprimere il proprio potenziale, ma in ogni caso si trattò di un problema transitorio.
Diversi analisti software infatti, prevedevano già allora che se il software pensato per un utilizzo parallelo in ambito dual core fosse stato realizzato in maniera oculata, tenendo conto non del funzionamento su un sistema dual core, ma su un sistema a più core, esso non avrebbe richiesto poi grosse modifiche per essere utilizzato su un dual core o su un quad core. Secondo altri invece, gli sforzi necessari per realizzare software multi processore che avrebbe funzionato in maniera ottimale saturando tutti i core e non occupandoli in modo disomogeneo sarebbero stati esagerati in relazione con i reali vantaggi, soprattutto di impatto di costi. Su una materia tanto nuova in ambito desktop, ai tempi non si poteva fare altro che attendere maggiori dettagli, ma il tempo ha poi portato gli sviluppatori ad acquisire sempre maggiore esperienza e dimestichezza con la programmazione parallela e molti dei timori dei primi giorni risultano ormai superati.
 
=== Primi processori multi core ===
I primi esemplari di CPU multi core vennero presentati da [[IBM]] con il suo [[PowerPC]] nel [[2003]], ma solo nel 2005 si hanno prodotti per il mercato consumer, con [[Intel]] alla fine del [[2005]], mediante i processori [[Pentium D]] basati su core [[Smithfield (informatica)|Smithfield]], mentre la rivale [[Advanced Micro Devices|AMD]] lanciò i nuovi [[Athlon 64 X2]] nel 2005.
 
Intel ha avuto il merito di rendere i processori quad core (4 core) disponibili per il grande pubblico mediante i [[Core 2 Extreme]] e [[Core 2 Quad]] basati su core [[Kentsfield]], ma i primi processori multi core con più di 2 core vennero presentati sul mercato verso la fine del [[2005]]; si tratta del [[Cell (processore)|Cell]], sviluppato congiuntamente da [[IBM]], [[Sony]] e [[Toshiba]] per il mercato [[Console (videogiochi)|console]]/[[blade server]] e composto da 8 core ''eterogenei'', e l'[[UltraSPARC T1]], processore a 8 core ''omogenei'' sviluppato da [[Sun Microsystems]] per il mercato server (In particolare per [[Web server]] con numerosi accessi) capace di gestire 32 [[Thread (informatica)|thread]] simultaneamente.
Questo tipo di architettura, al pari dei sistemi dual core e più generalmente, di tutti i sistemi [[biprocessore]] e [[multiprocessore]], consente di aumentare la potenza di calcolo senza aumentare la frequenza di lavoro, a tutto vantaggio del calore dissipato, oltre a garantire maggiori prestazioni in ambiti molto specifici dove più che un'alta potenza di calcolo è richiesto un grande [[calcolo parallelo|parallelismo]].
 
L'octa core è stato progettato per far lavorare quattro core per volta a seconda del carico di operazioni, mentre il processore hexa core (6 core) fa lavorare contemporaneamente tutti e 6 i core per prestazioni più performanti.
 
=== Considerazioni ===
{{vedi anche|Architetture di sistemi multiprocessore}}
Esistono differenti approcci attraverso i quali si possono realizzare chip multi core, ciascuno con precise peculiarità; per ulteriori informazioni si rimanda alle seguenti voci di approfondimento che, sebbene riferite a processori dual core, espongono comunque concetti di carattere generale che ben si dattano a considerazioni su CPU a più core in generale:
* ''[[Dual core (tecniche di realizzazione)]]'' - illustra i dettagli sulla realizzazione fisica di queste CPU.
* ''[[Dual core (gestione della cache)]]'' - descrive le differenze tra i vari metodi di gestione della cache da parte di ciascun core.
 
== Utilizzo da parte dei sistemi operativi ==
Ogni [[sistema operativo]] gestisce in modo differente le potenzialità dei processori multicore, in alcuni casi queste gestioni variano anche a seconda della versione del sistema operativo (Windows XP, Windows XP SP2 professional, ecc), tuttavia pur implementando il supporto a varie tecnologie hardware e soluzioni software non è detto che si possa assistere a reali vantaggi, in quanto i programmi non sempre supportano queste architetture hardware in modo efficiente, limitando i vantaggi all'utilizzo di più programmi contemporaneamente, per questo bisognerebbe riscrivere il kernel per poter sfruttare le potenzialità multicore a pieno.<ref>[http://www.tomshw.it/cont/news/windows-poco-efficiente-con-le-cpu-multi-core/24514/1.html?pag_commenti=1 Windows poco efficiente con le CPU multi-core]</ref><ref>[http://tesi.cab.unipd.it/26364/1/Tesi_Lorenzo_Baesso_578440.pdf Sistemi multiprocessore e multicore]</ref>
 
Le prime implementazioni nei sistemi Microsoft si ha con la versione SP2 professional di Windows XP, con un supporto limitato all'architettura hardware SMP ([[Symmetric multiprocessing]] o [[Symmetric multiprocessor]]) dove i core o processori accedono ad uno spazio di memoria condiviso, mentre dal punto di vista software viene usata la funzionalità processor affinity che identifica i core come Core0 e Core1, consentendo all'utente di decidere su quale di essi avviare ed eseguire l'applicazione, successivamente l'approccio venne rivisto prima con Windows Vista poi con Windows 7, quest'ultimo supporta soluzioni hardware NUMA ([[Non-Uniform Memory Access]])<ref>[http://www.storiainformatica.it/windows/44-sistemi-operativi/windows/22-windows-e-le-cpu-multi-core Windows e le CPU Multi-Core]</ref>.
 
Nei sistemi Apple [[macOS]] con la versione 10.6 c'è l'introduzione del [[Grand Central Dispatch]] per implementare il [[parallelismo a livello di thread]], migliorando il supporto ai multicore.
 
Nei sistemi basati su kernel Linux, si ha il primo supporto all'hardware SMP con la versione 2 del kernel, che comprendeva un big kernel lock (BKL) per la gestione degli interrupt, successivamente con la versione 2.2 i gestori d'interrupt avevano [[spinlock]] differenziati, alcune distribuzioni e ottimizzazioni inclusero il codice di supporto per sistemi NUMA. Nella versione 2.4 sempre più sottosistemi vennero gestiti al di fuori del BKL, grazie all'introduzione di nuovi database lock, ma presenta ancora spinlocks che coprono interi sottosistemi, questo permise di migliorare la scalabilità, che migliorò ulteriormente con la versione 2.5 del kernel, che ottimizzò la cache della pagina dei lock di conversione da un singolo blocco di codice a più blocchi di dati.<br />Con la versione 2.6 il BKL venne relegato ad una piccola parte del codice del kernel, in quanto la maggior parte del BKL venne convertito in database lock con elevata sintonizzazione e scalabilità per eliminare il ripetersi della linea di cache condivisa, mentre nei sottosistemi critici c'è un certo uso di approcci di lock meno avanzati, quali [[Read-Copy-Update|Read-Copy-Update (RCU)]], venne introdotto un nuovo programmatore multi CPU di coda, risolvendo le contese sulle code di esecuzione globali condivise da più CPU, riducendo il sovraccarico dei processi di pianificazione in parallelo. Questo scheduler venne introdotto anche su alcuni kernel 2.4 delle ultime distribuzioni.<ref>[http://halobates.de/lk09-scalability.pdf Linux multi-core scalability]</ref><ref>[http://www.tuxradar.com/answers/501 How well does Linux support multi-core CPUs?]</ref>
Questa strategia ha permesso al kernel linux in elevata scalabilità ed effettivi miglioramenti con sistemi multicore<ref>[http://www.oneopensource.it/08/03/2011/linux-2-6-38-benchmark-del-kernel-multi-core-scaling/ Linux 2.6.38: benchmark del kernel multi-core scaling] {{webarchive|url=https://web.archive.org/web/20140929193541/http://www.oneopensource.it/08/03/2011/linux-2-6-38-benchmark-del-kernel-multi-core-scaling/ |data=29 settembre 2014 }}</ref>
 
In ambito videoludico e in particolar modo delle librerie grafiche le [[DirectX 12]], [[Vulkan (API)]] e [[Mantle]] hanno permesso il migliore sfruttamento dei diversi core del processore, permettendone il dialogo attivo e diretto con la GPU, cosa che in precedenza non era attuabile se non in modo limitato<ref>[http://www.tmag.it/2015/03/18/brad-wardell-svela-perche-microsoft-amd-nvidia-e-intel-non-vogliono-parlare-dei-benefici-delle-directx-12/ Brad Wardell svela perché Microsoft, AMD, Nvidia e Intel non vogliono parlare dei benefici delle DirectX 12]</ref>
 
Lo sfruttamento da parte delle applicazioni e situazioni operative varia molto a seconda degli stessi e a seconda del sistema operativo utilizzato<ref>[https://www.phoronix.com/scan.php?page=article&item=multi_os_scaling&num=1 Multi-Core, Multi-OS Scaling Performance]</ref>
 
==Note==