Mentre tutte le attuali CPU sembrano usare un approccio iterativo come suggerisce aterrel , c'è stato del lavoro fatto su approcci non iterativi. Divisione a virgola mobile e radice quadrata a precisione variabile parla di un'implementazione non iterativa di divisione in virgola mobile e radice quadrata in un FPGA , utilizzando le tabelle di ricerca e l'espansione della serie taylor.
Ho il sospetto che le stesse tecniche possano consentire di ottenere queste operazioni in un singolo ciclo (throughput, se non latenza), ma è probabile che abbiate bisogno di enormi tabelle di ricerca, e quindi di aree impossibili di proprietà immobiliari in silicio per farlo .
Perché non sarebbe fattibile?
Nel progettare CPU ci sono molti compromessi da fare. Funzionalità, complessità (numero di transistor), velocità e consumo di energia sono tutti correlati e le decisioni prese durante la progettazione possono avere un impatto enorme sulle prestazioni.
Un moderno processore probabilmente potrebbe avere un'unità principale in virgola mobile che dedica abbastanza transistor al silicio per eseguire una divisione in virgola mobile in un singolo ciclo , ma è improbabile che sia un uso efficiente di quei transistor.
Il virgola mobile si è moltiplicato per questa transizione da iterativo a non iterativo un decennio fa. In questi giorni, moltiplicare un ciclo e persino moltiplicare-accumulare sono all'ordine del giorno, anche nei processori mobili.
Prima che diventasse un uso efficiente del budget dei transistor, moltiplicare, come la divisione, veniva spesso eseguito con un metodo iterativo. All'epoca, i processori DSP dedicati potevano dedicare la maggior parte del loro silicio a una singola unità di accumulo rapido multiplo (MAC) . Una CPU Core2duo ha una latenza di moltiplicazione in virgola mobile pari a 3 (il valore esce dal ciclo della pipeline 3 dopo che è entrato), ma può avere 3 moltiplicazioni in volo contemporaneamente, risultando in un throughput a ciclo singolo, nel frattempo l'unità SSE2 può pompare moltiplicazioni multiple di FP in un singolo ciclo.
Invece di dedicare enormi aree di silicio a un'unità di divisione a ciclo singolo, le moderne CPU hanno più unità, ognuna delle quali può eseguire operazioni in parallelo, ma sono ottimizzate per le proprie situazioni specifiche. In effetti, una volta che si prendono in considerazione le istruzioni SIMD come SSE o la grafica integrata della CPU del Sandy Bridge o CPU successive, ci possono essere molte di queste unità di divisione in virgola mobile sulla CPU.
Se la divisione in virgola mobile generica fosse più importante per le moderne CPU, potrebbe avere senso dedicare abbastanza area di silicio per renderlo a ciclo singolo, tuttavia la maggior parte dei produttori di chip ha ovviamente deciso che possono usare meglio quel silicio usando quelle porte per altre cose . Pertanto un'operazione è più lenta, ma nel complesso (per scenari di utilizzo tipici) la CPU è più veloce e / o consuma meno energia.