fbpx
Wikipedia

LINPACK

El benchmark Linpack fue desarrollado en el Argone National Laboratory por Jack Dongarra en 1976, y 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).

Hoy en día, el programa Linpack ha sido reemplazado por el paquete Lapack, el cual hace un uso mucho mejor de las características de la arquitectura RISC (en esencia, sus técnicas algorítmicas fueron modificadas para que pase menor tiempo moviendo datos).

El benchmark Linpack puede conseguirse en versión Fortran, C y como un applet de Java.

Descripción del benchmark

La característica principal de Linpack es que hace un uso muy intensivo de las operaciones de coma flotante, por lo que sus resultados son muy dependientes de la capacidad de la FPU que tenga el sistema. Además pasan la mayor parte del tiempo ejecutando unas rutinas llamadas BLAS (Basic Linear Algebra Subroutines o Subrutinas de Álgebra Lineal Básica). Como hay dos tipos de estas bibliotecas (una codificada en ensamblador y otra en Fortran), el resultado también dependerá mucho de esto. De lejos, el mayor tiempo de ejecución se consume en la rutina DAXPY de la biblioteca BLAS (casi el 90%). DAXPY realiza el siguiente cálculo

y(i) := y(i) + a * x(i). 

Es por esto que en realidad se puede decir que lo que mide Linpack es la velocidad del sistema para DAXPY.

Por otra parte, al realizar esencialmente cálculos con matrices es un test fácilmente paralelizable, y se puede utilizar para medir la eficiencia de sistemas multiprocesador (de hecho, existe una página en Internet que informa el "Top 500" de las computadoras basándose en el Linpack: http://www.top500.org/).

Los principios matemáticos

El reporte del benchmark describe la performance para resolver un problema de matrices generales densas Ax = b a tres niveles de tamaño y oportunidad de optimización: problemas de 100 x 100 (optimización del bucle interno), problemas de 1.000 por 1.000 (optimización de tres bucles - el programa entero) y un problema paralelo escalable. Estas matrices son generadas usando un generador de números pseudoaleatorios, pero forzando los números para que pueda ejecutarse un pivoteo parcial con Eliminación Gaussiana. Ejecuta dos rutinas básicas: una que descompone la matriz, y otra que resuelve el sistema de ecuaciones basándose en la descomposición de la primera matriz. Para una matriz de n x n la primera rutina lleva n³ operaciones de coma flotante, mientras que la segunda ejecuta n² operaciones de coma flotante.

Las rutinas involucradas hacen uso de algoritmos orientados a columnas. Esto es, los programas generalmente referencian a los elementos de los arreglos bidimensionales secuencialmente hacia abajo por una columna, en lugar de hacerlo por filas. Esta orientación era importante por la forma en que el lenguaje Fortran almacena los arreglos.

Varios benchmarks en uno

Linpack está compuesto de tres benchmarks: los ya mencionados de orden 100 y orden 1.000, y un tercero de Computación Altamente Paralela (un algoritmo especialmente diseñado para buscar los beneficios de los multiprocesadores).

En el primero sólo se permite cambiar las opciones del compilador para hacerlo más eficiente; sin embargo debe especificarse antes de correrlo una función SECOND que devuelva el tiempo de ejecución en segundos del programa.

Las reglas básicas para el segundo benchmark son un poco más relajadas. Se puede especificar cualquier ecuación lineal que uno desee, implementada en el lenguaje que uno desee.

Optimización

El Linpack es un programa que ejecuta cálculos con matrices, y como tal, existe numerosas técnicas para optimizarlo. Por ejemplo, intentando hacer un uso más eficiente de la carga de datos en la caché más próxima, puede llevar a una aproximación de cálculos matriz-vector o matriz-matriz. Las técnicas a aplicar dependerán de los tamaños de los distintos niveles de caché y la arquitectura de la computadora. A continuación detallamos otra técnica:

Loop unrolling (desarrollo del bucle)

El loop unrolling es una técnica de optimización que consiste en hacer más extenso un bucle simple reduciendo la sobrecarga por comparación del bucle y permitiendo una mejor concurrencia. De esta manera, la siguiente estructura repetitiva:

PARA i:= 1 a n HACER y(i) := y(i) + alfa * x(i) FIN PARA 

En lugar de hacer una sola instrucción por bucle, se pueden lograr 4 instrucciones por bucle (o las que uno desee) de la siguiente forma:

m := n - n MOD 4 PARA i:= 1 a m, PASO 4 HACER y(i) := y(i) + alfa * x(i) y(i+1) := y(i+1) + alfa * x(i+1) y(i+2) := y(i+2) + alfa * x(i+2) y(i+3) := y(i+3) + alfa * x(i+3) FIN PARA PARA i: m a n HACER y(i) := y(i) + alfa * x(i) FIN PARA 

¿Por qué esto aumenta la velocidad del bucle?

  • la reducción directa por la sobrecarga del bucle (incremento, comparación y ramificación), la cual se lleva el mayor tiempo de ejecución por iteración; si los bucles son grandes, el código adicional requerido se ve claramente compensado.
  • al haber mayor cantidad de operaciones dentro del bucle, se permite una mayor concurrencia de operaciones (en este caso la multiplicación). La profundidad del desarrollo dependerá del grado de segmentación del procesador.
  • esta concurrencia se incrementa si se tienen elementos de suma y multiplicación independientes.

El problema de esta técnica, es que si tenemos compiladores que intentan detectar operaciones vectoriales, el desarrollo del bucle tiene el efecto exactamente contrario, impidiendo que el compilador optimice según la estructura vectorial.

Resultados

Los resultados se expresan en MFlops (millones de operaciones de coma flotante por segundo), siempre referidas a operaciones de suma y multiplicación de doble precisión (64 bits, aunque para algunos sistemas esta cantidad de bits es la precisión simple).

  •   Datos: Q609010

linpack, este, artículo, sección, necesita, referencias, aparezcan, publicación, acreditada, este, aviso, puesto, julio, 2011, benchmark, linpack, desarrollado, argone, national, laboratory, jack, dongarra, 1976, más, usados, sistemas, científicos, ingeniería,. Este articulo o seccion necesita referencias que aparezcan en una publicacion acreditada Este aviso fue puesto el 27 de julio de 2011 El benchmark Linpack fue desarrollado en el Argone National Laboratory por Jack Dongarra en 1976 y es uno de los mas usados en sistemas cientificos y de ingenieria Su uso como benchmark fue accidental ya que originalmente fue una extension del programa Linpack cuyo proposito era resolver sistemas de ecuaciones que otorgaba el tiempo de ejecucion del programa en 23 maquinas distintas Luego fueron agregandose cada vez mayor cantidad de maquinas segun sus mismos autores mas como un pasatiempo que otra cosa Hoy en dia el programa Linpack ha sido reemplazado por el paquete Lapack el cual hace un uso mucho mejor de las caracteristicas de la arquitectura RISC en esencia sus tecnicas algoritmicas fueron modificadas para que pase menor tiempo moviendo datos El benchmark Linpack puede conseguirse en version Fortran C y como un applet de Java Indice 1 Descripcion del benchmark 2 Los principios matematicos 3 Varios benchmarks en uno 4 Optimizacion 4 1 Loop unrolling desarrollo del bucle 5 ResultadosDescripcion del benchmark EditarLa caracteristica principal de Linpack es que hace un uso muy intensivo de las operaciones de coma flotante por lo que sus resultados son muy dependientes de la capacidad de la FPU que tenga el sistema Ademas pasan la mayor parte del tiempo ejecutando unas rutinas llamadas BLAS Basic Linear Algebra Subroutines o Subrutinas de Algebra Lineal Basica Como hay dos tipos de estas bibliotecas una codificada en ensamblador y otra en Fortran el resultado tambien dependera mucho de esto De lejos el mayor tiempo de ejecucion se consume en la rutina DAXPY de la biblioteca BLAS casi el 90 DAXPY realiza el siguiente calculo y i y i a x i Es por esto que en realidad se puede decir que lo que mide Linpack es la velocidad del sistema para DAXPY Por otra parte al realizar esencialmente calculos con matrices es un test facilmente paralelizable y se puede utilizar para medir la eficiencia de sistemas multiprocesador de hecho existe una pagina en Internet que informa el Top 500 de las computadoras basandose en el Linpack http www top500 org Los principios matematicos EditarEl reporte del benchmark describe la performance para resolver un problema de matrices generales densas Ax b a tres niveles de tamano y oportunidad de optimizacion problemas de 100 x 100 optimizacion del bucle interno problemas de 1 000 por 1 000 optimizacion de tres bucles el programa entero y un problema paralelo escalable Estas matrices son generadas usando un generador de numeros pseudoaleatorios pero forzando los numeros para que pueda ejecutarse un pivoteo parcial con Eliminacion Gaussiana Ejecuta dos rutinas basicas una que descompone la matriz y otra que resuelve el sistema de ecuaciones basandose en la descomposicion de la primera matriz Para una matriz de n x n la primera rutina lleva n operaciones de coma flotante mientras que la segunda ejecuta n operaciones de coma flotante Las rutinas involucradas hacen uso de algoritmos orientados a columnas Esto es los programas generalmente referencian a los elementos de los arreglos bidimensionales secuencialmente hacia abajo por una columna en lugar de hacerlo por filas Esta orientacion era importante por la forma en que el lenguaje Fortran almacena los arreglos Varios benchmarks en uno EditarLinpack esta compuesto de tres benchmarks los ya mencionados de orden 100 y orden 1 000 y un tercero de Computacion Altamente Paralela un algoritmo especialmente disenado para buscar los beneficios de los multiprocesadores En el primero solo se permite cambiar las opciones del compilador para hacerlo mas eficiente sin embargo debe especificarse antes de correrlo una funcion SECOND que devuelva el tiempo de ejecucion en segundos del programa Las reglas basicas para el segundo benchmark son un poco mas relajadas Se puede especificar cualquier ecuacion lineal que uno desee implementada en el lenguaje que uno desee Optimizacion EditarEl Linpack es un programa que ejecuta calculos con matrices y como tal existe numerosas tecnicas para optimizarlo Por ejemplo intentando hacer un uso mas eficiente de la carga de datos en la cache mas proxima puede llevar a una aproximacion de calculos matriz vector o matriz matriz Las tecnicas a aplicar dependeran de los tamanos de los distintos niveles de cache y la arquitectura de la computadora A continuacion detallamos otra tecnica Loop unrolling desarrollo del bucle Editar El loop unrolling es una tecnica de optimizacion que consiste en hacer mas extenso un bucle simple reduciendo la sobrecarga por comparacion del bucle y permitiendo una mejor concurrencia De esta manera la siguiente estructura repetitiva PARA i 1 a n HACER y i y i alfa x i FIN PARA En lugar de hacer una sola instruccion por bucle se pueden lograr 4 instrucciones por bucle o las que uno desee de la siguiente forma m n n MOD 4 PARA i 1 a m PASO 4 HACER y i y i alfa x i y i 1 y i 1 alfa x i 1 y i 2 y i 2 alfa x i 2 y i 3 y i 3 alfa x i 3 FIN PARA PARA i m a n HACER y i y i alfa x i FIN PARA Por que esto aumenta la velocidad del bucle la reduccion directa por la sobrecarga del bucle incremento comparacion y ramificacion la cual se lleva el mayor tiempo de ejecucion por iteracion si los bucles son grandes el codigo adicional requerido se ve claramente compensado al haber mayor cantidad de operaciones dentro del bucle se permite una mayor concurrencia de operaciones en este caso la multiplicacion La profundidad del desarrollo dependera del grado de segmentacion del procesador esta concurrencia se incrementa si se tienen elementos de suma y multiplicacion independientes El problema de esta tecnica es que si tenemos compiladores que intentan detectar operaciones vectoriales el desarrollo del bucle tiene el efecto exactamente contrario impidiendo que el compilador optimice segun la estructura vectorial Resultados EditarLos resultados se expresan en MFlops millones de operaciones de coma flotante por segundo siempre referidas a operaciones de suma y multiplicacion de doble precision 64 bits aunque para algunos sistemas esta cantidad de bits es la precision simple Datos Q609010 Obtenido de https es wikipedia org w index php title LINPACK amp oldid 139992277, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos