Вы находитесь на странице: 1из 15

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

II. MATERIALES Y EQUIPO


o 1 equipo de cmputo
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 ms veloz en su tarea especfica, la computadora ser ms rpida y por lo
tanto tendr un mejor rendimiento.

El rendimiento del microprocesador es uno (si no el ms 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.

Mtricas de Rendimiento

MIPS

MIPS es el acrnimo 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 optimizacin.
Esto es debido a que la misma tarea puede necesitar un nmero de instrucciones
diferentes si los juegos de instrucciones tambin 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 tambin es un factor clave para la potencia de un
procesador, algo que no suele considerarse en los clculos con MIPS.procesadores. Sin
embargo, esta medida slo es til para comparar

FLOPS

Para que se pueda usar el FLOPS como medida de rendimiento de punto flotante una
referencia estndar debe ser establecida para todas las computadoras de inters. Uno de
ellos es el estndar LINPACK.

Los FLOPS por s solos no son un muy til estndar para computadoras modernas. Existen
muchos otros factores de rendimiento tales como I/O (Entrada/Salida), comunicacin
inter procesador, coherencia del cache y jerarqua de memoria. Esto significa que las
computadoras en general son slo capaces de una fraccin del pico terico en FLOPS,
obtenido adicionando el pico terico en FLOPS de cada uno de los componentes del
sistema.

Para aplicaciones ordinarias (no cientficas) las operaciones sobre enteros (medidos en
MIPS) son mucho ms comunes. De lo anterior se deduce que medir el rendimiento en
FLOPS no predice con precisin qu tan rpido un procesador realizar cualquier tarea. Sin
embargo, para muchas aplicaciones cientficas, como el anlisis de datos, el rendimiento
en FLOPS es una medida efectiva.
Tiempo de ejecucin en Algoritmos

o El rendimiento de un computador X es inversamente proporcional al tiempo de


ejecucin:

o La mquina X es n veces ms rpida que la mquina 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 clculo entender que A es mejor que B si es capaz de
ejecutar mayor nmero 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 ms rpido, 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 ejecucin es muy larga:
algoritmo usado
sistema operativo
velocidad del procesador, nmero de procesadores y conjunto de
instrucciones que entiende
cantidad de memoria RAM, y cach, y velocidad de cada una
coprocesador matemtico, GPU

Incluso en la misma mquina, el mismo algoritmo tarda algunas veces mucho ms tiempo
en dar el resultado que otras, debido a factores como el tiempo que consumen las otras
aplicaciones que se estn ejecutando, o si hay suficiente memoria RAM en el momento de
ejecutar el programa.

IV. PROCEDIMIENTO
1. Para medir el tiempo de ejecucin de un algoritmo, se utilizara la siguiente
estructura en lenguaje C++

#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <time.h>
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<<x<<"+"<<y<<"="<<s;
gotoxy(28,11);cout<<x<<"-"<<y<<"="<<r;
gotoxy(28,12);cout<<x<<"*"<<y<<"="<<p;
gotoxy(28,13);cout<<x<<"/"<<y<<"="<<d;
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


ejecucin:

El tiempo de ejecucin es (A ): 3.604 ms

El tiempo de ejecucin de otra mquina es (B ): 4.274 ms

3. Calculamos el rendimiento de programacin


4. Realizamos las comparaciones de rendimiento, de otro equipo de cmputo.

Maquina Tiempo Transcurrido


A 3.604 ms

B 4.274 ms

5. Procedemos a calcular la aceleracin del rendimiento, segn la siguiente formula:

6. Que podemos decir de A con respecto a B?


La PC A es ms eficiente y veloz que la PC B, su tiempo en ejecucin es menor, su
rendimiento mayor y en comparacin de ambos la aceleracin es de 1.188.

V. ANALISIS

Informe Final:

1. Realizar todos los pasos indicados en la presente prctica.


2. Realizar un programa computacional de decenas de lneas de cdigo en lenguaje
C++ y en Python, luego realizar la comparacin 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 nmeros por teclado, imprime los
nmeros que hay entre ellos comenzando por el ms pequeo, cuenta la
cantidad que hay e imprime cuntos de ellos son pares, adems calcula la suma
de los nmeros pares.
A continuacin, el cdigo 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 <conio.h>
#include <iostream.h>
#include <time.h>
void main (void)
{
int h1,h2,c=0,n=0,h=0,cp=0,p=0;
cout<<"Nombre:Brenda Colque"<<endl;
cout<<"Primer numero: ";cin>>h1;
cout<<"Segundo numero: ";cin>>h2;
clock_t start=clock();
if(h1>h2)
{ n=h2;h=h1; }
else
{ n=h1;h=h2; }
while(n<h)
{n++;
if(n==h)
{break;}
c++;cout<<n<<"\t";
if(n%2==0)
{cp++;p+=n;}
}
cout<<"\nEntre "<<h1<<"y "<<h2<<" hay "<<c<<" numeros siendo "<<cp<<" pares";
cout<<"\nLa suma de los pares es "<<p<<"";
cout<<"\nTiempo de ejecucion: "<<((double)clock()-start)/CLOCKS_PER_SEC;
getch();
}
Resultados:

Para ambos programas se tom como 1er numero: 1 y como 2do numero: 200.

En Python: Tiempo de ejecucin: 0.117 ms

En C++: Tiempo de ejecucin: 0.062 ms


i. Empezamos a Calcular el rendimiento de programacin:

En Python: Tiempo de ejecucin: 0.117 ms

En C++: Tiempo de ejecucin: 0.062 ms

ii. Comparamos los rendimientos:

Programa Tiempo Transcurrido


Python 0.117 ms

Borland C++ 0.062 ms

iii. Calculamos la Aceleracin del rendimiento:

iv. En este caso, podemos decir que el rendimiento de Borland C++, es ms 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
ejecucin.

Programa en C++:

o Compara la velocidad de ejecucin de la devolucin del logaritmo natural de un


nmero dado y lo introduce en un hash.
o Se realiz el programa en una mquina virtual, con sistema operativo Gentoo Linux
o Se guarda en un archivo de texto el siguiente cdigo, con el nombre de
benchmark.cpp

#include &#60;iostream&#62;
#include &#60;map&#62;
#include &#60;cmath&#62;
using namespace std;
int main()
{ map &#60;float , float&#62; dict;
for (int i = 0; i &#60; 5000000; i++)
{dict[i] = log(i);}
return 0;
}

o Luego se ejecuta desde la consola con los siguientes comandos:

genbeta@dev $ g++ -O3 -Wall -c -fmessage-length=0 -MMD -MP benchmark.cpp -


o cppbenchmark.o
g++ -o cppbench cppbenchmark.o
o El cual arroja como resultado en pantalla:

Lenguaje Tiempo Tiempo Tiempo Uso de Uso de


Usuario Sistema Real CPU Ram

C++ 4.07s 0.14s 4.24s 99% 941808 kB

4. Investigue que otras mtricas se utilizan para el anlisis del rendimiento.

En algunos casos otras medidas podran ser relevantes:

o Capacidad de transmisin: el ancho de banda puede llegar a ser un factor


limitante. La compresin de datos es utilizada para reducir la cantidad de datos a
transmitir.
o Espacio externo: cantidad de espacio requerido en disco o algn otro dispositivo
externo; esto podra ser solo una necesidad temporal, o sea solo se requiere dicho
espacio mientras est corriendo e algoritmo o podra ser una necesidad a largo
plazo para futuras referencias.
o Tiempo de respuesta: Esto es particularmente relevante en tiempo real para una
aplicacin cuando el sistema de la computadora debe responder de forma rpida a
los eventos externos.

5. Investigue sobre los factores del rendimiento de programas y mencione


ejemplos.

a. Tiempo de usuario: Es el tiempo que la CPU utiliza para ejecutar el programa del
usuario. No se tiene en cuenta el tiempo de espera debido a la E/S o el tiempo
utilizado para ejecutar otros programas
b. Tiempo de sistema: Es el tiempo que el sistema emplea para realizar su gestin
interna.
c. Uso de CPU : Es el tiempo que tarda en ejecutarse un programa, sin tener en
cuenta el tiempo de espera debido a la E/S o el tiempo utilizado para ejecutar
otros programas.
d. Tiempo real: Es el tiempo necesario para completar una tarea, incluyendo los
accesos al disco, a la memoria, las actividades de E/S y los gastos del S.O. Es el
tiempo que percibe el usuario
e. Uso de RAM: La memoria consumida en tiempo de ejecucin.

o Por ejemplo, con :

Sistema Operativo: Gentoo Linux

Arquitectura: x86_64

Procesador: Intel Core i7 CPU @ 2.80GHz

Velocidad RAM: 1666

Lenguaje Tiempo Tiempo Tiempo Uso de Uso de


Usuario Sistema Real CPU Ram

C# 1.72s 0.29s 2.01s 131% 2032176kB

C 1.90s 0.27s 2.19s 99% 1826704kB

Python 2.7.2 3.43s 0.37s 3.86s 99% 2101312kB


VI. CONCLUSIONES

o Cada programa tiene su propio consumo de recursos.


o Al trabajar con un cdigo pequeo o grande aprendimos cmo se comporta este
para esa cantidad de datos.
o La complejidad de un algoritmo slo se denota para grandes problemas o excesiva
data.
o Las dos medidas ms comunes en el rendimiento de algoritmos son: Complejidad
temporal (cuanto se demora un algoritmo en terminar) y Complejidad espacial
(cuanta memoria operativa (RAM usualmente) es requerida por el algoritmo).

VII. OBSERVACIONES

o Al realizar un buen algoritmo, es decir, eficiente el tiempo que tomara en


ejecutarse ser optimo, ya que el compilador no tomara instrucciones
innecesarias.
o Mientras mayor es el nmero de instrucciones que hay en un algoritmo, segn
cada compilador de cada programa tomara un tiempo de ejecucin diferente a
como est diseado.
o Mientras ms moderna sea la computadora, ms eficiente se considera en tiempo
de ejecucin.
o Al comparar en tiempo de ejecucin a los programas, tambin observamos cual es
ms cmodo y veloz para nosotros, cual satisface nuestras necesidades en cuanto
a programacin.
VIII. WEBGRAFIA

[1] Rincn, L. (24 de Marzo de 2008). ESTRUCTURA Y TECNOLOG ESTRUCTURA Y


TECNOLOGA DE COMPUTADORES: Medidas de rendimiento en los computadores.
Recuperado de:
https://previa.uclm.es/profesorado/licesio/Docencia/ETC/15_MedidasRendimiento_itis.p
df el 07 de Junio de 2017.

[2] Wikipedia. (04 de Septiembre de 2016). EFICIENCIA ALGORITMICA, Benchmarking:


midiendo la eficiencia. Recuperado de:
https://es.wikipedia.org/wiki/Eficiencia_Algor%C3%ADtmica#Benchmarking:_midiendo_la
_eficiencia el 12 de Junio de 2017.

[3] Maas, J. (noviembre de 1997). ANLISIS DE ALGORITMOS: Complejidad. Recuperado


de: http://www.lab.dit.upm.es/~lprg/material/apuntes/o/index.html el 12 de Junio de
2017.

[4] Alarcn, J. (14 de Junio de 2016). RENDIMIENTO DE ALGORITMOS Y NOTACIN BIG-O.


Recuperado de: https://www.campusmvp.es/recursos/post/Rendimiento-de-algoritmos-
y-notacion-Big-O.aspx el 12 de Junio de 2017

Вам также может понравиться