SVMLs __m256d _mm256_log2_pd (__m256d a) ist auf Intel-Compiler beschränkt und angeblich langsamer auf AMD-Prozessoren. Es gibt alternative Implementierungen, die sich jedoch häufig auf SSE und nicht auf AVX2 konzentrieren. Diese Diskussion zielt darauf ab, eine effiziente Implementierung von log2() für Vektoren mit vier doppelten Zahlen bereitzustellen, die mit verschiedenen Compilern kompatibel ist und sowohl auf AMD- als auch auf Intel-Prozessoren eine gute Leistung erbringt.
Traditionelle Strategie
Der übliche Ansatz nutzt die Formel log2(a*b) = log2(a) log2(b), die sich für doppelte Zahlen zum Exponenten log2(Mantisse) vereinfacht. Die Mantisse hat einen begrenzten Bereich von 1,0 bis 2,0 und eignet sich daher für eine Polynomnäherung, um log2 (Mantisse) zu erhalten.
Genauigkeit und Präzision
Die gewünschte Genauigkeit und Die Bandbreite der Eingaben beeinflusst die Umsetzung. Die VCL von Agner Fog strebt eine hohe Präzision durch Fehlervermeidungstechniken an. Für eine schnellere Annäherung an float log() sollten Sie jedoch die Polynomimplementierung von JRF in Betracht ziehen (hier zu finden: http://jrfonseca.blogspot.ca/2008/09/fast-sse2-pow-tables-or-polynomials.html).
VCL-Algorithmus
Die Log-Float- und Double-Funktionen von VCL folgen a zweiteiliger Ansatz:
Das Endergebnis wird durch Addition des Exponenten zur Polynomnäherung erhalten. VCL enthält zusätzliche Schritte zur Minimierung von Rundungsfehlern.
Alternative Polynomnäherungen
Für eine höhere Genauigkeit können Sie VCL direkt verwenden. Für eine schnellere ungefähre log2()-Implementierung für Float sollten Sie jedoch die Portierung der SSE2-Funktion von JRF auf AVX2 mit FMA in Betracht ziehen.
Rundungsfehler vermeiden
VCL verwendet verschiedene Techniken zur Reduzierung Rundungsfehler. Dazu gehören:
Unnötige Schritte entfernen
Wenn Ihre Werte bekanntermaßen endlich und positiv sind, können Sie die Leistung erheblich verbessern, indem Sie die Prüfungen auskommentieren Unterlauf, Überlauf oder Denormal.
Weitere Informationen Lesen
Das obige ist der detaillierte Inhalt vonWie können wir log2(__m256d) in AVX2 sowohl für Intel- als auch für AMD-Prozessoren effizient implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!