GN⁺ 2025-03-13 | parent | ★ favorite | on: Krep - grep 보다 5배 빠른 문자열 검색 도구(davidesantangelo.github.io)
Hacker News 의견
  • CPU 기능(예: AVX2)은 런타임에서 감지되어야 함

    • ifdef는 컴파일러가 지원하는지 빌드 타임에만 감지함
    • 프로그램은 컴파일러가 AVX2를 지원할 때만 컴파일됨
    • 런타임에서 CPU가 AVX2를 지원하는지 확인해야 함
    • 프로젝트에서 "구성 시간에 CPUID 플래그와 실제 명령어 실행 테스트를 통해 감지"라는 부분이 있음
    • SSE4.2와 AVX2 명령어를 자동으로 활용할 수 있음
  • krep 프로젝트에 대한 블로그 게시물 소개

    • 홈페이지에서 ripgrep보다 빠르다고 나옴
    • 전체 ripgrep 벤치마크와 비교해보고 싶음
    • madvise() 관련 오류 발생, Makefile의 CFLAGS에 '-D_GNU_SOURCE' 추가 필요
  • 테스트 케이스의 중요성

    • 멀티스레드 파일 검색에서 청크 경계 문제는 신경 쓰임
    • 단순 검색에 새로운 엣지 케이스를 도입함
    • 파일에 한 글자를 추가하면 매치가 깨질 수 있음
  • 빌드 문제 해결 후 벤치마크 결과

    • 첫 번째 벤치마크 시도에서 속도가 느림
    • ripgrep이 krep보다 1.52배 빠름
  • 매치 빈도가 높은 벤치마크 시도

    • krep이 ripgrep보다 3.40배 빠름
    • 매치 수가 크게 차이남
    • krep이 정확한 결과를 제공하지 않을 수 있음
  • 추가 벤치마크 시도

    • ripgrep이 특정 패턴을 찾는 데 더 빠름
    • krep이 매치를 찾지 못함
  • ripgrep의 알고리즘과 메모리 맵 사용

    • ripgrep은 고급 서브스트링 검색 알고리즘 사용
    • 메모리 맵과 병렬 처리 사용
    • krep도 병렬 처리 사용, 단일 파일 검색 시 멀티스레드 사용
  • 벤치마크 결과에 대한 의문

    • ripgrep이 5GB 파일에서 패턴 검색 시 40초 이상 걸린다는 것은 이상함
    • OP에게 벤치마크 재현 방법 요청
  • krep의 이름에 대한 의견

    • grep의 "re"는 정규 표현식을 의미함
    • krep은 정규 표현식을 사용하지 않으므로 이름이 잘못된 것일 수 있음