All Projects → LLNL → metall

LLNL / metall

Licence: Apache-2.0, Unknown licenses found Licenses found Apache-2.0 LICENSE-APACHE Unknown LICENSE-MIT
Persistent memory allocator for data-centric analytics

Programming Languages

C++
36643 projects - #6 most used programming language
CMake
9771 projects
shell
77523 projects
c
50402 projects - #5 most used programming language

Projects that are alternatives of or similar to metall

amr-wind
AMReX-based structured wind solver
Stars: ✭ 46 (+0%)
Mutual labels:  ecp, exascale-computing
o1heap
Constant-complexity deterministic memory allocator (heap) for hard real-time high-integrity embedded systems
Stars: ✭ 119 (+158.7%)
Mutual labels:  allocator, memory-allocator
MemoryAllocator.KanameShiki
Fast multi-threaded memory allocator
Stars: ✭ 73 (+58.7%)
Mutual labels:  allocator, memory-allocator
nalu-wind
Solver for wind farm simulations targeting exascale computational platforms
Stars: ✭ 85 (+84.78%)
Mutual labels:  ecp, exascale-computing
MemoryPool
simple memory pool / thread safe / minimized context switching / Memory managed in 4 levels / Requirements(Windows xp~ / Visualstudio 2015)
Stars: ✭ 14 (-69.57%)
Mutual labels:  allocator, memory-allocator
buddy alloc
A single header buddy memory allocator for C
Stars: ✭ 46 (+0%)
Mutual labels:  allocator, memory-allocator
llpl
Low Level Persistence Library
Stars: ✭ 95 (+106.52%)
Mutual labels:  persistent-memory
buddy system allocator
A buddy system allocator in pure Rust.
Stars: ✭ 40 (-13.04%)
Mutual labels:  allocator
keypad-firmware
ECP keypad implementation for Arduino/AVR
Stars: ✭ 35 (-23.91%)
Mutual labels:  ecp
EMsoft
Public EMsoft repository
Stars: ✭ 44 (-4.35%)
Mutual labels:  ecp
book
Writing Interpreters in Rust: a Guide
Stars: ✭ 150 (+226.09%)
Mutual labels:  allocator
alloc-cortex-m
A heap allocator for Cortex-M processors
Stars: ✭ 139 (+202.17%)
Mutual labels:  allocator
pDPM
Passive Disaggregated Persistent Memory at USENIX ATC 2020.
Stars: ✭ 38 (-17.39%)
Mutual labels:  persistent-memory
mimalloc-rust
The Best and Highest-Leveled and Newest bingding for MiMalloc Ever Existed in Rust
Stars: ✭ 30 (-34.78%)
Mutual labels:  allocator
mulle-allocator
🔄 Flexible C memory allocation scheme
Stars: ✭ 77 (+67.39%)
Mutual labels:  allocator
duma
duma: Detect Unintended Memory Access (D.U.M.A.) - A Red-Zone memory allocator
Stars: ✭ 63 (+36.96%)
Mutual labels:  allocator
poireau
Poireau: a sampling allocation debugger
Stars: ✭ 76 (+65.22%)
Mutual labels:  allocator
smalloc
SMalloc -- a *static* memory allocator.
Stars: ✭ 22 (-52.17%)
Mutual labels:  memory-allocator
slabdbg
GDB plug-in that helps exploiting the Linux kernel's SLUB allocator
Stars: ✭ 55 (+19.57%)
Mutual labels:  allocator
wasm
fast wasm modules
Stars: ✭ 37 (-19.57%)
Mutual labels:  allocator

CI Test Documentation Status Deploy API Doc

Metall: A Persistent Memory Allocator for Data-Centric Analytics

  • Provides rich memory allocation interfaces for C++ applications that use persistent memory devices to persistently store heap data on such devices.
  • Creates files in persistent memory and maps them into virtual memory space so that users can access the mapped region just as normal memory regions allocated in DRAM.
  • Actual persistent memory hardware could be any non-volatile memory (NVM) with file system support.
  • To provide persistent memory allocation, Metall employs concepts and APIs developed by Boost.Interprocess.
  • Supports multi-thread
  • Also provides a space-efficient snapshot/versioning, leveraging reflink copy mechanism in filesystem. In case reflink is not supported, Metall automatically falls back to regular copy.
  • See details: Metall overview slides.

Getting Started

Metall consists of only header files and requires some header files in Boost C++ Libraries.

All core files exist under metall/include/metall/.

Required

  • Boost C++ Libraries 1.64 or more.
    • Build is not required; needs only their header files.
    • To use JSON containers in Metall, Boost C++ Libraries 1.75 or more is required.
  • C++17 compiler
    • Tested with GCC 8.1 or more; however, 8.3 or more is recommended due to early implementation of the C++ Filesystem library.

Build

To build your program with Metall, all you have to do is just setting include paths such as '-I' or CPLUS_INCLUDE_PATH.

For example,

# Download Boost (Boost C++ Libraries 1.64 or more is required)
# One can skip this step if Boost is already available.
wget https://boostorg.jfrog.io/artifactory/main/release/1.78.0/source/boost_1_78_0.tar.gz
tar xvf boost_1_78_0.tar.gz
export BOOST_ROOT=$PWD/boost_1_78_0

git clone https://github.com/LLNL/metall
export METALL_INCLUDE=$PWD/metall/include

g++ -std=c++17 your_program.cpp -lstdc++fs -I${BOOST_ROOT} -I${METALL_INCLUDE}

Unofficial Support For Clang

Clang can be used instead of GCC to build Metall. However, we haven't tested it intensively. Also, Boost C++ Libraries 1.69 or more may be required if one wants to build Metall with Clang + CUDA.

Metall with Spack

Metall package is also available on Spack.

As Metall depends on Boost C++ Libraries, Spack also installs a proper version of Boost C++ Libraries automatically, if needed.

# Install Metall and Boost C++ Libraries
spack install metall

# Sets environment variables: BOOST_ROOT and METALL_ROOT.
# Boost C++ Libraries and Metall are installed at the locations, respectively.
spack load metall

# Build a program that uses Metall
# Please note that one has to put 'include' at the end of BOOST_ROOT and METALL_ROOT
g++ -std=c++17 your_program.cpp -lstdc++fs -I${BOOST_ROOT}/include -I${METALL_ROOT}/include

Use Metall from Another CMake Project

To download and/or link Metall package from a CMake project, see example CMake files placed here.

Build Example Programs

Metall repository contains some example programs under example directory. One can use CMake to build the examples. For more details, see a page here.

Documentations

Generate API documentation using Doxygen

A Doxygen configuration file is here.

To generate API document:

cd metall
mkdir build_doc
cd build_doc
doxygen ../docs/Doxyfile.in

Publication

Keita Iwabuchi, Karim Youssef, Kaushik Velusamy, Maya Gokhale, Roger Pearce,
Metall: A persistent memory allocator for data-centric analytics,
Parallel Computing, 2022, 102905, ISSN 0167-8191, https://doi.org/10.1016/j.parco.2022.102905.

About

Contact

License

Metall is distributed under the terms of both the MIT license and the Apache License (Version 2.0). Users may choose either license, at their option.

All new contributions must be made under both the MIT and Apache-2.0 licenses.

See LICENSE-MIT, LICENSE-APACHE, NOTICE, and COPYRIGHT for details.

SPDX-License-Identifier: (Apache-2.0 OR MIT)

Release

LLNL-CODE-768617

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].