TBB3.0 scalable_allocator vs. TCMalloc
Intel TBB 3.0 の exampels を見ていると、scalable_allocator と stdmalloc の性能比較ができるサンプル (exmaples/task/tree_sum) があったので、ついでに Google 謹製 tcmalloc とも比較してみた。
比較に使った PC のスペックは CPU: Core i5 750@2.67GHz、メモリ: 2GB、gcc: 4.4.3。
5回の平均は以下の通り。
// TBB3.0 scalable_allocator Tree creation using TBB scalable allocator half created serially: time = 173.4 msec half done in parallel: time = 45.7 msec Calculations: SerialSumTree: time = 46.4 msec, sum=7.01275e+08 SimpleParallelSumTree: time = 14.2 msec, sum=7.01275e+08 OptimizedParallelSumTree: time = 12.8 msec, sum=7.01275e+08
// TCMalloc Tree creation using standard operator new half created serially: time = 225.0 msec half done in parallel: time = 165.7 msec Calculations: SerialSumTree: time = 64.4 msec, sum=7.01275e+08 SimpleParallelSumTree: time = 20.1 msec, sum=7.01275e+08 OptimizedParallelSumTree: time = 19.7 msec, sum=7.01275e+08
// std::malloc Tree creation using TBB scalable allocator half created serially: time = 304.1 msec half done in parallel: time = 265.7 msec Calculations: SerialSumTree: time = 48.1 msec, sum=7.01275e+08 SimpleParallelSumTree: time = 16.5 msec, sum=7.01275e+08 OptimizedParallelSumTree: time = 15.5 msec, sum=7.01275e+08
結果を表にまとめるとこんな感じ。
scalable_allocator | TCMalloc | std::malloc | |
Tree creation (serial) | 1.00 (173.4 ms) |
1.30 (225.0 ms) |
1.75 (304.1 ms) |
Tree creation (parallel) | 1.00 (45.7 ms) |
3.63 (165.7 ms) |
5.81 (265.7 ms) |
SerialSumTree | 1.00 (46.4 ms) |
1.39 (64.4 ms) |
1.04 (48.1 ms) |
SimpleParallelSumTree | 1.00 (14.2 ms) |
1.42 (20.1 ms) |
1.16 (16.5 ms) |
OptimizedParallelSumTree | 1.00 (12.8 ms) |
1.54 (19.7 ms) |
1.21 (15.5 ms) |
ライブラリ自体が scalable_allocator を前提としているからか、scalable_allocator が一番高速という結果になった。
TCMalloc も std::malloc と比べればかなり健闘しているが、それでも scalable_allocator には及ばなかった。
この結果を見る限り、TBB3.0 を使うのであれば、そのまま scalable_allocator を使うのが無難な選択と言えるかな。
Intel が出してる論文にもっと詳しい比較が載っているので、気になる方はどうぞ。
http://download.intel.com/technology/itj/2007/v11i4/5-foundations/5-Foundations_for_Scalable_Multi-core_Software.pdf