# Benchmark (informática)

Una prueba de rendimiento o comparativa (en inglés benchmark) es una técnica utilizada para medir el rendimiento de un sistema o uno de sus componentes. Más formalmente puede entenderse que una prueba de rendimiento es el resultado de la ejecución de un programa informático o un conjunto de programas en una máquina, con el objetivo de estimar el rendimiento de un elemento concreto, y poder comparar los resultados con máquinas similares. En el ámbito de las computadoras, una prueba de rendimiento podría ser realizada en cualquiera de sus componentes, ya sea la CPU, RAM, tarjeta gráfica, etc. También puede estar dirigida específicamente a una función dentro de un componente, como la unidad de coma flotante de la CPU, o incluso a otros programas. Los benchmarks devuelven información detallada de todas las características que posee y con base en dicha información, se puede evaluar si esta completamente optimizado para correr o ejecutar las aplicaciones que necesitamos dependiendo del área.
La tarea de ejecutar una prueba originalmente se reducía a estimar el tiempo de proceso que lleva la ejecución de un programa (medida por lo general en miles o millones de operaciones por segundo). Con el correr del tiempo, la mejora en los compiladores y la gran variedad de arquitecturas y situaciones existentes convirtieron a esta técnica en toda una especialidad. La elección de las condiciones bajo la cual dos sistemas distintos pueden compararse entre sí es especialmente ardua, y la publicación de los resultados suele ser objeto de candentes debates cuando estos se abren a la comunidad.

## Cualidades

Las pruebas de rendimiento tienen las siguientes funcionalidades:
* Comprobar si las especificaciones de los componentes están dentro del margen propio del mismo
* Maximizar el rendimiento con un presupuesto dado
* Minimizar costos manteniendo un nivel máximo de rendimiento
* Obtener la mejor relación coste-beneficio (con un presupuesto o determinadas exigencias)

## Tipos de pruebas
### Sintéticos frente a aplicaciones

* Sintéticos: están especialmente diseñadas para medir el rendimiento de un componente individual de un ordenador, normalmente llevando el componente escogido a su máxima capacidad.
Ejemplos:
* Dhrystone
* Whetstone
* Aplicaciones: herramientas basadas en aplicaciones reales, simulan una carga de trabajo para medir el comportamiento global del equipo.

### Bajo nivel frente a alto nivel

* Test de bajo nivel: miden directamente el rendimiento de los componentes. Ejemplo: el reloj de la CPU, los tiempos de la DRAM y de la caché SRAM, tiempo de acceso medio al disco duro, latencia, tiempo de cambio de pista, etc.
* Test de alto nivel: están más enfocados a medir el rendimiento de la combinación componente/controlador/SO de un aspecto específico del sistema, como por ejemplo el rendimiento de E/S con ficheros, o el rendimiento de una determinada combinación de componentes/controlador/SO/aplicación. Ejemplo: velocidad de compresión zip.

### Otros tipos de pruebas

* Consumo de energía
* Cumplimiento con estándares ambientales, contenido de materiales y manejo del final del ciclo de vida del producto
* Disipación de calor
* Redes
* Reducción de ruido
* Trabajo compartido: mide el rendimiento en las modernas tecnologías de distribución de procesos
* Servidores
* Soporte técnico
Algunos programas para medir el rendimiento de un equipo o componente son:
* Crystalmark
* Ciusbet
* Dhrystone
* iCOMP
* Linpack
* Livermore
* SPEC (SPECint y SPECfp, orientados a la unidad de enteros y punto flotante, respectivamente)
* Whetstone