Replaces the global Rayon pool with per-NUMA-node thread pools that pin worker threads to their respective nodes, leveraging Linux first-touch allocation to reduce cross-NUMA memory contention and improve cache locality. Integrates the `hwlocality` crate with a vendored build, includes graceful fallbacks for single-socket or non-Linux systems, and updates dependency constraints. Also adds installation and architecture documentation, and corrects parallelism detection in the partitioner.
1.7 KiB
Installation
Prerequisites
Rust toolchain
obikmer requires Rust 1.85 or later (edition 2024). Install or update via rustup:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
rustup update stable
C build environment (required for hwloc)
obikmer embeds hwloc (Hardware Locality) for NUMA-aware thread placement on multi-socket machines. hwloc is built from source at compile time via the vendored feature of the hwlocality crate. This requires a standard C build environment.
Linux (Debian/Ubuntu)
apt install build-essential automake libtool autoconf pkg-config
Linux (RHEL/Rocky/AlmaLinux)
dnf install gcc make automake libtool autoconf pkgconfig
HPC clusters
Most HPC clusters provide these tools via the module system:
module load gcc automake libtool autoconf
If in doubt, check whether autoreconf --version and libtool --version return successfully.
macOS
brew install automake libtool autoconf pkg-config
Building
git clone <repository-url>
cd obikmer/src
cargo build --release
The compiled binary is at target/release/obikmer.
NUMA support
NUMA-aware thread placement is active automatically on multi-socket Linux machines (detected at runtime via hwloc). No special build flag is required — the detection is built in and falls back gracefully to the single-pool adaptive strategy on:
- macOS (Apple Silicon, unified memory)
- single-socket Linux machines
- any system where hwloc reports only one NUMA node
Verifying the installation
obikmer --help