Acceleratore vs coprocessore in SoC o APU: differenze e somiglianze

Oggi qualsiasi processore è un complesso amalgama di diversi tipi di core che gestiscono la maggior parte del lavoro, eseguono attività specializzate o collaborano tra loro per ottenere il miglior risultato possibile durante l'esecuzione dei diversi processi. In ogni caso, ci sono differenze tra ciò che è un acceleratore e un coprocessore come core di supporto. Continua a leggere per capire cosa sono.

Acceleratore vs coprocessore in SoC o APU

È molto chiaro che a CPU non può fare il lavoro da solo, ci sono operazioni comuni che un computer svolge continuamente in cui un processore generico non è efficiente, ma prima di tutto dovremmo capire cosa significa e perché sono necessarie. chip di supporto.

Quando si progetta una nuova architettura ci sono una serie di parametri che segnano i limiti che gli ingegneri non dovrebbero superare, incluse cose come il tipo di librerie utilizzate per la progettazione, quanto consumerà il chip, quale sarà? le sue dimensioni, ma soprattutto quali problemi comuni sta cercando di risolvere con il nuovo processore. È a questo punto che vengono definite non solo le unità principali, ma anche i coprocessori e gli acceleratori che ne faranno parte.

I primi processori di supporto che vengono inseriti in un'architettura sono facili da chiarire, di solito quelli che sono stati progettati per architetture precedenti dello stesso marchio o, in mancanza, quelli che sono stati concessi in licenza a terzi. Questi ultimi, invece, nascono in fase di sviluppo, a seguito di richieste del cliente o per il tipo di problema da risolvere che richiede un nuovo tipo di unità hardware.

Che cos'è un coprocessore?

Coprocessore x87

Sebbene il significante sia autoesplicativo, è importante tenere presente che se abbiamo più nuclei che lavorano insieme per risolvere lo stesso problema comune a parti distribuite, allora stiamo parlando di ciascuna delle unità di processo che agisce in co-elaborazione con altre. . E sì, sappiamo cosa ti è passato per la mente, ma quando abbiamo diversi core di una CPU che affrontano un problema specifico, stiamo parlando di quelli che non eseguono il processo principale agiscono come coprocessori di altri.

I chip di supporto sono stati tradizionalmente chiamati coprocessori, sebbene il coprocessore più famoso nella storia del PC sia il coprocessore matematico, che non era altro che quella che sarebbe poi diventata l'unità in virgola mobile o FPU che era totalmente disaccoppiata dalla CPU principale. Pertanto, il coprocessore generalmente non dispone di un processo per acquisire le istruzioni dalla memoria, ma necessita piuttosto di un altro processore per inviare le istruzioni e i dati da elaborare. Il lavoro del coprocessore? Risolvi quella parte del programma e restituisci il risultato il più rapidamente possibile al processore host.

Durante il tempo in cui il coprocessore è incaricato di svolgere il proprio lavoro, il kernel principale può utilizzare la potenza acquisita per svolgere altri compiti, ma poiché un processo viene eseguito insieme, si raggiungerà il punto in cui non sarà in grado di continuare fino a quando il coprocessore o i coprocessori non hanno completato il compito loro assegnato.

Cos'è un acceleratore?

Hardware Acelerador

Tecnicamente un acceleratore è un coprocessore, ma con maggiore indipendenza rispetto a questi in quanto non hanno il compito di eseguire un processo nel suo insieme, ma piuttosto gli viene assegnato un intero processo che la CPU ignora completamente se non per ottenere il risultato finale o per conoscere che il compito è stato completato.

Poiché un acceleratore è completamente disaccoppiato dal processore, è totalmente asincrono ad esso. Cosa intendiamo? Il fatto che un acceleratore al contrario di un coprocessore non funzioni in combinazione con la CPU principale del sistema. Questo ti permette di velocizzare la tua parte di codice, il che significa completarla a una velocità molto maggiore e quindi in minor tempo. Naturalmente, ciò richiede importanti cambiamenti nell'architettura.

Innanzitutto, un coprocessore può condividere parti dell'unità di controllo e persino registri o accedere a una memoria comune con la CPU. Quando tutti questi elementi sono condivisi, possono creare congestione nell'accedervi, causando l'arresto di un'unità o di un'altra in attesa di utilizzare queste risorse. Come capirai, questo non può accadere in un acceleratore, quindi i suoi dati e le istruzioni nonostante siano forniti dal processore sono progettati per essere disponibili il 100% delle volte, ecco perché molti acceleratori sono processori completi che hanno il proprio Local RAM dentro.

Se un acceleratore è migliore, perché viene utilizzato un coprocessore?

Portada Alternativa Processador

Lo abbiamo detto durante l'introduzione di questo articolo, tutto ha a che fare con il budget che gli architetti hanno quando implementano la soluzione a un problema e una cosa che di solito non viene presa in considerazione sono le infrastrutture di comunicazione tra i diversi elementi , così come le unità che fanno parte del ciclo di istruzione di ciascun processore, ma che non sono responsabili di macinare numeri ad alta velocità.

A livello di marketing, è molto facile vendere la potenza di un processore in numeri, questi sono facilmente comprensibili da persone che possono fare un confronto ordinale o cardinale da tali dati. La realtà è che al giorno d'oggi le infrastrutture di qualsiasi processore sono quelle che occupano più spazio ed è per questo che la decisione di implementare qualcosa sotto forma di coprocessore o acceleratore è presa proprio a causa di queste limitazioni.

Un esempio sono i Tensor Core e NVIDIAdell'unità NVDLA, entrambi hanno lo stesso scopo, ma mentre i primi sono un coprocessore all'interno dell'unità shader che condivide i registri e l'unità di controllo con il resto del GPU unità shader, nel caso del secondo è un processore stesso. Non a caso, l'acronimo DLA sta per Deep Learning Accelerator.