¿Alguna vez ha obtenido una aceleración significativa mediante el uso de boost:: pool?


He jugado con boost::pool un par de veces en lugares donde me parecía que estaba martillando seriamente el montón con un montón de objeto "churn". Generalmente he usado boost::object_pool, o boost::pool_alloc como un parámetro de plantilla STL. Sin embargo, el resultado es invariablemente que el rendimiento prácticamente no cambia, o empeora significativamente.

Tengo curiosidad por escuchar historias de éxito con él.

¿Qué tipo de cosas debo buscar en la salida de perfiles que podrían indicar que boost:: pool es probable que ayude ?

¿Es realmente bastante difícil mejorar al viejo malloc?

Author: timday, 2009-01-23

4 answers

Los repositorios de memoria son los más efectivos para el procesamiento de estilo de transacción, donde se puede asignar al repositorio y luego, cuando se realiza la transacción, simplemente volcar en el olvido. La velocidad real no es que cada asignación va a ser mucho más rápido es que tendrá cerca de cero fragmentación de memoria en una aplicación de ejecución extremadamente larga.

En sort, parece que sus aplicaciones no garantizan el uso de grupos de memoria

 20
Author: Hippiehunter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-23 16:46:55

Sí, aumento de velocidad del 500%. La aplicación (bastante estúpidamente, pero a veces tienes que trabajar con lo que tienes) copió elementos de 1 std::map a otro en un bucle (hubo alguna toma de decisiones en el bucle), y las asignaciones resultantes en servidores multihilo/proceso resultaron en contención de montón. Agregué el grupo boost como asignador en el segundo mapa y el resultado fue un aumento del 500% en la velocidad de ejecución de la aplicación.

 16
Author: Ian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-13 07:09:27

Las optimizaciones ciegas no son buenas. Intente usar Google memory allocator, ni siquiera necesita recompilar su aplicación. Puedes encontrar lo que necesitas saber aquí:

Http://google-perftools.googlecode.com/svn/trunk/doc/tcmalloc.html

Gaetano

 10
Author: Gaetano Mendola,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-23 15:52:37

Es posible que desee rastrear sus problemas de rendimiento a las asignaciones de memoria primero antes de comenzar a optimizar para eso.

Por lo tanto, reduzca su perfil para identificar la ubicación del problema. Esto puede ser un montón de llamadas al mismo código que podrían no tomar mucho tiempo cuando solo se llama una vez.

 3
Author: HS.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-23 14:21:49