Edited at

ライブラリを使ったc++高速化

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

解説されているリンク


SIMD

Intrinsic命令とか使う方法もありますが、用途に合わせてSIMD対応のライブラリを使うと楽です。