¿Qué hace tbb::scalable_allocator
en Intel Threading Building Blocks en realidad bajo el capó?¿Cómo funciona el scalable_allocator de Intel TBB?
Sin duda puede ser eficaz. Acabo de usarlo para quitar un 25% del tiempo de ejecución de una aplicación (y ver un aumento en la utilización de la CPU de ~ 200% a 350% en un sistema de 4 núcleos) cambiando un solo std::vector<T>
a std::vector<T,tbb::scalable_allocator<T> >
. Por otro lado, en otra aplicación he visto duplicar el consumo de memoria ya grande y enviar cosas a la ciudad de intercambio.
La propia documentación de Intel no proporciona mucho (por ejemplo, una sección corta al final de este FAQ). ¿Alguien puede decirme qué trucos usa antes de ir y profundizar en su código?
ACTUALIZACIÓN: Solo uso TBB 3.0 por primera vez, y veo mi mejor aceleración de scalable_allocator todavía. Al cambiar un solo vector<int>
a un vector<int,scalable_allocator<int> >
, se redujo el tiempo de ejecución de algo entre 85 y 35 (Debian Lenny, Core2, con TBB 3.0 de las pruebas).
Gracias! El artículo contiene exactamente el tipo de información que estaba buscando. – timday
El enlace original está ahora desaparecido, pero CiteSeer tiene el PDF: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.71.8289 –
Para agregar un punto de datos: en mi aplicación particular, contención del asignador detuvo la aceleración en alrededor de 15 hilos, más allá de que mataría a toda aceleración y en 40 sería mucho más lento que un solo hilo. Con 'scalable_allocator' utilizado en los núcleos internos por subproceso, el cuello de botella desapareció y la escala esperada regresó. (la máquina tiene 40 núcleos físicos). – Adam