(Para entender el problema lea el enunciado lab1.pdf)
Tambien existe la imagen lines.pgm está disponible en el repo para ser dilatada.
Utilicé las funciones intrínsecas de intel para registros mmx de 256bits tales como: _mm256_store_si256, _mm256_max_epu8, _mm256_loadu_si256. Nota: No fue posible implementar esta solución con registros de 512bits dado que mi pc no soporta la familia AVX-512.
Dado que las funciones de store y load reciben un puntero a una dirección de memoria es posible simplemente sumar un (contador o puntero) para seguir almacenando en la posición deseada, dado que estamos almacenando la imagen en un arreglo unidimensional para que esta estrategia funcione, la posición del pixel está dada por Arreglo[Width * i + j]
Programa creado en Windows 10, con compilador gcc versión: 12.1.0
$ make
$ .\dilation.exe -i [string.pgm] -s [string.pgm] -p [string.pgm] -N [entero]
Donde:
- -i: Imagen .pgm de entrada
- -s: Nombre imagen salida secuencial
- -p: Nombre imagen salida paralela
- -N: Ancho de la imagen
.\dilation.exe -i bike.pgm -s imagen_salida_secuencial.pgm -p imagen_salida_paralela.pgm -N 256
$ make test_bike
$ make test_lines
$ diff imagen_salida_paralela.pgm imagen_salida_secuencial.pgm
Y si no arroja nada las imágenes son idénticas, es decir que se obtiene el mismo resultado.