Patrones Algoritmicos Paralelos
Patrones Algoritmicos Paralelos
Patrones Algoritmicos Paralelos
TEMA:
INTEGRANTES:
PROFESOR:
PARALELO:
“A”
PATRONES ALGORITMICOS PARALELOS
Por el contrario, a veces los problemas no son tan fácilmente paralelizables, de ahí que estos
problemas se conozcan como problemas inherentemente secuenciales. Como ejemplo de estos
métodos tendríamos los métodos numéricos iterativos como el método de Newton o el problema de
los tres cuerpos. Por otro lado, algunos problemas son difícilmente paralelizables, aunque tengan una
estructura recursiva. Como ejemplo de esto último tendríamos la búsqueda primero en
profundidad en un grafo.
Los algoritmos paralelos son importantes porque es más rápido tratar grandes tareas de computación
mediante la paralelización que mediante técnicas secuenciales. Esta es la forma en que se trabaja en
el desarrollo de los procesadores modernos, ya que es más difícil incrementar la capacidad de
procesamiento con un único procesador que aumentar su capacidad de cómputo mediante la
inclusión de unidades en paralelo, logrando así la ejecución de varios flujos de instrucciones dentro
del procesador. Pero hay que ser cauto con la excesiva paralelización de los algoritmos ya que cada
algoritmo paralelo tiene una parte secuencial y debido a esto, los algoritmos paralelos puedes llegar a
un punto de saturación
El coste o complejidad de los algoritmos secuenciales se estima en términos del espacio y tiempo
ciclos de procesador que requiera. Los algoritmos paralelos también necesitan optimizar la
comunicación entre diferentes unidades de procesamiento. Esto se consigue mediante la aplicación
de dos paradigmas de programación y diseño de procesadores distintos: memoria compartida o paso
de mensajes.
La técnica memoria compartida necesita del uso de cerrojos en los datos para impedir que se
modifique simultáneamente por dos procesadores, por lo que se produce un coste extra en ciclos de
CPU desperdiciados y ciclos de bus. También obliga a serializar alguna parte del algoritmo.
La técnica paso de mensajes usa canales y mensajes, pero esta comunicación añade un coste al bus,
memoria adicional para las colas y los mensajes y latencia en el mensaje. Los diseñadores de
procesadores paralelos usan buses especiales para que el coste de la comunicación sea pequeño, pero
siendo el algoritmo paralelo el que decide el volumen del tráfico.
El trabajo propone el diseño e implementación de un conjunto de algoritmos paralelos programados
en JAVA que proporcionan al programador una forma simple de solucionar problemas diversos que
pueden ir desde una solución de ordenación hasta la de un problema de simulación mediante el uso
de una biblioteca de clases de Objetos Paralelos. Los algoritmos paralelos implementados se
construirán como Patrones de Diseño Paralelos a través de una metodología donde cada diseño
algorítmico representa la estructura paralela de control común a una determinada técnica algorítmica
generando un programa paralelo general del cual a su vez se deriven dos o más programas modelo
que resuelvan problemas particulares. Se ha diseñado la técnica algorítmica de divide y vencerás
como un Patrón de Diseño Paralelo y se han implementado algunas aplicaciones. La implementación
se hace de forma concurrente mediante la creación de hilos, explicando los pasos a realizar en el
desarrollo de este tipo de Patrones.
Es difícil suponer cual es la estructura algorítmica común a todos los algoritmos del mismo
patrón de diseño generado.
Los patrones de diseño propuestos son demasiado dependientes del problema a resolver y no
proporcionan intuición práctica para derivar nuevos algoritmos utilizando la orientación a
objetos.
Estos patrones de diseño se entienden mejor como programas particulares más que como
auténticos patrones.
TIPOS DE PATRONES
Por ello se hace necesario definir un diseño de nivel intermedio entre la descripción vaga de una
Programación de Patrones de Diseño Paralelos y un conjunto de Programas Particulares que
resuelven un problema concreto. Este nivel intermedio es un Patrón de Diseño original que describe
la estructura de control común compartida por todos los algoritmos que corresponden al mismo
patrón. Ni los tipos de datos, ni el código de procedimientos específicos dependientes de los datos
necesitan ser detallados en este nivel, ya que éstos dependen de problemas concretos. El objetivo
general de la investigación es el de obtener eficiencia en aplicaciones paralelas derivando estructuras
de control comunes a problemas distintos que lleven dentro de sí el mismo patrón de programación y
tratar con ello de minimizar las dependencias de los datos globales entre procesos paralelos. Para
hacer esto se requiere que el componente secuencial de los algoritmos paralelos tenga un mínimo de
dependencias con el código que implementa el patrón de programación; por tanto, la creación de una
estructura algorítmica general debe ser adaptada a las diferentes aplicaciones concretas cuyas formas
de solución pertenezcan al mismo patrón. Un objetivo particular es el de implementar el patrón
divide y vencerás en el lenguaje JAVA como una estructura general o plantilla, donde sus procesos
paralelos deben ser especificados mediante la creación de hilos de forma concurrente. Cada hilo
representa por tanto un proceso genérico a ejecutarse en el programa e incluye como parámetros
formales el problema secuencial a resolver o subproblemas. Cabe mencionar que la recursividad
juega un papel muy importante en ciertos patrones como lo es el mencionado, el cual es definido
como un algoritmo de partición recursiva, es decir; divide y vencerás resuelve un problema
dividiéndolo en problemas subordinados los cuales a su vez son resueltos recursivamente mediante la
división de ellos en el futuro. El resultado final se obtiene igualmente de forma recursiva
combinando las soluciones de los subproblemas. El paralelismo nace casi de forma natural en este
tipo de diseños algorítmicos donde cada problema puede ser resuelto independientemente de los
otros. Para especificar un algoritmo de partición recursiva como lo es divide y vencerás hay que
tener en cuenta componentes importantes tales como:
PREGUNTAS