Что на самом деле делает tbb::scalable_allocator в строительных блоках Intel Threading Building Block?
Это, безусловно, может быть эффективным. Я только что использовал его, чтобы сократить время выполнения приложений на 25% (и увидеть увеличение использования ЦП с ~ 200% до 350% в 4-ядерной системе), изменив один std::vector<T> на std::vector<T,tbb::scalable_allocator<T> >. С другой стороны, в другом приложении я видел, как оно удваивает и без того большое потребление памяти и отправляет вещи в город подкачки.
Собственная документация Intel не дает много информации (например, короткий раздел в конце этого Часто задаваемые вопросы). Может ли кто-нибудь сказать мне, какие трюки он использует, прежде чем я сам пойду и покопаюсь в его коде?
ОБНОВЛЕНИЕ: я впервые использую TBB 3.0 и вижу лучшее ускорение от scalable_allocator. Замена одного vector<int> на vector<int,scalable_allocator<int> > сократила время выполнения чего-либо с 85 до 35 с (Debian Lenny, Core2, с TBB 3.0 после тестирования).