INFORME DE LABORATORIO N° 04 “MEDIDA DEL RENDIMIENTO EN MIPS Y FLOPS DE UN ALGORITMO” I.
OBJETIVOS
o Medir el rendimiento de un algoritmo computacional o Analizar el rendimiento de un algoritmo en diferentes equipos de cómputo.
II.
MATERIALES Y EQUIPO o 1 equipo de cómputo o Programa Borland C++ o Programa Python
III.
FUNDAMENTACION TEORICA
Una computadora es un conjunto de componentes cada uno de los cuales resuelve distintas tareas en tiempo distintos. Podemos convenir que si cada uno de los componentes es más veloz en su tarea específica, la computadora será más rápida y por lo tanto tendrá un mejor rendimiento. El rendimiento del microprocesador es uno (si no el más importante) de los factores para determinar el rendimiento de una PC. Si bien otros componentes son importantes (como la memoria RAM, la velocidad del disco duro, la placa base, la placa de video, etc) el rendimiento de la CPU es fundamental ya que esta se comporta como un director de orquesta que hace funcionar a todos los componentes. Métricas de Rendimiento MIPS MIPS es el acrónimo de "millones de instrucciones por segundo". Es una forma de medir la potencia de los procesadores con el mismo juego de instrucciones y usando benchmarks
que fueron compilados por el mismo compilador y con el mismo nivel de optimización. Esto es debido a que la misma tarea puede necesitar un número de instrucciones diferentes si los juegos de instrucciones también lo son; y por motivos similares en las otras dos situaciones descritas. En las comparativas, usualmente se representan los valores de pico, por lo que la medida no es del todo realista. La forma en que funciona la memoria que usa el procesador también es un factor clave para la potencia de un procesador, algo que no suele considerarse en los cálculos con MIPS.procesadores. Sin embargo, esta medida sólo es útil para comparar
FLOPS Para que se pueda usar el FLOPS como medida de rendimiento de punto flotante una referencia estándar debe ser establecida para todas las computadoras de interés. Uno de ellos es el estándar LINPACK. Los FLOPS por sí solos no son un muy útil estándar para computadoras modernas. Existen muchos otros factores de rendimiento tales como I/O (Entrada/Salida), comunicación inter procesador, coherencia del cache y jerarquía de memoria. Esto significa que las computadoras en general son sólo capaces de una fracción del pico teórico en FLOPS, obtenido adicionando el pico teórico en FLOPS de cada uno de los componentes del sistema. Para aplicaciones ordinarias (no científicas) las operaciones sobre enteros (medidos en MIPS) son mucho más comunes. De lo anterior se deduce que medir el rendimiento en FLOPS no predice con precisión qué tan rápido un procesador realizará cualquier tarea. Sin embargo, para muchas aplicaciones científicas, como el análisis de datos, el rendimiento en FLOPS es una medida efectiva.
Tiempo de ejecución en Algoritmos
o El rendimiento de un computador X es inversamente proporcional al tiempo de ejecución:
o La máquina X es n veces más rápida que la máquina Y si:
El tiempo es la unidad de medida por excelencia cuando se comparan varios procesadores, aunque no siempre coincidan los puntos de vista de los diferentes observadores. Así, el usuario de un procesador puede decir que el procesador A es mejor que el procesador B cuando A ejecuta su programa en menor tiempo que B. En cambio el responsable de un centro de cálculo entenderá que A es mejor que B si es capaz de ejecutar mayor número de trabajos por unidad de tiempo. El primero estará interesado en el tiempo de respuesta (response time) del procesador mientras que el segundo lo estará en la productividad (throughput). Pero en ambos casos la clave es el tiempo: el procesador que realiza la misma cantidad de trabajo en el menor tiempo posible será el más rápido, la diferencia estriba en si medimos una tarea (tiempo de respuesta) o muchas (productividad). Medir de forma precisa este tiempo no es una tarea trivial, y los resultados pueden variar sensiblemente de un ordenador a otro. La cantidad de factores que pueden influir en el tiempo de ejecución es muy larga:
algoritmo usado
sistema operativo
velocidad del procesador, número de procesadores y conjunto de instrucciones que entiende
cantidad de memoria RAM, y caché, y velocidad de cada una
coprocesador matemático, GPU
Incluso en la misma máquina, el mismo algoritmo tarda algunas veces mucho más tiempo en dar el resultado que otras, debido a factores como el tiempo que consumen las otras aplicaciones que se están ejecutando, o si hay suficiente memoria RAM en el momento de ejecutar el programa.
IV.
PROCEDIMIENTO
1. Para medir el tiempo de ejecución de un algoritmo, se utilizara la siguiente estructura en lenguaje C++ #include #include #include #include int main(int argc, char *argv[]) { float x,y,s,r,p,d; clock_t start=clock(); gotoxy(15,2);cout<<"Operaciones de numeros"; gotoxy(10,5);cout<<"Ingrese Numero x:"; cin>>x; gotoxy(10,6);cout<<"Ingrese Numero y:"; cin>>y; s=x+y; r=x-y;
p=x*y; d=x/y; gotoxy(10,8);cout<<"*El resultado es:"; gotoxy(28,10);cout<
gotoxy(38,16);printf("....Tiempo transcurrido: %f",((double)clock() start)/CLOCKS_PER_SEC); getch(); }
2. Procederemos a compilar y ejecutar el programa para conocer el tiempo de ejecución:
El tiempo de ejecución es (A ): 3.604 ms El tiempo de ejecución de otra máquina es (B ): 4.274 ms 3. Calculamos el rendimiento de programación
4. Realizamos las comparaciones de rendimiento, de otro equipo de cómputo. Maquina
Tiempo Transcurrido
A
3.604 ms
B
4.274 ms
5. Procedemos a calcular la aceleración del rendimiento, según la siguiente formula:
6. Que podemos decir de A con respecto a B? La PC A es más eficiente y veloz que la PC B, su tiempo en ejecución es menor, su rendimiento mayor y en comparación de ambos la aceleración es de 1.188.
V.
ANALISIS Informe Final:
1. Realizar todos los pasos indicados en la presente práctica. 2. Realizar un programa computacional de decenas de líneas de código en lenguaje C++ y en Python, luego realizar la comparación del rendimiento de ambos programas. Dar y explicar los resultados obtenidos. ¿A qué se debe el rendimiento de X mejor que el de Y? Realice un algoritmo que al introducir dos números por teclado, imprime los números que hay entre ellos comenzando por el más pequeño, cuenta la cantidad que hay e imprime cuántos de ellos son pares, además calcula la suma de los números pares. A continuación, el código en Python y C++, respectivamente:
print "Nombre: Brenda Colque"
#ProgramaEnPython
import time p=0 cp = 0 c=0 n=0 h=0 h1 = input('Primer numero: ') h2 = input('Segundo numero: ') t0=time.clock() if h1 > h2: n = h2 h = h1 else: n = h1 h = h2 while n < h: n += 1 if n == h: break c += 1 print n,"\t", if n%2 == 0: cp += 1 p += n print '\nEntre % i y %i hay %i numeros siendo %i pares' % (h1, h2, c, cp) print 'La suma de los pares es %i' % p print "El tiempo de ejecucion fue: ",(time.clock()-t0) input()
//Programa en C++ #include #include #include void main (void) { int h1,h2,c=0,n=0,h=0,cp=0,p=0; cout<<"Nombre:Brenda Colque"<>h1; cout<<"Segundo numero: ";cin>>h2; clock_t start=clock(); if(h1>h2) {
n=h2;h=h1; } else { n=h1;h=h2; }
while(n
Resultados: Para ambos programas se tomó como 1er numero: 1 y como 2do numero: 200.
En Python: Tiempo de ejecución: 0.117 ms
En C++: Tiempo de ejecución: 0.062 ms
i.
Empezamos a Calcular el rendimiento de programación:
En Python: Tiempo de ejecución: 0.117 ms
En C++: Tiempo de ejecución: 0.062 ms
ii.
Comparamos los rendimientos: Programa
Tiempo Transcurrido
Python
0.117 ms
Borland C++
0.062 ms
iii.
Calculamos la Aceleración del rendimiento:
iv.
En este caso, podemos decir que el rendimiento de Borland C++, es más veloz que el de Python, ya que su rendimiento es de 0.529.
3. Realizar un programa que pueda medir uso de la memoria en tiempo de ejecución. Programa en C++: o Compara la velocidad de ejecución de la devolución del logaritmo natural de un número dado y lo introduce en un hash. o Se realizó el programa en una máquina virtual, con sistema operativo Gentoo Linux o Se guarda en un archivo de texto el siguiente código, con el nombre de benchmark.cpp #include #include