Skip to content
Snippets Groups Projects

SystemTools: Use unordered_map for path caches

Merged Clemens Wasser requested to merge clemenswasser/kwsys:path-case-unordered-map into master

By using a custom Fnva1 hash which hashes the lowercase chars and a custom equal comparator, we can use a std::unordered_map instead of the std::map for the file path caches. The Microsoft STL uses the same hash function, so the only difference is the tolower transformation of the chars.

This fixes a part of cmake/cmake#24113 (@jonesmz can you maybe post the speedup for your large project?)

This yields a nice speedup even for configuring CMake itself:

Old:
Benchmark 1: .\build-msvc-release\bin\cmake.exe -G Ninja -B build-perf -DCMAKE_BUILD_TYPE=Debug
  Time (mean ± σ):     18.526 s ±  0.162 s    [User: 0.001 s, System: 0.008 s]
  Range (min … max):   18.297 s … 18.880 s    10 runs

New:
Benchmark 1: .\build-msvc-release\bin\cmake.exe -G Ninja -B build-perf -DCMAKE_BUILD_TYPE=Debug
  Time (mean ± σ):     18.259 s ±  0.114 s    [User: 0.003 s, System: 0.004 s]
  Range (min … max):   18.100 s … 18.527 s    10 runs

Merge request reports

Loading
Loading

Activity

Filter activity
  • Approvals
  • Assignees & reviewers
  • Comments (from bots)
  • Comments (from users)
  • Commits & branches
  • Edits
  • Labels
  • Lock status
  • Mentions
  • Merge request status
  • Tracking
  • Loading
  • Loading
  • Loading
  • Loading
  • Loading
  • Loading
  • Loading
  • Loading
  • Loading
  • Loading
Please register or sign in to reply
Loading