Rumah > pembangunan bahagian belakang > C++ > Bolehkah Arahan SSE4.1 Menyediakan Penyelesaian Vektor untuk Pengekstrakan Alamat IPv4 yang Lebih Pantas?

Bolehkah Arahan SSE4.1 Menyediakan Penyelesaian Vektor untuk Pengekstrakan Alamat IPv4 yang Lebih Pantas?

Susan Sarandon
Lepaskan: 2024-11-15 12:19:02
asal
425 orang telah melayarinya

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

Penyelesaian Optimum untuk Mengeluarkan Alamat IPv4 daripada String

Pengenalan
Kod yang disediakan mendapatkan semula alamat IPv4 daripada seutas tali. Walaupun dioptimumkan untuk kekangan tertentu, mungkin terdapat kaedah yang lebih pantas atau alternatif untuk dipertimbangkan.

Penyelesaian Vektor
Untuk daya pemprosesan maksimum, penyelesaian tervektor menggunakan arahan SSE4.1 disyorkan.

Berikut ialah kodnya:

__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);
}
Salin selepas log masuk

Penjelasan
Penyelesaian ini bergantung pada jadual carian prakiraan, shuffleTable, yang menyusun semula bait dengan cekap kepada empat blok 4-bait. Setiap blok mewakili sebahagian daripada alamat IP. Penyelesaian ini sangat dioptimumkan untuk pemprosesan dan mencapai kelajuan mengagumkan melebihi 300 juta alamat yang diproses sesaat.

Pemulaan shuffleTable
Jadual carian shuffleTable dijana secara dinamik. Tujuannya adalah untuk menyediakan pilih atur untuk penyusunan semula.

void MyInit() {
    ...   // Code omitted for brevity
}
Salin selepas log masuk

Pengujian dan Perbandingan
Pengujian menunjukkan bahawa penyelesaian bervektor ini jauh lebih pantas daripada kod asal:

Time = 0.406   (1556701184)
Time = 3.133   (1556701184)
Salin selepas log masuk

Kesimpulan
Penyelesaian vektor ini memberikan peningkatan kelajuan yang ketara berbanding kod asal. Ia memanfaatkan arahan bervektor dan jadual carian prakiraan untuk mengoptimumkan pengekstrakan alamat IPv4, menghasilkan daya pemprosesan lebih 300 juta alamat diproses sesaat.

Atas ialah kandungan terperinci Bolehkah Arahan SSE4.1 Menyediakan Penyelesaian Vektor untuk Pengekstrakan Alamat IPv4 yang Lebih Pantas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan