Entradas

Presentación

Introducción En el presente blog se documenta el diseño, la implementación y el análisis estadístico de rendimiento de diversos paradigmas de cómputo paralelo y concurrente aplicados al procesamiento de imágenes. El proyecto consiste en someter a estrés el hardware aplicando un algoritmo de incremento de brillo sobre un set de tres imágenes idénticas en formato BMP de 24 bits, pero con resoluciones escalonadas: partiendo de una imagen mediana (base), duplicando sus dimensiones para una imagen grande, y cuadruplicándolas para una imagen muy grande. Para medir y contrastar la eficiencia computacional, el experimento se dividió en cuatro enfoques arquitectónicos principales: Secuencial (Baseline): Generación del tiempo base de procesamiento en C++ tradicional, ejecutado tanto en entorno Windows como en Linux. SIMD y POSIX Threads: Paralelización a bajo nivel utilizando instrucciones vectoriales (registros XMM) y escalamiento concurrente con 1, 2, 4, 8 y 16 hilos. OpenMP: Paralelización...

¿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?

Imagen
Hipotesis 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. 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...

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

Imagen
¿Cómo se comportan los tiempos de ejecución al incrementar el número de hilos? Introducción En esta entrada se analiza el rendimiento de un programa de procesamiento de imágenes BMP de 24 bits. El objetivo del programa es incrementar el brillo de una imagen utilizando una rutina SIMD en ensamblador y dividiendo el trabajo entre varios hilos. La pregunta que se busca responder es la siguiente: ¿Cómo se van a comportar los tiempos de ejecución al incrementar el número de hilos con un mismo tamaño de imagen a procesar? Esta pregunta es importante porque permite observar si el uso de más hilos realmente mejora el rendimiento del procesamiento de imágenes, y también permite identificar si existe un punto donde agregar más hilos deja de ser útil. Hipótesis iniciales Hipótesis 1: Se debería reducir el tiempo de ejecución, ya que con un mayor número de hilos se puede dividir la tarea en más partes y así ejecutar el código al mismo tiempo, consiguiendo así un menor tiempo de ejecución. Hipótesi...

¿Si Linux está ejecutándose en Virtual Box, que a su vez está instalada en Windows 11, cómo se espera que se comporte en los tiempos de ejecución de un sistema respecto a otro para una misma configuración de hilos y tamaño de imagen?

Imagen
Hipotesis: Para una misma configuración de hilos y tamaño de imagen, los tiempos de ejecución de Windows 11 Nativo serán significativamente menores que los de Linux Virtualizado. Esto se debe a que la capa de abstracción e hipervisión de VirtualBox introduce un overhead (sobrecarga) en la traducción de llamadas al sistema y gestión de memoria, anulando la ventaja competitiva y la eficiencia nativa que posee el planificador de Linux en entornos bare-metal.  Los tiempos de ejecución de Linux Virtualizado presentarán una mayor dispersión, variabilidad y cantidad de datos atípicos (picos de retraso) en comparación con la estabilidad de Windows 11 Nativo. Dado que el planificador de Windows 11 retiene la prioridad absoluta sobre el hardware real, cualquier tarea o proceso en segundo plano del sistema anfitrión interrumpirá de forma impredecible los recursos asignados a la máquina virtual, degradando la consistencia temporal característica de Linux. Hardware utilizado: CPU:  Ryzen 7...

¿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++?

Imagen
Hipotesis La versión en C/C++ reportará un Speedup algo superior al de Python. C/C++ se compila a código nativo ya que permite el uso real de hilos en paralelo y la implementación de bajo nivel con instrucciones SIMD permite procesar múltiples canales de píxeles simultáneamente por ciclo de reloj, aprovechando verdaderamente el hardware sin intermediarios. El código de Python tendrá un Speedup cercano a 1 (nulo o sin mejora) en arquitecturas multihilo puro debido al mecanismo Global Interpreter Lock, que restringe la ejecución de bytecode a un solo hilo nativo a la vez. Incluso si la IA genera un código estructurado con hilos, estos se ejecutarán de forma secuencial en la CPU, a menos que se recurra explícitamente a multiprocesamiento, el cual tiene una sobrecarga de memoria muy alta en comparación con C++. Metodología y diseño de pruebas Hardware utilizado: CPU: Intel Core Ultra 7 255H (Frecuencia Base: 2.00 GHz / Turbo Máximo: 5.10 GHz) 16 Núcleos físicos  22 Hilos Caché 24MB...

¿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?

Imagen
Hipotesis: A mayor tamaño de imagen es más probable que el tiempo de ejecución sea mayor, dependiendo incluso de la configuración, algunas podrían tener mejores resultados que otras, pero eso no quita el hecho de que el tamaño de imagen aumenta el tiempo de ejecución. La manera en que se podría explicar la variación, es que una imagen de mayor tamaño tiene un conjunto de bytes mayor, por lo que el proceso para transformar la imagen conlleva un mayor tiempo. La variación del tiempo no será exactamente proporcional al tamaño de la imagen en todas las configuraciones, porque también influyen factores como el acceso a memoria, el uso de caché, la sobrecarga de los hilos, el sistema operativo y la forma en que se reparte la carga de trabajo. En imágenes pequeñas, la sobrecarga puede pesar más que el procesamiento; en imágenes grandes, el paralelismo puede aprovecharse mejor.   Metodología y diseño de pruebas Hardware utilizado: CPU: Ryzen 7 8700G - 4.2 GHz base / 5.1 GHz turbo 8 Nú...

¿Qué va a ocurrir con el Speedup a medida que se incremente el número de hilos y se mantenga el tamaño de la imagen en cada sistema operativo?

Imagen
  Hipotesis: El Speedup crecerá de forma casi lineal con 2 y 4 hilos, así alcanzando su punto máximo, pero de igual forma empezará a decrecer cuando empiece a usar 8 y 16 hilos. Esto lo podemos fundamentar con la ley de Amdahl que nos dice que las porciones secuenciales de la actividad comenzarán a dominar el tiempo total de ejecución. El Speedup también comenzará a decrecer su rendimiento a trabajar con 4 hilos, al tener fijo el tamaño de la imagen, la cantidad de trabajo asignada a cada hilo individual se reduce tanto que el costo de coordinar y sincronizar los hilos mediante OpenMP o POSIX supera el beneficio del procesamiento paralelo.   Metodología y diseño de pruebas Hardware utilizado: CPU: Intel Core Ultra 7 255H (Frecuencia Base: 2.00 GHz / Turbo Máximo: 5.10 GHz) 16 Núcleos físicos  22 Hilos Caché 24MB Intel Smart Gráficos: AMD Radeon 780M - 2.9 GHz NVIDIA GeForce RTX 5060 Laptop GPU - 8 GB GDDR6 Dedicados Intel Graphics (Integrados) - 128 MB Memoría: 16GB ...