Logarithmische Berechnungen sind in verschiedenen wissenschaftlichen und technischen Anwendungen unerlässlich. In diesem Artikel wird die Implementierung einer effizienten log2()-Funktion für 4-Element-Gleitkommavektoren mit doppelter Genauigkeit unter Verwendung von Advanced Vector Extensions 2 (AVX2) untersucht.
Intel's Die Scalable Vector Math Library (SVML) bietet eine intrinsische Funktion __m256d _mm256_log2_pd (__m256d a) zum Ausführen von Log2-Operationen an 4-Bit-Vektoren. Diese intrinsische Funktion ist jedoch nur in Intel-Compilern verfügbar und hat Berichten zufolge Leistungseinbußen auf AMD-Prozessoren.
Um log2() zu implementieren, ohne auf Compiler-spezifische intrinsische Funktionen angewiesen zu sein, können wir dies tun Nutzen Sie polynomiale Approximationen. Wir können log2(x) als eine um x = 1 erweiterte Taylor-Reihe ausdrücken, oder genauer gesagt, wir können mehrere Polynomterme verwenden, um log2(Mantisse) im Bereich von [1,0, 2,0] anzunähern.
Die folgende C-Implementierung stellt eine hocheffiziente log2()-Funktion für 4-Bit-Vektoren mit doppelter Genauigkeit unter Verwendung von AVX2 und einem benutzerdefinierten Polynom bereit Näherung:
__m256d __vectorcall Log2(__m256d x) { // Extract exponent and normalize it // Calculate t=(y-1)/(y+1) and t**2 // Calculate log2(y) and add exponent return log2_x; }
Die verwendete Näherungsformel kann wie folgt dargestellt werden:
Die Polynomkoeffizienten wurden angepasst, um das Maximum zu minimieren absoluter Fehler über den Bereich [1,0, 2,0].
Benchmarks zeigen, dass diese Implementierung sowohl std::log2() als auch std::log() deutlich übertrifft und etwa die vierfache Leistung von std::log2() erreicht.
Die Genauigkeit der Implementierung kann durch Hinzufügen weiterer Polynomterme angepasst werden. Eine Erhöhung der Polynomordnung erhöht jedoch die Anzahl der Gleitkommaoperationen und verringert möglicherweise die Leistung.
Die bereitgestellte AVX2-Implementierung von log2() bietet eine hohe Effizienz und Leistung für vektorisierte logarithmische Berechnungen . Durch die Nutzung benutzerdefinierter Polynomnäherungen bietet diese Funktion eine portable und effiziente Lösung für log2-Operationen an 4-Bit-Gleitkommavektoren mit doppelter Genauigkeit.
Das obige ist der detaillierte Inhalt vonWie kann AVX2 verwendet werden, um log2(__m256d) effizient zu implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!