Double/int64-Konvertierungen mit SSE/AVX
Der SSE2-Befehlssatz bietet Funktionen zum Konvertieren von Vektoren zwischen Gleitkommazahlen mit einfacher Genauigkeit und 32-Bit Ganzzahlen, es gibt jedoch keine Äquivalente für Ganzzahlen mit doppelter Genauigkeit und 64-Bit-Ganzzahlen. Auch bei AVX fehlen diese Konvertierungen.
Eingeschränkte AVX512-Unterstützung
AVX512 führt integrierte Funktionen für die Konvertierung in und aus 64-Bit-Ganzzahlen mit und ohne Vorzeichen ein. Allerdings fehlt AVX2 und früheren Konfigurationen eine solche Funktionalität.
Annäherung an Int64-Konvertierungen
Für AVX2 und niedriger gibt es Methoden zum Simulieren von Konvertierungen mit doppelter Genauigkeit zu/von uint64 und int64 mit spezifischen Wertebereichseinschränkungen und Rundungsverhalten.
Fast Double <-> uint64_t-Konvertierung:
Diese Methode funktioniert für Werte im Bereich [0, 2^52). Durch Hinzufügen einer magischen Zahl und Maskieren der oberen Bits können Sie eine Annäherung an die uint64_t-Darstellung des Doubles erhalten.
Fast Double <-> int64_t-Konvertierung:
Ähnlich wie die uint64_t-Version funktioniert diese Näherung für Werte innerhalb von [-2^51, 2^51].
Full Range Int64 <- > Doppelte Konvertierung:
uint64_t -> double:
Diese Methode verwendet 5 Anweisungen, um den gesamten int64-Bereich als Double darzustellen.
int64_t -> double:
Diese Konvertierung erfordert 6 Anweisungen und rundet korrekt auf das nächste darstellbare Double.
Fazit
AVX512 bietet direkte Unterstützung für Double /int64-Konvertierungen, aber für frühere Konfigurationen bieten die bereitgestellten Näherungen effiziente Lösungen mit spezifischem Wertebereich und Rundungsverhalten Einschränkungen.
Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe von SSE, AVX und AVX-512 effizient zwischen Gleitkommazahlen mit doppelter Genauigkeit und 64-Bit-Ganzzahlen konvertieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!