Metodología - vanech20/evaluacionfinal GitHub Wiki
Esta sección explica detalladamente cómo se diseñó la solución, cuáles son las entradas y salidas de cada componente, y las condiciones de operación para ejecutar el experimento completo.
-
Fase de Preparación (Usuario/GUI)
- El usuario abre la interfaz (
interfaz.py
) y selecciona:-
Carpeta de entrada (
images/
). - Número de procesos MPI a usar (por ejemplo, 4, 8, 12).
- Tamaño de kernel para desenfoque (impar entre 55 y 155).
-
Carpeta de entrada (
- La GUI verifica que todos los campos sean válidos.
- El usuario abre la interfaz (
-
Invocación del Ejecutable en C
- Una vez que el usuario hace clic en “Procesar” en la GUI,
main.py
(ointerfaz.py
) lanza un comando similar a:mpirun -np <num_procesos> ./procesar_imagenes <kernel_blur>
- Antes de lanzar el MPI, se comprueba que:
- El ejecutable
procesar_imagenes
(generado a partir demain.c
) exista y tenga permisos de ejecución. - La carpeta
results/
exista o se cree vacía.
- El ejecutable
- Una vez que el usuario hace clic en “Procesar” en la GUI,
-
Procesamiento en C (MPI + OpenMP)
-
Proceso maestro (rank 0):
- Lee
kernel_blur
deargv[1]
. - Abre
images/
y generaarchivos_global[]
con todas las rutas de archivos.bmp
. - Difunde (
MPI_Bcast
) el kernel, el total de imágenes (total_global
) y el arregloarchivos_global
. - Inicia temporizador con
MPI_Wtime()
. - En paralelo (OpenMP), ejecuta:
-
Sección A: Mientras haya imágenes sin blur, aplica
procesar_blur(...)
localmente en rank 0. -
Sección B:
- Reparte tareas ligeras a ayudantes (ranks ≥ 1), enviándoles una Tarea (
TAREA_LIGERA
oTAREA_BLUR
) según disponibilidad de índices. - Cuando un ayudante ya no encuentre más imágenes ligeras, recibe petición de blur y le envía una ruta, hasta que se acaben las imágenes.
- Marca
TAG_FIN
para indicar al rank que ya no hay más trabajo.
- Reparte tareas ligeras a ayudantes (ranks ≥ 1), enviándoles una Tarea (
-
Sección A: Mientras haya imágenes sin blur, aplica
- Una vez todos los ayudantes completaron su trabajo, recopila sus métricas (
Resultados rcv
) y calcula totales (bytes leídos, bytes escritos, imágenes procesadas). - Detiene el temporizador, calcula MIPS y MB/s, y escribe
results.txt
. - Finaliza con
MPI_Finalize()
.
- Lee
-
Procesos ayudantes (rank ≥ 1):
- Entran a un bucle recibiendo Tareas del maestro:
- Si la tarea es
TAREA_LIGERA
: llaman aprocesar_filtros_ligeros(...)
(internamente usan OpenMP para 5 filtros ligeros). - Si la tarea es
TAREA_BLUR
: llaman aprocesar_blur(...)
(OpenMP para blur). - Si la tarea es
tipo == -1
(fin), salen del bucle y envían sus métricas (Resultados local
) al maestro.
- Si la tarea es
- Salen de
MPI_Finalize()
y terminan.
- Entran a un bucle recibiendo Tareas del maestro:
-
-
Presentación de Resultados (GUI / Python)
- Tras completarse el
mpirun
,main.py
lee el archivoresults.txt
generado por C y despliega métricas al usuario. - La GUI (
interfaz.py
) puede opcionalmente mostrar miniaturas de las imágenes generadas enresults/
o simplemente listar los nombres de archivo.
- Tras completarse el
-
Entradas
-
kernel_blur
(argumento de línea de comandos): entero impar entre 55 y 155. - Carpeta
images/
con archivos.bmp
.
-
-
Salidas
- Carpeta
results/
, con subficheros por cada imagen original:<base>_grayscale.bmp
<base>_mirrorh.bmp
<base>_mirrorv.bmp
<base>_gray_mirrorh.bmp
<base>_gray_mirrorv.bmp
<base>_blur_<kernel>.bmp
- Archivo
results.txt
con métricas globales:- Tiempo total (segundos)
- Total de imágenes generadas
- Bytes leídos / escritos
- MIPS estimado
- Velocidad (MB/s y GB/s)
- Carpeta
-
Entradas
- Selección de carpeta de imágenes (GUI).
- Parámetros de ejecución (número de procesos MPI, tamaño de kernel).
-
Salidas
- Ejecución de
mpirun
con el ejecutable en C (no directa, sino porsubprocess
). - Lectura de
results.txt
y despliegue en GUI (por ejemplo, en un QTextEdit o lista). - Opcional: vista de miniaturas de las imágenes procesadas (implementable extendiendo la GUI).
- Ejecución de
-
Requisitos Previos
- Linux con GCC, OpenMP y MPI instalados:
sudo apt-get install build-essential libopenmpi-dev openmpi-bin
- Python 3.x con PyQt5 (o Flask, según versión de
interfaz.py
):pip install pyqt5
- Carpetas creadas:
-
images/
(con archivos .bmp) -
results/
(vacía, para guardar salidas)
-
- Linux con GCC, OpenMP y MPI instalados:
-
Compilación (C)
- Esto genera el ejecutable
procesar_imagenes
en la raíz del proyecto.
-
Ejecución Completa
-
Ejecutar la GUI:
cd python/ python main.py
(La interfaz pedirá la carpeta
images/
, número de procesos y kernel). -
Al presionar “Procesar”, la GUI (o
main.py
) lanza algo como:mpirun -np <n> ../procesar_imagenes <kernel>
-
Esperar a que termine
.
, revisarresults/
yresults.txt
. -
En la GUI, hacer clic en “Ver Resultados” o similar para leer y mostrar el contenido de
results.txt
. -
Escalabilidad y Validación
- Probar con distintos tamaños de clúster:
mpirun -np 4 ./procesar_imagenes 101
mpirun -np 8 ./procesar_imagenes 101
- Comparar tiempos en
results.txt
.
- Verificar que las imágenes resultantes realmente contengan los filtros correspondientes (abrir algunas con cualquier visor BMP).