英特尔TBB的Scalable_allocator如何工作?

时间:2009-03-18 10:58:35

标签: c++ multithreading stl malloc tbb

英特尔线程构建模块中的tbb::scalable_allocator实际上是做什么的?

它肯定是有效的。我刚刚使用它将应用程序的执行时间降低了25%(并且通过将单个std::vector<T>更改为{{可以看到4核系统上的CPU利用率从大约200%增加到350%) 1}}。另一方面,在另一个应用程序中,我已经看到它将已经很大的内存消耗加倍并将内容发送到交换城市。

英特尔自己的文档并没有给出太多帮助(例如,FAQ末尾的一小段内容)。在我自己去挖掘代码之前,有人能告诉我它使用了什么技巧吗?

更新:第一次使用TBB 3.0,并且从Scalable_allocator看到了我的最佳加速。将单个std::vector<T,tbb::scalable_allocator<T> >更改为vector<int>会将某些内容的运行时间从85秒减少到35秒(Debian Lenny,Core2,TBB 3.0来自测试)。

2 个答案:

答案 0 :(得分:18)

分配器上有一篇很好的论文:The Foundations for Scalable Multi-core Software in Intel Threading Building Blocks

我的经验有限:我用我的AI应用程序用tbb :: scalable_allocator重载全局new / delete。但时间档案几乎没有变化。我没有比较内存使用情况。

答案 1 :(得分:2)

您提到的解决方案针对Intel CPU进行了优化。它结合了特定的CPU机制来提高性能。

前段时间我发现了另一个非常有用的解决方案:Fast C++11 allocator for STL containers。它在VS2017(~5x)以及GCC(~7x)上略微加速STL容器。它使用内存池进行元素分配,这使得它对所有平台都非常有效。