¿Qué hay que hacer en esta práctica? El objetivo de
esta práctica es la aplicación de las distintas métricas
vistas en clase en la evaluación de un determinado benchmark
y la comparación entre las distintas máquinas para ese
mismo programa (tiempo de ejecución) de prueba . Se deben realizar mediciones usando el programa benchmark.c , observad como se incluyen librerias de tiempo <time.h> en vuestro pc y posteriormente en una maquina UNIX como alboran ... para que veais las diferencias de tiempos, luego debereis demostrar con las mediciones que los principos de la ley de Amdhal son ciertos es decir, medir el programa completo, eso os dará un tiempo T1 luego los tiempos de los bucles internos, en benchmark hay dos por tanto obtendreis t1 y t2 y vereis que T1 es aprox t1+t2 luego realizaremos mejoras en uno de los bucles y veremos como la mejora de uno de los tiempos t afecta al tiempo T tal y como es calculable por la ley de Amdhal, es decir, debeis demostrar que el tiempo de mejora calculado por vosotros con la ley de Amdhal es el mismo que el medido en el sistema al hacer la mejora. |
Codigo fuente que vamos a usar |
Se necesitará para la realizacion de esta práctica cualquiera de los compiladores C incorporados en Linux (cc,gcc) y el codigo C para realizar el benchmark, para conseguir el codigo fuente pulse sobre este enlace " CÓDIGO C " .
|
¿Cómo iniciar el entorno gráfico? Teclee una vez dentro de su cuenta : startx una vez dentro dispone de un conjunto de herramientas de trabajo básicas como kedit, nedit, xterm, ddd, con las que deberá ir familiarizandose poco a poco.
|
Comando time > time "programa" La salida que obtenemos se desglosa en varios tiempos por ejemplo: 90.7u 12.9s 2:35 65% tiempo de usuario : 90.7 tiempo usado por el sistema : 12.9 tiempo transcurrido (empleado): 2:35 porcentaje de cpu que ha supuesto ese tiempo: 65% Por norma el tiempo transcurrido (ellapsed time) debe ser igual a la suma del tiempo de usuario y el tiempo de sistema SIEMPRE Y CUANDO LA CPU ESTE A NUESTRA DISPOSICION (100%-98%) en este caso se puede ver que 12.9 + 90.7 = 103.6s y el tiempo total han sido 2min 35seg. ¿POR QUE NO COINCIDE? pues porque hubo algun tiempo durante la ejecucion de nuestro programa que el sistema tuvo que esperar a ejecutar operaciones de E/S de otras aplicaciones que en ese momento se estaban ejecutando: 103.6s/159s = 0.65 lo que quiere decir que mas de una tercera parte del tiempo se ha empleado en las operaciones de E/S de otras aplicaciones ( el comando time nos dice que la cpu no ha estado enteramente a nuestra disposicion 65%) por ello el tiempo de usuario mas el tiempo de sistema no coinciden con el tiempo "transcurrido (ellapsed) " que nos da el comando time. EL CASO NORMAL EN LOS PCS DE PRACTICAS ES QUE COINCIDAN YA QUE SOLAMENTE ESTAIS VOSOTROS EJECUTANDO EL PROGRAMA.
Pero ¿Para que usar entonces las funciones como clock() de la libreria time.h cuando ya tenemos un comando que nos mide el tiempo de ejecucion, nos da el porcentaje de cpu usado .... ? El por qué del uso lo encontramos en la precision de la medida, por una lado con las funciones de la libreria time.h podemos medir lo que se tarda en ejecutar determinandas lineas de codigo (cuando el comando time solo puede medir el tiempo que tarda en ejecutarse la globalidad del programa) otro punto a favor es que la precision que nos da time llega como muy lejos a dos decimales (0.44 s) sin embargo como el tipo de datos que usamos para medir cuando usamos la libreria time.h es float y la precision con este tipo de datos es notablemente mayor con lo que las diferencias de tiempo quedan mejor determinadas.
|
Para
aquellos que deseen saber algo mas sobre time.h
|
Si por casualidad alguno esta interesado en saber como va el tema de las librerias time.h he aqui algunas avanzadillas sobre las nuevas propuestas para time.h y las funciones para manejarlas. NUEVA PROPUESTA PARA <time.h> para la API de ISO c
|