Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Práctica Final
Programación Paralela
Curso 2022/2023
Programación Paralela
Índice de contenidos
1. Abstract .................................................................................................................................. 3
2. Introducción ............................................................................................................................ 4
3. El problema de la clasificación y clusterizado........................................................................ 4
3.1 Clasificación ...................................................................................................................... 5
3.2 Clusterizado ....................................................................................................................... 6
4. Paralelización del algoritmo ................................................................................................... 7
4.1 Código secuencial ............................................................................................................. 7
4.1.1 Descripción del código secuencial ................................................................................ 7
4.1.2 Resultados del código secuencial ............................................................................... 10
4.2 Paralelización en procesadores multinúcleo ................................................................... 11
4.2.2 Comparación de rendimiento con el código secuencial .............................................. 13
4.2.3 Análisis de escalabilidad ............................................................................................. 13
4.3 Paralelización en tarjetas gráficas................................................................................... 15
5. Resultados experimentales .................................................................................................. 19
5.1 Entorno de simulación ..................................................................................................... 19
5.2 Resultados ....................................................................................................................... 21
6. Conclusiones ........................................................................................................................ 23
7. Bibliografía ........................................................................................................................... 24
8. Apéndices............................................................................................................................. 25
1. Abstract
The objective of this work is to use the Fuzzy Minimals classification and clustering algorithm and
modify it so that it can be executed in parallel in order for the code to work faster. It will be done
in both shared memory on the CPU and in GPU with CUDA. When the two ways of doing
parallelization have been done, graphs will be made to check the performance of both and find
out which is better.
2. Introducción
En la actualidad cada vez más personas utilizan Internet, lo cual hace que cada vez se
generen más datos los cuales tienen por nombre “Big Data”. El Big Data es un gran
conjunto de datos de los cuales se puede extraer información. Sin embargo, extraer
información de un conjunto de datos tan grande es bastante complicado aún a día de hoy.
Uno de los métodos para extraer dicha información es mediante los algoritmos de
clustering. La función de estos algoritmos es agrupar un conjunto de elementos dados en
patrones y así poder clasificarlos. (Cebrian, 2020). Grandes compañías como Netflix
utilizan estos algoritmos para conocer los gustos de los consumidores y conocer qué tipo
de series y pelis deben hacer.
Uno de estos algoritmos se llama Fuzzy Minimals. Este es un algoritmo muy potente para
la clusterización. Sin embargo con código lineal va muy lento para un conjunto de datos
muy extenso. Por ello el objetivo de este trabajo es coger ese algoritmo ya establecido y
modificarlo para que se pueda ejecutar en paralelo. Se hará este proceso de dos formas:
Una vez que se obtenga el tiempo de los dos, se hará un gráfico para comprobar cuál de
las dos maneras es más rápida y por tanto la mejor para nuestro problema de velocidad.
3.1 Clasificación
Estos problemas envían como respuesta una variable cualitativa de la cual se predice la
clase o categoría de esa observación.
Hay varios métodos para predecir la probabilidad que tiene una observación de pertenecer
a una determinada categoría, estos son algunos ejemplos:
Algunos ejemplos de casos en los que se puede usar son para clasificar coches según su
gama o para clasificar muestras de ADN en función de la enfermedad que tengan.
Normalmente este tipo de problemas calcula la probabilidad de las clases y juegos las
observaciones se clasifican. Se necesita una función que transforme los datos de entrada
en una probabilidad para que sea de una determinada clase.
Además, esta función debe hacer que los distintos resultados sean cercanos a los valores
reales de la clase. Por ejemplo, si A vale 1 y B vale 0, queremos que si el dato tiene un
valor cercano a 1 pertenezca a A y viceversa para B. Se suele utilizar la función de
verosimilitud utilizando los datos de entrenamiento (Tuplas( X, Y)) y los β son los
parámetros que maximizan l(β).(Gonzalo, 2018)
Ilustración 1
3.2 Clusterizado
La principal característica de estos algoritmos es su gran conjunto de técnicas para
determinar grupos en los datos. Al agrupar los datos se quiere encontrar particiones para
dividir los datos pero que sean homogéneos. Esto quiere decir que queremos que los datos
de un mismo grupo sean parecidos pero que los de otros sean muy distintos.
La definición de parecido varía y depende de los datos que se estén estudiando.
Algunos algoritmos de agrupamiento son:
● K-means: Es el algoritmo de agrupamiento más utilizado ya que es el más
simple. Lo que hace es minimizar la varianza de los datos dentro de un grupo. Suele
funcionar mejor con datos pequeños. (Betancourt, 2021)
● DBSCAN: Se basa en la densidad, es utilizado en conjunto de datos que
contienen ruido o valores poco comunes. Hace uso de dos parámetros para determinar si
un punto de datos está en la misma área que otro. (González, 2021)
Ilustración 2
Ilustración 3
Acá se calcula el factor R de manera secuencial haciendo uso de funciones que lo apoyen como
el calculo de la matriz de covarianza y su determinante, para ir calculando una constante que
luego servirá para el cálculo del factor R.
Ilustración 4
Es muy similar al método LU, pero es más eficiente para matrices grandes. (Rodó, 2019)
Ilustración 5
Ilustración 6
Estos son los resultados que se obtuvieron al ejecutar el programa de manera secuencial
(ilustración 6):
4.2.1 Implementación
Originalmente se había decidido paralelizar esta función, pero los resultados no fueron los
mejores esperados ya que había momentos en los que los datos se solapaban y el determinante
no siempre era el esperado.
La mejor opción de paralelización que se encontró fue la de usar la paralelización desde el calculo
de f1, usando una reducción y que cada hilo se encargue de sus propias matrices de covarianza
y determinante.
Los centroides es un apartado sencillo de paralelizar ya que no se mezclan los índices y es muy
fácil hacer el cálculo de los centroides.
Si tomamos el promedio de todos los tiempos de todos los casos ejecutados. El código en
paralelo tiene un rendimiento de aproximadamente 7x más rápido (tomando en cuenta los datos
que se muestran los tiempos tanto en OMP y SEQ).
hiper30kR10C.txt
350
300
250
200
150
hiper30kR10C.txt
100
50
0
1 2 4 6 8 10 12
Es por eso que se opto que cada hilo haga su propia matriz de covarianza y determinante (ver
ilustración 10). Solo hay que tener cuidado que cada hilo debe gestionar su propia memoria para
que no haya accesos entre los punteros.
4.3.1 Implementación
El principal cambio acá es que ahora la GPU hará todo el calculo de f1 haciendo el calculo dentro
del kernel el cual se usa como el for que se veía en los casos anteriores (ilustración 10)
Acá se muestra el código del Kernel (ilustración 18 y 19) se calcula se manda a llamar el kernel
desde la función Calculo_f1_MAT_CUDA (ilustración 16 y 17).
Cabe recalcar que es muy importante las sincronizaciones de los hilos ya que se está usando
memoria compartida entre bloques y es necesario tener toda la información de todos los
bloques antes de poder continuar.
5. Resultados experimentales
Ilustración 26 meminfo
Ilustración 27 meminfo
Las características de la gpu con el comando lspci -v -s `lspci | grep VGA | awk '{print
$1}'` son:
VGA compatible controller: ASPEED Technology, Inc. ASPEED Graphics Family (rev
30) (prog-if 00 [VGA controller])
5.2 Resultados
Acá se muestra un resumen de los resultados obtenidos en las distintas pruebas.
Como se muestra a medida que hay más datos, se nota magistralmente el aumento de
rendimiento que se obtiene en OMP vs SEC y especialmente GPU vs SEC y OMP.
6. Conclusiones
Tras concluir las distintas pruebas hechas, podemos concluir que el propósito del trabajo ha sido
un éxito. Al hacer que el código se ejecute paralelamente, este gana una velocidad de ejecución
mucho más alta que en secuencial. Además, comparando los dos métodos de paralelización
OPM y CUDA, se ha llegado a la conclusión de que el mejor método para aumentar la velocidad
del algoritmo Fuzzy Minimals es con CUDA.
La programación OMP es muy fácil de programar ya que hay muy pocas diferencias entre la
forma de programar secuencial. Solo hay que tener ciertos cuidados. Lo cual hace que se puedan
obtener grandes ganancias por cortos esfuerzos de programación. Sin embargo, si el dataset a
utilizar es excesivamente grande, es mucho mejor considerar implementar CUDA.
7. Bibliografía
Amazon. (s. f.). ¿Qué es la regresión logística? - Regresión logística - AWS. Amazon
Web Services, Inc. https://aws.amazon.com/es/what-is/logistic-regression/
Betancourt, J. C. M. (2021, 16 diciembre). 8 algoritmos de agrupación en clústeres en el
aprendizaje automático que todos los científicos de datos deben conocer.
freeCodeCamp.org.
Cebrian, J. M., Imbernón, B., Soto, J., García, J. M., & Cecilia, J. M. (2020). High-
throughput fuzzy clustering on heterogeneous architectures. Future Generation
Computer Systems, 106, 401-411.
González, L. (2021, 8 septiembre). DBSCAN Teoría. Aprende IA.
https://aprendeia.com/dbscan-teoria/
Gonzalo, A. (2018, 25 diciembre). Problemas comunes en aprendizaje automático.
MachineLearningParaTodos.com. Recuperado 10 de enero de 2023, de
https://machinelearningparatodos.com/problemas-comunes-en-aprendizaje-automatico/
Gorini, M. (2022, 5 abril). Clasificación vs. clusterización: una explicación práctica.
https://blog.bismart.com/la-clasificaci%C3%B3n-y-la-clusterizaci%C3%B3n-una-
explicaci%C3%B3n-pr%C3%A1ctica https://www.freecodecamp.org/espanol/news/8-
algoritmos-de-agrupacion-en-clusteres-en-el-aprendizaje-automatico-que-todos-los-
cientificos-de-datos-deben-conocer/
Mendoza, J. (2020, 23 noviembre). ¿Qué es un modelo SVM?
https://estadisticamente.com/que-es-un-modelo-svm/
Merkle. (2020, 1 septiembre). El algoritmo K-NN y su importancia en el modelado de
datos | Blog. Recuperado 15 de enero de 2023, de
https://www.merkle.com/es/es/blog/algoritmo-knn-modelado-datos
8. Apéndices
Ilustración 1 ................................................................................................................................... 5
Ilustración 2 ................................................................................................................................... 7
Ilustración 3 ................................................................................................................................... 7
Ilustración 4 ................................................................................................................................... 8
Ilustración 5 ................................................................................................................................... 9
Ilustración 6 ................................................................................................................................... 9
Ilustración 7 - resultados secuencial ........................................................................................... 10
Ilustración 8 determinante – OMP -descomposición de Cholesky .............................................. 11
Ilustración 9 - OMP - Matriz de covarianza ................................................................................. 11
Ilustración 10 - OMP - Calculo de factor R .................................................................................. 12
Ilustración 11 - OMP - Centroides ............................................................................................... 12
Ilustración 12 Comparativa de tiempos OMP y SECUENCIAL .................................................. 13
Ilustración 13 resultados obtenidos al lanzar el mismo fichero y distintos núcleos .................... 13
Ilustración 14 Análisis de escalabilidad en núcleos del CPU ...................................................... 14
Ilustración 15 CUDA - Factor R ................................................................................................... 15
Ilustración 16 CUDA - función que invoca el kernel parte 1 ...................................................... 15
Ilustración 17 CUDA - función que invoca el kernel parte 2 ....................................................... 16
Ilustración 18 Kernel para calcular F1 parte 1 ............................................................................ 16
Ilustración 19 Kernel para calcular F1 parte 2 ............................................................................ 17
Ilustración 20 Comparativa de tiempos CUDA y SEQ ................................................................ 17
Ilustración 21 GPU Run - 10k * 10 datos .................................................................................... 18
Ilustración 22GPU Run - 30k * 10 datos ..................................................................................... 18
Ilustración 23 GPU Run - 60k * 10 datos .................................................................................... 18
Ilustración 24 GPU Run - 80k * 10 datos .................................................................................... 18
Ilustración 25 CPU Caracteristicas .............................................................................................. 19
Ilustración 26 meminfo ................................................................................................................ 19
Ilustración 27 meminfo ................................................................................................................ 20
Ilustración 28 resutlados pruebas ............................................................................................... 21
Ilustración 29 Resultados SEC vs OMP vs GPU ........................................................................ 22