Perché i computer non dispongono di hardware specializzato come lo smistamento delle reti?

9

Invece di programmare il modo in cui lo facciamo, perché non creiamo le 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 il computer con un nuovo hardware specializzato come l'ordinamento delle reti e funzionerebbe automaticamente con il codice esistente.

    
posta MaiaVictor 26.05.2013 - 11:33
fonte

3 risposte

19

Prima di tutto, i computer vengono forniti con hardware specializzato . Ogni computer portatile e desktop venduto per diversi anni ha un co-processore specializzato, un'unità di elaborazione grafica, che gestisce gli algoritmi di elaborazione visiva, come richiedono applicazioni video e di gioco. Computer di grandi dimensioni ( eg , "supercomputer", famiglia System Z di IBM) hanno una varietà di processori specializzati per gestire l'elaborazione numerica ("elaborazione vettoriale"), ecc. .

In secondo luogo, l'ordinamento è uno degli aspetti più ricercati dell'informatica e risulta essere troppo complesso per essere integrato nell'hardware per qualcosa di più dei casi più semplici. L'ordinamento riguarda esclusivamente la velocità e la 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 una matrice di numeri interi di dimensioni medie che si adattino alla dimensione della parola nativa della CPU ( per esempio , 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 semplicemente le problematiche 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 una lista collegata implica l'inseguimento di puntatori su tutta la memoria.

    
risposta data 26.05.2013 - 13:47
fonte
10

Il problema principale è che gli algoritmi di ordinamento (1) richiedono molta flessibilità, e (2) sarebbe molto difficile accelerare usando comunque l'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 co-processore di ordinamento con accelerazione hardware o un'istruzione di ordinamento speciale avrebbe lo stesso problema.

Il modo in cui viene affrontata questa larghezza di banda della memoria è usando algoritmi e strutture dati migliori con "locality" migliore, e c'è ancora molto lavoro da fare in questo campo, in particolare "algoritmi cache e dimenticatori" (sono ignari nel senso che funzionano bene indipendentemente dai dettagli del caching, mentre gli algoritmi "cache aware" sono ottimizzati per una particolare dimensione della cache della cache, ecc.)

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

Tuttavia, con la grafica 3D, ciò che una volta veniva fatto in hardware ora viene fatto in un software per la flessibilità - gli shader sono software, ad esempio, che è il modo in cui otteniamo una vasta gamma di ombreggiatori diversi che danno l'impressione 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 può ora accelerare tutto, 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 effettivi dei processori di segnali digitali, che erano (e probabilmente sono ancora) una specie di processore specializzato per gestire segnali digitali (ad esempio audio).

Che porta a un punto finale - gli algoritmi di smistamento possono essere accelerati dall'hardware. A seconda dei dati, l'ordinamento può essere gestito utilizzando le istruzioni MMX o SSE (istruzioni multiple-dati multipli) sul processore, ma probabilmente non ha molto senso a causa del problema dell'ampiezza di banda della memoria - forse potresti essere un po 'più efficiente dal punto di vista energetico in questo modo, però. Tuttavia, è anche possibile utilizzare l'hardware grafico. In tal modo, puoi beneficiare della larghezza di banda della 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 verrà eseguito laddove appropriato.

IOW a causa dei vari problemi economici e pratici, progettare l'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.

    
risposta data 26.05.2013 - 13:18
fonte
3

Ma lo fanno! Sono chiamate estensioni del set di istruzioni. (Roba come SSE e simili)

Alcune attività hanno implementazioni molto belle nel software. Di solito tali implementazioni sono sufficienti per svolgere il lavoro, quindi non è necessario alcun hardware specializzato. Se dovessi creare una sorta di hardware specializzato, avresti bisogno di avere una vasta gamma di applicazioni per renderlo utile.

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

    
risposta data 26.05.2013 - 11:44
fonte

Leggi altre domande sui tag