c++ - 英特尔 TBB 的可扩展分配器如何工作?

标签 c++ multithreading stl malloc tbb

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/

相关文章:

c++ - 在第二个 vector 中查找 vector 元素

C++ 从堆栈读取 char 到字符串结果为 "Unrecognized enum"

c++ - STL/标准 C++ 容器的最佳效率如何?

c++ - 尝试调用数组上的函数时抛出 "Array type ' int [4 ]' is not assignable"错误

multithreading - Qt线程调用问题

c++ - 是否可以在 C++ 中检查 (this == NULL) 以终止分离线程的执行?

android - 从ndk中的不同线程调用java方法

c++ - 下面的字符串循环缓冲区实现有哪些可能的改进?

c++ - 字符串长度不正确

c++ - SEGFAULT 使用 MySQL/C++ 连接器获取结果