$ git clone https://github.com/microsoft/mimalloc.git
$ cd mimalloc
$ vim include/mimalloc-types.h # enable MI_STAT=2
$ mkdir build
$ cd build
$ cmake .. -D CMAKE_INSTALL_PREFIX=$HOME/local
...
$ make -j8
$ make install
-- Install configuration: "Release"
-- Installing: /home/inada-n/local/lib/mimalloc-1.0/libmimalloc.so
-- Installing: /home/inada-n/local/lib/mimalloc-1.0/libmimalloc.a
-- Installing: /home/inada-n/local/lib/mimalloc-1.0/include/mimalloc.h
-- Installing: /home/inada-n/local/lib/mimalloc-1.0/cmake/mimalloc-config.cmake
-- Installing: /home/inada-n/local/lib/mimalloc-1.0/cmake/mimalloc-config-version.cmake
-- Installing: /home/inada-n/local/lib/mimalloc-1.0/cmake/mimalloc.cmake
-- Installing: /home/inada-n/local/lib/mimalloc-1.0/cmake/mimalloc-release.cmake
-- Installing: /home/inada-n/local/lib/libmimalloc.so
-- Installing: /home/inada-n/local/lib/mimalloc-1.0/mimalloc.o
$ ./python -m pyperformance run -o pymalloc.json
$ LD_PRELOAD=$HOME/local/lib/libmimalloc.so PYTHONMALLOC=malloc ./python -m pyperformance run -o mimalloc.json --inherit-environ=LD_PRELOAD,PYTHONMALLOC
$ ./python -m pyperf compare_to pymalloc.json mimalloc.json -G --min-speed=3
Faster (10):
- spectral_norm: 199 ms +- 1 ms -> 182 ms +- 1 ms: 1.10x faster (-9%)
- mako: 23.2 ms +- 0.2 ms -> 21.6 ms +- 0.3 ms: 1.07x faster (-7%)
How to use
Install mimalloc
$ git clone https://github.com/microsoft/mimalloc.git
$ cd mimalloc
$ vim include/mimalloc-types.h # enable MI_STAT=2
$ mkdir build
$ cd build
$ cmake .. -D CMAKE_INSTALL_PREFIX=$HOME/local
...
$ make -j8
...
$ make install
-- Install configuration: "Release"
-- Installing: /home/inada-n/local/lib/mimalloc-1.0/libmimalloc.so
-- Installing: /home/inada-n/local/lib/mimalloc-1.0/libmimalloc.a
-- Installing: /home/inada-n/local/lib/mimalloc-1.0/include/mimalloc.h
-- Installing: /home/inada-n/local/lib/mimalloc-1.0/cmake/mimalloc-config.cmake
-- Installing: /home/inada-n/local/lib/mimalloc-1.0/cmake/mimalloc-config-version.cmake
-- Installing: /home/inada-n/local/lib/mimalloc-1.0/cmake/mimalloc.cmake
-- Installing: /home/inada-n/local/lib/mimalloc-1.0/cmake/mimalloc-release.cmake
-- Installing: /home/inada-n/local/lib/libmimalloc.so
-- Installing: /home/inada-n/local/lib/mimalloc-1.0/mimalloc.o
Using mimalloc on CPython
Performance
Benchmark (pyperformance)
$ ./python -m pyperformance run -o pymalloc.json
$ LD_PRELOAD=$HOME/local/lib/libmimalloc.so PYTHONMALLOC=malloc ./python -m pyperformance run -o mimalloc.json --inherit-environ=LD_PRELOAD,PYTHONMALLOC
$ ./python -m pyperf compare_to pymalloc.json mimalloc.json -G --min-speed=3
Faster (10):
- spectral_norm: 199 ms +- 1 ms -> 182 ms +- 1 ms: 1.10x faster (-9%)
- mako: 23.2 ms +- 0.2 ms -> 21.6 ms +- 0.3 ms: 1.07x faster (-7%)