유니코드 검색, 50배 빨라진 StringZilla!

by DD
5개월 전
조회수 7

StringZilla는 AVX-512를 활용하여 유니코드 케이스 폴딩 규칙을 적용, ICU보다 50배 빠른 검색 속도를 구현함.

개발자는 케이스 폴딩의 중요성을 강조하며, 기존 도구들의 부정확성을 지적하고, C99, C++11, Python, Rust, Swift, Go, JavaScript 바인딩을 제공함.

커뮤니티에서는 성능에 대한 긍정적 평가와 함께, Any-Latin 변환 규칙 지원 및 ICU와의 비교에 대한 논의가 이루어짐.

AVX-512를 활용한 유니코드 케이스 폴딩

StringZilla는 AVX-512 명령어 집합을 사용하여 유니코드 케이스 폴딩 규칙을 최적화한다. 구체적으로, 1M+ 유니코드 문자를 처리하기 위해 3천 줄 이상의 AVX-512 커널을 직접 작성했다. 따라서, UTF-8 바이트를 직접 처리하여 기존 ICU보다 50배 빠른 속도를 달성하고, 정확한 검색 결과를 보장한다.

ICU와의 성능 비교 및 한계점

StringZilla는 ICU보다 월등한 성능을 제공하지만, ICU4X와 같은 다른 구현체와의 비교가 필요하다. 구체적으로, ICU의 Rust 바인딩은 케이스 폴딩 기능을 제공하지만, 부분 문자열 검색 기능은 제공하지 않는다. 반면, Python 바인딩은 부분 문자열 검색을 지원하며, ICU4C를 기반으로 한다. 따라서, 벤치마크 환경에 따라 결과가 달라질 수 있다.

확장 가능한 유니코드 변환 규칙

StringZilla는 Any-Latin, Latin-ASCII와 같은 추가 변환 규칙을 지원하도록 확장될 수 있다. 구체적으로, 키릴 문자라틴 문자로 변환하여 검색하는 기능을 구현할 수 있다. 따라서, 다국어 지원을 강화하고, 다양한 언어 환경에서 사용자 경험을 개선할 수 있다. 결과적으로, 검색 정확도를 높이고, 더 많은 사용자를 확보할 수 있다.

Full Unicode Search at 50× ICU Speed with AVX‑512