Heim  >  Artikel  >  Backend-Entwicklung  >  Können SSE4.1-Anweisungen eine vektorisierte Lösung für eine schnellere IPv4-Adressextraktion bieten?

Können SSE4.1-Anweisungen eine vektorisierte Lösung für eine schnellere IPv4-Adressextraktion bieten?

Susan Sarandon
Susan SarandonOriginal
2024-11-15 12:19:02345Durchsuche

Can SSE4.1 Instructions Provide a Vectorized Solution for Faster IPv4 Address Extraction?

Optimale Lösung zum Extrahieren einer IPv4-Adresse aus einer Zeichenfolge

Einführung
Der bereitgestellte Code ruft eine IPv4-Adresse ab eine Zeichenfolge. Obwohl für bestimmte Einschränkungen optimiert, sind möglicherweise schnellere oder alternative Methoden zu berücksichtigen.

Vektorisierte Lösung
Für maximalen Durchsatz wird eine vektorisierte Lösung mit SSE4.1-Anweisungen empfohlen.

Hier ist der Code:

__m128i shuffleTable[65536];    //can be reduced 256x times

UINT32 MyGetIP(const char *str) {
    __m128i input = _mm_lddqu_si128((const __m128i*)str);   //"192.167.1.3"
    ...   // Code omitted for brevity
    return _mm_extract_epi32(prod, 0);
}

Erklärung
Diese Lösung basiert auf einer vorberechneten Nachschlagetabelle, shuffleTable, die Bytes effizient in vier 4-Byte-Blöcke neu anordnet. Jeder Block stellt einen Teil der IP-Adresse dar. Die Lösung ist stark auf den Durchsatz optimiert und erreicht beeindruckende Geschwindigkeiten von über 300 Millionen verarbeiteten Adressen pro Sekunde.

Initialisierung von shuffleTable
Die ShuffleTable-Nachschlagetabelle wird dynamisch generiert. Sein Zweck besteht darin, eine Permutation für die Neuanordnung bereitzustellen.

void MyInit() {
    ...   // Code omitted for brevity
}

Tests und Vergleich
Tests zeigen, dass diese vektorisierte Lösung deutlich schneller ist als der Originalcode:

Time = 0.406   (1556701184)
Time = 3.133   (1556701184)

Fazit
Diese vektorisierte Lösung bietet eine erhebliche Geschwindigkeitsverbesserung im Vergleich zum Originalcode. Es nutzt vektorisierte Anweisungen und eine vorberechnete Nachschlagetabelle, um die Extraktion von IPv4-Adressen zu optimieren, was zu einem Durchsatz von über 300 Millionen verarbeiteten Adressen pro Sekunde führt.

Das obige ist der detaillierte Inhalt vonKönnen SSE4.1-Anweisungen eine vektorisierte Lösung für eine schnellere IPv4-Adressextraktion bieten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn