Ich arbeite an GPU-Gerät, die sehr hohe Division ganzzahlige Latenz hat, mehrere hundert Zyklen. Ich möchte Divisionen optimieren.Schnellere Ganzzahldivision, wenn der Nenner bekannt ist?
Alle Divisionen nach Nenner, die in einer Menge {1,3,6,10}, aber Zähler ist eine Laufzeit positive Wert, etwa 32000 oder weniger. Aufgrund von Speichereinschränkungen ist die Nachschlagetabelle möglicherweise keine gute Option.
Können Sie an Alternativen denken? Ich habe gedacht, Float Point Inverses zu berechnen und diese zu verwenden, um Zähler zu multiplizieren.
Danke
PS. Danke Leute. Bit-Shift-Hack ist wirklich cool. von Abrundungs zu erholen, verwende ich folgenden C-Segment:
// q = m/n
q += (n*(j +1)-1) < m;
ja, das ist klein genug. Danke – Anycorn
Ich bekomme Rundungsfehler, aber ich habe eine Möglichkeit, das korrekte Ergebnis wiederherzustellen. Vielen Dank – Anycorn
Für Rundungsfehler, könnten Sie versuchen, die klassische addieren Hälfte vor dividieren, die in diesem Fall wäre a/b = (a * ((1 << 16)/b) + (1 <<15))>> 16 – drawnonward