jueves, 10 de mayo de 2012

Benchmarks

Semana # 14

Comenzare con definiendo que es un Benchmark.


Son una técnica utilizada para medir el rendimiento de un sistema o algún componente del mismo, frecuentemente en comparación con el que se refiere específicamente a la acción de ejecutar un benchmark.




Son 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.



Un benchmark podría ser realizado en cualquiera de sus componentes, ya sea CPU, RAM, tarjeta gráfica, etc. También puede ser dirigido específicamente a una función dentro de un componente, por ejemplo: la unidad de coma flotante de la CPU; o incluso a otros programas.




La tarea de ejecutar un benchmark 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.




Los benchmark 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 costo/beneficio (con un presupuesto o unas exigencias dadas)

Existen varios tipos de Benchmark: 


Benchmarking Interno
En la mayor parte de las grandes empresas con múltiples divisiones o internacionales hay funciones similares en diferentes unidades de operación. Una de las investigaciones de benchmarking más fácil es comparar estas operaciones internas. Debe contarse con facilidad con datos e información y no existir problemas de confidencialidad.


Benchmarking Competitivo
Los competidores directos de productos son contra quienes resulta más obvio llevar a cabo el Benchmarking. Ellos cumplirían, o deberían hacerlo, con todas las pruebas de comparabilidad. En definitiva cualquier investigación de Benchmarking debe mostrar cuales son las ventajas y desventajas comparativas entre los competidores directos.

Benchmarking Funcional
No es necesario concentrarse únicamente en los competidores directos de productos. Existe una gran posibilidad de identificar competidores funcionales o líderes de la industria para utilizarlos en el benchmarking incluso si se encuentran en industrias disímiles. 


Este tipo de Benchmarking ha demostrado ser productivo, ya que fomenta en interés por la investigación y los datos compartidos, debido a que no existe el problema de la confidencialidad de la información entre las empresas disímiles sino que también existe un interés natural para comprender las prácticas en otro lugar.


Benchmarking Genérico
El beneficio de esta forma de benchmarking, la más pura, es que se pueden descubrir prácticas y métodos que no se implementan en la industria propia del investigador. Este tipo de investigación tiene la posibilidad de revelar la mejor de las mejores prácticas.


Benchmarking Sintéticos vs Benchmarking de 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.


          Aplicaciones: herramientas basadas en aplicaciones reales, simulan una carga de trabajo para medir el comportamiento global del equipo.
Benchmarking de Bajo nivel vs Benchmarking Alto nivel


          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.


          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.


Otros tipos de Benchmark

  • 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
  • De Juguete: detectar y medir componentes básicos de un computador
  • Redes
  • Reducción de ruido
  • Trabajo compartido: mide el rendimiento en las modernas tecnologías de distribución de procesos
  • Servidores
  • Soporte técnico
  • El valor del Benchmark
La importancia del Benchmarking no se encuentra en la detallada mecánica de la comparación, sino en el impacto que pueden tener estas comparaciones sobre los comportamientos. Se puede considerar como un proceso útil de cara a lograr el impulso necesario para realizar mejoras y cambios.


A continuación algunos ejemplos de Benchmark's


  • El Dhrystone es un pequeño benchmark sintético que pretende ser representativo de programación entera de sistemas. Está basado en estadísticas publicadas sobre uso de particularidades de los lenguajes de programación, sistemas operativos, compiladores, editores, etc.
  • Whetstone es un pequeño benchmark científico diseñado en el Laboratorio Nacional de Física de Inglaterra. Se lo considera uno de los padres de los benchmarks sintéticos por ser el primero diseñado específicamente con ese fin. Hoy en día forma parte de muchos benchmarks actuales.
  • Linpack es uno de los más usados en sistemas científicos y de ingeniería. Su uso como benchmark fue accidental, ya que originalmente fue una extensión del programa Linpack -cuyo propósito era resolver sistemas de ecuaciones- que otorgaba el tiempo de ejecución del programa en 23 máquinas distintas. Luego fueron agregándose cada vez mayor cantidad de máquinas (según sus mismos autores más como un pasatiempo que otra cosa).
  • HardInfo es una herramienta que nos brinda la posibilidad de comparar el rendimiento de nuestro equipo con otros modelos con distinta CPU y frecuencia de reloj. Además, la aplicación nos proporciona información sobre el sistema operativo, los módulos del kernel, información detallada del hardware de nuestra computadora, información de sensores de temperatura o periféricos instalados, entre otras.
Si desean seguir observando mas Benchmarks les dejo la siguiente liga para que vean otros mas:


Aparte de estas herramientas, tu mismo puedes codificar tu propio Benchmark casero, a continuación les mostrare un código en python que realiza lo anterior.

from Tkinter import *
from OpenGL.GL import *
from OpenGL.Tk import *

import time

class ColorBox ( Frame ):

 def __init__( self ):
  Frame.__init__( self )
  self.master.title( "Color Box" )
  self.master.geometry( "640x480" )
  self.pack( expand = YES, fill = BOTH )

  self.openGL = Opengl( self, double = 1)
  self.openGL.pack ( expand = YES, fill = BOTH )

  self.openGL.redraw = self.redraw
  self.openGL.set_eyepoint( 20 )

  self.amountRotated = 0
  self.increment = 2

  self.compta = 0

  self.starttime = time.time()

  self.update()

 def redraw( self, openGL ):
  glClearColor( 1.0, 1.0, 1.0, 0.0 )
  glClear( GL_COLOR_BUFFER_BIT )
  glDisable( GL_LIGHTING )

  red = ( 1.0, 0.0, 0.0 )
  green = ( 0.0, 1.0, 0.0 )
  blue = ( 0.0, 0.0, 1.0 )
  purple = ( 1.0, 0.0, 1.0 )

  vertices = \
   [ (( -3.0, 3.0, -3.0 ), red),
   (( -3.0, -3.0, -3.0 ), green),
   (( 3.0, 3.0, -3.0 ), blue),
   (( 3.0, -3.0, -3.0 ), purple),
   (( 3.0, 3.0, 3.0 ), red),
   (( 3.0, -3.0, 3.0 ), green),
   (( -3.0, 3.0, 3.0 ), blue),
   (( -3.0, -3.0, 3.0 ), purple),
   (( -3.0, 3.0, -3.0 ), red),
   (( -3.0, -3.0, -3.0 ), green) ]

  glBegin( GL_QUAD_STRIP )

  for vertex in vertices:
   location, color = vertex
   apply( glColor3f, color )
   apply( glVertex3f, location )

  glEnd()


 def update( self ):
  self.compta += 1

  if( (time.time() - self.starttime) > 5):
   self.master.title( "Color Box FPS " + str(self.compta / 5) )
   self.compta = 0
   self.starttime = time.time()

   if self.amountRotated >= 500:
    self.increment = -2

   if self.amountRotated <= 0:
    self.increment = 2

   glRotate( self.increment, 1.0, 1.0, 1.0 )

   self.amountRotated += self.increment

   self.openGL.tkRedraw()
   #self.openGL.after( 10, self.update )
   self.openGL.after( 1, self.update )

 def main():
  ColorBox().mainloop()

 if __name__ == "__main__":
      main()


Después desde terminal lo ejecutas mediante la siguiente linea:


sudo python testgl.py 


Para esta semana nomino a Obed, Alejandro y a Jonathan por su aportación del cluster con PVM, a Saúl por su entrada hacer de la Subversion y por ultimo Esteban ya que su entrada de Grid Computing se me hizo muy completa.

Bibliografías


1 comentario:

  1. Muy buen trabajo; te pongo los completos de esta semana y además unos 3 extras retroactivos en el lab.

    ResponderEliminar