> 백엔드 개발 > C++ > SSE4.1 명령어는 보다 빠른 IPv4 주소 추출을 위한 벡터화된 솔루션을 제공할 수 있습니까?

SSE4.1 명령어는 보다 빠른 IPv4 주소 추출을 위한 벡터화된 솔루션을 제공할 수 있습니까?

Susan Sarandon
풀어 주다: 2024-11-15 12:19:02
원래의
425명이 탐색했습니다.

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 주소의 일부를 나타냅니다. 이 솔루션은 처리량에 고도로 최적화되어 있으며 초당 3억 개가 넘는 주소를 처리하는 인상적인 속도를 달성합니다.

shuffleTable 초기화
shuffleTable 조회 테이블은 동적으로 생성됩니다. 그 목적은 재배열을 위한 순열을 제공하는 것입니다.

void MyInit() {
    ...   // Code omitted for brevity
}
로그인 후 복사

테스트 및 비교
테스트 결과 이 ​​벡터화된 솔루션이 원래 코드보다 훨씬 빠른 것으로 나타났습니다.

Time = 0.406   (1556701184)
Time = 3.133   (1556701184)
로그인 후 복사

결론
이 벡터화된 솔루션은 원본 코드에 비해 상당한 속도 향상을 제공합니다. 벡터화된 명령과 미리 계산된 조회 테이블을 활용하여 IPv4 주소 추출을 최적화하여 초당 3억 개가 넘는 주소를 처리합니다.

위 내용은 SSE4.1 명령어는 보다 빠른 IPv4 주소 추출을 위한 벡터화된 솔루션을 제공할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿