문자열에서 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 주소의 일부를 나타냅니다. 이 솔루션은 처리량에 고도로 최적화되어 있으며 초당 3억 개가 넘는 주소를 처리하는 인상적인 속도를 달성합니다.
shuffleTable 초기화
shuffleTable 조회 테이블은 동적으로 생성됩니다. 그 목적은 재배열을 위한 순열을 제공하는 것입니다.
void MyInit() { ... // Code omitted for brevity }
테스트 및 비교
테스트 결과 이 벡터화된 솔루션이 원래 코드보다 훨씬 빠른 것으로 나타났습니다.
Time = 0.406 (1556701184) Time = 3.133 (1556701184)
결론
이 벡터화된 솔루션은 원본 코드에 비해 상당한 속도 향상을 제공합니다. 벡터화된 명령과 미리 계산된 조회 테이블을 활용하여 IPv4 주소 추출을 최적화하여 초당 3억 개가 넘는 주소를 처리합니다.
위 내용은 SSE4.1 명령어는 보다 빠른 IPv4 주소 추출을 위한 벡터화된 솔루션을 제공할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!