ホームページ  >  記事  >  バックエンド開発  >  SSE4.1 命令は、より高速な IPv4 アドレス抽出のためのベクトル化されたソリューションを提供できますか?

SSE4.1 命令は、より高速な IPv4 アドレス抽出のためのベクトル化されたソリューションを提供できますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-15 12:19:02345ブラウズ

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

文字列から IPv4 アドレスを抽出するための最適なソリューション

はじめに
提供されたコードは、IPv4 アドレスを文字列から取得します。文字列。特定の制約に合わせて最適化されていますが、より高速な方法や代替方法を検討する必要がある場合があります。

ベクトル化ソリューション
スループットを最大化するには、SSE4.1 命令を使用したベクトル化ソリューションをお勧めします。

コードは次のとおりです:

__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);
}

説明
このソリューションは、バイトを 4 つの 4 バイト ブロックに効率的に再配置する、事前計算されたルックアップ テーブル shuffleTable に依存しています。各ブロックは IP アドレスの一部を表します。このソリューションはスループットに関して高度に最適化されており、1 秒あたり 3 億を超えるアドレスを処理するという驚異的な速度を実現します。

shuffleTable の初期化
shuffleTable ルックアップ テーブルは動的に生成されます。その目的は、再配置のための順列を提供することです。

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

テストと比較
テストにより、このベクトル化されたソリューションは元のコードよりも大幅に高速であることがわかります:

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

結論
このベクトル化されたソリューションにより、元のコードと比較して速度が大幅に向上します。ベクトル化された命令と事前計算されたルックアップ テーブルを利用して IPv4 アドレス抽出を最適化し、1 秒あたり 3 億を超えるアドレスを処理するスループットを実現します。

以上がSSE4.1 命令は、より高速な IPv4 アドレス抽出のためのベクトル化されたソリューションを提供できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。