Che cosa fa realmente il tbb::scalable_allocator
in Intel Threading Building Blocks?Come funziona scalable_allocator di Intel TBB?
Può essere certamente efficace. L'ho appena usato per ridurre del 25% il tempo di esecuzione di un'app (e vedere un aumento dell'utilizzo della CPU da circa il 200% al 350% su un sistema a 4 core) modificando un singolo std::vector<T>
a std::vector<T,tbb::scalable_allocator<T> >
. D'altra parte in un'altra app l'ho visto raddoppiare un consumo di memoria già grande e inviare cose da scambiare città.
La documentazione di Intel non lascia molto spazio (ad esempio una breve sezione alla fine di questo FAQ). Qualcuno può dirmi quali trucchi utilizza prima di andare a scavare da solo nel suo codice?
UPDATE: Solo utilizzando TBB 3.0 per la prima volta, e ho visto la mia migliore velocità da scalable_allocator ancora. La modifica di un singolo vector<int>
in un vector<int,scalable_allocator<int> >
ha ridotto il tempo di esecuzione di qualcosa da 85 a 35 secondi (Debian Lenny, Core2, con TBB 3.0 dal test).
Grazie! L'articolo contiene esattamente il tipo di informazioni che stavo cercando. – timday
Il collegamento originale è ora defunto, ma CiteSeer ha il PDF: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.171.8289 –
Per aggiungere un punto dati: nella mia app particolare, contesa allocatore ha arrestato la velocità di circa 15 thread, oltre che avrebbe ucciso tutta la velocità di accelerazione e di 40 sarebbe molto più lento del single-thread. Con 'scalable_allocator' usato nei kernel interni per-thread il collo di bottiglia è scomparso e il ridimensionamento previsto è tornato. (la macchina ha 40 core fisici). – Adam