Said Eduardo Perez Poppe
-
Upload
reynaldo-quispe -
Category
Documents
-
view
24 -
download
0
Transcript of Said Eduardo Perez Poppe
UNIVERSIDAD MAYOR REAL Y PONTIFICIA DE
SAN FRANCISCO XAVIER DE CHUQUISACA
FACULTAD DE TECNOLOGÍA
CARRERA DE INGENIERÍA DE SISTEMAS
Perfil de Tesis de Grado
Estudio y Análisis de Patrones de Paralelismo en Entornos de Clusters Conformados por Nodos Multi-Núcleo
Universitario: Said Eduardo Pérez Poppe
Perfil de Tesis de Grado Presentado para Optar al Título Académico de
LICENCIADO EN INGENIERIA DE SISTEMAS
Septiembre, 2013
Sucre – Bolivia
CONTENIDOCAPÍTULO I. INTRODUCCIÓN............................................................................................................ 1
1.1. TÍTULO..............................................................................................................................................1
1.2. ANTECEDENTES................................................................................................................................1
1.3. SITUACIÓN PROBLEMÁTICA..............................................................................................................2
1.4. PROBLEMA CIENTÍFICO.....................................................................................................................6
1.5. OBJETIVOS........................................................................................................................................7
1.5.1. Objetivo General.....................................................................................................................7
1.5.2. Objetivos Específicos..............................................................................................................7
1.6. JUSTIFICACIÓN..................................................................................................................................7
CAPÍTULO II. SUSTENTO TEÓRICO..................................................................................................9
2.1. ANTECEDENTES TEÓRICOS................................................................................................................9
2.2. MARCO TEÓRICO............................................................................................................................10
2.2.1. Introducción..........................................................................................................................10
2.2.2. Generalidades de un Sistema Paralelo..................................................................................11
2.2.3. Clasificación de los Sistemas Paralelos................................................................................12
2.2.4. Paradigmas de Aplicaciones de Cómputo Científico.............................................................13
2.2.5. Clusters de Computadoras....................................................................................................14
2.2.6. Redes de Comunicación de Computadores............................................................................16
2.2.7. Procesadores.........................................................................................................................17
2.2.8. Computadoras Multicore.......................................................................................................18
2.2.9. Modelo de Memoria Compartida..........................................................................................18
2.2.10. Programación Paralela en Computadores Multicore............................................................19
2.2.11. Modelo de Memoria Distribuida...........................................................................................20
2.2.12. Programación Paralela en Clusters......................................................................................21
2.2.13. Programación Paralela en Entornos Híbridos......................................................................23
2.2.14. Patrones de Paralelismo y su Estructura..............................................................................24
2.2.15. Métricas de Rendimiento y Eficiencia...................................................................................26
2.3. HIPÓTESIS.......................................................................................................................................31
CAPÍTULO III. DISEÑO METODOLÓGICO.....................................................................................32
3.1. INTRODUCCIÓN...............................................................................................................................32
3.2. NIVEL Y TIPO DE INVESTIGACIÓN...................................................................................................32
3.3. VENTANA DE OBSERVACIÓN Y OPERACIONALIZACIÓN DE VARIABLES..........................................33
3.4. ELECCIÓN METODOLÓGICA............................................................................................................34
3.5. ELECCIÓN DE MÉTODOS.................................................................................................................35
3.6. ELECCIÓN DE TÉCNICAS.................................................................................................................36
3.7. DEFINICIÓN DE FUENTES Y DESARROLLO DE INSTRUMENTOS........................................................36
3.8. DISEÑO DE LA INVESTIGACIÓN.......................................................................................................40
3.9. CRONOGRAMA................................................................................................................................42
BIBLIOGRAFÍA................................................................................................................................... 45
ÍNDICE DE FIGURASFIGURA 1.1. EVOLUCIÓN EN LA VELOCIDAD DE LOS PROCESADORES................................................................4FIGURA 1.2. DIAGRAMA CAUSA-EFECTO...........................................................................................................5FIGURA 1.3. ÁRBOL DE PROBLEMAS..................................................................................................................6FIGURA 2.1. TAXONOMÍA DE FLYNN................................................................................................................13FIGURA 2.2. COMPONENTES DE UN CLUSTER...................................................................................................15FIGURA 2.3. ARQUITECTURA DE MEMORIA COMPARTIDA...............................................................................19FIGURA 2.4. MODELO DE EJECUCIÓN DE OPENMP..........................................................................................20FIGURA 2.5. ARQUITECTURA DE MEMORIA DISTRIBUIDA................................................................................21FIGURA 2.6. REPRESENTACIÓN ESQUEMÁTICA DE LA PROGRAMACIÓN MIXTA OPENMP/MPI........................24FIGURA 2.7. ESTRUCTURA MÍNIMA DE UN PATRÓN DE PARALELISMO.............................................................26FIGURA 2.8. SPEEDUP LINEAL, SUBLINEAL Y SUPRALINEAL............................................................................29FIGURA 3.1. PROPUESTA DE MODELO DE SOLUCIÓN........................................................................................41
ÍNDICE DE TABLASTABLA 3.1. OPERACIONALIZACIÓN DE LA VARIABLE INDEPENDIENTE ............................................................33TABLA 3.2. OPERACIONALIZACIÓN DE LAS VARIABLES DEPENDIENTES .........................................................34TABLA 3.3. LINEAMIENTOS EPISTEMOLÓGICOS-METODOLÓGICOS ..................................................................39TABLA 3.4. CRONOGRAMA DE TRABAJO .........................................................................................................42
CAPÍTULO I
INTRODUCCIÓN
1.1. Título
Estudio y Análisis de Patrones de Paralelismo en Entornos de Clusters Conformados
por Nodos Multi-Núcleo.
1.2. Antecedentes
Hoy en día, el fascinante progreso en las distintas áreas de la ciencia y el conocimiento
humano se debe, entre otros aspectos, a la gran capacidad de cómputo, procesamiento y
almacenamiento con los que se cuenta en la actualidad dentro del campo de la informática.
En este entendido, aspectos como el tratamiento de señales, las predicciones
climatológicas, la simulación de circuitos electrónicos, los servicios Web que necesitan
respuestas rápidas a cálculos complejos y extensos, son algunos ejemplos de ramas del
desarrollo científico y de ingeniería que son impulsadas y crecen paralelamente al avance
computacional.
Asimismo, muchas de las facilidades con las que cuentan las sociedades son fruto del
incesante avance de la informática por brindar aplicaciones y resultados cada vez más exactos
en tiempos menos prolongados; entre ellas se pueden citar las videoconferencias, el
diagnóstico médico asistido por computador y hasta los videojuegos que hacen uso de la
realidad virtual.
Sin embargo, la constante demanda por aún mejores prestaciones y la creciente
necesidad de ejecutar procesos cada vez más rápidos y precisos ha dado lugar a la búsqueda de
distintos medios que optimicen los métodos y tecnologías existentes, como la fabricación de
ordenadores multi-núcleo o multicore, el desarrollo de servidores formados por PC´s
interconectadas mediante una red de alta velocidad, denominados clusters, y la evolución de la
programación paralela para optimizar la utilización de todos los recursos disponibles.
1
Al mismo tiempo, el bajo costo de los microprocesadores y su gran demanda en el
mercado han permitido la proliferación del uso de clusters en el ámbito académico y la
mayoría de las empresas e industrias que no pueden correr con los altos gastos de adquirir y
mantener una supercomputadora. Este escenario es particularmente aplicable al que vive hoy
en día el proyecto “Biblioteca Digital” de la Carrera de Ingeniería de Sistemas de la
Universidad San Francisco Xavier de Chuquisaca, el cual debe tomar medidas para que el
sistema desarrollado pueda ser capaz de soportar y procesar una gran cantidad de peticiones en
cortos periodos de tiempo.
No obstante, el rendimiento de un cluster puede igualar o superar al de una
supercomputadora, así lo demuestra la selección de las máquinas más poderosas del mundo
realizada por Meuer H., Dongarra J., Strohmaier E. y Simon H. (Noviembre, 2012), en la que
se puede constatar que la mayoría de los ordenadores citados son clusters.
Adicionalmente, las aplicaciones secuenciales son en general ineficientes en áreas
donde se requieren tiempos de respuesta cortos y un mejor aprovechamiento de los medios de
hardware y software disponibles. Así, en la actualidad se cuenta con ordenadores que poseen
procesadores con varios núcleos o cores, donde cada uno de ellos puede ejecutar tareas
simultáneas dentro de un mismo programa, siempre y cuando sean independientes entre sí, por
medio de la utilización de hilos o threads, hecho que optimiza en gran medida el rendimiento
de los sistemas.
En consecuencia, el presente contexto define la importancia de combinar la utilización
de máquinas multi-núcleo como nodos integrantes de clusters que ejecuten aplicaciones bajo
la óptica del paralelismo, para dar solución a problemas donde se requiera un alto nivel de
procesamiento computacional y tiempos óptimos de respuesta, además de seguir patrones que
obedezcan a un mejor rendimiento de los programas.
1.3. Situación Problemática
Sin duda, el permanente desarrollo del conocimiento en las distintas ramas de la
ciencia y el aumento progresivo del tamaño, robustez y complejidad de las aplicaciones que
responden a sistemas cada vez más inteligentes, exigen a su vez un avance y progreso del
poder computacional con el que se cuenta.
2
No obstante, si bien hasta hace poco los esfuerzos en este campo estaban concentrados
en construir procesadores cada vez más rápidos, las limitantes físicas y de la propia naturaleza
de construcción de los transistores han frenado paulatinamente la evolución de la velocidad de
los ordenadores, lo que prácticamente ha obligado a la industria a tomar un nuevo rumbo en
esta carrera. Este problema ya fue advertido por Meza (2001) que señala:
“Es posible construir computadores personales cientos de veces más rápidos que los primeros
supercomputadores, también es una realidad que existen limitaciones físicas que impiden un
desarrollo indefinido. Basta con mencionar el límite impuesto por la velocidad de la luz, o el
calentamiento que sufren los componentes debido al alto nivel de integración y
miniaturización” (pp. 2).
Sobre la base de las consideraciones anteriores, desde hace un par de años el desarrollo
de la capacidad de procesamiento de los computadores se enfoca en la utilización de dos o más
núcleos en un mismo microprocesador, tal como afirma Wolfmann (2010):
“La tecnología del silicio ha llegado a un punto tal que hace difícil seguir aumentando la
velocidad de los procesadores. Por ello es que en los últimos años la industria ha vuelto a
tomar la línea de avance por el lado de los multiprocesadores, es decir, disponer de varias
unidades de procesamiento en cada computador, de forma tal que la potencia de cómputo
crezca de la mano del paralelismo. El surgimiento de los procesadores multicore de bajo costo
es tal, que en la actualidad es difícil encontrar procesadores sin esta característica” (pp. 2).
En tal sentido, la superación de la informática de la mano de computadores multicore
es claramente muy superior a sus predecesoras, tal como se puede inferir en la Figura 1.1.
3
Figura 1.1. Evolución en la Velocidad de los Procesadores 1
Fuente: Vargas-Félix M., 2011, pp.3.
De este modo, los distintos núcleos del procesador pueden realizar diferentes cálculos,
operaciones o rutinas de manera simultánea dentro de una misma instancia de una determinada
aplicación, aumentando la eficiencia y rendimiento computacional. Empero, esta solución es
aún insuficiente para satisfacer el exponencial crecimiento de la demanda de mayor capacidad
de procesamiento y rapidez en aspectos como el cómputo científico, los grandes servidores
Web que necesitan tener la capacidad de atender las solicitudes de todos sus clientes o los
servidores de archivos que deben realizar una alta cantidad de consultas a los datos en un
mismo instante.
Atendiendo a este punto, se ha visto la necesidad de formar clusters conformados por
nodos multicore como respuesta a esta problemática, no obstante, esta es una tarea nueva y
compleja en el área de la ingeniería de sistemas, ya que solamente puede aprovecharse esta
solución si se logra paralelizar de manera óptima las aplicaciones.
Siguiendo esta misma línea, el funcionamiento y modo de trabajo de un sistema
paralelo en una computadora multicore es distinto al de un cluster, lo que define la necesidad
de contar con parámetros y patrones de paralelismo adecuados que brinden pautas y
referencias de cuándo paralelizar un segmento de la aplicación dentro del nodo o caso
contrario, en varias secciones del cluster.
A todo esto se suma la reciente data de este tema, que está siendo estudiado
actualmente en distintos ámbitos académicos y de la industria alrededor de mundo; como
4
resultado de estas investigaciones se puede nombrar algunos patrones de paralelismo como
Task Decomposition Pattern, Data Sharing Pattern o Design Evaluation Pattern.Pero aún cuando estos primeros patrones son un gran avance para este nuevo campo de
investigación, los mismos no toman en cuenta aspectos que afectan directamente al
rendimiento de las soluciones, como el protocolo de comunicación entre los nodos y tópicos
relacionados con la lógica del paralelismo, que en algunos casos como los estudiados por
Wolfmann (2010), inciden y perturban de manera crítica a la eficiencia y rendimiento de la
aplicación.
A manera de síntesis, el siguiente diagrama causa-efecto representa el contexto
planteado en los anteriores apartados.
Figura 1.2. Diagrama Causa-Efecto 2
Fuente: Elaboración Propia.
En conclusión, la creciente demanda por aplicaciones y soluciones con mayor
capacidad de procesamiento y menores tiempos de respuesta, junto con la imposibilidad física
5
de fabricar procesadores más rápidos, han dado como consecuencia la necesidad de resolver
esta insuficiencia por medio del empleo de sistemas paralelos bajo entornos híbridos de
clusters formados por nodos multicore, lo cual es una tarea compleja y nueva en el ámbito de
la ingeniería de sistemas que carece de patrones de paralelismo que tomen en cuenta los
factores presentes en estos entornos.
Como resultado de estos razonamientos, la problemática que se desea atacar en este
trabajo gira entorno a la demanda insatisfecha de mayores prestaciones de cómputo científico;
asimismo, dada la limitante tecnológica de no poder fabricar mejores procesadores y el
impedimento económico del alto costo que implica el mantenimiento y adquisición de
supercomputadores, la presente tesis se centrará en atender la necesidad de patrones de
paralelismo más completos y robustos. Así, el siguiente árbol resume toda la problemática
proyectada en la investigación.
Figura 1.3. Árbol de Problemas 3
Fuente: Elaboración Propia.
1.4. Problema Científico
¿El uso de un determinado patrón de paralelismo bajo entornos híbridos de clusters
conformados por nodos multicore, así como su implicancia con la red de comunicación, afecta
directamente al rendimiento y la eficiencia de las aplicaciones?
6
1.5. Objetivos
1.5.1. Objetivo General
Diseñar un nuevo patrón de paralelismo que tome en cuenta los factores influyentes
en la eficiencia y rendimiento de aplicaciones bajo entornos híbridos de clusters
conformados por nodos multicore, de manera que se convierta en un aporte para el
desarrollo de la ingeniería de sistemas en esta área.
1.5.2. Objetivos Específicos
Presentar, analizar y comprender las características y tendencias actuales de la
programación paralela, los patrones de paralelismo existentes, así como los
conceptos y funcionamiento de los clusters de nodos multi-núcleo.
Seleccionar y establecer los procedimientos metodológicos que permitan recolectar
los datos necesarios para analizar la incidencia del empleo de patrones de
paralelismo en soluciones sobre clusters compuestos por ordenadores con múltiples
núcleos.
Interpretar y valorar los datos, información y resultados provenientes de la
comparación y análisis crítico de los distintos patrones de paralelismo en entornos
heterogéneos, tomando en cuenta los factores relacionados con la red de
comunicación, lógica de paralelismo, rendimiento y eficiencia.
Ajustar y Validar un nuevo patrón de paralelismo en entornos híbridos de clusters
de nodos multicore que mejore las prestaciones de sus predecesores y tome en
cuenta los factores que afectan al rendimiento y eficiencia de las aplicaciones.
1.6. Justificación
El presente trabajo tiene su campo de aplicación en el área de ingeniería de sistemas y
será de importancia para el desarrollo óptimo de soluciones en las cuales sea imprescindible
7
paralelizar las operaciones con el fin de obtener un mejor rendimiento y usar clusters de
ordenadores para aumentar la eficiencia de los sistemas de cómputo.
De este modo, en el campo tecnológico, esta tesis contribuirá al progreso y
perfeccionamiento del desarrollo de software destinado a atender los requerimientos de
empresas que dependen de una capacidad de cómputo grande y tiempos de respuesta cortos
para su correcto funcionamiento y éxito en el mercado.
Por su parte, uno de los principales aportes del trabajo radica en el ámbito
metodológico, debido a que se presentará y defenderá un patrón de paralelismo válido y
confiable para el desarrollo de aplicaciones de este tipo; además, todas las nociones expuestas
en la investigación abrirán el camino para la exploración y desarrollo de nuevos trabajos
acerca de esta nueva y compleja área de la ingeniería.
Dentro de este orden de ideas, al presentarse un patrón generalizable que aportará al
saber científico y tendrá como intención llenar los vacíos de conocimiento en el ámbito de la
programación paralela bajo entornos heterogéneos, es innegable el aporte teórico-científico
que lleva consigo la realización de la investigación.
No obstante, es igual de importante resaltar la connotación práctica que tendrá el
trabajo, ya que servirá como base para desarrollar herramientas que permitan atender
necesidades explícitas y latentes que están presentes en la actualidad.
8
CAPÍTULO II
SUSTENTO TEÓRICO
2.1. Antecedentes Teóricos
Dentro del campo del paralelismo, los primeros autores que desarrollaron un primer
acercamiento a este tema fueron Singh A., Schaeffer J. y Szafron D. (1996), los cuales
aplicaron un modelo de programación basado en templates dentro de un entorno paralelo.
El mismo año, Siu S., De Simone M., Goswami D. y Singh A. introdujeron en tema de
debate por primera vez en el contexto mundial, el concepto de “diseño de patrones para la
programación paralela”, en la Conferencia Internacional sobre Técnicas y Aplicaciones de
Procesamiento Paralelo y Distribuido, llevada a cabo en California – Estados Unidos.
Este tema, quedó en suspenso y en proceso de investigación hasta que Fayad M.,
Schmidt D., y Johnson R. (1999) desarrollaron un patrón de paralelismo basado en conceptos
de framework; pero no fue hasta el año 2002 que se presentaron resultados tangibles del
estudio de la aplicabilidad de patrones de diseño en el ámbito de la programación paralela, por
parte de Bromling S., MacDonald S., Anvik J., Schaeffer J., Szafron D. y Tan K. en la
Conferencia Internacional de Paralelismo y la 17° Conferencia Internacional de Software
Automatizado de la IEEE efectuada el mismo año.
Sobre la base de estos estudios, a partir del año 2004 se generan muchas más
investigaciones en este campo, donde resaltan Mattson T., Sanders B., y Massingill B. (2004)
que defienden patrones de paralelismo como Group Task Pattern, Order Task Pattern, Task
Decomposition Pattern o Data Decomposition Pattern.
En la actualidad, el grupo de investigación de la Universidad de Berkeley – California,
denominado Parallel Computing Laboratory (Parlab), ha desarrollado el patrón Dense Linear
Algebra Pattern. Dentro de este ambiente, existen otros centros de investigación que se
encargan de mejorar patrones ya establecidos, como es el caso del Universal Parallel
Computing Research Center (UPCRC) perteneciente a la Universidad de Illinois.
Al mismo tiempo, la importancia de este tema se refleja en el interés de las grandes
empresas y compañías de desarrollo de software por los trabajos e investigaciones presentadas
9
en los workshops anuales de paralelismo a nivel mundial denominados Para-PLoP, que se
efectúan desde el 2009.
No obstante, Wolfmman (2010) ha demostrado que si bien los patrones de paralelismo
actuales son un gran aporte al área de la informática y el cómputo científico, no se consideran
aspectos que inciden directamente a la eficiencia y el rendimiento de las soluciones, tales
como la lógica del paralelismo y sobre todo, los protocolos y estándares relacionados con la
red de interconexión y comunicación.
De este modo, no se ha presentado oficialmente ningún patrón que tome en cuenta
estas consideraciones hasta la fecha. Asimismo, no se conoce ni se ha hecho pública ninguna
investigación o trabajo en el campo problemático específico en el que se desenvolverá la
presente tesis.
2.2. Marco Teórico
2.2.1. Introducción
La presente sección tiene como propósito exponer de manera sistemática, ordenada y
objetiva los elementos teóricos necesarios para el desarrollo del modelo de solución al
problema planteado en la investigación, a través de una revisión literaria exhaustiva sobre
temas de importancia relacionados con el trabajo, lo cual dará lugar a la definición sustentada
del diseño metodológico que se seguirá en la tesis con el fin de poder alcanzar los objetivos
propuestos.
En primera instancia, se contextualizarán las características de un sistema paralelo en
general, así como su clasificación y los paradigmas enfocados al cómputo científico que se
aplican actualmente en esta área. De igual manera, se expondrán los principios fundamentales
y los diferentes tipos de clusters de ordenadores para poder elegir el entorno físico y lógico
más adecuado para el desarrollo correcto de la etapa de experimentación de la presente
investigación.
Luego, se tratarán los aspectos relacionados a la redes de comunicación de
computadoras, juntamente con los estándares y protocolos más sobresalientes en la actualidad.
Bajo este orden de ideas, es necesario desarrollar una clasificación de los procesadores con los
10
que se cuenta hoy en día, haciendo énfasis en los multicore, junto con los medios y modelos
para implementar aplicaciones paralelas frente al entorno actual.
Posteriormente, se estudiarán las características, evolución y estructura de los patrones
de paralelismo existentes hoy en día, con el propósito de concluir el marco teórico con el
análisis de las métricas de rendimiento y eficiencia más usadas para entornos híbridos de
clusters de nodos multi-núcleo.
2.2.2. Generalidades de un Sistema Paralelo
Los sistemas paralelos en el ámbito de la informática han surgido como consecuencia
de la creciente necesidad de resolver problemas complejos y tratar con grandes volúmenes de
datos en períodos cortos de tiempo, dada la insuficiencia de los sistemas secuenciales.
Dentro del ámbito técnico, no se debe confundir un sistema paralelo con aquellos que
son concurrentes o distribuidos; al respecto, Jorba J. y Suppi R. (2010) especifica:
“En un sistema paralelo existe procesamiento de cómputo simultáneo físicamente, mientras en
concurrencia el cómputo es simultáneo lógicamente, ya que el paralelismo implica la
existencia de múltiples elementos de procesamiento (ya sean CPU, o computadores enteros)…
Mientras que un sistema distribuido se refiere típicamente a aplicaciones, ejecutándose en
múltiples computadoras (normalmente se implica además heterogeneidad de recursos), que no
tienen por qué estar físicamente en un mismo espacio” (pp. 10).
Por su parte, generalmente también se asocia el término “paralelo” a los sistemas con
altas prestaciones de cómputo donde se hallan involucrados supercomputadores o redes de PC
´s optimizadas. Así la definición que se adoptará en el presente trabajo está de acuerdo con los
razonamientos de Ares G. (2012) y Giménez D., Boratto M. y Coelho L. (2009), quienes están
de acuerdo que un sistema paralelo es un conjunto de procesadores que trabajan de manera
conjunta para la resolución de problemas computacionales.
En base a estas consideraciones, un sistema paralelo puede llegar a ser una sola
computadora, un cluster o cualquier estructura que posea múltiples recursos de procesamiento;
sin embargo, éstas se pueden llegar a clasificarse según parámetros relacionados con la
arquitectura del sistema, tal como se detalla a continuación.
11
2.2.3. Clasificación de los Sistemas Paralelos
Hoy en día, si bien algunos autores han propuesto muchas clasificaciones de sistemas
paralelos, prácticamente la totalidad de los entendidos en la materia y los organismos
mundiales de estandarización coinciden en adoptar una categorización en base al tipo de
arquitectura, siguiendo los lineamientos de Flynn (1972).
Taxonomía de Flynn
Esta clasificación se basa en la cantidad de flujos de datos que soporta el sistema y el
número de flujos de instrucciones que se pueden aplicar a dichos datos en un instante. Por lo
tanto, de acuerdo a Flynn (1972) se pueden distinguir cuatro categorías:
o Single Instruction- Single Data (SISD): Presenta una arquitectura básica que
corresponde al diseño serial de Von Neumann, donde en cualquier instante se está
ejecutando una sola instrucción con un único flujo de datos.
o Multiple Instruction- Single Data (MISD): Este tipo de sistemas implica múltiples
procesadores, debido a que su característica fundamental es el tratamiento
diferente de un flujo de datos en un mismo instante; empero, no es posible
encontrar máquinas con este tipo de funcionamiento en la actualidad.
o Single Instruction- Multiple Data (SIMD): Donde una sola instrucción se aplica a
muchos flujos de datos al mismo tiempo, lo cual también involucra múltiple
procesadores. Un ejemplo lógico de este tipo de procesamiento es el tratamiento
de matrices y vectores.
o Multiple Instruction- Multiple Data (MIMD): Es el tipo de sistema paralelo más
completo, ya que puede operar con distintas instrucciones sobre diferentes datos al
mismo tiempo, es decir, tiene la capacidad de ejecutar varios programas a la vez.
Estas consideraciones, se pueden ilustrar en la siguiente figura:
12
Figura 2.1. Taxonomía de Flynn 4
Fuente: Jorba J. y Suppi R., 2010, pp.17.
2.2.4. Paradigmas de Aplicaciones de Cómputo Científico
En el marco de la situación problemática que se plantea atacar en la presente tesis, las
aplicaciones paralelas se encuentran íntimamente relacionadas con el cómputo científico, ya
que el progreso en las distintas áreas del conocimiento se desarrolla de la mano de la
superación de los sistemas paralelos; en tal sentido, los paradigmas de desarrollo de
aplicaciones científicas se pueden también considerar como arquetipos de redes de
procesamiento de datos de altas prestaciones bajo el enfoque del paralelismo.
En este propósito, según Rosas C. (2009) se pueden considerar dos tipos de paradigmas
en este campo, el High Throughput Computing (HTC) y el High Performance Computing
(HPC), que si bien traducidos al lenguaje español significan prácticamente lo mismo,
“Computación de Alto Rendimiento”, se diferencian particularmente en que los elementos que
constituyen un sistema HTC se interconectan mediante redes de alta latencia y bajo ancho de
banda, que generalmente se encuentran ampliamente distanciados geográficamente y ejecutan
procesos largos que no necesitan mucha comunicación dentro de la red y duran usualmente
días o semanas.
13
En oposición, los sistemas HPC están orientados al cómputo intensivo de datos, donde
se trata de optimizar al máximo todos los elementos de la red, que por lo general están
conectados mediante una distribución de alta velocidad y baja latencia.
Siguiendo esta misma línea, como se puede inferir de los planteamientos hechos hasta
el momento, es indispensable caracterizar las estructuras formadas por PC´s interconectadas
mediante una red de alta velocidad, denominadas comúnmente clusters, que se estudian en el
siguiente subtítulo.
2.2.5. Clusters de Computadoras
De acuerdo a Buyya R (1998):
“Un clúster es un tipo de sistema de procesamiento paralelo o distribuido, que consiste en un
conjunto de ordenadores interconectados que trabajan juntos de manera cooperativa como un
único recurso informático integrado” (pp. 28).
Adicionalmente, los ordenadores que componen un cluster pueden ser heterogéneos y
de ninguna forma son nodos especiales o con características distintas a las de una computadora
personal; con respecto a su arquitectura, son sistemas MIMD de memoria distribuida, en
función a la taxonomía de Flynn.
Además, Singh D., Isaila F., Higuero D., García J. y Bergua B. (2012) hacen énfasis en
los componentes de hardware y software mínimos para el funcionamiento un cluster que son:
los nodos o PC´s componentes, la red de comunicación, el cluster middleware y las
aplicaciones paralelas. Atendiendo a este punto, la Figura 2.2 detalla esta estructura.
14
Figura 2.2. Componentes de un Cluster 5
Fuente: Singh D., Isaila F., Higuero D., García J. y Bergua B., 2012, pp.9.
Cabe recalcar, que los nodos no necesariamente deben tener el mismo sistema
operativo; pero un cluster no puede funcionar sin un Single System Image (SSI) que es el
middleware que permite que el sistema funcione de manera que simule una única máquina
frente al usuario y sus aplicaciones.
Tipos de Clusters
Con respecto a los tipos de clusters, usualmente se los clasifica según la función que
cumplen, en tal sentido, González R. y Rodríguez S. (2008) catalogan estos sistemas en tres
grupos:
o Clusters de Alto Rendimiento: Utilizan un red privada de alta velocidad, se
dedican a realizar cálculos intensivos, simulaciones científicas, entre otros.
o Clusters de Balanceo de Carga: Este tipo de sistemas permiten que un conjunto
de nodos o servidores compartan la carga de trabajo o tráfico de sus clientes, a
nivel de aplicaciones o de carga IP.
o Clusters de Alta Disponibilidad: Su función principal es mantener un
determinado servicio o aplicación siempre disponible, debe priorizar la
fiabilidad, disponibilidad, tolerancia a fallos y la redundancia de software y
hardware.
15
De igual forma, la red que permite la comunicación entre los nodos también cumple un
papel preponderante en un cluster, tal como indica Wolfmann G. (2010):
“La capacidad de procesamiento de los clusters está dada por la cantidad y capacidad
individual de la computadoras (nodos) que la integran y el rendimiento o capacidad de
transferencia de la red que las comunica” (pp.18).
Como consecuencia, es de importancia analizar los distintos protocolos y
configuraciones de red que puede adoptar un cluster.
2.2.6. Redes de Comunicación de Computadores
Dado que el ancho de banda y la latencia son factores decisivos en un cluster de alto
rendimiento, se han desarrollado muchos estándares con el objetivo de mejorar las
prestaciones de las redes de ordenadores, sin embargo, tres esquemas de trasmisión son los
más utilizados hoy en día según Pfister (2010):
Ethernet: Es un estándar de comunicación muy difundido debido a su bajo costo,
utiliza la técnica de Acceso Múltiple por Detección de Portadora con Detección de
Colisiones (CSMA/CD), que tiene como principal desventaja el hecho de tener
totalmente ocupado el medio de transmisión cuando un nodo está haciendo uso del
canal.
Infiniband: Es un medio de comunicación de alta velocidad, que se encuentra
estandarizado por Infiniband Trade Association (IBTA), que posee latencias teóricas de
160 ns. aproximadamente.
Myrinet: La redes de interconexión que utilizan este estándar funcionan con dos cables
de fibra óptica y todos los nodos integrantes del sistema requieren la incorporación de
un circuito integrado en el CPU; ha tenido mucho éxito en el desarrollo de clusters de
altas prestaciones.
En cuanto a los tipos de conexiones punto a punto y colectivas, ambos presentan
ventajas y desventajas según el caso en particular. A manera de ejemplo, en el caso de una red
punto a punto, se deben utilizar varios envíos punto a punto para resolver un mensaje
colectivo; por el contrario, para una arquitectura colectiva, un mensaje punto a punto genera
una captura del canal común de comunicaciones.
16
En otro orden de ideas, la comunicación TCP/IP es considerada como “pesada” para
algunos autores como Singh D. y otros (2012), los cuales sugieren la utilización de nuevos y
poderosos protocolos como Active Messages, creado y difundido por la Universidad de
Berkeley o el estándar Xpress Transport Protocol (XTP) de la Universidad de Virginia.
Hechas las observaciones anteriores sobre la red de interconexión, es preciso tener un
panorama claro y formal de los tipos de procesadores con los que puede contar un computador
personal que forma parte de un cluster.
2.2.7. Procesadores
Dada la evolución actual de la tecnología, los autores Montes E, De Giusti L., De
Giusti A. y Naiouf M. (2012) afirman que un procesador es actualmente un circuito integrado
de alta miniaturización que tiene la suficiente capacidad para catalogarse como una unidad
central de procesamiento (CPU).
Desde una perspectiva lógica funcional, Guerrero J. y Francés J. (2011) descomponen
un procesador en registros, una unidad de control, una unidad aritmético lógica y dependiendo
el procesador, una unidad de punto flotante.
La duración de las instrucciones ejecutadas por un procesador depende, además de su
estructura, de un oscilador de cuarzo interno denominado comúnmente “reloj”, que hoy en día
genera miles de MHz.
Clasificación de los Procesadores
La clasificación de los procesadores que más se acomoda a las intenciones de la
presente investigación es defendida por González R. y Rodríguez S. (2008) que tipifican estos
circuitos integrados por medio de dos razonamientos:
o Por su Tamaño de Palabra: Los procesadores que se manejan comercialmente
en el mercado solo manejan dos tamaños de palabra: de 64 y 32 bits.
Obviamente, los procesadores de 64 bits tienen más capacidad de
procesamiento debido a su mayor tamaño.
o Por su Número de Núcleos: Otra forma de catalogar a los procesadores, es por
el número de núcleos o cores que poseen, simulando la presencia de varios
procesadores dentro de uno solo. Con referencia a lo anterior, un procesador
17
dual-core posee dos núcleos inmersos en un mismo integrado; de forma
análoga, un cuad-core ostenta cuatro núcleos.
En el orden de las ideas anteriores, ya no es posible encontrar en el mercado actual
ordenadores que solo posean un núcleo, es por eso que se dará particular importancia en este
análisis a las computadoras multicore.
2.2.8. Computadoras Multicore
La principal estrategia en la actualidad para aumentar las prestaciones de los
ordenadores es la de duplicar o incluso multiplicar los procesadores internos que componen un
mismo circuito integrado, a tal punto que resulta difícil conseguir microprocesadores que no
estén compuestos por al menos dos procesadores. Esta arquitectura con más de un núcleo está
ligada al modelo de memoria compartida, en concordancia con el razonamiento de Baldoni F.
y Romano M. (2012):
“La arquitectura de estos microprocesadores es tal que cada uno de estos puede actuar en
forma independiente en cuanto a los procesos que se ejecuten, ya que tienen su propias
unidades de procesamiento, punto flotante, pipelines, etc, incluso cada core dispone
generalmente de su propia memoria cache, pero en lo referido a la memoria principal del
equipo, es de tipo compartida, por lo que toda la RAM es accesible desde cualquiera de los
procesadores integrantes del CPU. Es por esto que este tipo de computadora
multiprocesadora se denomina como de Memoria Compartida” (pp. 22).
2.2.9. Modelo de Memoria Compartida
El modelo de memoria compartida cuadra perfectamente en el funcionamiento de los
ordenadores multicore, debido a que todos sus núcleos comparten la memoria del computador,
la cual es accesible desde cualquier core, como se puede inferir en la Figura 2.3.
18
Figura 2.3. Arquitectura de Memoria Compartida 6
Fuente: González R. y Rodríguez S., 2008, pp.13.
2.2.10. Programación Paralela en Computadores Multicore
Dentro del contexto de los ordenadores multi-núcleo, si bien pueden realizarse
aplicaciones secuenciales, éstas no aprovechan la potencialidad de la programación paralela, al
tener más de un recurso físico que puede trabajar al mismo tiempo. En consecuencia, tal como
afirma Buyya (1998), una de las formas de aprovechar esta ventaja es por medio de la utilización de threads o hilos, que tienen la función de ejecutar tareas de manera independiente compartiendo el mismo recurso de memoria.
Cabe agregar, que el hecho de regirse en un modelo de memoria compartida, implica la
necesidad de existencia de mecanismos de control y exclusión para que más de un thread no
afecte al mismo espacio de memoria en un mismo instante, ya que este hecho provocaría
errores no deseados e inconsistencia en los datos.
En tal sentido, los primeros estándares para la utilización de hilos de ejecución se
desarrollaron en la década de 1990, con el estándar Pthread que define una serie de rutinas
internas para la creación de hilos y la inclusión de una biblioteca que funciones que permite
trabajar y manipular a los mismos. Con el tiempo, el estándar Pthread estuvo casi
exclusivamente restringido al lenguaje C/C++.
Debido a que el estándar Pthread implica un dominio detallado de paralelismo, es
relativamente complejo de utilizar en el desarrollo de software; en oposición, surge el estándar
OpenMP que prácticamente se ha constituido en la manera más difundida a nivel mundial para
desarrollar aplicaciones paralelas en entornos de memoria distribuida.
19
OpenMP
En base al análisis de Rannou F. (2008):
“OpenMP es un estándar para programación paralela en sistemas de memoria compartida.
Las aplicaciones desarrolladas con OpenMP son portables a todas las arquitecturas de
memoria compartida que cuenten con un compilador capaz de OpenMP” (pp.3).
La principal ventaja de OpenMP es que sus directivas son insertadas directamente al
código secuencial, facilitando en gran medida su uso. Por lo general, un programa con
OpenMP comienza de manera secuencial y se crean hilos de manera dinámica solamente
cuando se los necesita, para luego volver al desarrollo secuencial de la aplicación, como se
puede observar en la Figura 2.4.
Figura 2.4. Modelo de Ejecución de OpenMP 7
Fuente: Rannou F., 2008, pp.7.
Toda esta lógica de programación paralela no es válida para estructuras cluster, donde
el modelo que se usa es de memoria distribuida.
2.2.11. Modelo de Memoria Distribuida
Dado que en un cluster, la memoria de cada nodo no es accesible de forma directa por
cualquier otro, no se puede obviar el mecanismo de comunicación entre ellos, dado que los
procesos son independientes entre sí, pero en algún momento deben intercambiar o dar a
20
conocer sus resultados. Una representación de un sistema de memoria distribuida se detalla en
el gráfico a continuación.
Figura 2.5. Arquitectura de Memoria Distribuida 8
Fuente: González R. y Rodríguez S., 2008, pp.57.
Al igual que para los sistemas de memoria compartida, los entornos clusters también
poseen sus propios estándares para el desarrollo de aplicaciones paralelas bajo este tipo de
estructura.
2.2.12. Programación Paralela en Clusters
Todos los estándares hasta ahora desarrollados, concuerdan en que la comunicación
entre los nodos componentes de un cluster debe ser por medio del paso de mensajes, con lo
cual se puede dar lugar al intercambio de resultados de los procesos independientes.
La primera implementación del paso mensajes en estos sistemas, fue por medio del
estándar Parallel Virtual Machine (PVM). Sin embargo, con el transcurso del tiempo, el estándar de paso de mensajes de facto que se utiliza mayoritariamente en la actualidad es el Message Passing Interface (MPI).
MPI
MPI es una interfaz estandarizada para la realización de aplicaciones paralelas basadas
en paso de mensajes. Según Alonso J. (1997):
21
“MPI es, como su nombre indica, una interfaz, lo que quiere decir que el estándar no exige
una determinada implementación del mismo. Lo importante es dar al programador una
colección de funciones para que éste diseñe su aplicación, sin que tenga necesariamente que
conocer el hardware concreto sobre el que se va a ejecutar, ni la forma en la que se han
implementado las funciones que emplea” (pp. 1).
Siguiendo el razonamiento de Andrade X. (2010), los objetivos fundamentales de MPI
son:
o Definir un entorno de programación único que garantice la portabilidad de las
aplicaciones paralelas.
o Definir totalmente el interfaz de programación, sin especificar cómo debe ser la
implementación del mismo.
o Ofrecer implementaciones de calidad, de dominio público, para favorecer la
extensión del estándar.
Lo que ha dado como resultado, el uso de este estándar de manera ámplia alrededor del
mundo, hecho que también ha convencido a los fabricantes de computadores paralelos, como
IBM y Silicon Graphics, a ofrecer versiones de MPI optimizadas para sus máquinas.
De este modo, el MIP implementa numerosas primitivas para manejar los diferentes
tipos de mensajes que pueden necesitarse en la comunicación entre nodos de un cluster, así
como si sincronización y control.
En oposición, una de las desventajas de MPI es que siempre existe la necesidad de que
específicamente esté programado en el proceso que actúa como emisor, una invocación a un
procedimiento de envío; y en los procesos receptores, la respectiva invocación a un
procedimiento de recepción. En el caso de que no exista esta simetría, el proceso global no
avanza o se genera un error.
Sobre la base de todas las consideraciones anteriores, el escenario actual donde radica
el desarrollo de la situación problemática que se plantea en la investigación, se halla tanto en
el ámbito del modelo de memoria compartida como en entornos de memoria distribuida. Es
importante entonces, el análisis de la programación paralela en entornos híbridos de cluster
conformados por nodos multicore, de acuerdo a las exigencias del contexto actual que
22
demanda el uso de los mejores recursos disponibles, velando por brindar las mejores
prestaciones de cómputo.
2.2.13. Programación Paralela en Entornos Híbridos
Dado el hecho de que ya no se encuentran en el mercado ordenadores con un solo
núcleo, la forma de programación paralela en clusters debe obedecer un modelo combinado de
memoria compartida – distribuida.
Según Wolfmann (2010), en un principio se pueden pensar en dos posibilidades que no
son para nada las más factibles:
o Aplicar un modelo de memoria distribuida a la totalidad del sistema, lo que
dará lugar a la utilización de cada uno de los cores de los nodos como
computadoras independientes entre sí, donde se deberá usar el paso de mensajes
para la comunicación en todo momento.
Si bien esta opción es posible de ser realizada, y muchos programas preparados
para correr en paralelo solo utilizan esta estrategia de paralelismo; es fácil notar
un desperdicio de recursos si se trabaja de esta manera, ya que el envío de
mensajes entre procesos dentro de una misma computadora implica el uso de un
mecanismo más complejo que el hecho de compartir un área de memoria.
o Simular un escenario de memoria compartida en la totalidad del sistema, que
se basa en la premisa de que “programar con memoria compartida es más
simple que programar con memoria distribuida”, lo cual se logra haciendo una
réplica de todos los datos usados en los diferentes nodos del cluster.
Co-Array Fortran es el intento más sobresaliente por implantar este método de
programación paralela en entornos híbridos; pero a pesar de estos esfuerzos, es
innegable que la duplicación de los datos en cada computador con el fin de
simular un modelo de memoria compartida implica un desperdicio de recursos.
Por estas razones, la mejor opción, pero a la vez la más compleja, para construir
aplicaciones paralelas en entornos híbridos es utilizar una combinación de OpenMP y MPI en
el desarrollo de las soluciones. Siguiendo los lineamientos de Quinn M. (2004) y Smith L.
(2000), se puede inferir que la programación paralela se complica aún más con un modelo
23
mixto OpenMP/MPI, ya que se deben entremezclar tanto las instrucciones y las directivas
propias de dichos estándares, así como la lógica particular de funcionamiento de cada uno.
En este entendido, Smith L. (2000) hace una abstracción de las aplicaciones
OpenMP/MPI para dividirlas en dos niveles de paralelismo y combinar sus funcionamientos,
como se pretende representar en siguiente esquema.
Figura 2.6. Representación Esquemática de la Programación Mixta OpenMP/MPI 9
Fuente: Smith L., 2000, pp.86.
Por su parte, si bien el uso de esta forma de programación paralela mixta obedece a la
utilización óptima de todos los recursos y la obtención de las mejores prestaciones de
cómputo, esta idea solo es válida si se realiza un análisis correcto de la lógica y la forma de
cuándo y cómo paralelizar la aplicación dentro de un nodo o fuera del mismo, además de
tomar en cuenta los aspectos relacionados con el protocolo y el estándar de comunicación de
la red que permite la interconexión de los nodos del cluster. En este propósito, los patrones de
paralelismo juegan un papel importante como instrumentos que ayudan a la solución de este
tipo dilemas.
2.2.14. Patrones de Paralelismo y su Estructura
Se considera, que el surgimiento de los patrones como herramientas de solución a
problemas en los distintos campos del conocimiento humano ha surgido de la mano de
24
Alexander C., Ishikawa S. y Silverstein M. (1977), que introdujeron por primera vez este
concepto en el ámbito de la arquitectura. Estos autores consideran que:
“Cada patrón describe un problema que ocurre una y otra vez en nuestro entorno y, a
continuación se describe el núcleo de la solución a ese problema, de tal manera que se puede
utilizar la solución de un millón de veces sin tener que hacerlo de la misma manera dos veces”
(pp. 33).
Con respecto al área de la presente investigación, fue recién el año 1995, que se
introdujo el manejo de patrones en el campo de la ingeniería de software de la mano de
Gamma E., Helm R., Johnson R. y Vlissides J. con su publicación titulada “Design Patterns:
Elements of Reusable Object-Oriented Software”.
Actualmente, se puede contar con muchos patrones en el campo de la informática, que
van desde patrones de seguridad y patrones de redes, hasta los nuevos patrones de paralelismo
que se originaron fruto de la reciente data de este campo.
Si bien no existe una estándar para la estructuración o presentación de los patrones en
el área de la informática, Keutzer K. y Mattson T. presentaron en el workshop mundial de
paralelismo (Para-PLoP) en el año 2009, un formato mínimo que ha tenido mucha aceptación
hasta el momento por organismos de investigación y académicos que se dedican a esta área de
la ciencia, el cual se representa en el siguiente diagrama:
25
Figura 2.7. Estructura Mínima de un Patrón de Paralelismo 10
Fuente: Elaboración Propia, en base a Keutzer K. y Mattson T. (2009).
Cabe mencionar, que todos los patrones citados en el apartado de antecedentes teóricos
cumplen con la estructura representada por la Figura 2.7. Como último punto, se deben definir
los parámetros que permiten valorar este tipo de patrones en función a su rendimiento y
eficiencia, con el fin de poder contar con las herramientas de evaluación necesarias para
realizar un análisis crítico de los patrones existentes y poder validar la propuesta de uno nuevo
que será el resultado del presente trabajo.
2.2.15. Métricas de Rendimiento y Eficiencia
Hasta este punto, una vez analizados todos los elementos teóricos que intervienen en el
problema, se debe caracterizar los sistemas paralelos en función a su rendimiento y eficiencia,
lo cual se logra por medio del análisis matemático de los entornos paralelos. Hechas estas
consideraciones, los siguientes parámetros, análisis y deducciones que se detallan en este
apartado son una síntesis de los razonamientos alcanzados Ares G. (2012), Singh D., Isaila F.,
Higuero D., García J. y Bergua B. (2012) y González R., Rodríguez S. (2008).
26
Tiempo de Ejecución
El tiempo de ejecución es el factor más intuitivo para valorar la eficiencia
computacional de un programa corriendo en un determinado sistema. Asimismo, el
almacenamiento y la transmisión de los datos en un sistema paralelo afectarán directamente a
su tiempo de ejecución (T).
Además de ser un parámetro fácil de medir, también puede brindar una pauta rápida
del esfuerzo computacional al que se está sometiendo el sistema. En el caso particular de una
plataforma paralela, el tiempo de ejecución será función principalmente de tres elementos: el
tamaño del problema (n), los procesadores disponibles (p) y el número de procesos (U), es
decir:
T=f (n , p ,U )
No obstante, en un cluster de nodos multicore, durante el tiempo que transcurre entre el
inicio de la ejecución del primer proceso hasta la realización del último, se pueden inferir tres
estados diferentes: tiempos de procesamiento efectivo (T PROC), tiempos invertidos en la
comunicación (T COM) y tiempos inactivos (T IDLE); por tanto, es válida también la ecuación:
T=T PROC +TCOM+T IDLE
Donde T PROC depende de la complejidad y dimensión del problema; T COM es un
parámetro que depende del número de comunicaciones dentro y fuera de cada nodo, además
del tipo de red de interconexión. El tiempo invertido en la comunicación se encuentra
íntimamente relacionado con el tiempo necesario para el establecimiento de la conexión,
denominado latencia, y el tiempo de trasferencia de información.
De la misma manera, el tiempo de transferencia viene dado por el ancho de banda del
canal, que depende de la tecnología y estándar de red usado; lo que da lugar a la afirmación:
Tiempo Necesario para Transmitir L bits=T L=Latencia+L∗T R
Donde T R es el tiempo necesario para transmitir un bit.
Por su parte, la latencia obedece en parte al protocolo de comunicación que se usa, ya
que en ellos se especifican tiempos necesario para iniciar la operación de envío/recepción de
27
un mensaje (overhead), como ilustración, en nuestro medio, el protocolo TCP/IP es el más
difundido.
Cabe agregar, que los tiempos inactivos son fruto de los instantes donde un procesador
se encuentra sin realizar ningún trabajo por la ausencia de datos con los cuales operar o la
ausencia de recursos de cómputo disponibles. Así, uno de los objetivos de diseño de los
patrones de paralelismo es disminuir los tiempos inactivos.
Speedup o Aceleración
La aceleración (S) es una medida que expresa el beneficio relativo de resolver un
problema de forma paralela con multiprocesadores. Si se tiene en cuenta que T s es el tiempo
de ejecución del mejor algoritmo secuencial que resuelve el problema y T P es el tiempo que
ejecución de algoritmo paralelo para P procesadores que resuelve el mismo problema; se
puede definir la aceleración como:
S=T s
T P
Speedup Algorítmico
En ocasiones, no es fácil encontrar el mejor algoritmo secuencial que resuelve un
problema, por lo que no se puede calcular la aceleración de manera clara. Entonces, se valora
el tiempo de ejecución de un algoritmo por medio de un procesador (T 1), frente al tiempo de
ejecución del mismo en P procesadores; lo que se conoce como speedup algorítmico (SN).
SN=T 1
T P
Sin embargo, para una valoración más precisa de los tiempos de ejecución, se debe
considerar la configuración de la red de comunicación del sistema paralelo; en el caso de que
se tenga una gran cantidad de nodos involucrados en red, se debe recurrir al análisis por medio
del algebra de grafos. De la misma manera, se debe tomar en cuenta el asincronismo de los
equipos por medio de ratios estadísticos.
En cuanto a la situación deseada, lo esperado es que al usar P procesadores se obtenga
una mejora de factor P en el speedup, que se denomina speedup lineal; empero, el incremento
28
de los tiempos de comunicación y la latencia, entre otros factores, dan como resultado que el
speedup esté debajo del ideal (speedup sublineal) y solamente en contadas ocasiones se
obtenga una respuesta del sistema superlineal o mejor a la esperada.
Figura 2.8. Speedup Lineal, Sublineal y Supralineal 11
Fuente: Ares G., 2012, pp. 70.
Eficiencia
La eficiencia (E) en sistemas paralelos parte del tiempo en el que los procesadores
están realizando trabajo útil; desde el punto de vista matemático, corresponde a un valor
normalizado del speedup algorítmico (entre 0 y 1), respecto a la cantidad de procesadores
utilizados.
E=T 1
T P∗P=
SN
P
En efecto, valores de eficiencia cercanos a la unidad identifican sistemas paralelos con
características cercanas a las ideales en cuanto a rendimiento.
Paralelicibilidad
En principio, se puede confundir con el concepto de paralelicibilidad (PAR) con
speedup (SN), pero se debe tener en cuenta que el primero da una pauta de cuán paralelizable o
29
escalable resulta el algoritmo paralelo utilizado, mientras que el último evalúa la mejora del
desempeño al utilizar técnicas de programación paralela.
La definición matemática de paraleliciblidad se resume en el cociente de la división del
tiempo que toma a un computador paralelo ejecutar un algoritmo paralelo en un único
procesador (TP1) entre el tiempo que toma al mismo computador paralelo ejecutar el mismo
algoritmo paralelo en P procesadores (TPN).
PAR=TP1
TPN
Cabe recalcar, que otra diferencia fundamental entre estos dos conceptos es que el
speedup considera el tiempo de un algoritmo secuencial (el mejor existente o conocido) para la
comparación, en oposición con la paralelicibilidad que toma en cuenta el tiempo de ejecución
de un algoritmo paralelo en un único procesador.
Escalabilidad
La escalabilidad constituye una de las características más deseadas para las
aplicaciones paralelas en el ámbito del cómputo científico. Se dice que un sistema es escalable
cuando mantiene su eficiencia al aumentar simultánea y proporcionalmente el número de
procesadores y la complejidad y magnitud de la aplicación.
Utilización de los Recursos Disponibles
Lo óptimo en un sistema paralelo es mantener una exigencia equitativa a todos los
procesadores de un sistema paralelo, es decir, se utilice de manera equilibrada todos los
recursos disponibles.
Este parámetro mide el porcentaje de tiempo que un procesador es utilizado durante la
ejecución de una aplicación paralela.
USO=tiempoOCUPADO
tiempoINACTIVO+tiempoOCUPADO
Finalmente, expuestos los antecedentes teóricos y planteados todos los elementos teóricos
necesarios, se pueden presentar un primer acercamiento a la hipótesis de la investigación.
30
2.3. Hipótesis
El uso de un determinado patrón de paralelismo bajo entornos híbridos de clusters
conformados por nodos multicore, así como su implicancia con la red de comunicación, afecta
directamente al rendimiento y la eficiencia de las aplicaciones.
31
CAPÍTULO III
DISEÑO METODOLÓGICO
3.1. Introducción
El modelo metodológico del presente trabajo responde al desarrollo de una idea
conceptual y organizada que tiene el fin de proponer una solución a la problemática descrita
en el capítulo 1.
En este mismo sentido, todos los razonamientos que se describen en la presente sección
están de acuerdo con un juicio epistemológico-metodológico que pretende ser congruente y
consistente, además de estar orientado a atender la hipótesis y pregunta científica de la
investigación.
De este modo, en primera instancia es necesario recalcar que todas las consideraciones
del capítulo están enmarcadas asumiendo el postulado de que la realidad y el objeto de estudio
son objetivos, causales, observables y medibles; en igual forma, el interés por la generación de
conocimiento se centra en predecir y controlar el funcionamiento de las aplicaciones paralelas
en entornos híbridos por medio de la inducción de principios y patrones que lo sustenten. Por
lo tanto, esta postura encaja perfectamente en el paradigma epistemológico positivista que a su
vez es coherente con la naturaleza del conocimiento que se desea estudiar.
3.2. Nivel y Tipo de Investigación
Dentro del marco de la presente tesis y siguiendo los niveles de investigaciones
descritas por Grajales (1998), el trabajo a realizarse se encuadra dentro de los lineamientos de
una investigación experimental, ya que se propondrá un nuevo patrón de paralelismo por
medio de la manipulación de variables en condiciones controladas, con el fin de mejorar el
rendimiento y eficiencia de las aplicaciones diseñadas para funcionar bajo estructuras de
clusters de nodos multicore con redes de interconexión definidas.
Asimismo, de acuerdo con Zorrilla (1993) y en concordancia con los propósitos y
objetivos que se pretende alcanzar en la investigación, el trabajo puede ser catalogado dentro
32
las investigaciones de tipo tecnológica debido a que está encauzada a generar un patrón que
implique un enfoque más apropiado a los requerimientos que la realidad actual exige a las
aplicaciones paralelas.
Así, el nivel y tipo de investigación en los que se delimita el trabajo guardan
coherencia metodológica, debido a que ambos buscan ocasionar cambios en la realidad
estudiada por medio de la aplicación de nuevos modelos y sistemas que ostenten nuevas
prestaciones e impliquen un progreso y superación del área de estudio.
3.3. Ventana de Observación y Operacionalización de Variables
A fin de dar continuidad al diseño metodológico, es importante delimitar lo que se
desea observar y cuál el escenario y las fuentes que permitirán que se obtenga dicha
información. Siguiendo esta misma línea, los observables de la tesis se limitarán a las
variables establecidas en la hipótesis planteada, que en correspondencia con los juicios
presentados hasta ahora a lo largo del trabajo, se pueden identificar:
Una variable independiente: Uso de un determinado patrón de paralelismo.
Tabla 3.1. Operacionalización de la Variable Independiente 1
VARIABLES INDICADORES INDICES ITEMS
Vi = V1; Patrón de
Paralelismo
1.1 Balanceo de la Carga
Utilización de Recursos Disponibles
ExperimentaciónSpeedup Algorítmico
1.2 SincronizaciónGrado de Granularidad
ExperimentaciónOverheadTiempos de Bloqueo
1.3 Red de Comunicación e Interconexión
Ancho de banda
Experimentación
Tiempo de Comunicación entre Nodos
Eficiencia del Protocolo de Red
Eficiencia del Estándar de Red
1.4 Técnicas Involucradas a la Lógica del Paralelismo
ParalelicibilidadExperimentación
EscalabilidadFuente: Elaboración Propia.
33
Dos variables dependientes: Eficiencia de las aplicaciones paralelas y rendimiento de
las aplicaciones paralelas.
Tabla 3.2. Operacionalización de las Variables Dependientes 2
VARIABLES INDICADORES INDICES ITEMS
Vd = V1; Eficiencia de
las Aplicaciones
Paralelas
1.1 Trabajo extra generadoTiempo de comunicación
ExperimentaciónCantidad de procesos auxiliares
1.2 Tiempo de Ejecución
Aceleración
ExperimentaciónTiempos de transmisión
Tiempos de lecturaLatencia
1.3 Tiempo de trabajo de los procesadores
Eficiencia computacionalExperimentaciónTiempos idle
Granularidad
Vd = V2; Rendimiento
de la Aplicaciones
Paralelas
1.1 Tiempos inactivosSpeedud
ExperimentaciónTiempos de transmisión
1.3 Uso de las capacidades individuales de los procesadores
Speedud logarítmicoExperimentación
Tiempos inactivos
1.4 Prestaciones de la comunicación
Teoría de grafosExperimentaciónVelocidad de transmisión
Parámetros de bloqueosFuente: Elaboración Propia.
En este entendido y en correspondencia con la naturaleza de la investigación, las
fuentes que permitirán la observación y valoración de estas variables serán empíricas y
desarrolladas en un ambiente controlado de laboratorio. No obstante, es innegable que
paralelamente al trabajo experimental y de forma complementaria, se utilizarán fuentes
teóricas que provean información relevante y útil para el desarrollo de la tesis.
3.4. Elección Metodológica
La elección adecuada de la metodología a usar a lo largo del trabajo constituye un pilar
fundamental del cual depende en gran medida la validez y confiabilidad del nuevo
conocimiento que habrá de emerger.
Sobre esta misma línea, dada la naturaleza de las variables estudiadas y el interés
concreto de medir, calificar, pesar y valorar lo más objetivamente la porción de la realidad en
análisis, se utilizará la metodología cuantitativa en toda la investigación.
34
Cabe recalcar que esta elección es coherente con la postura epistemológica positivista
que ha tomado como propia para el desarrollo de la tesis; además, la relación correlacional
entre las variables presentes en la hipótesis son ideales para ser estudiadas sobre la base de una
metodología cuantitativa.
3.5. Elección de Métodos
En este punto, los caminos de indagación para llegar al desarrollo de un nuevo patrón
de paralelismo y los marcos conceptuales ligados a la teoría adecuada desde donde se valorará
el objeto de estudio corresponden a métodos fundamentalmente positivistas bajo un enfoque
cuantitativo.
En primera instancia, el método experimental de laboratorio será el más empleado,
debido a que se trabajará en un laboratorio donde tanto las variables dependientes como
independientes serán controladas escrupulosamente, a fin de que los resultados base de la
caracterización causal del comportamiento de los mismos y diseño del nuevo patrón de
paralelismo sean lo más confiables posibles.
Adicionalmente, debido a que los resultados del trabajo serán fruto de varias
mediciones y ejecuciones de aplicaciones tomadas como testbeds, se mantendrá siempre una
percepción lógica única de la realidad por medio del método estadístico. Por su parte, para
describir los hechos y mediciones obtenidas simplemente se empleará el método estadístico
descriptivo; sin embargo, para establecer las relaciones entre la eficiencia de las aplicaciones y
el comportamiento de la red de interconexión, se utilizará el método estadístico inferencial,
para luego proyectar todo el análisis en conclusiones generales apoyadas en el análisis
estocástico del comportamiento de las aplicaciones paralelas en entornos híbridos.
En otro orden de ideas, será importante también brindar un panorama completo de las
condiciones cualitativas del cluster y el entorno de trabajo en general que afecten directamente
a los experimentos, para lo cual se usará el método descriptivo.
Aunque parezca contrario a todos los razonamientos hechos hasta ahora, si bien la
experimentación será el eje fundamental del trabajo, la presente tesis no podría dar resultados
serios y válidos si no se fortalecen conocimientos por medio de la revisión bibliográfica
exhaustiva acerca de la programación paralela en entornos heterogéneos, haciendo uso del
método conceptual deductivo.
35
3.6. Elección de Técnicas
Una vez elegidos los métodos y definida la ventana de observación, la adopción de
técnicas de recolección de datos debe tener relación directa con el paradigma epistemológico
escogido y el diseño de la investigación.
En congruencia con los métodos, las técnicas que se seguirán serán principalmente:
experimentales de laboratorio, estadísticas, registro descriptivo de hechos, deducción y
observación directa del objeto de estudio.
Al mismo tiempo, la técnica de indagación documental para el estudio de libros, tesis y
publicaciones digitales y textuales será un factor importante para el correcto y óptimo
desarrollo de la investigación.
3.7. Definición de Fuentes y Desarrollo de Instrumentos
En este mismo sentido, para poder alcanzar los objetivos deseados, se debe especificar
los criterios para seleccionar las fuentes de información e instrumentos, con el cuidado de que
dicha elección esté de acuerdo con lo que se desea investigar.
En primera instancia, se necesita identificar el ambiente de experimentación adecuado
que se enmarque dentro de los recursos disponibles y las limitantes de la Carrera de Ingeniería
de Sistemas de la Universidad San Francisco Xavier de Chuquisaca.
De este modo, la labor de experimentación práctica se realizará en instalaciones del
Instituto de Investigación de la Carrera de Ingeniería de Sistemas, donde se realizó un análisis
de los ordenadores existentes, para luego identificar los siguientes computadores como
instrumentos de hardware esenciales para la investigación:
o Dos servidores HP ProLiant, modelo ML370 de sexta generación, los cuales
presentan un procesador Intel Xeon E5620 de 2.64 GHz y 4 núcleos;
adicionalmente, ambos servidores presentan una memoria RAM DDR3-1333
SDRAM de 12 GB y 4 discos duros de 500 GB cada uno, haciendo un total
aproximado de 1 TB de capacidad de almacenamiento.
o Cinco computadoras de escritorio, cada una equipada con un procesador Intel
Core i7-2600k de 3.4 GHz, 4 núcleos y de tercera generación; memoria RAM
de 8 GB y disco duro de 1TB.
36
En este orden de ideas, el trabajo se circunscribirá en ensayos y experimentos sólo con
redes de interconexión bajo el estándar Ethernet, debido a la imposibilidad de contar con redes
Infiniband y Myrinet dentro la Universidad San Francisco Xavier a causa de su alto costo.
Bajo este mismo juicio y por las mismas razones, el protocolo de comunicación entre
ordenadores usado se limitará únicamente a TCP/IP, excluyendo otros como Active Messages
y Xpress Transport Protocol (XTP).
En lo tocante a las herramientas de software que se utilizarán, existen algunas
aplicaciones de cómputo científico paralelas implementadas en Java y Python, como el
proyecto desarrollado por Hernández A. y Moreira D. (2006); pero en oposición a ellas, los
lenguajes de programación más recomendables y con mejores prestaciones para entornos de
clusters de nodos multi-núcleo son FORTRAN y C/C++, tal como se observa plasmado en la
investigación de Wolfmann G. (2010):
“Las aplicaciones de cómputo científico están en su mayoría desarrolladas por programas
escritos en lenguaje FORTRAN o C/C++, existiendo muy pocos desarrollos que utilicen otros
lenguajes. Esto es debido a que son aplicaciones de cálculo numérico que requieren de un alto
nivel de procesamiento, dado el gran volumen de cómputo que se necesita realizar; dichos
lenguajes de programación son los que mejores rendimientos alcanzan... De esta manera, la
programación de aplicaciones que se quiera ejecutar en un cluster con nodos multicore está
casi circunscrita a programas FORTRAN o C/C++” (pp.11).
Por lo tanto, el lenguaje de programación usado para todas las pruebas será C/C++, que
se empleará juntamente con una combinación de directivas MPI y OpenMP por ser la forma
más óptima de realizar soluciones en entornos mixtos en concordancia con lo expuesto en el
capítulo 2.
Asimismo, hasta la mitad de la década de los años 2000, el procesamiento científico y
el cómputo de alto rendimiento estaban casi circunscritos a entornos que usaban sistemas
operativos y middleware de clusters basados en Linux. En oposición a estas ideas, desde el
año 2008, Microsoft ha invertido gran esfuerzo para desarrollar software referente a sistemas
High Performance Computing (HPC); lo cual ha dado lugar que a la fecha de desarrollo de la
presente investigación se pueda afirmar que los clusters HPC Windows o Linux son
prácticamente iguales en cuando a rendimiento y eficiencia se refiere.
37
La última afirmación se encuentra en concordancia con las investigaciones de Crimson
Consulting Group (Abril, 2010) y Henschel R., Teige S., Li H., Doleschal J.y Mueller M.
(Octubre, 2010). Con respecto a este punto, en el siguiente capítulo se presenta un estudio
mucho más detallado acerca de las razones de la elección del sistema operativo y el
middleware del cluster a implementar.
En la tabla a continuación se resumen todos los lineamientos a tomar en cuenta durante
la realización de la investigación; sobre la base de estas consideraciones, es posible ahora
definir de manera clara el diseño troncal de la tesis que se detalla en el subtítulo posterior.
Tabla 3.3. Lineamientos Epistemológicos-Metodológicos 3
38
Postura Epistemológica
Postulados Metodología Nivel de la Investigación
Tipo de Investigación
Observables Métodos Técnicas Ambiente de Experimentación
Instrumentos
Método Experimental
Técnica Experimental de Laboratorio
Dos servidores HP ProLiant ML370 G. 6; procesador Intel Xeon E5620, 2.64 GHz, 4 núcleos; memoria RAM de 12 Gb; 4 discos duros de 500GB
Método Estadístico Descriptivo, Inferecial, Estocático
Técnica Estadística Plataforma Windows
Método Descriptivo Registro Descriptivo de Hechos
Lenguaje de Programación C/C++
Método Conceptual Deductivo
Deducción
Cinco computadoras de escritorio; procesador Intel Core i7-2600k, 3.4 GHz, 4 núcleos; memoria RAM de 12 GB; disco duro de 1 TB
Observación Directa del objeto de Estudio
Indagación Documental
La realidad y el objeto de estudio son objetivos, causales, observables y medibles.
El interés por la generación de conocimiento se centra en predecir y controlar el funcionamiento de las aplicaciones paralelas en entornos híbridos por medio de la inducción de principios y patrones que lo sustenten.
Variable Independiente: Uso de un determinado patrón de paralelismo.
Variables Dependientes: Eficiencia de las aplicaciones paralelas y rendimiento de las aplicaciones paralelas.
Estudio y Análisis de Patrones de Paralelismo en Entornos de Clusters Conformados por Nodos Multi-Núcleo
Positivista Cuantitativa Experimental
Instituto de Investigación de la
Carrera de Ingeniería de Sistemas de la
Universidad San Francisco Xavier de
Chuquisaca
Tecnológica
Fuente: Elaboración Propia.
39
3.8. Diseño de la Investigación
La labor de la experimentación práctica estará centrada de manera inicial en la elección
del tipo de cluster a utilizar, sus características y configuración en función a las herramientas
de hardware disponibles y al software elegido; para luego someter el diseño del arreglo de
ordenadores a una prueba de rendimiento que valide su correcta implementación.
Posteriormente, se diseñará una plataforma de pruebas, denominada comúnmente
testbed, que responda a ensayos rigurosos, replicables y válidos en el ámbito científico, que
posibiliten la valoración de los distintos patrones de paralelismo tomando en cuenta su
influencia en el rendimiento y eficiencia de las aplicaciones.
Así, se emplearán los métodos y técnicas definidas en anteriores apartados para valorar
los resultados fruto de la experiencia en laboratorio, con el fin de caracterizar de manera
completa el comportamiento de los patrones de paralelismo, en aspectos como la latencia de la
red, la probabilidad de que el canal se encuentre colapsado o el balance de la carga cómputo
en los distintos procesadores.
Como resultado de todo este estudio, se planteará un nuevo patrón de paralelismo que
también será validado por medio del uso de un determinado testbed y la experimentación
práctica. Todo este acápite, queda plasmado en la Figura 3.2.
40
Figura 3.1. Propuesta de Modelo de Solución 12
Fuente: Elaboración Propia.
41
3.9. Cronograma
Tabla 3.4. Cronograma de Trabajo 4
Objetivo General: Diseñar un nuevo patrón de paralelismo que tome en cuenta los factores influyentes en la eficiencia y rendimiento de aplicaciones bajo entornos híbridos de clusters conformados por nodos multicore, de manera que se convierta en un aporte para el desarrollo de la ingeniería de sistemas en esta área.
Objetivo Específico 1: Presentar, analizar y comprender las características y tendencias actuales de la programación paralela, los patrones de paralelismo existentes, así como los conceptos y funcionamiento de los clusters de nodos multi-núcleo.
Indicadores de Resultado: Grado de conocimiento y manejo del tema.
Fuente de Verificación:
Aprobación tutor.
Supuesto: Se puede contar con
bibliografia y distintos materiales para la descripción
teórica a profundidad de los
elementos intervinientes en los sistemas de cómputo
paralelo.
Cronograma: Del 23/05/2013 al 13/06/2013
Actividad 1.1. Estudio a detalle de los tipos, taxonomía y características de los sistemas de cómputo paralelo.
Insumos: Material bibliográfico, virtual y todas las posibles fuentes valederas.
Actividad 1.2. Comprensión a detalle del funcionamiento, arquitectura, clasificación y factores intervinientes en los clusters de computadoras.
Insumos: Material bibliográfico, virtual y todas las posibles fuentes valederas.
Actividad 1.3. Estudio de los diferentes estándares y protocolos para la programación de aplicaciones paralelas en entornos híbridos.
Insumos: Material bibliográfico, virtual y todas las posibles fuentes valederas.
Actividad 1.4. Recopilación y análisis de los progresos y tendencias actuales en el ámbito de los patrones de paralelismo. Insumos:
Actividad 1.5. Análisis de las métricas y parámetros de valoración de los sistemas paralelos en entornos mixtos de clusters conformados por nodos multicore.
Insumos: Material bibliográfico, virtual y todas las posibles fuentes valederas.
Objetivo Específico 2: Seleccionar y establecer los procedimientos metodológicos que permitan recolectar los datos necesarios para analizar la incidencia del empleo de patrones de paralelismo en soluciones sobre clusters compuestos por ordenadores con múltiples núcleos.
Indicadores de Resultado: Alcance de datos que concuerden con el análisis matemático, estadístico y estocástico de los patrones de paralelismo.
Fuente de Verificación:
Experimentación.
Supuesto: Se tiene un dominio y conocimiento
aceptable de los elementos teóricos pertenecientes al
área de la clusterización y la
Cronograma: Del 14/06/2013 al 18/07/2013
Actividad 2.1. Evaluación de los recursos disponibles dentro de la Carrera de Ingeniería de Sistemas. Insumos: Entrevistas, observación.
42
paralelización de aplicaciones,
cumpliendo con el objetivo específico
1.
Actividad 2.2. Determinación y diseño del ambiente de experimentación.
Insumos: Estándares aceptados por organismos reconocidos, recomendaciones de centros de investigación importantes en este ámbito.
Actividad 2.3. Diseño y construcción de la plataforma de pruebas.
Insumos: Estándares aceptados por organismos reconocidos, recomendaciones de centros de investigación importantes en este ámbito.
Actividad 2.4. Obtención de datos que permitan la valoración objetivas de los distintos patrones de paralelismo.
Insumos: Instalaciones adecuadas, software y harware propio del área.
Objetivo Específico 3: Interpretar y valorar los datos, información y resultados provenientes de la comparación y análisis crítico de los distintos patrones de paralelismo en entornos heterogéneos, tomando en cuenta los factores relacionados con la red de comunicación, lógica de paralelismo, rendimiento y eficiencia.
Indicadores de Resultado: Concordancia entre los datos obtenidos fruto de la experimentación con los resultados obtenidos por medio de análisis matemático, estadístico y estocástico.
Fuente de Verificación:
Experimentación.
Supuesto: Se ha logrado obtener
datos confiables por medio del uso del un testbed adecuado y
se tienen los conocimientos suficientes para comprender las prestaciones,
ventajas y desventajas de los diferentes patrones
de paralelismo, través del objetivo
específico 1.
Cronograma: Del 18/07/2013 al 22/08/2013
Actividad 3.1. Comparación de los patrones de paralelismo, en cuanto a prestaciones referentes a la lógica del paralelismo. Insumos: Plataforma de pruebas.
Actividad 3.2. Comparación de los patrones de paralelismo, en cuanto a prestaciones referentes a la eficiencia de las aplicaciones. Insumos: Plataforma de pruebas.
Actividad 3.3. Comparación de los patrones de paralelismo, en cuanto a prestaciones referentes al rendimiento de las aplicaciones. Insumos: Plataforma de pruebas.
Actividad 3.4. Análisis de los resultados obtenidos en función a los factores intervinientes en la red de comunicación e interconexión. Insumos: Plataforma de pruebas.
Actividad 3.5. Interpretación y análisis de los resultados obtenidos. Insumos: Plataforma de pruebas.
Actividad 3.6. Valoración crítica de las ventajas y desventajas de cada patrón de paralelismo estudiado. Insumos: Plataforma de pruebas.
Objetivo Específico 4: Ajustar y Validar un nuevo patrón de paralelismo en entornos híbridos de clusters de nodos multicore que mejore las prestaciones de sus predecesores y tome en cuenta los factores que afectan al rendimiento y eficiencia de las aplicaciones.
Indicadores de Resultado: Mejora sustancial del nuevo patrón de paralelismo defendido, en términos de la lógica del paralelismo y la red de comunicación entre nodos.
Fuente de Verificación:
Experimentación.
Supuestos: Hasta este punto, se tiene
un vasto conocimiento
teórico del tema. Se han analizado los
datos obtenidos de manera sistemática y
Cronograma: Del 22/08/2013 al 03/10/2013
Actividad 4.1. Análisis de las ventajas más rescatables de cada patrón de paralelismo estudiado.
Insumos: Datos obtenidos por medio de la experimentación.
43
ordenada, sacando conclusiones
valederas.
Actividad 4.2. Determinación de las mejores soluciones para las desventajas más críticas de cada patrón.
Insumos: Datos obtenidos por medio de la experimentación.
Actividad 4.3. Determinación de las mejores prácticas en la lógica del paralelismo y la red de comunicación de los nodos.
Insumos: Datos obtenidos por medio de la experimentación.
Actividad 4.4. Validación y valoración del nuevo patrón de paralelismo presentado. Insumos: Plataforma de pruebas.
Fuente: Elaboración Propia.
44
Bibliografía
Alexander C, Ishikawa S., Silverstein M. (1977). A Pattern Language: Towns, Buildings,
Construction (Center for Environmental Structure Series). Oxford University.
Alonso J. (1997). Programación de aplicaciones paralelas con MPI (Message Passing
Interface). Ediciones UPV/EHU.
Álvarez J., Herrea J. (2010). Construcción y Diseño de un Cluster Tipo HPC Virtualizado.
Instituto Politécnico Nacional de México.
Andrade X. (2010). Programación Paralela en MPI. Departamento de Informática y Sistemas,
Universidad de Murcia-España.
Arellano G., Hoet L. (2010). Cluster Modular Autocontenido. Departamento Ingeniería en
Sistemas de Información - Universidad Tecnológica Nacional del Uruguay.
Ares G. (2012). Programación Multithreading. Escuela de Computación de Alto Rendimiento-
Universidad de la República de Uruguay.
Baldoni F., Romano M. (2012). Simulación de Procesadores Multicore para Sincronizar
Múltiples Procesos Utilizando Redes de Petri. Universidad Nacional de Córdoba.
Bromling S., MacDonald S., Anvik J., Schaeffer J., Szafron D., Tan K. (2002). Pattern-Based
Parallel Programming. International Conference on Parallel Processing.
Buyya R. (1998). High Performance Cluster Computing Vol. 1. Ed. Prentice Hall.
Carrillo A. (2013). Métodos de Descomposición de Dominio en el Espacio de Vectores
Derivados y su Implementación Computacional en Paralelo. Universidad Nacional
Autónoma De México.
Crimson Consulting Group (Abril, 2010). Evaluating the Lifecycle Costs of High Performance
Computing Solutions: Windows HPC Server and Linux-based Solutions. Crimson
Consulting Group.
Czarnecki K y Eisenecker U. (2000). Generative Programming: Methods, Tools, and
Applications. Ed. Addison-Wesley.
De la Cruz W., Altamiro L., González R., González A. (Diciembre, 2005). Programación
Paralela y Concurrente en C++. Revista de Ciencias Básicas UJAT, volumen 4.
45
Díaz G, Hoeger H., Nuñez L. (2002). Clusters de PC´s. Centro Nacional de Cálculo
Científico- Universidad de los Andes de Venezuela.
Fayad M., Schmidt D., Johnson R. (1999). Building Application Frameworks: Object-Oriented
Foundations of Framework Design. John Wiley & Sons.
Flynn M. (1972). Some Computer Organizations and Their Effectiveness. IEEE transactions
on Computers. Vol. c-21.
Gamma E., Helm R., Johnson R., Vlissides J. (1995). Design Patterns: Elements of Reusable
Object-Oriented Software. Ed. Addison-Wesley.
Gil M. (1999) Caracterización de las Aplicaciones Paralelas en Cuanto a la Petición de
Recursos. Universidad Politécnica de Cataluña.
Giménez D., Boratto M., Coelho L. (2009). Programación Paralela y Distribuida.
Departamento de Informática y Sistemas, Universidad de Murcia-España.
González C., Fraguela B. (2010). Una Plantilla Genérica para el Patrón de Paralelismo de
Divide y Vencerás en Sistemas Multi-Núcleo. Universidad de Coruña.
González R., Rodríguez S. (2008). Diseño e Implementación de un Cluster Tipo Beowulf para
el Desarrollo de Cómputo Científico Avanzado. Instituto politécnico Nacional de
México.
Guerrero J., Francés J. (2011). Procesadores Superescalares: Paralelismo Implícito a Nivel de
Instrucción. Universidad de Valencia.
Henschel R, Teige S., Li H., Doleschal J., Mueller M. (Octubre, 2010). A Performance
Comparison Using HPC Benchmarks: Windows HPC Server 2008 and Red Hat
Enterprise Linux 5. Universidad de Indiana.
Hernández A., Moreira D. (2006). Desarrollo de Aplicaciones Paralelas en Java y su
Evaluación en una Plataforma GRID. Universidad Simón Bolívar-Venezuela.
Jorba J., Suppi R. (2010). Programación concurrente. Universidad Oberta de Cataluña.
Keutzer K., Mattson T. (2009). Our Pattern Language (opl): A Design Pattern Language For
Engineering (Parallel) Software. ParaPLop 2009.
Macdonald S., Szafron D., Schaeffer J., Anvik J., Bromling S., Tan K. (2002). Generative
Design Patterns. International Conference on Automated Software Engineering.
Mattson T., Sanders B., Massingill B. (2004). Patterns for Parallel Programming. Ed.
Addison-Wesley Professional.
46
Mejía N., Fernández A., Bernal C. (2005). Desarrollo de Aplicaciones Paralelas para Clusters
utilizando MPI (Message Passing Interface). Escuela Politécnica Nacional del
Ecuador.
Meza A. (2012). Análisis de Tráfico de Datos en Sistemas Distribuidos. Instituto Tecnológico
de La Paz-México.
Meza F. (2001). Memoria Compartida Distribuida en Ambientes de Bajo Costo.
Departamento de Computación-Instituto Tecnológico de Costa Rica.
Montes E, De Giusti L., De Giusti A., Naiouf M. (2012). Comparación del Uso de GPU y
Cluster de Multicore en Problemas con Alta Demanda Computacional. Instituto de
Investigación en Informática LIDI- Universidad Nacional de La Plata.
Murilo B. (2007). Parametrización en Esquemas Paralelos Divide y Vencerás. Universidad
Politécnica de Valencia.
Pedemonte M., Nesmachnow S. (2010). Metaheurísticas Paralelas. Centro de Cálculo,
Instituto de Computación-Universidad de la República de Uruguay.
Pfister G. (2010). An Introduction to the Infiniband Architecture. IEEE Press and Wiley
Press.
Quinn M. (2004). Parallel Programming in C with MPI and OpenMP. McGraw-Hill Higher
Education.
Ramiro C. (2010). Algoritmos Paralelos para la Resolución de Problemas de Mínimos
Cuadrados Basados en Transformaciones Ortogonales sobre GPUs y
Multiprocesadores. Universidad Politécnica de Valencia.
Rannou F. (2008). Taller de Programación Paralela. Departamento de Ingeniería Informática-
Universidad de Santiago de Chile.
Rodríguez-Meza. (2009). Cómputo Paralelo Usando MPI: Simulaciones de N-Cuerpos en la
Física. Instituto Nacional de Investigaciones Nucleares de México.
Rosas C. (2009). Análisis y Sintonización de Aplicaciones Paralelas/Distribuidas de
Bioinformática: Caso de Estudio mpiBLAST. Departamento Arquitectura de
Computadores y Sistemas Operativos-Universidad Autónoma de Barcelona.
Ruvalcaba P. 2002. Investigación Teórica, Investigación Empírica, Investigación Documental.
Universidad Nacional de Colombia.
47
Santander-Jiménez S., Vega-Rodríguez M., Gómez-Pulido J., Sánchez-Pérez J. (2010).
Evaluando el Rendimiento Multicore de una Aproximación Multiobjetivo de
Inteligencia de Enjambre para la Inferencia Filogenética. Universidad de Extremadura,
Dept. Tecnología de los Computadores y de las Comunicaciones.
Singh A., Schaeffer J., Szafron D. (1996). Views on Template-Based Parallel Programming.
Centre for Advanced Studies on Collaborative Research, IBM.
Singh D., Isaila F., Higuero D., García J., Bergua B. (2012). Computación Cluster.
Departamento de Informática-Universidad Carlos III de Madrid.
Smith L. (2000). Mixed Mode MPI / OpenMP programming. Technical report, Edimburgh
Parallel Computing Centre.
Siu S., De Simone M., Goswami D., Singh A. (1996). Design Patterns for Parallel
Programming. International Conference on Parallel and Distributed Processing
Techniques and Applications.
Vargas-Félix M. (2011). Cómputo en paralelo con OpenMP. Centro de Investigación en
Matemáticas CIMAT-México.
Vargas X. (2011). Investigación ¿Qué es eso?. Ed. Iteso.
Willcock J., Lumsdaine A., Robison A. (2012). Using MPI with C# and the Common
Language Infrastructure. Pervasive Technology Laboratories of Indiana University-
Intel Corporation.
Wolfmann G. (2010). Análisis de Patrones de Paralelismo bajo la Óptica de las Aplicaciones
de Cómputo Científico sobre Clusters de Nodos Multicore. Universidad Nacional de
La Plata-Argentina.
48