tutorial c++ multithreading stl malloc tbb

c++ - tutorial - ¿Cómo funciona el escalable_allocator de Intel TBB?



intel tbb download (2)

¿Qué hace realmente debajo del capó el tbb::scalable_allocator en Intel Threading Building Blocks?

Ciertamente puede ser efectivo. Acabo de usarlo para reducir el tiempo de ejecución de una aplicación en un 25% (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 un gran consumo de memoria y enviar cosas para cambiar de ciudad.

La propia documentación de Intel no revela mucho (por ejemplo, una sección corta al final de esta sección de 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 he visto mi mejor aceleración desde scalable_allocator todavía. Cambiar un solo vector<int> a un vector<int,scalable_allocator<int> > redujo el tiempo de ejecución de algo de 85s a 35s (Debian Lenny, Core2, con TBB 3.0 de las pruebas).



La solución que mencionó está optimizada para CPU de Intel. Incorpora mecanismos específicos de CPU para mejorar el rendimiento.

Hace algún tiempo encontré otra solución muy útil: el asignador rápido de C ++ 11 para contenedores STL . Acelera ligeramente los contenedores STL en VS2017 (~ 5x), así como en GCC (~ 7x). Utiliza la agrupación de memoria para la asignación de elementos, lo que la hace extremadamente efectiva para todos los platofrms.