Con el ánimo de comparar la eficiencia computacional de técnicas de análisis y transformación de imagenes y video por software y hardware, se mide la tasa de frames en la ejecución de dichos algoritmos implementados previamente. De igual manera se recopilan resultados de dos equipos de computo cuyas características se muestran a continuación:
Característica | Equipo A | Equipo B |
---|---|---|
Sistema Operativo | Windows 10 x64 | Windows 10 x64 |
Procesador CPU | AMD Ryzen 5 3500U (8 cores) 2.10 GHz | Intel(R) Core(TM) i5-7200 (8 cores) 2.5 GHz |
GPU | AMD Radeon Graphics Vega 8 - 5GB | Intel(R) HD Graphics 620 - 4GB |
Memoria RAM | 8.00 GB | 8.00 GB |
Los algoritmos/ técnicas que se observaráan en el presente taller son:
Máscaras de Convolución
Escala de Grises
Ascii Art
Para lograr el cometido del taller se usará las siguientes utilidades de p5.js:
frameRate(): Muestra y permite definir la tasa de frames por segundo mostrados en pantalla.
frameCount: Guarda la cantidad de frames procesados hasta el momento, desde el inicio de la ejecución.
deltaTime: Contiene la diferencia de tiempo entre el inicio del frame anterior y el inicio del frame actual en milisegundos.
Por medio de estas se conocerá el desempeño de las implementaciones en cada máquina. A continuación se detallan las intrucciones y el código que se implementó para el cálculo y visualización de estadísticas de desempeño tanto por medio de Software como por Hardware.
No. | Descripción |
---|---|
1 | Iniciar la ejecución de la operación correspondiente a la implementación que se observa (Convolución, Escala de Grises, Ascii-Art) |
2 | Para las Implementaciones por Hardware se inicializan elementos tipo html que tendrán los valores de las estadísticas |
3 | En cada ciclo de ejecuciión de la función draw() se actualizan los valores de las estadísticas observadas así: |
4 | Implementaciones por Software: Se muestra en cada iteración los valores actuales y calculados con textos de p5.js |
5 | Implementaciones por Hardware: Se cambia el texto en los objetos html previamente inicializados para mostrar los nuevos valores actuales y calculados |
6 | Se vuelve a realizar desde el paso 3 en adelante |
1link
2link//MEDICION FPS
3linkvar fpsVal; //FPS actuales
4linkvar framesTotalVal; //Total de frames ejecutados
5linkvar deltaTimeVal; // Tiempo entre ejecucion de frames
6linkvar FpsPromVal; // Promedio de fps en lo ejecutado hasta el momento
7linklet fpsTotal = 0.0; // Acumulador de todos los fps para el calculo del promedio
8link
9linkfunction setup() {
10link // .... Codigo anterior...
11link
12link// MEDICION FPS
13link // Texto de Frames actuales
14link let fpsTxt = createP("FPS actual: ");
15link fpsTxt.position(50, 400);
16link fpsTxt.style('font-size', '30px');
17link //Valor cambiante de los fps actuales
18link fpsVal = createDiv(0);
19link fpsVal.position(190, 430);
20link fpsVal.style('font-size', '30px');
21link //Texto de Cantidad de frames totales
22link let framesTotalTxt = createP("Cantidad frames totales: ");
23link framesTotalTxt.position(50, 450);
24link framesTotalTxt.style('font-size', '30px');
25link //Valor cambiante de Cantidad de frames totales
26link framesTotalVal = createDiv(0);
27link framesTotalVal.position(350, 480);
28link framesTotalVal.style('font-size', '30px');
29link //Texto de tiempo entre frames
30link let deltaTimeTxt = createP("Tiempo (ms) entre el frame anterior y el actual: ");
31link deltaTimeTxt.position(50, 500);
32link deltaTimeTxt.style('font-size', '30px');
33link //Valor cambiante de tiempo entre frames
34link deltaTimeVal = createDiv(0);
35link deltaTimeVal.position(190, 560);
36link deltaTimeVal.style('font-size', '30px');
37link //Texto de fps promedio
38link let FpsPromTxt = createP("FPS Promedio: ");
39link FpsPromTxt.position(50, 570);
40link FpsPromTxt.style('font-size', '30px');
41link //Valor cambiante de fps promedio
42link FpsPromVal = createDiv(0);
43link FpsPromVal.position(250, 600);
44link FpsPromVal.style('font-size', '30px');
45link
46link // .... Codigo posterior...
47link
48link}
49linkfunction draw() {
50link // .... Codigo anterior...
51link
52link //Muestra valores de rendimiento en pantalla
53link fpsVal.html(frameRate()); //fps
54link framesTotalVal.html(frameCount);//Cantidad de frames
55link deltaTimeVal.html(deltaTime);// Tiempo entre frames
56link fpsTotal += frameRate();//Se acumula el valor de fps para calcular el promedio
57link FpsPromVal.html(fpsTotal / frameCount);//Promedio de fps
58link
59link // .... Codigo posterior...
60link}
1linklet fpsTotal = 0.0;//Acumulador de valores de fps para calculo del promedio
2linkfunction draw() {
3link // .... Codigo anterior...
4link
5link //Muestra valores de rendimiento en pantalla
6link text("FPS actual: " + frameRate(), 50, 450);//fps
7link text("Cantidad frames totales: " + frameCount, 50, 490);//Cantidad de frames
8link text("Tiempo (ms) entre el frame anterior y el actual: ", 50, 530);
9link text(deltaTime, 50, 570);// Tiempo entre frames
10link fpsTotal += frameRate();//Se acumula el valor de fps para calcular el promedio
11link text("FPS Promedio: " + fpsTotal / frameCount, 50, 610);//Promedio de fps
12link
13link // .... Codigo posterior...
14link}
Se toma en cuenta que en cada una de las siguientes secciones se realizarán análisis sobre el desempeño obtenido con relación a las implementaciones observadas. De manera que lo presentado anteriormente supone lo que todas las mencionadas tienen en común.