Qu'est-ce que le tbb::scalable_allocator
dans les blocs de construction Intel Threading fait sous le capot?Comment le scalable_allocator d'Intel TBB fonctionne-t-il?
Il peut certainement être efficace. Je viens de l'utiliser pour réduire de 25% le temps d'exécution d'une application (et voir une augmentation de l'utilisation du processeur de ~ 200% à 350% sur un système à 4 cœurs) en changeant un std::vector<T>
en std::vector<T,tbb::scalable_allocator<T> >
. D'autre part, dans une autre application, je l'ai vu doubler une consommation de mémoire déjà importante et envoyer des choses à échanger la ville.
La documentation d'Intel ne donne pas beaucoup (par exemple une courte section à la fin de ce FAQ). Quelqu'un peut-il me dire quelles astuces il utilise avant d'aller creuser dans son code moi-même?
MISE À JOUR: Utilisation de TBB 3.0 pour la première fois, et meilleure accélération de la part de scalable_allocator. Changer un seul vector<int>
en vector<int,scalable_allocator<int> >
a réduit l'exécution de quelque chose de 85s à 35s (Debian Lenny, Core2, avec TBB 3.0 de testing).
Merci! L'article contient exactement le type d'information que je cherchais. – timday
Le lien d'origine est maintenant disparu, mais CiteSeer a le format PDF: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.71.8289 –
Pour ajouter un point de données: dans mon application particulière, contention allocator accéléré stopped à environ 15 threads, passé qu'il tuerait toute l'accélération et par 40 ce serait beaucoup plus lent que le fil simple. Avec scalable_allocator utilisé dans les noyaux internes du thread, le goulot d'étranglement a disparu et la mise à l'échelle attendue est revenue. (la machine a 40 cœurs physiques). – Adam