tbb::scalable_allocator
是什么意思?在英特尔线程构建模块中实际上做了什么?
它肯定是有效的。我刚刚使用它通过更改单个 std::vector<T>
将应用程序的执行时间减少了 25%(并且看到在 4 核系统上 CPU 利用率从 ~200% 增加到 350%)至std::vector<T,tbb::scalable_allocator<T> >
.另一方面,在另一个应用程序中,我看到它使已经很大的内存消耗翻了一番,并将东西发送到交换城市。
英特尔自己的文档并没有提供很多内容(例如,本 FAQ 末尾的一小部分)。在我自己深入研究它的代码之前,谁能告诉我它使用了什么技巧?
更新:刚刚第一次使用 TBB 3.0,并且看到了从可扩展分配器中获得的最佳加速。换单vector<int>
到 vector<int,scalable_allocator<int> >
将某些东西的运行时间从 85 秒减少到 35 秒(Debian Lenny,Core2,TBB 3.0 正在测试中)。
最佳答案
有一篇关于分配器的好论文:The Foundations for Scalable Multi-core Software in Intel Threading Building Blocks
我的经验有限:我为我的 AI 应用程序使用 tbb::scalable_allocator 重载了全局 new/delete。但时间分布几乎没有变化。不过我没有比较内存使用情况。
关于c++ - 英特尔 TBB 的可扩展分配器如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/657783/