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