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.