Was bedeutet die tbb::scalable_allocator
in Intel Threading Building Blocks eigentlich unter der Haube?
Es kann sicherlich effektiv sein. Ich habe es gerade verwendet, um die Ausführungszeit einer App um 25 % zu reduzieren (und eine Erhöhung der CPU-Auslastung von ~ 200 % auf 350 % auf einem 4-Kern-System zu sehen), indem ich eine einzelne geändert habe std::vector<T>
zu std::vector<T,tbb::scalable_allocator<T> >
. Auf der anderen Seite habe ich in einer anderen App gesehen, dass es einen bereits großen Speicherverbrauch verdoppelt und Dinge nach Swap City schickt.
Intels eigene Dokumentation verrät nicht viel (zB ein kurzer Abschnitt am Ende davon FAQ). Kann mir jemand sagen, welche Tricks es verwendet, bevor ich selbst in seinen Code eintauche?
AKTUALISIEREN: Ich benutze gerade TBB 3.0 zum ersten Mal und habe meine bisher beste Beschleunigung von skalierbar_allocator gesehen. Single wechseln vector<int>
zu einem vector<int,scalable_allocator<int> >
reduzierte die Laufzeit von etwas von 85s auf 35s (Debian Lenny, Core2, mit TBB 3.0 aus dem Test).