C++でコードを書いていて、高速化したいときに使うライブラリをまとめました。
tcmalloc, jemalloc, nedmalloc
malloc
の置き換えによる高速化です。
以下のように実行することで、malloc
が置き換えられて実行されます。
LD_PRELOAD=/usr/lib/libtcmalloc.so ./exefile
実行ファイルによるかもしれませんが、tcmalloc
が1番良い気がします。
2019/6/26追記
Microsoftから新たにmimallocがリリースされました。
試してませんがメモリ、パフォーマンスが更に良くなっているみたいですね。
google::dense_hash_map
tcmalloc
に引き続いてgoogleのライブラリになりますが、Hash Mapを使う際の高速化です。ここで様々なHash Mapを用いた際のベンチマークテストの結果があるのですが、実行時間ではかなり速いです。
コンストラクタ呼び出し後にempty_key
をセットする必要があり、無効なキーを作りづらいときは使いづらいです。
boost::fast_pool_allocator
Allocatorをメモリプールを用いたものにして高速化する方法です。
std::vector<int, boost::fast_pool_allocator<int> > v;
OpenMP
解説されているリンク
- http://tech.ckme.co.jp/openmp.shtml
- http://www.cc.u-tokyo.ac.jp/support/kosyu/03/kosyu-openmp_c.pdf
- http://www.nag-j.co.jp/openMP/
SIMD
Intrinsic命令とか使う方法もありますが、用途に合わせてSIMD対応のライブラリを使うと楽です。
- eigen 行列演算ライブラリ
- Boost.SIMD SIMD命令の抽象化
- libsimdpp
- Vc