¿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?
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ú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)
Set de imágenes de prueba:
- (Normal) 620 x 465 Pixeles
- (Grande) 1240 x 930
- (Muy grande) 2480 x 1860
Código fuente:
Secuencial
SIMD Sin hilos
Resultados:
Los tiempos fueron capturados utilizando la API de alta precisión QueryPerformanceCounter() en un entorno de Windows 11 nativo. A continuación, se presenta el resumen estadístico de dichas ejecuciones, eliminando el sesgo de procesos en segundo plano del sistema operativo mediante el análisis de cuartiles.
Resumen Estadístico (Cuartiles y Mediana)
SIMD sin hilos:
Análisis visual y tendencias
Al observar las gráficas y compararlas con nuestra tabla de medianas, destacan dos comportamientos principales que responden directamente a nuestras interrogantes:
El tiempo se cuadruplica al duplicar las dimensiones: Existe una tendencia clarísima en ambas configuraciones. Al pasar de la imagen Mediana a la Grande, y de la Grande a la Muy Grande, el tiempo de ejecución se multiplica por un factor aproximado de 4x (ej. en Secuencial pasa de ~4.6 ms a ~18.8 ms, y luego a ~76.0 ms).
Superioridad absoluta de SIMD: Las gráficas evidencian que la paralelización a nivel de datos (SIMD) obtiene tiempos radicalmente menores en todos los tamaños de imagen. Mientras el código secuencial tarda milisegundos completos, SIMD resuelve las mismas imágenes en fracciones de milisegundo al procesar bloques de 16 bytes simultáneamente.
Conclusiones:
- En la configuración Secuencial: La carga de trabajo escala de forma casi perfectamente proporcional. Al duplicar las dimensiones de la imagen (lo que cuadruplica el área y el número de píxeles), el tiempo mediano pasó de 4.62 ms a 18.87 ms, y luego a 76.00 ms. Es un factor de crecimiento lineal de ~4x, ya que el procesador atiende un byte a la vez.
- En la configuración SIMD sin hilos: Aquí es donde la segunda hipótesis brilla. Aunque la vectorización aplastó los tiempos generales reduciéndolos a fracciones de milisegundo, el crecimiento dejó de ser proporcional. Al pasar de la imagen Grande a la Muy Grande, el tiempo saltó de 0.092 ms a 0.449 ms (un crecimiento de casi 4.8x).
Comentarios
Publicar un comentario