¿Qué va a ocurrir con el Speedup a medida que se incremente el tamaño de las imágenes en cada sistema operativo, pero con el mismo número de hilos por prueba?

Hipotesis

  1. El Speedup será mayor cuando aumente el tamaño de la imagen, porque habrá más píxeles para repartir entre los hilos. En imágenes pequeñas, el trabajo es tan poco que el tiempo usado en crear y coordinar los hilos puede pesar demasiado; en cambio, con imágenes más grandes, ese costo se compensa mejor porque cada hilo tiene más trabajo real que hacer.

  2. En imágenes muy grandes, el Speedup podría dejar de crecer aunque se mantenga el mismo número de hilos. Esto puede pasar porque el problema ya no estaría tanto en la cantidad de operaciones del procesador, sino en qué tan rápido el sistema puede leer y escribir datos en memoria. Es decir, llega un punto donde el límite lo pone el hardware, principalmente la memoria y la caché, no solamente el número de hilos (Al hardware le falta power).

Metodología y diseño de pruebas

Hardware utilizado:

CPU:

  • Ryzen 7 8700G - 4.2 GHz base / 5.1 GHz turbo
  • 8 Núcleos
  • 16 Hilos
  • Caché 24MB

Gráficos:

  • AMD Radeon 780M - 2.9 GHz

Memoría:

  • 2 x 16GB
  • DDR5
  • 6000 MHz

Sistema operativo:

  • Windows 11 Home (Nativo)

Hardware virtualizado:

  • 8 Núcleos

Memoría:

  • 16GB

Sistema operativo:

  • Ubuntu 26 (Virtualizado)

Set de imágenes de prueba:

  • (Normal) 620 x 465 Pixeles
  • (Grande) 1240 x 930
  • (Muy grande) 2480 x 1860

Código fuente: 

OpenMP (Windows / Linux)

Utiliza directivas de alto nivel (#pragma) para paralelizar el ciclo que recorre los píxeles de la imagen. El compilador se encarga de instanciar los hilos (8 en este caso) y repartir la carga matricial. Para Linux, la librería de Windows se cambia por <sys/time.h> para la captura del tiempo.

Resultados: 

Para evaluar el rendimiento del paralelismo, el cálculo de Speedup se ejecutó analizando 100 iteraciones exactas por cada tamaño de imagen (Normal, Grande y Muy Grande) manteniendo una configuración constante de 8 hilos con OpenMP. Los tiempos comparativos fueron capturados utilizando las APIs de alta precisión (QueryPerformanceCounter en Windows nativo y gettimeofday en Linux). A continuación, se presenta el resumen estadístico de la aceleración obtenida, eliminando valores atípicos del sistema operativo mediante el análisis de cuartiles.

Análisis visual y tendencias

Windows



Linux


Al observar las gráficas y compararlas con nuestra tabla de medianas, destacan dos comportamientos principales que responden directamente a nuestras interrogantes:

  • El peso del Overhead en imágenes pequeñas: En la configuración de la imagen Normal (Linux), existe una tendencia clarísima de baja eficiencia. El Speedup fluctúa apenas entre 1.0x y 1.6x, lo que se refleja en una caja sumamente comprimida en la parte baja de la gráfica.

  • Aceleración progresiva y sostenida: Al pasar de la imagen Normal a la Grande, y luego a la Muy Grande, el Speedup no se detiene. En Linux escala de ~2.5x a ~5.5x, mientras que en la ejecución nativa de Windows (imagen Muy Grande) se observa una aceleración monumental que promedia los ~15.6x.

Conclusiones:

Para dar respuesta a la interrogante sobre el comportamiento del Speedup a medida que se incrementa el tamaño de las imágenes manteniendo el mismo número de hilos por prueba, el equipo planteó dos hipótesis. La primera sugería que el Speedup sería mayor al aumentar el tamaño porque se compensaría el costo de coordinar hilos al haber más píxeles por procesar. La segunda hipótesis planteaba que en imágenes muy grandes el Speedup dejaría de crecer, estancándose al topar con el límite del ancho de banda de la memoria del hardware.

Tras analizar las 100 ejecuciones de OpenMP, se determina que la primera hipótesis es la acertada y la que más se apega a la contundencia de los datos. El rendimiento escaló positivamente al existir una mayor carga de trabajo:
  1. En imágenes pequeñas (Normal): El costo computacional de crear, coordinar y destruir los 8 hilos pesa demasiado frente al poco trabajo aritmético necesario para recorrer la imagen. La ganancia paralela es marginal.

  2. En imágenes de mayor tamaño (Grande y Muy Grande): El paralelismo se aprovecha a su máxima capacidad. El Speedup nunca dejó de crecer ni se topó con un cuello de botella en la RAM como sugería la segunda hipótesis. Al contrario, al fragmentar la inmensa cantidad de píxeles entre los hilos, cada uno manejó un bloque de datos que encajó eficientemente en la memoria caché del procesador, disparando el rendimiento y demostrando que la sobrecarga inicial del sistema operativo queda completamente amortizada.

Comentarios

Entradas más populares de este blog

¿Cómo se van a comportar los tiempos de ejecución si se mantiene el código, pero se varía el tamaño de la imagen a procesar, en cada configuración? Y ¿existe una variación y si existe cómo se podría explicar tal variación observada?

¿Cómo se comportan los tiempos de ejecución al incrementar el número de hilos?

¿Qué código reportará mejor Speedup, el generado por IA en un lenguaje de alto nivel como Python o el de la versión C/C++?