SlideShare ist ein Scribd-Unternehmen logo
1 von 19
Algoritmos Paralelos
• Algoritmo paralelo para la obtención de predicados
difusos
• Estado del arte en las implementaciones paralelas de
divide y vencerás
Carlos Hung 22-0946
Algoritmo paralelo para la
obtención de predicados difusos
Resumen
El desarrollo acelerado en las diversas ramas de la ciencia y la ingeniería requiere el desarrollo de técnicas
informáticas novedosas que permitan el procesamiento de grandes cantidades de datos, acorten los tiempos
de reacción y permitan el tratamiento de problemas complejos. Con este método, el tamaño de la base de
datos es un factor importante en los tiempos de respuesta del algoritmo, ya que cada predicado generado se
evalúa en cada registro de la base de datos. Como resultado, dependiendo del tamaño de la base de datos,
se pueden lograr largos tiempos de ejecución. Los resultados obtenidos durante los experimentos realizados
muestran que el algoritmo paralelo puede ser 10 veces más rápido que el secuencial y por lo tanto se
considera muy útil para mejorar la eficiencia del algoritmo cuando se trata de bases de datos muy grandes.
Diseño de Algoritmos
Paralelos
Hoy en día, muchas tareas requieren procesar grandes cantidades de datos y
mejorar la eficiencia del tiempo de respuesta de cada una de estas aplicaciones.
Hay dos tipos de paralelismo en la programación paralela (Foster, 2003):
paralelismo de control (descomposición funcional) o paralelismo de datos
(descomposición de dominio). La descomposición de dominios o paralelismo de
datos, como también se le llama, consiste en una secuencia de instrucciones
aplicadas a diferentes datos. El paralelismo de datos le permite mantener un único
flujo de control y seguir el modelo de programa único de datos múltiples (SMTP).
Paradigmas de la
Programación Paralela
Para mejorar el tiempo de ejecución de un algoritmo se han creado
dos paradigmas principales: paradigma de memoria compartida y el
paradigma de memoria distribuida. El paradigma de memoria
compartida consiste en que múltiples núcleos acceden a la misma
memoria, al contrario de la memoria distribuida, donde se presentan
varios núcleos, cada uno con su propia memoria local y que cooperan
en conjunto para resolver tareas mediante alguna herramienta para
administrar la ejecución de la tarea (Hoeger, 2011; Tosini,2011) .
Para cada uno de estos paradigmas muchos investigadores han
desarrollado conjunto de tecnologías que dan soporte a la
paralelización, tanto en el paradigma en memoria compartida como en
memoria distribuida.
Estas herramientas ponen en práctica, todos los conceptos abordados
anteriormente y apoyan el diseño de la programación paralela. Estas
herramientas también conocidas como APIs (Aplication Programing
Interface) facilitan el modelado de programas paralelos. A
continuación, se abordan algunas características de las tecnologías
que existen en la literatura hoy en día.
Algunas Tecnologías que implementan la
programación paralela
•Open MP (Open Multi-Processing)(Chapman et al., 2008; Pas, 2009): proporciona una API, que mediante directivas del compilador y llamadas a sub-rutinas,
proporciona paralelismo de datos. La unidad base es el hilo y tiene acceso a variables en cache compartida o RAM. Los mejores resultados se ven cuando los accesos a los
datos compartidos tienen bajo coste. Ofrece soporte en C, C++ y FORTRAN, aunque requiere de compiladores especiales (MP.org, 2014; Pas, 2009).
•Intel TTB (Intel Threading Building Blocks): Modelo de programación paralela basado en rutinas que utilizan hilos. Provee una serie de plantillas, tipos de datos y
algoritmos. TBB está pensado de cara al rendimiento, por lo que es compatible con otras bibliotecas y paquetes (Reinders, 2007).
•Intel ArBB (Inter Array Building Blocks): biblioteca para C++ desarrollada para aprovechar diferentes tipos de procesadores en la resolución de problemas paralelos.
Ofrece un modelo de programación basado en la composición dinámica de patrones estructurados de programación paralela. Son más sencillos de entender y depurar.
•JP: Java Parallel (PJ) es una API de programación paralela cuyos principales objetivos son: apoyar tanto a la programación paralela en memoria compartida (basadas en
hilos de ejecución) y el grupo de programación paralela (basado en paso de mensajes), en una sola API unificada. Esta biblioteca les brinda a los desarrolladores la
posibilidad de implementar programas paralelos que combinen ambos paradigmas. Es un software libre que se distribuye bajo los términos GPL (General Public License) y
está implementado 100% en Java, específicamente en JDK 1.5. Las características de programación en memoria compartida están inspiradas en Open MP (Kaminsky,
2007; Kaminsky, 2015).
•Map Reduce Hadoop:El marco de MapReduce es muy empleado en Big Data (Fernandez et al., 2014). Se basa en el hecho de que la mayoría de las tareas de
procesamiento de información consideren una estructura similar, es decir, se aplica el mismo cálculo sobre un conjunto de máquinas. Los resultados intermedios de cada
computadora se agregan de alguna forma. Esto sobretodo es útil cuando el volumen de datos es demasiado grande, lo cual es muy común en entornos como los
asociados al manejo de información de las redes sociales. En este marco, es necesario que el programador especifique las funciones de mapa y reducción dentro de un
trabajo. Luego, el trabajo divide el conjunto de datos de entrada en subconjuntos independientes que son procesados en paralelo por las tareas de mapa. MapReduce
ordena las salidas de cada tarea y estas se convierten en entradas que serán procesadas por la tarea Reduce (Dean, 2008).
•CUDA: (Dispositivo de Arquitectura Computacional Unificada o Compute Unified Device Architecture): es una biblioteca para implementaciones paralelas creada por la
compañía NVIDIA y basada en el uso de GPUs (tarjetas de procesamiento gráfico) de dicha compañía. Se apoya en lenguajes conocidos como C, aunque para alcanzar un
alto rendimiento es necesario realizar optimizaciones manuales sobre la configuración y amplio conocimiento de la arquitectura hardware de las GPU (Farber, 2011).
La minería de
datos y la
programación
paralela
La minería de datos abarca un campo
interdisciplinario que tiene como principal objetivo
extraer patrones que permitan identificar un
conocimiento previamente desconocido desde las
bases de datos(Han and Kamber, 2011). La tendencia
al avance de la tecnología ha abierto las puertas a
poseer enormes cantidades de datos, donde su
análisis tomaría demasiado tiempo y costo realizarlo
utilizando herramientas tradicionales, lo cual ha
propiciado la aparición del término Big
Data(Fernandez et al., 2014). Si al inicio el reto
principal para la minería de datos era la obtención de
patrones que permitan obtener conocimiento,
actualmente también lo es, el análisis de los grandes
sistemas de datos con los que se cuentan hoy en
día. Es por ello que el paralelismo resulta ser de gran
importancia en esta área de la computación, como vía
de solución para que los algoritmos y técnicas puedan
procesar bases de datos con esta dimensionalidad.
FuzzyPred
FuzzyPred es un método de minería de datos que propone los
predicados difusos en forma normal conjuntiva y disyuntiva como
vía de representación del conocimiento. Este método resuelve
una tarea descriptiva donde no se conoce a ciencia cierta qué
tipo de relaciones se van a encontrar, se trata de buscar patrones
que describan los datos y sus relaciones. Este método está
modelado como un problema de optimización combinatoria
debido a que el espacio de soluciones por el que puede transitar
puede llegar a ser inmenso(Ceruto T. , 2014).
Propuesta de diseño paralelo en
FuzzyPred como solución a la gran
dimensionalidad de los datos
Para el diseño de paralelización de FuzzyPred específicamente en el proceso de evaluación se aplica el paradigma de paralelismo
de datos, aplicado básicamente a la base de datos que se vaya a utilizar en el proceso de minería.
En este diseño se realizó la evaluación del predicado, en cada parte del sistema de datos de forma independiente y
simultáneamente. Para esto se sigue un conjunto de pasos, los cuales se abordan a continuación:
1. En principio, se conoce la cantidad de hilos de ejecución del procesador de la computadora. Este proceso la biblioteca
Java Parallel lo realiza de forma escalable.
2. Posteriormente, se procede a realizar grupos en dependencia de la cantidad de hilos que contenga la arquitectura
donde se ejecute el algoritmo.
3. Consecutivamente, se asignan los grupos creados, los hilos de ejecución de forma dinámica buscando que todos los
hilos tengan la misma cantidad de trabajo.
4. Para concluir se utilizó una barrera (barrier), para realizar la evaluación aplicando el cuantificador universal, ya que el
mismo necesita conocer todos los valores de verdad del predicado en cada uno de los registros de la base de datos.
Diseño de
paralelización para el
proceso de evaluación
de los predicados
Estado del arte en las
implementaciones paralelas de
divide y vencerás
Resumen
Divide y Vencerás, es una técnica de diseño de algoritmos ampliamente utilizada en la
solución de problemas. Su implementación en paralelo resulta natural. En este trabajo
se realiza una revisión bibliográfica acerca del desarrollo de algoritmos paralelos con
este paradigma. En ambientes paralelos heterogéneos se mejoran las prestaciones, si
en el diseño de algoritmos se tienen en cuenta las características de los procesadores
utilizados y de las comunicaciones entre ellos. Los trabajos analizados desarrollan
implementaciones paralelas de algoritmos basados en "Divide y Vencerás" solamente
en sistemas homogéneos. Resulta imprescindible el estudio y desarrollo de este
paradigma en ambientes heterogéneos.
Divide y vencerás
La solución de un problema, de un tamaño determinado, mediante este paradigma consiste
en dividir (recursivamente) dicho problema (etapa de división) en un conjunto de
subproblemas del mismo tipo, pero de tamaño menor. Cada subproblema obtenido en el
proceso de división puede ser, a su vez, subdividido siguiendo el mismo criterio. Este
proceso se lleva a cabo hasta que el subproblema actual sea indivisible (caso elemental o
caso base) o hasta que este pueda ser resuelto por un método directo (etapa de
resolución). La convergencia hacia el caso base está garantizada por la exigencia de que el
tamaño de los subproblemas debe ser menor que el del problema que le da origen. Las
soluciones obtenidas en la etapa de resolución se combinan convenientemente (etapa de
combinación) para construir la solución del problema original. En la referencia 3 se presenta
un estudio de este paradigma y se muestra un esqueleto para la implementación de
algoritmos que siguen esta técnica, así cómo se discuten aspectos relacionados con la
complejidad algorítmica de estos.
Algunas
aplicaciones
reportadas
DyV se ha utilizado en la solución de muchos
problemas de diversas ramas como las Ciencias de la
Computación, el Álgebra Lineal, las Matemáticas, la
Geometría, el Procesamiento de Señales. la Biología
Molecular Computacional, en el procesamiento de
información del ADN. En espectroscopia por
resonancia magnética nuclear para la determinación
estructural de proteínas, en el análisis y modelado de
proteínas, en algoritmos para simulación, en la
implementación de algoritmos de descomposición en
valores singulares de matrices, en la especificación y
desarrollo de programas mediante cálculos
abstractos, como estrategia en la paralelización de un
algoritmo de votación y más recientemente en los
trabajos de análisis del genoma humano.
Implementaciones paralelas
DyV, por naturaleza, puede implementarse en máquinas paralelas. Muchos algoritmos
basados en este paradigma generan un número muy grande de subproblemas en
aplicaciones reales típicas y, por tanto, pueden implementarse potencialmente con un
alto grado de paralelismo. Tradicionalmente, el paralelismo en estos algoritmos se logra
mediante la solución paralela de los subproblemas en los niveles superiores de
recursividad. Sin embargo, el paralelismo obtenido por esta técnica no escala bien,
debido a la composición secuencial de las etapas de división y combinación.
Divide y vencerás en diferentes areas
Algebra lineal
Se han reportado implementaciones paralelas
de algoritmos DyV en la solución del problema
del cálculo de los valores propios de matrices
tridiagonales simétricas, en la solución de
sistemas de ecuaciones lineales banda, así
como en la inversión de matrices triangulares.
Ciencia de la computacion
La implementación secuencial y paralela de un
algoritmo basado en este paradigma para la
identificación de componentes fuertemente
conexas en grafos dirigidos. Estas
implementaciones se introducen como
alternativa al uso de la búsqueda primero en
profundidad propuesta en trabajos anteriores y
que presenta la dificultad de su paralelización en
la solución de este problema cuando el tamaño
del grafo es suficientemente grande.
Implementación paralela en
sistemas heterogéneos
Explotar al máximo la potencia de un sistema paralelo heterogéneo es una tarea compleja
que, con frecuencia, requiere de estrategias sofisticadas de administración de recursos. En la
práctica es difícil predecir el desempeño de una estrategia particular de administración de
recursos en un sistema compuesto por componentes que difieren en cuanto a funcionalidades
y desempeño. Para maximizar el desempeño total de una aplicación en tales sistemas se
hace necesario el uso de un mecanismo más estructurado que permita especificar, de manera
explícita, los requerimientos de recursos, así como cuantificar y calcular el desempeño de una
estrategia de administración de recursos. Ninguno de los trabajos revisados sobre el tema
hace referencia a implementaciones de DyV en sistemas paralelos heterogéneos. Resultaría,
por tanto, imprescindible y novedoso el estudio y desarrollo de implementaciones paralelas de
DyV en este tipo de sistemas. Actualmente, los autores trabajan en el desarrollo de un
esqueleto computacional para DyV en sistemas paralelos heterogéneos.
Referencias
http://scielo.sld.cu/scielo.php?script=sci_arttext&pid=S2227-18992017000200009
https://www.redalyc.org/pdf/3604/360433560006.pdf
Gracias

Weitere ähnliche Inhalte

Ähnlich wie Actividad 14: Diseño de Algoritmos Paralelos

Programación informatica INWTD
Programación informatica INWTDProgramación informatica INWTD
Programación informatica INWTD
chepas_
 
Programación
ProgramaciónProgramación
Programación
chepas_
 

Ähnlich wie Actividad 14: Diseño de Algoritmos Paralelos (20)

Algoritmos Paralelos
Algoritmos ParalelosAlgoritmos Paralelos
Algoritmos Paralelos
 
Fases para la creación de una Base de Datos
Fases para la creación de una Base de DatosFases para la creación de una Base de Datos
Fases para la creación de una Base de Datos
 
Diseño de Algoritmos Paralelos.pptx
Diseño de Algoritmos Paralelos.pptxDiseño de Algoritmos Paralelos.pptx
Diseño de Algoritmos Paralelos.pptx
 
G te c sesion3b- mapreduce
G te c sesion3b- mapreduceG te c sesion3b- mapreduce
G te c sesion3b- mapreduce
 
Nhibernate
NhibernateNhibernate
Nhibernate
 
Para el producto final de curso
Para el producto final de cursoPara el producto final de curso
Para el producto final de curso
 
Programación informatica INWTD
Programación informatica INWTDProgramación informatica INWTD
Programación informatica INWTD
 
Programación
ProgramaciónProgramación
Programación
 
Lec11 metodos
Lec11 metodosLec11 metodos
Lec11 metodos
 
Glosario de terminos
Glosario de terminosGlosario de terminos
Glosario de terminos
 
Grupo #2 - Asignación sobre Algoritmos Paralelos
Grupo #2 - Asignación sobre Algoritmos ParalelosGrupo #2 - Asignación sobre Algoritmos Paralelos
Grupo #2 - Asignación sobre Algoritmos Paralelos
 
Diseño de Algoritmos Paralelos-220972.pptx
Diseño de Algoritmos Paralelos-220972.pptxDiseño de Algoritmos Paralelos-220972.pptx
Diseño de Algoritmos Paralelos-220972.pptx
 
Herramientas de Sistemas Distribuidos
Herramientas de Sistemas DistribuidosHerramientas de Sistemas Distribuidos
Herramientas de Sistemas Distribuidos
 
Actividad 14 Diseño de Algoritmos Paralelos.pptx
Actividad 14 Diseño de Algoritmos Paralelos.pptxActividad 14 Diseño de Algoritmos Paralelos.pptx
Actividad 14 Diseño de Algoritmos Paralelos.pptx
 
arquitectura del computador
arquitectura del computador arquitectura del computador
arquitectura del computador
 
Incremento en el desempeño de la multiplicación Matriz-Vector
Incremento en el desempeño de la multiplicación Matriz-VectorIncremento en el desempeño de la multiplicación Matriz-Vector
Incremento en el desempeño de la multiplicación Matriz-Vector
 
MLOps.pptx
MLOps.pptxMLOps.pptx
MLOps.pptx
 
1127082.ppt
1127082.ppt1127082.ppt
1127082.ppt
 
Actividad#13_Diseño de Algoritmos Paralelos.pptx
Actividad#13_Diseño de Algoritmos Paralelos.pptxActividad#13_Diseño de Algoritmos Paralelos.pptx
Actividad#13_Diseño de Algoritmos Paralelos.pptx
 
Cluster Multinodo en Apache Hadoop - Arquitectura Lambda
Cluster Multinodo en Apache Hadoop - Arquitectura LambdaCluster Multinodo en Apache Hadoop - Arquitectura Lambda
Cluster Multinodo en Apache Hadoop - Arquitectura Lambda
 

Kürzlich hochgeladen

2da. Clase Mecanografía e introducción a Excel (2).pptx
2da. Clase Mecanografía e introducción a Excel (2).pptx2da. Clase Mecanografía e introducción a Excel (2).pptx
2da. Clase Mecanografía e introducción a Excel (2).pptx
EncomiendasElSherpa
 
Evaluación del riesgo tecnologías informáticas.pdf
Evaluación del riesgo tecnologías informáticas.pdfEvaluación del riesgo tecnologías informáticas.pdf
Evaluación del riesgo tecnologías informáticas.pdf
GuillermoBarquero7
 

Kürzlich hochgeladen (6)

Caso de Exito LPL Projects Logistics Spain y Business Central
Caso de Exito LPL Projects Logistics Spain y Business CentralCaso de Exito LPL Projects Logistics Spain y Business Central
Caso de Exito LPL Projects Logistics Spain y Business Central
 
2da. Clase Mecanografía e introducción a Excel (2).pptx
2da. Clase Mecanografía e introducción a Excel (2).pptx2da. Clase Mecanografía e introducción a Excel (2).pptx
2da. Clase Mecanografía e introducción a Excel (2).pptx
 
Trabajo de Powerpoint - Unsaac - Ofimática
Trabajo de Powerpoint - Unsaac - OfimáticaTrabajo de Powerpoint - Unsaac - Ofimática
Trabajo de Powerpoint - Unsaac - Ofimática
 
ESCRITORIO DE WINDOWS 11 Y SUS ELEMENTOS
ESCRITORIO DE WINDOWS 11 Y SUS ELEMENTOSESCRITORIO DE WINDOWS 11 Y SUS ELEMENTOS
ESCRITORIO DE WINDOWS 11 Y SUS ELEMENTOS
 
Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200
 
Evaluación del riesgo tecnologías informáticas.pdf
Evaluación del riesgo tecnologías informáticas.pdfEvaluación del riesgo tecnologías informáticas.pdf
Evaluación del riesgo tecnologías informáticas.pdf
 

Actividad 14: Diseño de Algoritmos Paralelos

  • 1. Algoritmos Paralelos • Algoritmo paralelo para la obtención de predicados difusos • Estado del arte en las implementaciones paralelas de divide y vencerás Carlos Hung 22-0946
  • 2. Algoritmo paralelo para la obtención de predicados difusos
  • 3. Resumen El desarrollo acelerado en las diversas ramas de la ciencia y la ingeniería requiere el desarrollo de técnicas informáticas novedosas que permitan el procesamiento de grandes cantidades de datos, acorten los tiempos de reacción y permitan el tratamiento de problemas complejos. Con este método, el tamaño de la base de datos es un factor importante en los tiempos de respuesta del algoritmo, ya que cada predicado generado se evalúa en cada registro de la base de datos. Como resultado, dependiendo del tamaño de la base de datos, se pueden lograr largos tiempos de ejecución. Los resultados obtenidos durante los experimentos realizados muestran que el algoritmo paralelo puede ser 10 veces más rápido que el secuencial y por lo tanto se considera muy útil para mejorar la eficiencia del algoritmo cuando se trata de bases de datos muy grandes.
  • 4. Diseño de Algoritmos Paralelos Hoy en día, muchas tareas requieren procesar grandes cantidades de datos y mejorar la eficiencia del tiempo de respuesta de cada una de estas aplicaciones. Hay dos tipos de paralelismo en la programación paralela (Foster, 2003): paralelismo de control (descomposición funcional) o paralelismo de datos (descomposición de dominio). La descomposición de dominios o paralelismo de datos, como también se le llama, consiste en una secuencia de instrucciones aplicadas a diferentes datos. El paralelismo de datos le permite mantener un único flujo de control y seguir el modelo de programa único de datos múltiples (SMTP).
  • 5. Paradigmas de la Programación Paralela Para mejorar el tiempo de ejecución de un algoritmo se han creado dos paradigmas principales: paradigma de memoria compartida y el paradigma de memoria distribuida. El paradigma de memoria compartida consiste en que múltiples núcleos acceden a la misma memoria, al contrario de la memoria distribuida, donde se presentan varios núcleos, cada uno con su propia memoria local y que cooperan en conjunto para resolver tareas mediante alguna herramienta para administrar la ejecución de la tarea (Hoeger, 2011; Tosini,2011) . Para cada uno de estos paradigmas muchos investigadores han desarrollado conjunto de tecnologías que dan soporte a la paralelización, tanto en el paradigma en memoria compartida como en memoria distribuida. Estas herramientas ponen en práctica, todos los conceptos abordados anteriormente y apoyan el diseño de la programación paralela. Estas herramientas también conocidas como APIs (Aplication Programing Interface) facilitan el modelado de programas paralelos. A continuación, se abordan algunas características de las tecnologías que existen en la literatura hoy en día.
  • 6. Algunas Tecnologías que implementan la programación paralela •Open MP (Open Multi-Processing)(Chapman et al., 2008; Pas, 2009): proporciona una API, que mediante directivas del compilador y llamadas a sub-rutinas, proporciona paralelismo de datos. La unidad base es el hilo y tiene acceso a variables en cache compartida o RAM. Los mejores resultados se ven cuando los accesos a los datos compartidos tienen bajo coste. Ofrece soporte en C, C++ y FORTRAN, aunque requiere de compiladores especiales (MP.org, 2014; Pas, 2009). •Intel TTB (Intel Threading Building Blocks): Modelo de programación paralela basado en rutinas que utilizan hilos. Provee una serie de plantillas, tipos de datos y algoritmos. TBB está pensado de cara al rendimiento, por lo que es compatible con otras bibliotecas y paquetes (Reinders, 2007). •Intel ArBB (Inter Array Building Blocks): biblioteca para C++ desarrollada para aprovechar diferentes tipos de procesadores en la resolución de problemas paralelos. Ofrece un modelo de programación basado en la composición dinámica de patrones estructurados de programación paralela. Son más sencillos de entender y depurar. •JP: Java Parallel (PJ) es una API de programación paralela cuyos principales objetivos son: apoyar tanto a la programación paralela en memoria compartida (basadas en hilos de ejecución) y el grupo de programación paralela (basado en paso de mensajes), en una sola API unificada. Esta biblioteca les brinda a los desarrolladores la posibilidad de implementar programas paralelos que combinen ambos paradigmas. Es un software libre que se distribuye bajo los términos GPL (General Public License) y está implementado 100% en Java, específicamente en JDK 1.5. Las características de programación en memoria compartida están inspiradas en Open MP (Kaminsky, 2007; Kaminsky, 2015). •Map Reduce Hadoop:El marco de MapReduce es muy empleado en Big Data (Fernandez et al., 2014). Se basa en el hecho de que la mayoría de las tareas de procesamiento de información consideren una estructura similar, es decir, se aplica el mismo cálculo sobre un conjunto de máquinas. Los resultados intermedios de cada computadora se agregan de alguna forma. Esto sobretodo es útil cuando el volumen de datos es demasiado grande, lo cual es muy común en entornos como los asociados al manejo de información de las redes sociales. En este marco, es necesario que el programador especifique las funciones de mapa y reducción dentro de un trabajo. Luego, el trabajo divide el conjunto de datos de entrada en subconjuntos independientes que son procesados en paralelo por las tareas de mapa. MapReduce ordena las salidas de cada tarea y estas se convierten en entradas que serán procesadas por la tarea Reduce (Dean, 2008). •CUDA: (Dispositivo de Arquitectura Computacional Unificada o Compute Unified Device Architecture): es una biblioteca para implementaciones paralelas creada por la compañía NVIDIA y basada en el uso de GPUs (tarjetas de procesamiento gráfico) de dicha compañía. Se apoya en lenguajes conocidos como C, aunque para alcanzar un alto rendimiento es necesario realizar optimizaciones manuales sobre la configuración y amplio conocimiento de la arquitectura hardware de las GPU (Farber, 2011).
  • 7. La minería de datos y la programación paralela La minería de datos abarca un campo interdisciplinario que tiene como principal objetivo extraer patrones que permitan identificar un conocimiento previamente desconocido desde las bases de datos(Han and Kamber, 2011). La tendencia al avance de la tecnología ha abierto las puertas a poseer enormes cantidades de datos, donde su análisis tomaría demasiado tiempo y costo realizarlo utilizando herramientas tradicionales, lo cual ha propiciado la aparición del término Big Data(Fernandez et al., 2014). Si al inicio el reto principal para la minería de datos era la obtención de patrones que permitan obtener conocimiento, actualmente también lo es, el análisis de los grandes sistemas de datos con los que se cuentan hoy en día. Es por ello que el paralelismo resulta ser de gran importancia en esta área de la computación, como vía de solución para que los algoritmos y técnicas puedan procesar bases de datos con esta dimensionalidad.
  • 8. FuzzyPred FuzzyPred es un método de minería de datos que propone los predicados difusos en forma normal conjuntiva y disyuntiva como vía de representación del conocimiento. Este método resuelve una tarea descriptiva donde no se conoce a ciencia cierta qué tipo de relaciones se van a encontrar, se trata de buscar patrones que describan los datos y sus relaciones. Este método está modelado como un problema de optimización combinatoria debido a que el espacio de soluciones por el que puede transitar puede llegar a ser inmenso(Ceruto T. , 2014).
  • 9. Propuesta de diseño paralelo en FuzzyPred como solución a la gran dimensionalidad de los datos Para el diseño de paralelización de FuzzyPred específicamente en el proceso de evaluación se aplica el paradigma de paralelismo de datos, aplicado básicamente a la base de datos que se vaya a utilizar en el proceso de minería. En este diseño se realizó la evaluación del predicado, en cada parte del sistema de datos de forma independiente y simultáneamente. Para esto se sigue un conjunto de pasos, los cuales se abordan a continuación: 1. En principio, se conoce la cantidad de hilos de ejecución del procesador de la computadora. Este proceso la biblioteca Java Parallel lo realiza de forma escalable. 2. Posteriormente, se procede a realizar grupos en dependencia de la cantidad de hilos que contenga la arquitectura donde se ejecute el algoritmo. 3. Consecutivamente, se asignan los grupos creados, los hilos de ejecución de forma dinámica buscando que todos los hilos tengan la misma cantidad de trabajo. 4. Para concluir se utilizó una barrera (barrier), para realizar la evaluación aplicando el cuantificador universal, ya que el mismo necesita conocer todos los valores de verdad del predicado en cada uno de los registros de la base de datos.
  • 10. Diseño de paralelización para el proceso de evaluación de los predicados
  • 11. Estado del arte en las implementaciones paralelas de divide y vencerás
  • 12. Resumen Divide y Vencerás, es una técnica de diseño de algoritmos ampliamente utilizada en la solución de problemas. Su implementación en paralelo resulta natural. En este trabajo se realiza una revisión bibliográfica acerca del desarrollo de algoritmos paralelos con este paradigma. En ambientes paralelos heterogéneos se mejoran las prestaciones, si en el diseño de algoritmos se tienen en cuenta las características de los procesadores utilizados y de las comunicaciones entre ellos. Los trabajos analizados desarrollan implementaciones paralelas de algoritmos basados en "Divide y Vencerás" solamente en sistemas homogéneos. Resulta imprescindible el estudio y desarrollo de este paradigma en ambientes heterogéneos.
  • 13. Divide y vencerás La solución de un problema, de un tamaño determinado, mediante este paradigma consiste en dividir (recursivamente) dicho problema (etapa de división) en un conjunto de subproblemas del mismo tipo, pero de tamaño menor. Cada subproblema obtenido en el proceso de división puede ser, a su vez, subdividido siguiendo el mismo criterio. Este proceso se lleva a cabo hasta que el subproblema actual sea indivisible (caso elemental o caso base) o hasta que este pueda ser resuelto por un método directo (etapa de resolución). La convergencia hacia el caso base está garantizada por la exigencia de que el tamaño de los subproblemas debe ser menor que el del problema que le da origen. Las soluciones obtenidas en la etapa de resolución se combinan convenientemente (etapa de combinación) para construir la solución del problema original. En la referencia 3 se presenta un estudio de este paradigma y se muestra un esqueleto para la implementación de algoritmos que siguen esta técnica, así cómo se discuten aspectos relacionados con la complejidad algorítmica de estos.
  • 14. Algunas aplicaciones reportadas DyV se ha utilizado en la solución de muchos problemas de diversas ramas como las Ciencias de la Computación, el Álgebra Lineal, las Matemáticas, la Geometría, el Procesamiento de Señales. la Biología Molecular Computacional, en el procesamiento de información del ADN. En espectroscopia por resonancia magnética nuclear para la determinación estructural de proteínas, en el análisis y modelado de proteínas, en algoritmos para simulación, en la implementación de algoritmos de descomposición en valores singulares de matrices, en la especificación y desarrollo de programas mediante cálculos abstractos, como estrategia en la paralelización de un algoritmo de votación y más recientemente en los trabajos de análisis del genoma humano.
  • 15. Implementaciones paralelas DyV, por naturaleza, puede implementarse en máquinas paralelas. Muchos algoritmos basados en este paradigma generan un número muy grande de subproblemas en aplicaciones reales típicas y, por tanto, pueden implementarse potencialmente con un alto grado de paralelismo. Tradicionalmente, el paralelismo en estos algoritmos se logra mediante la solución paralela de los subproblemas en los niveles superiores de recursividad. Sin embargo, el paralelismo obtenido por esta técnica no escala bien, debido a la composición secuencial de las etapas de división y combinación.
  • 16. Divide y vencerás en diferentes areas Algebra lineal Se han reportado implementaciones paralelas de algoritmos DyV en la solución del problema del cálculo de los valores propios de matrices tridiagonales simétricas, en la solución de sistemas de ecuaciones lineales banda, así como en la inversión de matrices triangulares. Ciencia de la computacion La implementación secuencial y paralela de un algoritmo basado en este paradigma para la identificación de componentes fuertemente conexas en grafos dirigidos. Estas implementaciones se introducen como alternativa al uso de la búsqueda primero en profundidad propuesta en trabajos anteriores y que presenta la dificultad de su paralelización en la solución de este problema cuando el tamaño del grafo es suficientemente grande.
  • 17. Implementación paralela en sistemas heterogéneos Explotar al máximo la potencia de un sistema paralelo heterogéneo es una tarea compleja que, con frecuencia, requiere de estrategias sofisticadas de administración de recursos. En la práctica es difícil predecir el desempeño de una estrategia particular de administración de recursos en un sistema compuesto por componentes que difieren en cuanto a funcionalidades y desempeño. Para maximizar el desempeño total de una aplicación en tales sistemas se hace necesario el uso de un mecanismo más estructurado que permita especificar, de manera explícita, los requerimientos de recursos, así como cuantificar y calcular el desempeño de una estrategia de administración de recursos. Ninguno de los trabajos revisados sobre el tema hace referencia a implementaciones de DyV en sistemas paralelos heterogéneos. Resultaría, por tanto, imprescindible y novedoso el estudio y desarrollo de implementaciones paralelas de DyV en este tipo de sistemas. Actualmente, los autores trabajan en el desarrollo de un esqueleto computacional para DyV en sistemas paralelos heterogéneos.