Perché i computer non dispongono di hardware specializzato come le reti di ordinamento?


10

Invece di programmare come facciamo, perché non facciamo specifiche di attività comuni come "l'ordinamento", e quindi lasciamo che l'ambiente lo compili per sfruttare al meglio il suo hardware? In questo modo, potremmo spedire computer con nuovo hardware specializzato come le reti di smistamento e funzionerebbe automaticamente con il codice esistente.


2
Acquista una scheda PCI FPGA e implementa le estensioni che desideri.
SK-logic,

L'hardware non è magico. Molte cose non possono essere accelerate molto (o affatto) da hardware specializzato, e anche se ciò è possibile, l'hardware esistente spesso deve essere adattato (o almeno ricompilato). Vedi yosefk.com/blog/its-done-in-hardware-so-its-cheap.html


3
@WorldEngineer Non vedo come questo entri nella foto. Il tuo utente medio non sa a cosa serva l'80% delle cose in una moderna CPU, è contento perché gli viene detto che rende i suoi programmi più veloci (e questo ha un kernel di verità). Se l'ordinamento fosse davvero comune come suppone OP e potesse essere ottimizzato da hardware dedicato, lo metterebbe accanto al predittore di succursali ("che cos'è, giardinaggio?"), Pubblicando un comunicato stampa dicendo che hanno fatto applicazioni X e Y 5% più veloce e vendilo.

1
Questo mi ricorda l'idea dei Conservation Core , che sono mirati all'efficienza energetica piuttosto che alle massime prestazioni.
Paul A. Clayton,

Risposte:


19

Prima di tutto, i computer sono dotati di hardware specializzato . Ogni laptop e desktop venduto da alcuni anni ha un coprocessore specializzato, un'unità di elaborazione grafica, che gestisce gli algoritmi di elaborazione visiva, come le applicazioni video e di gioco richieste. I computer di dimensioni molto grandi ( ad es . "Supercomputer", famiglia System Z di IBM) dispongono di una varietà di processori specializzati per gestire l'elaborazione numerica ("elaborazione vettoriale"), ecc .

In secondo luogo, l' ordinamento è uno degli aspetti dell'informatica meglio ricercati e risulta essere troppo complesso per essere integrato nell'hardware per i casi più semplici. L'ordinamento riguarda velocità e correttezza. La velocità dipende dalla scelta dell'algoritmo, dal tipo e dalla variazione dei dati e dal volume dei dati. La correttezza dipende dal tipo e dal contesto dei dati. È decisamente banale ordinare un array di numeri medi di dimensioni medie che si adattano alla dimensione della parola nativa della CPU ( ad es, 31 o 63 bit più segno). L'ordinamento di stringhe di caratteri che contengono più di semplici valori ASCII è estremamente complesso: IBM ha pubblicato un libro di oltre 500 pagine 20 anni fa, discutendo solo dei problemi dei set di caratteri nel contesto dei confini nazionali e dell'uso comune. E poi c'è la questione dei dati non contigui: l'ordinamento di un elenco collegato comporta l'inseguimento di puntatori su tutta la memoria.


10

Il problema principale è che gli algoritmi di ordinamento (1) richiedono molta flessibilità e (2) sarebbe comunque molto difficile accelerare l'utilizzo dell'hardware.

Una cosa è che gli algoritmi di ordinamento sono già abbastanza veloci da superare la larghezza di banda della memoria del processore: il processore impiegherà già gran parte del suo tempo in attesa che i dati si spostino avanti e indietro nella memoria principale. Un coprocessore di ordinamento con accelerazione hardware o un'istruzione di ordinamento speciale avrebbero lo stesso problema.

Il modo in cui questa larghezza di banda di memoria viene affrontata è utilizzando algoritmi e strutture dati migliori che hanno una "localizzazione" migliore, e c'è ancora un lavoro significativo in questo campo, in particolare "algoritmi ignari della cache" (sono ignari nel senso che funzionano bene indipendentemente dai dettagli della memorizzazione nella cache, mentre gli algoritmi "cache aware" sono ottimizzati per una particolare dimensione della pagina cache ecc.).

Al contrario, le applicazioni multimediali (audio e grafica, in particolare la grafica 3D) fanno uso di alcune strutture molto ripetitive - ovviamente c'è flessibilità, ma è costruita su una base ampia e ben strutturata. Ciò ha permesso all'accelerazione grafica di iniziare in modo semplice con operazioni come Blitting (un'operazione di copia a blocchi configurabile ma ancora molto strutturata) e il disegno di linee / poligoni. Significava che quando la grafica e l'elaborazione del suono diventavano più sofisticate, le operazioni vettoriali divennero un ovvio obiettivo per l'ottimizzazione: prima MMX (vettori di numeri interi) poi SSE (vettori di float). Significava che esisteva una struttura abbastanza ben definita su come funzionava un motore grafico 3D quando la vecchia pipeline grafica 3D a funzione fissa veniva spostata su hardware grafico 3D.

Tuttavia, con la grafica 3D, ciò che una volta veniva fatto nell'hardware ora viene fatto nel software per flessibilità - gli shader sono software, ad esempio, ed è così che otteniamo una vasta gamma di shader diversi che danno l'aspetto di materiali diversi. Tuttavia, quel software funziona ancora in modo molto più strutturato rispetto al software generale e quindi può ancora utilizzare una piattaforma hardware molto più specializzata. Ecco perché la tua scheda grafica ora può accelerare qualsiasi cosa, dalla fisica alle password di cracking - applicazioni che si adattano allo stesso modello e possono essere implementate in modo efficiente utilizzando i set di istruzioni forniti dai moderni processori grafici.

I processori grafici ora sono i discendenti spirituali o reali dei processori di segnali digitali, che erano (e probabilmente lo sono ancora) una sorta di processore specializzato per gestire i segnali digitali (ad es. Audio).

Il che porta a un punto finale: gli algoritmi di ordinamento possono essere accelerati dall'hardware. A seconda dei tuoi dati, l'ordinamento può essere gestito usando le istruzioni MMX o SSE (istruzioni singole-dati multipli) sul tuo processore, ma probabilmente non ha molto senso a causa del problema della larghezza di banda della memoria - forse puoi essere un po 'più efficiente dal punto di vista energetico in quel modo, però. Tuttavia, è possibile utilizzare anche l'hardware grafico. In questo modo, è possibile beneficiare della larghezza di banda di memoria spesso molto migliore per le schede grafiche. Non sarai in grado di sostituire tutti i tipi in questo modo, ma è certamente possibile e probabilmente fatto dove appropriato.

IOW a causa dei vari problemi economici e pratici, progettare hardware specificamente per accelerare un compito relativamente ristretto come l'ordinamento non ha davvero senso. Una funzionalità che accelera una gamma più ampia di attività o che rende l'hardware di accelerazione esistente applicabile a una gamma più ampia di attività spesso ha molto più senso.


3

Ma lo fanno! Si chiamano estensioni del set di istruzioni. (Cose come SSE e simili)

Alcune attività hanno implementazioni molto belle nel software. Di solito queste implementazioni sono abbastanza buone per fare il lavoro, quindi non è necessario alcun hardware specializzato. Se dovessi creare un tipo di hardware specializzato, dovrai avere una vasta gamma di applicazioni per renderlo utile.

Se guardi l'hardware che potrebbe far funzionare questo, la mia ipotesi sarebbe che avresti guardato qualcosa come FPGA. Come puoi vedere con gli FPGA, il chip diventerebbe molto più costoso mentre non sarebbe applicabile per molte applicazioni.


Dovrò cercare Google per SSE, ma, in anticipo, l'ordinamento è probabilmente universale. È implementato a livello hardware?
MaiaVictor

Eh, visto che ci siamo, consiglieresti i libri?
MaiaVictor

Stavo solo parlando delle ottimizzazioni specifiche del lavoro implementate sui processori in stile CPU in generale, poiché le reti di smistamento sono usate come esempio. Non so se SSE o qualsiasi altro set di istruzioni includa l'ottimizzazione di ottimizzazioni specifiche. Ho realizzato reti di smistamento di Google e, dato che esistono implementazioni generali ottimizzate, penso che le implementazioni software potrebbero fare altrettanto anche se l'implementazione viene eseguita correttamente.
Onno,

Devo sottolineare che la maggior parte delle estensioni del set di istruzioni funziona a un livello inferiore rispetto alla rete di ordinamento che hai usato come esempio, ma non è impossibile escogitare un'ottimizzazione multi-registro che può fare l'ordinamento in questo modo. Ma la domanda per i produttori di CPU sarebbe: "pagherebbe abbastanza per giustificare il costo?".
Onno,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.