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.