Heim > Artikel > Backend-Entwicklung > So laden Sie 8 Zeichen aus dem Speicher in eine __m256-Variable: Drei effiziente Ansätze
Problem:
Sie möchten einen Algorithmus optimieren für Gaußsche Unschärfe auf einem Bild, indem ein Float-Puffer[8] durch eine intrinsische __m256-Variable ersetzt wird, um die Leistung zu verbessern.
Lösung 1: Verwendung von PMOVZX und VCVTDQ2PS von AVX2
Dies Der Ansatz verwendet PMOVZX, um 8-Bit-Zeichen in 32-Bit-Ganzzahlen zu erweitern und sie dann über VCVTDQ2PS in Gleitkommawerte umzuwandeln. Im Einzelnen:
VPMOVZXBD ymm0, [rsi] ; Byte to DWord VCVTDQ2PS ymm0, ymm0 ; convert to packed float
Lösung 2: Broadcast Load und Shuffling kombinieren
Diese Strategie beinhaltet die Durchführung eines 128-Bit-Broadcast-Ladens, um einen 64-Bit-Shuffle-Steuervektor zu erhalten für vpshufb, was eine Nullerweiterung und eine gepackte Float-Konvertierung ermöglicht. Es bietet einen hohen Durchsatz, da keine zusätzlichen Shuffle-Anweisungen erforderlich sind.
VPMOVSXBD xmm0, [rsi] ; Byte to DWord VPMOVSXBD xmm1, [rsi+4] VINSERTF128 ymm0, ymm0, xmm1, 1 VCVTDQ2PS ymm0, ymm0 ; convert to packed float.
Lösung 3: Umgang mit AVX1-Einschränkungen
Wenn AVX2 nicht vorhanden ist, sind die folgenden Schritte erforderlich kann eingesetzt werden:
VPMOVZXBD xmm0, [rsi] VPMOVZXBD xmm1, [rsi+4] VINSERTF128 ymm0, ymm0, xmm1, 1 ; put the 2nd load of data into the high128 of ymm0 VCVTDQ2PS ymm0, ymm0 ; convert to packed float.
Zusätzliche Hinweise:
Das obige ist der detaillierte Inhalt vonSo laden Sie 8 Zeichen aus dem Speicher in eine __m256-Variable: Drei effiziente Ansätze. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!