Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Optimize string memory #48

Merged
merged 14 commits into from
Aug 31, 2022
Merged

Optimize string memory #48

merged 14 commits into from
Aug 31, 2022

Conversation

leethomason
Copy link
Contributor

@leethomason leethomason commented Aug 29, 2022

Description

This PR moves the string pools from being per-thread (thread_local) to static & global.

With @fosterbrereton FAH PR, ORC is now using much less memory, and the strings are again big contributors to the memory allocation. It was worth re-visiting. Careful use of a tbb::unordered_map and a mutex array (a trick we use elsewhere in the code) allows us to store strings uniquely.

Having unique strings 1) saves memory and 2) allows equality to be determined by simple pointer comparison. (Which means you don't even have to load the string itself into cache.)

Comparing main to this branch:
memory for 20.3 GB to 12.6 GB. (About 8 GB savings)
runtime from 62s to 53s. And that's on a 128GB machine where it doesn't thrash - if the change gets a machine below the threshold for thrashing, it helps even more.

How Has This Been Tested?

Tested the output to make sure it is stable. No issues found.

src/string_pool.cpp Outdated Show resolved Hide resolved
@leethomason leethomason marked this pull request as ready for review August 31, 2022 18:45
Copy link
Contributor

@fosterbrereton fosterbrereton left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks amazing! Thanks for revisiting this area and continuing to improve upon it.

@leethomason leethomason merged commit 0dba283 into main Aug 31, 2022
@leethomason leethomason deleted the lthomaso/opt-string-mem branch August 31, 2022 22:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants