Sesi—n 8: Pr‡ctica de Medida de Rendimiento

Introducci—n

En esta sesi—n de pr‡cticas vamos a estudiar las prestaciones de tres modelos de computadores realizando mediciones sobre ellos. Para ello utilizaremos programas de prueba llamados benchmarks. ƒstos son un conjunto de programas que en funci—n del ‡mbito de aplicaci—n pueden ser de tipo entero, coma flotante o transacciones; y segœn la naturaleza del programa que los implementa pueden ser programas reales, nœcleos, patrones conjunto, patrones reducidos o patrones sintŽticos. En esta sesi—n utilizaremos los benchmarks Linpack, Dhrystone, Whetstone y gcc.

Para el desarrollo de la pr‡ctica utilizaremos tres computadores distintos: dos de ellos correspondientes a dos laboratorios de pr‡cticas diferentes y el tercero ser‡ la m‡quina virtual Anubis. Mediante la orden $more /proc/cpuinfo hemos averiguado las caracter’sticas de cada computador. En el caso del primero, que llamaremos A ser‡n las siguientes:

processor     :  0

vendor_id     :  AuthenticAMD

cpu family    :  5

model         :  8

model name    :  AMD-K6(tm) 3D processor

stepping      :  12

cpu MHz       :  501.155

cache size    :  64 KB

fdiv_bug      :  no

hlt_bug       :  no

sep_bug       :  no

f00f_bug      :  no

coma_bug      :  no

fpu           :  yes

fpu_exception :  yes

cpuid level   :  1

wp            :  yes

flags         :  fpu vme de pse tsc msr mce cx8 sep mtrr pge mmx 3dnow

bogomips      :  999.42

Y en el caso del segundo, que llamaremos B:

processor     :  0

vendor_id     :  GenuineIntel

cpu family    :  6

model         :  6

model name    :  Celeron (Mendocino)

stepping      :  5

cpu MHz       :  434.328503

cache size    :  128 KB

fdiv_bug      :  no

hlt_bug       :  no

sep_bug       :  no

f00f_bug      :  no

coma_bug      :  no

fpu           :  yes

fpu_exception :  yes

cpuid level   :  2

wp            :  yes

flags         :  fpu vme de pse tsc msr pae mce cx8 sep mtrr pge mca cmov pat pse36 mmx osfxsr

bogomips      :  432.54

El tercer computador, Anubis, lo llamaremos C y tiene las siguientes caracter’sticas:

Servidor Empresarial SMP 64 bits

Modelo IBM RS/6000 S7A (S70 Advanced)

12 Procesadores RS64 II a 262 MHz

4 Gbytes de RAM

150 Gbytes de espacio en disco

Sistema Operativo AIX 4.3.3, variedad de UNIX© proporcionado por IBM.

A continuaci—n seguirŽ con el desarrollo de la sesi—n de pr‡cticas.

1- An‡lisis de las prestaciones de las arquitecturas

a)   An‡lisis de los resultados

En este apartado compilaremos y ejecutaremos los tres benchmarks Linpack, Dhrystone y Whetstone en las tres m‡quinas A, B y C; a continuaci—n anotaremos la salida que muestran.

En primer lugar, el benchmark Linpack.

A) Rolled Double Precision Linpack Benchmark - in 'C/C++'

 

 

norm resid      resid           machep         x[0]-1          x[n-1]-1

   1.9    8.39915160e-14   2.22044605e-16  -6.22835117e-14  -4.16333634e-14

 

Enter the following which will be added with results to file LINPACKC.RES

When submitting a number of results you need only provide details once

but a cross reference such as an abbreviated CPU type would be useful.

You can kill (exit or close) the program now and no data will be added.

 

Date:       Computer:   CPU chip:   Clock MHz:  Cache size: H/W options:OS version: Compiler:   Options:    Your name:  From:       Email:     

A new results file will have been created in the same directory as the

.EXE files if one did not already exist. If you made a mistake on input,

you can use a text editor to correct it, delete the results or copy

them to a different file name. If you intend to run multiple tests you

you may wish to rename LINPACKC.RES with a more informative title.

 

Please submit feedback and results files to aburto@nosc.mil or to

Roy_Longbottom@compuserve.com

 

B) Rolled Double Precision Linpack Benchmark - in 'C/C++'

 

 

norm resid      resid           machep         x[0]-1          x[n-1]-1

   1.9    8.39915160e-14   2.22044605e-16  -6.22835117e-14  -4.16333634e-14

 

Enter the following which will be added with results to file LINPACKC.RES

When submitting a number of results you need only provide details once

but a cross reference such as an abbreviated CPU type would be useful.

You can kill (exit or close) the program now and no data will be added.

 

Date:       Computer:   CPU chip:   Clock MHz:  Cache size: H/W options:OS version: Compiler:   Options:    Your name:  From:       Email:     

A new results file will have been created in the same directory as the

.EXE files if one did not already exist. If you made a mistake on input,

you can use a text editor to correct it, delete the results or copy

them to a different file name. If you intend to run multiple tests you

you may wish to rename LINPACKC.RES with a more informative title.

 

Please submit feedback and results files to aburto@nosc.mil or to

Roy_Longbottom@compuserve.com

 

C) Rolled Double Precision Linpack Benchmark - in 'C/C++'

 

 

norm resid      resid           machep         x[0]-1          x[n-1]-1

   1.9    8.46778499e-14   2.22044605e-16  -1.11799459e-13  -9.60342916e-14

 

Enter the following which will be added with results to file LINPACKC.RES

When submitting a number of results you need only provide details once

but a cross reference such as an abbreviated CPU type would be useful.

You can kill (exit or close) the program now and no data will be added.

 

Date:       Computer:   CPU chip:   Clock MHz:  Cache size: H/W options:OS version: Compiler:   Options:    Your name:  From:       Email:     

A new results file will have been created in the same directory as the

.EXE files if one did not already exist. If you made a mistake on input,

you can use a text editor to correct it, delete the results or copy

them to a different file name. If you intend to run multiple tests you

you may wish to rename LINPACKC.RES with a more informative title.

 

Please submit feedback and results files to aburto@nosc.mil or to

Roy_Longbottom@compuserve.com

Intuitivamente comprobamos que la ejecuci—n del benchmark Linpack supone un elevado tiempo de ejecuci—n para las tres m‡quinas, sobretodo para la m‡quina C.

Seguidamente compilaremos y ejecutaremos el benchmark Dhrystone, dando como valor en la ejecuci—n que se van a realizar  de iteraciones:

A) Dhrystone Benchmark, Version 2.1 (Language: C)

 

Microseconds for one run through Dhrystone:     1.1

Dhrystones per Second:                        900900.9

VAX MIPS rating =    512.750

 

 

B) Dhrystone Benchmark, Version 2.1 (Language: C)

 

Microseconds for one run through Dhrystone:     1.2

Dhrystones per Second:                        806451.6

VAX MIPS rating =    458.994

 

 

C) Dhrystone Benchmark, Version 2.1 (Language: C)

 

Microseconds for one run through Dhrystone:     1.7

Dhrystones per Second:                        578034.7

VAX MIPS rating =    328.990

En este caso intuitivamente el tiempo de ejecuci—n en los tres computadores es muy similar, y muy peque–o. Atendiendo a la salida comprobamos que el computador con menor tiempo de ejecuci—n por iteraci—n y con mayor nœmero de dhrystones por segundo es el A, seguido del B y del C; en cuanto a los MIPS, comprobamos que muestra una mayor tasa el A, seguido del B y del C.

Finalmente compilaremos y ejecutaremos el benchmark Whetstone, del cual obtenemos la siguiente salida:

A) Loops: 10000, Iterations: 1, Duration: 6 sec.

C Converted Double Precision Whetstones: 166.7 MIPS

 

B) Loops: 10000, Iterations: 1, Duration: 6 sec.

C Converted Double Precision Whetstones: 166.7 MIPS

 

C) Loops: 10000, Iterations: 1, Duration: 10 sec.

C Converted Double Precision Whetstones: 100.0 MIPS

Intuitivamente comprobamos que su ejecuci—n es r‡pida, como en el caso anterior, y en los tres computadores similar. Atendiendo a su salida comprobamos que la tasa de MIPS de los computadores A y B es la misma, siendo esta significativamente menor en el caso del C. Esto es notable por lo tanto tambiŽn en la duraci—n, siendo de  en el caso de A y B, y de  en el caso de C.

b)   An‡lisis de los tiempos de ejecuci—n

En este apartado calcularemos mediante la orden $time el tiempo de ejecuci—n de cada benchmark en cada computador, mediante lo cual obtendremos la siguiente tabla de tiempos:

Programa / M‡quina

A

B

C

Linpack

REAL

1Õ33.702ÕÕ

1Õ26.552ÕÕ

2Õ18.03ÕÕ

USER

1Õ16.700ÕÕ

1Õ19.330ÕÕ

1Õ23.39ÕÕ

SYS

0Õ0.050ÕÕ

0Õ0.020ÕÕ

0Õ0.09ÕÕ

Dhrystone

REAL

0Õ4.105ÕÕ

0Õ4.478ÕÕ

0Õ4.67ÕÕ

USER

0Õ1.110ÕÕ

0Õ1.240ÕÕ

0Õ1.79ÕÕ

SYS

0Õ0.010ÕÕ

0Õ0.000ÕÕ

0Õ0.03ÕÕ

Whetstone

REAL

0Õ5.893ÕÕ

0Õ6.232ÕÕ

0Õ9.62ÕÕ

USER

0Õ5.880ÕÕ

0Õ6.220ÕÕ

0Õ9.64ÕÕ

SYS

0Õ0.010ÕÕ

0Õ0.010ÕÕ

0Õ0.03ÕÕ

gcc

REAL

0Õ0.347ÕÕ

0Õ0.347ÕÕ

0Õ0.94ÕÕ

USER

0Õ0.270ÕÕ

0Õ0.260ÕÕ

0Õ0.39ÕÕ

SYS

0Õ0.060ÕÕ

0Õ0.040ÕÕ

0Õ0.16ÕÕ

Con la orden $time obtenemos tres tiempos distintos de ejecuci—n: REAL, USER y SYS. En este caso vamos a utilizar el tiempo obtenido como USER.

Vamos a comparar las prestaciones de los tres computadores de tres modos distintos:

o      El primer modo considerar‡ cada uno de los programas de modo aislado. Segœn esto podemos ver que en los benchmarks Linpack, Dhrystone y Whetstone el computador con un tiempo de ejecuci—n menor es el A, seguido del B y el C con un mayor tiempo de ejecuci—n; en cambio, en el caso del gcc, el B muestra un tiempo de ejecuci—n menor, seguido del A y estos dos seguidos por el C.

o      En el segundo modo emplearemos la media aritmŽtica de los tiempos de ejecuci—n. Para ello utilizaremos la siguiente f—rmula:. DespuŽs de realizar los c‡lculos pertinentes obtenemos los siguientes tiempos: ; ; . En este modo obtenemos como en el anterior que el computador con un tiempo de ejecuci—n menor ser‡ el A, seguido del B y estos dos por el C.

o      En el tercer modo utilizaremos la media geomŽtrica de los tiempos de ejecuci—n normalizados a la m‡quina C. En este caso la f—rmula ser‡ la siguiente: . Los resultados que hemos obtenido s—n: ; ; . En este caso comprobamos como anteriormente que el tiempo de ejecuci—n de A es menor que el de B y a su vez menor que el de C.

2- C‡lculo de los CPI

En este caso se va a obtener el valor del CPI para el programa ejemplo.c empleando la expresi—n

El programa ejemplo.c es el siguiente:

int main(int argc, char *argv[])

{

 

 int i,final;

 double a1,b1,a2,b2,a3,b3,a4,b4,r1,r2,r3,r4;

 

 a1=2.0;

 b1=2.5;

 a2=3.14;

 b2=56.9;

 a3=223.3;

 b3=-232.555555;

 a4=12.021212121;

 b4=-202929.212125;

 final=atoi(argv[1]);

 final=final*10000;  /* Podemos ver que ser‡n 10000xN iteraciones */

 for(i=0;i<=final;i++){

  r1=a1-b1;

  r2=a2+b2;

  r3=a3*b3;

  r4=a4/b4;

 }

}

Los tiempos que obtenemos al ejecutar el programa ejemplo.c con el valor 1000 como elemento de entrada al programa con los tres computadores son los siguientes:

Programa / M‡quina

A

B

C

ejemplo.c

REAL

0Õ1.519ÕÕ

0Õ0.866ÕÕ

0Õ2.38ÕÕ

USER

0Õ1.520ÕÕ

0Õ0.870ÕÕ

0Õ2.36ÕÕ

SYS

0Õ0.000ÕÕ

0Õ0.000ÕÕ

0Õ0.01ÕÕ

Sabemos que el programa ejecuta  instrucciones considerando solo las del bucle, y como en este caso , . Para hallar el valor del CPI del programa utilizaremos la expresi—n

De ella obtenemos que

y como sabemos que

y conocemos la frecuencia de reloj de los computadores, tenemos la siguiente f—rmula:

El CPI mide el nœmero medio de ciclos de reloj que una instrucci—n necesita para ejecutarse. De este modo, se trata de una media de todas las instrucciones ejecutadas en el programa. Evidentemente este nœmero de ciclos depender‡ del tipo de arquitectura del procesador. A continuaci—n mostrarŽ el c‡lculo del CPI para los tres computadores utilizados y por lo tanto para tres arquitecturas diferentes de procesador y juego de instrucciones; a causa de esto hay posibilidad de que var’en los CPIs.

o     

o     

o     

Analizando estos resultados, si A, B y C tuvieran la misma frecuencia de reloj, el computador B ser’a el m‡s r‡pido, seguido del C y seguido del A, que tiene que ejecutar un mayor nœmero de ciclos por instrucci—n, o CPI.

Otro valor que se utiliza para la medici—n del rendimiento es la tasa de MIPS, que representa los millones de instrucciones por segundo. Esta tasa tiene varios problemas, como son: depende del repertorio de instrucciones; var’a entre programas ejecutados en el mismo computador; puede variar inversamente al rendimiento. Seguidamente calcularŽ el valor de los MIPS obtenidos por este programa, mediante la f—rmula:

Los resultados que obtengo son los siguientes:

o     

o     

o     

En cuanto a la tasa de MIPS, el computador B obtendr’a el mayor rendimiento, seguida de la m‡quina A y la C.

Y finalmente calcularŽ la tasa de MFLOPS del programa para cada computador. La tasa de MFLOPS representa los millones de operaciones en coma flotante por segundo. Se diferencia de la tasa de MIPS en que contabiliza operaciones en vez de instrucciones. TambiŽn tiene problemas, como que programas diferentes ejecutan distintas operaciones en coma flotante y todas las operaciones en coma flotante no tienen el mismo coste. El programa ejecuta  operaciones en coma flotante considerando solo las del bucle; como en este caso , . Para calcular el valor de los MFLOPS utilizarŽ la siguiente f—rmula:

Seguidamente expongo los resultados:

o     

o     

o     

Y en cuanto a la tasa de MFLOPS, podemos ver que el computador con un mayor rendimiento ser’a el B, seguido del A y seguido del C.

Como conclusi—n a estos c‡lculos, podemos ver que efectivamente cada tipo de medici—n nos ofrece una visi—n de un tipo de resultados, los cuales no tienen informaci—n completa sobre el rendimiento. Efectivamente, al calcular las tasas de CPI, MIPS y MFLOPS hemos podido comprobar que hemos obtenido distintas conclusiones.


Bibliograf’a

á      [1] Patterson, David A.; Hennessy, John L.; ÒEstructura y Dise–o de ComputadoresÓ. Ed. RevertŽ, 2000.

á      [2] Documentaci—n de Anubis en http://anubis.uji.es

á      [3] Apuntes de las clases de teor’a y de pr‡cticas.



Alojamiento con 500GB de espacio y 5000GB de ancho de banda por 4 euros al mes
Cómo contratar servicios de hosting con Dreamhost
Descuento, promocode para dreamhost de $50