Maison > développement back-end > C++ > Les instructions SSE4.1 peuvent-elles fournir une solution vectorisée pour une extraction plus rapide des adresses IPv4 ?

Les instructions SSE4.1 peuvent-elles fournir une solution vectorisée pour une extraction plus rapide des adresses IPv4 ?

Susan Sarandon
Libérer: 2024-11-15 12:19:02
original
424 Les gens l'ont consulté

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

Solution optimale pour extraire l'adresse IPv4 d'une chaîne

Introduction
Le code fourni récupère une adresse IPv4 de une chaîne. Bien qu'optimisées pour certaines contraintes, il peut y avoir des méthodes plus rapides ou alternatives à envisager.

Solution vectorisée
Pour un débit maximal, une solution vectorisée utilisant les instructions SSE4.1 est recommandée.

Voici le 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);
}
Copier après la connexion

Explication
Cette solution repose sur une table de recherche précalculée, shuffleTable, qui réorganise efficacement les octets en quatre blocs de 4 octets. Chaque bloc représente une partie de l'adresse IP. La solution est hautement optimisée pour le débit et atteint des vitesses impressionnantes de plus de 300 millions d'adresses traitées par seconde.

Initialisation de shuffleTable
La table de recherche shuffleTable est générée dynamiquement. Son objectif est de fournir une permutation pour le réarrangement.

void MyInit() {
    ...   // Code omitted for brevity
}
Copier après la connexion

Tests et comparaison
Les tests montrent que cette solution vectorisée est nettement plus rapide que le code original :

Time = 0.406   (1556701184)
Time = 3.133   (1556701184)
Copier après la connexion

Conclusion
Cette solution vectorisée apporte une amélioration substantielle de la vitesse par rapport à l'originale code. Il exploite des instructions vectorisées et une table de recherche précalculée pour optimiser l'extraction d'adresses IPv4, ce qui entraîne un débit de plus de 300 millions d'adresses traitées par seconde.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal