Ich habe mich in letzter Zeit gefragt, wie GPUs Sinus und Cosinus berechnen, und Google hat mir nicht geholfen, eine genaue Antwort zu finden.
Anfangs dachte ich, dass die GPU eine Art Nachschlagetabelle verwenden würde, um die Berechnungen so schnell wie möglich durchzuführen. Aber dann wurde mir klar, dass das Speichern aller Sündenwerte in einer Tabelle im Bereich von Doppelwerten zwischen [0, 2 * pi] eine massive und daher keine gültige Option wäre.
Die Tabelle könnte möglicherweise in der Auflösung verkleinert werden, und die fehlenden Werte für eine Suche können dann lerped werden. Dies führt jedoch zu einem möglichen Fehler, der sich bei mehrmaliger Durchführung der Berechnung zu größeren und nicht akzeptablen Fehlern ausbreiten kann.
Meine letzte Idee ist dann, dass sie eine Taylor-Näherung verwenden könnten, aber das würde einige Arithmetik beinhalten, die für eine GPU möglicherweise zu langsam ist. Die Frage ist also, was verwenden GPUs, um die Sinuswerte zu berechnen? Sind es Nachschlagetabellen, Näherungswerte oder eine Mischung aus beiden? Und möglicherweise verwenden sie dieselbe Methode für andere Berechnungen wie sqrt ()?
quelle
Antworten:
Ich glaube, dass NVidia-GPUs eine Tabellensuche verwenden, gefolgt von einer quadratischen Interpolation. Ich denke, sie verwenden einen Algorithmus ähnlich dem, der in Oberman, Stuart F; Siu, Michael Y: "Ein Hochleistungs-Interpolator für flächeneffiziente Mutlifunktionen", _IEEE Int'l Symp Comp Arithmetic, (ARITH-17): 272-279, 2005 .
Die Tabellensuche wird mit dem indiziertm höchstwertige Bits von der Eingabe, x und gibt drei Koeffizienten zurück, c0 , c1 , c2 . Das Endergebnis wird durch Auswertung erzeugtc0+c1x+c2x2 . Die Koeffizienten für jeden Bereich vonx werden ausgewählt, um den maximalen Fehler der Zielfunktion über diesen Bereich zu minimieren.
Damit die Einheit vollständig per Pipeline verbunden werden kann, um ein Ergebnis pro Zyklus zu erzielen, enthält die Einheit eine spezielle Quadriereinheit und zwei kabinencodierte Wallace-Tree-Multiplikatoren. Für jede Sonderfunktion wählen sie die Anzahl der Tabelleneinträge (2m ), so dass die Polynomauswertung ihnen eine IEEE-FP-Antwort mit einfacher Genauigkeit gibt, die an letzter Stelle auf ein paar Einheiten genau ist.
quelle