2010-04-01 18 views
8

Por favor amablemente asesorar sobre los puntos de referencia utilizados para probar un asignador de C y C++? Los puntos de referencia que cumplan cualquiera de los siguientes aspectos se consideran:¿Parámetros usados ​​para probar un asignador de C y C++?

  1. velocidad
  2. fragmentación
  3. concurrencia

Gracias!

+0

¿Qué aspecto le gustaría probar, acelerar, fragmentar, etc.? –

+0

He editado según su sugerencia. Gracias. – Viet

Respuesta

4

Si preguntas acerca de un asignador general para un programa C/C++ entonces he encontrado este documento Hoard: A Scalable Memory Allocator for Multithreaded Applications que considera esta pregunta. Esta es una cita de este documento

No existe todavía ningún conjunto estándar de puntos de referencia para evaluar asignadores de multiproceso. Sabemos de sin puntos de referencia que específicamente enfatizan el rendimiento de subprocesamiento de las aplicaciones de servidor , como los servidores web 1 y administradores de bases de datos. Elegimos puntos de referencia describen en otros papeles y publicaron en caso contrario (el punto de referencia Larson de Larson y Krishnan [22] y el punto de referencia shbench de MicroQuill, Inc. [26]), dos aplicaciones multiproceso que incluyen los puntos de referencia (BEMengine [7] y barnes-hut [1, 2]), y escribió algunas microbenchmarks propias para enfatizar diferentes aspectos de la asignación de memoria rendimiento (threadtest, activo-falso, pasivo-falso).

Este papel es algo viejo. Sin embargo, recientemente he visto un asignador para HP-UX (MallocNextGen) y HP tampoco puede asegurar que sea bueno para todas las aplicaciones posibles. Dice:

El nuevo asignador es generalmente espera que mejore el rendimiento de las aplicaciones . Sin embargo, puede haber algunas aplicaciones para las cuales el rendimiento puede degradarse. Por lo tanto los usuarios se les aconseja comparar sus aplicaciones con la memoria predeterminada asignador en libc y con el asignador en libmallocng antes de usar el nuevo asignador en un entorno de producción .

En cuanto a velocidad y concurrencia, mi propia experiencia es que debe medir el rendimiento de su propio programa para comparar dos asignadores diferentes. Si hablamos de Linux, puede usar LD_PRELOAD para cargar diferentes asignadores.

+0

+1. Sí, si no hay puntos de referencia estándar, ¿en qué terreno deberíamos percibir e interpretar los resultados? – Viet

+0

Por lo que yo entiendo, una idea es medir el rendimiento de su propia aplicación. Por otro lado, puede elegir un conjunto de programas reales y pruebas propias para comparar asignadores. –

5

Puede descargar nedmalloc y tratar de comparar su asignador con él. Tiene una prueba llamada test.c con el código fuente, que puede reescribir de acuerdo con su asignador.

+0

+1 Gracias AraK! – Viet

5

Probé varios asignadores yo hace unos años y mi experiencia es que los resultados dependen del tipo de prueba.Si desea escribir algunos puntos de referencia a sí mismo, tenga en cuenta las siguientes situaciones:

  • asignar una gran cantidad de memoria de un solo tamaño, a continuación, liberar todo
  • asignar una gran cantidad de memoria de distintos tamaños, entonces libre todo
  • asignar solo unos pocos bloques de memoria, liberarlos, y repetir este ciclo varias veces (repetir para bloques del mismo tamaño y bloques de diferentes tamaños)
  • asignar mucha memoria de diferentes tamaños, liberar la mitad de ella (por ejemplo, el asignaciones), luego asignar y liberar memoria en un bucle
  • uso dos hilos para asignar memoria de forma paralela uso
  • tres, cuatro, cinco, ... hilos para asignar memoria de forma paralela

Usted se dará cuenta de que los resultados serán diferentes para cada prueba. Los asignadores que son muy buenos en una situación, pueden ser malos en otras situaciones.

En la práctica, esto significa que es mejor probarlo en su aplicación, en una situación real/realista.

+0

+1 suena bien Patrick. – Viet

Cuestiones relacionadas