30

tbb::scalable_allocatorIntel Threading Building Blocks 中的实际作用是什么?

它当然可以有效。我刚刚用它来减少 25% 的应用程序执行时间(并看到 CPU 利用率在 4 核系统上从 ~200% 增加到 350% std::vector<T>std::vector<T,tbb::scalable_allocator<T> >。另一方面,在另一个应用程序中,我看到它使已经很大的内存消耗翻了一番,并将东西发送到交换城市。

英特尔自己的文档并没有提供太多内容(例如,本常见问题解答末尾的一小部分 )。在我自己深入研究它的代码之前,谁能告诉我它使用了什么技巧?

更新:第一次使用 TBB 3.0,并从可扩展分配器中看到了我最好的加速。将单个更改vector<int>vector<int,scalable_allocator<int> >减少某些东西的运行时间从 85 秒到 35 秒(Debian Lenny,Core2,TBB 3.0 来自测试)。

4

2 回答 2

20

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

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

于 2009-03-19T06:22:33.287 回答
3

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

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

于 2017-11-05T15:03:13.077 回答