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.