El Procesamiento Paralelo en las Carreras de Computación

Anuncio
El Procesamiento Paralelo en las Carreras de Computación
Juan José Vargas e Ileana Alpı́zar
Escuela de Ciencias de la Computación e Informática (ECCI)
Universidad de Costa Rica (UCR)
{juanjose.vargas,ileana.alpizar}@ecci.ucr.ac.cr
http://www.ecci.ucr.ac.cr
1.
Introducción
El progreso en la fabricación de semiconductores y la imposibilidad de continuar incrementando
la velocidad de los relojes hizo surgir los procesadores multinúcleos (multi-core) en los que, en su
mayorı́a, cada núcleo puede ejecutar varios hilos simultáneamente. Esto hizo que la programación
paralela y la tecnologı́a en la que ésta se basa llegaran a convertirse en un asunto de primera importancia. Sin embargo, como menciona Uzi Vishkin en un tutorial (http://www.umiacs.umd.edu/
~vishkin/TUTORIAL/tutorial6-07/), los diseñadores de estos procesadores multinúcleos esperaban que el proceso de pensamiento que respalda la programación paralela emergiera una vez que
sus máquinas se diseminaron por el mundo. Pero esto no fue ası́, las pequeñas y no tan pequeñas
nuevas “supercomputadoras” llegaron a ser asequibles para la gran mayorı́a, sin que realmente se
lograra aprovechar muy bien su potencial.
Pero no hay vuelta atrás, las arquitecturas paralelas llegaron para quedarse; incluso recientemente se ha acuñado otro término, many-core, para referirse a procesadores con más de 32 núcleos,
posiblemente combinando diferentes tipos, tales como núcleos de diferentes capacidades y núcleos
para procesamiento de gráficos [9]. Algunas universidades ya comienzan a enseñar estas arquitecturas a sus estudiantes. Por ejemplo, en [10] se presenta el uso de ambientes multi-core y many-core
en cursos avanzados del bachillerato.
2.
Justificación de su importancia
Después de más de 10 años de esta invasión de procesadores multinúcleos en el mercado,
los planes académicos de muchas de las carreras universitarias en computación miran de largo
el reto ineludible de modificarse sustancialmente para que los graduados realmente dominen el
procesamiento paralelo. Al respecto, Vishkin (http://www.umiacs.umd.edu/users/vishkin/XMT/
teaching-platform.html) considera que los docentes en computación podrı́an ser acusados de
mala praxis si la enseñanza del procesamiento paralelo se sigue posponiendo. Agrega que además
se comete un grave error al seguir incentivando hábitos de programación secuencial en los actuales
estudiantes, porque para ellos será aún más difı́cil lograr la transición al procesamiento paralelo.
La evolución hacia la programación paralela debe comenzar por las universidades y si no se
hacen los cambios en el currı́culum ahora, luego será muy tarde. Actualmente hay mucho software
que tiene el fin de facilitar el manejo del paralelismo, como nuevos lenguajes de programación y
nuevas extensiones a los lenguajes actuales, los cuales pueden ayudar enormemente en este trabajo.
Por otra parte, el componente de investigación de las universidades se verá muy beneficiado, no
solo porque tendrá mejores herramientas para hacer su trabajo, sino porque al involucrarse la
universidad en el tema del procesamiento paralelo, podrá contribuir mucho al desarrollo de éste, ya
que como se sugiere en [1], los investigadores tendrán la rara oportunidad de reinventar aquellas
piedras angulares de la computación que pueden simplificar la programación eficiente de sistemas
masivamente paralelos.
3.
Metodologı́a utilizada
La inclusión del paradigma de procesamiento paralelo en el currı́culum de una carrera universitaria en computación impactarı́a muchos de los cursos centrales, tales como los de programación
en diferentes lenguajes, estructuras de datos y algoritmos, sistemas operativos, arquitectura de
computadoras, compiladores, ası́ como cursos más avanzados en las áreas de simulación, inteligencia artificial y graficación [11,6,5]. Además del contenido, la metodologı́a de enseñanza también debe
ser ajustada. El uso de laboratorios tradicionales debe combinarse con otras técnicas desarrolladas
en el aula, tal como los Microlabs que se mencionan en [8].
Durante la introducción de los conceptos sobre paralelismo, la principal dificultad a vencer es el
cambio de mentalidad que debe tenerse para enfocar las soluciones de los problemas bajo este nuevo
paradigma. Esta dificultad ha sido mencionada desde hace bastante tiempo por autores como Hyde
[7] que propone la introducción de cursos de procesamiento paralelo en los cursos de bachillerato
utilizando simuladores y transputers.
Para que los estudiantes culminen su carrera pudiendo llegar de una manera natural a soluciones,
tanto con diseños secuenciales como paralelos, y a manejar con soltura la tecnologı́a existente para
dichas soluciones, es indispensable que se comience con este paradigma desde el primer curso. Si
en este primer curso se da énfasis a la presentación de los detalles complejos y poco intuitivos
que el hardware paralelo y su programación traen consigo, se terminará dando una bienvenida
contraproducente al tema. Lo ideal es evitar esto al no utilizar aún la programación, y dedicar
gran parte del tiempo al diseño de algoritmos para resolver problemas inherentemente paralelos, los
cuales de preferencia deberı́an ser tomados de la vida real y que sean familiares para los estudiantes,
como la solución de juegos sencillos.
Luego de dominar la creación de algoritmos para resolver problemas paralelos, se debe pasar a
hacer su programación. Es recomendable que se comience trabajando con varios hilos de ejecución
(threads) para un mismo proceso y no con varios procesos. La razón para esta sugerencia es que los
hilos de un mismo proceso comparten el espacio de direcciones, por lo que la comunicación entre
ellos en muy simple, mientras que la creación de varios procesos y su comunicación es un asunto más
complicado de enfrentar al inicio de la carrera. De nuevo, en esta programación que utiliza hilos, se
debe “esconder” al máximo los detalles complejos relacionados con su manejo y su sincronización.
Para esto, se recomienda trabajar con herramientas que ası́ lo permitan, tales como OpenMP, que
consiste en una interfaz para programación de aplicaciones (API), TBB (Threading Building Blocks),
que es una biblioteca de Intel para C++, Linda, CUDA, etc. [2]. En [3] se presenta una experiencia
educativa en donde se concluye que OpenMP está entre las herramientas más recomendadas para
los estudiantes de cursos iniciales.
El siguiente paso en el aprendizaje es comenzar con la creación de varios procesos de manera
simple. Para ello se sugiere utilizar MPI (Message Passing Interface), herramienta que usualmente
se utiliza cuando se trabaja en clusters, pero que también se puede instalar en una máquina con un
procesador de varios núcleos o con varios procesadores, sean éstos multinúcleos o no. Nótese que
es posible crear procesos, cada uno con varios hilos de ejecución, al utilizar conjuntamente MPI y
OpenMP.
Al avanzar en complejidad, se debe comenzar con la programación de hilos y procesos, incluyendo
su creación y sincronización utilizando los mecanismos que el propio lenguaje de programación
provee. La comunicación entre procesos incluirı́a sockets, RPC (Remote Procedure Call ) y paso de
mensajes. La administración de hilos y procesos por parte del sistema operativo, el manejo de la
memoria compartida y los mecanismos de sincronización son temas obligados en un curso de sistemas
operativos que deben abordarse desde sus aspectos teóricos para que formen el complemento de los
cursos de programación. La búsqueda de errores (debugging) en este nuevo paradigma se vuelve más
compleja, por lo que debe formar parte de los cursos.
Una mala elección de las estructuras de datos y los algoritmos a utilizar en un programa puede
provocar un mal rendimiento e incluso resultados erróneos [4]. Es por ello que en un curso especı́fico
de estructuras de datos y análisis de algoritmos o a través de los cursos de programación se debe
realizar un estudio profundo de ambos. Una dificultad reside en el análisis matemático de los algoritmos paralelos. La complejidad asintótica de las estructuras de datos concurrentes es un tema
que ha sido investigado en modelos idealizados, pero que en la práctica no contemplan una serie de
circunstancias, tales como el costo de la contención y la sincronización, los efectos de la memoria
cache, los backoff delays que deben esperar los procesos para adquirir un recurso crı́tico, etc., que
son difı́ciles de analizar.
Los cursos de lenguaje ensamblador, de arquitectura de computadoras y otros similares, deben
ofrecer un enfoque teórico sobre la manera en que los procesadores implementan las capacidades de
multihilo y multinúcleos, y su relación con los compiladores y el sistema operativo.
El paralelismo en el hardware permite que se dé gran variedad de configuraciones para los
procesadores de una máquina, por lo que las optimizaciones que realizan los compiladores deben
producir el código correcto, tomando en cuenta las caracterı́sticas de la máquina en la que correrá el
programa. Este tema se deberı́a abarcar en un curso de compiladores.
En cursos avanzados que no están directamente relacionados con el tema de concurrencia, tales
como bases de datos, inteligencia artificial, ingenierı́a de software y otros, es necesario que los
docentes conozcan las capacidades del procesamiento paralelo y la manera en la que se relaciona
con sus materias. Ası́, podrán explotar al máximo el conocimiento de sus estudiantes en el tema del
paralelismo, solicitándoles diseñar aplicaciones que lo aprovechen.
4.
Resultados
El proyecto docente para la promoción del procesamiento paralelo que se llevó a cabo en la
Escuela de Ciencias de la Computación e Informática de la UCR permitió que el personal docente
comenzara a tomar conciencia sobre la importancia de introducir los temas relacionados con el
procesamiento paralelo en los diferentes cursos de la carrera, iniciando por los más básicos. La
adquisición de los equipos que conforman el cluster ha servido como excusa para despertar el
interés por esta área de la computación. Aún cuando no se dispusiera de un cluster, los aspectos
fundamentales del procesamiento paralelo pueden practicarse en máquinas multinúcleos, o mediante
la simulación del paralelismo en máquinas de un solo núcleo. Las herramientas de software para
procesamiento paralelo, tales como MPI, Rocks, OpenMP, TBB y TupleDSM, ası́ como su documentación, están disponibles, en su mayorı́a bajo licencias GNU-GPL, por lo cual, no constituyen
un obstáculo que impida el desarrollo en el área.
Si bien es urgente realizar la modificación del plan de estudios para incluir paralelismo, ésta no
puede hacerse de manera precipitada. Nada se hace con una excelente infraestructura, si no hay
personal docente interesado. Nada se hace con modificar los contenidos, el enfoque y la metodologı́a
de los cursos, si los docentes no han asimilado el nuevo paradigma. Es necesario dedicar el tiempo
suficiente para definir con claridad las estrategias que ayudarán a vencer los retos mencionados en
este documento, ası́ como muchos otros que inevitablemente aparecerán.
Como un paso normal siguiente a la inclusión del procesamiento paralelo en el currı́culum,
debe pensarse en abordar la investigación aplicando este nuevo conocimiento y utilizando la nueva
infraestructura. Escoger al menos un nicho en investigación hará que los estudiantes y docentes
puedan fortalecer sus conocimientos y se garantizará que la infraestructura de hardware y software
irá cambiando al ritmo de la evolución de la tecnologı́a paralela.
Cualquier iniciativa para promover la utilización de aplicaciones paralelas requiere de un ambiente de desarrollo adecuado, tanto en aspectos de hardware como de software. El equipo debe
tener la capacidad de ejecutar múltiples hilos o procesos en paralelo, para lo cual es necesario disponer de varios elementos procesadores (núcleos o CPU’s) que pueden estar integrados dentro de un
mismo nodo, o en nodos separados interconectados por una red. Tal equipo es de uso común en esta
época. Más aún, el número de elementos procesadores tiende a incrementarse dı́a con dı́a, a la vez
que su precio tiende a bajar. En cuanto al software, el ambiente de desarrollo incluye herramientas
en forma de bibliotecas o módulos que se pueden incorporar a los lenguajes tı́picos de programación
y los extienden. Muchas de estas herramientas se encuentran bajo licencias de software libre. Como
resultado, se concluye que tanto el hardware como el software son de fácil adquisición.
5.
Futura investigación
Por su carácter de proyecto docente, la futura investigación gira en torno a adoptar en el curriculum de la carrera los temas de procesamiento paralelo aquı́ mencionados. Esta labor es propia
del futuro plan de estudios que surgirá con motivo de los compromisos de mejoramiento adquiridos
durante el proceso de acreditación de la carrera. También se deberı́a pensar en un plan para ofrecer
cursos de capacitación en estos temas a los ex-alumnos, estudiantes graduados y estudiantes de
otras carreras, especialmente de las ingenierı́as.
Referencias
1. Asanovic, K., Bodik, R., Catanzaro, B.C., Gebis, J.J., Husbands, P., Keutzer, K., Patterson, D.A., Plishker, W.L.,
Shalf, J., Williams, S.W., Yelick, K.A.: The landscape of parallel computing research: A view from berkeley. Tech.
Rep. UCB/EECS-2006-183, EECS Department, University of California, Berkeley (Dec 2006), http://www.eecs.
berkeley.edu/Pubs/TechRpts/2006/EECS-2006-183.html
2. Bruce, K.B., Danyluk, A., Murtagh, T.: Introducing concurrency in cs 1. In: SIGCSE ’10: Proceedings of the 41st
ACM technical symposium on Computer science education. pp. 224–228. ACM, New York, NY, USA (2010)
3. Chesebrough, R.A., Turner, I.: Parallel computing: at the interface of high school and industry. In: SIGCSE ’10:
Proceedings of the 41st ACM technical symposium on Computer science education. pp. 280–284. ACM, New
York, NY, USA (2010)
4. Duffy, J.: Concurrent Programming on Windows. Pearson Education, Inc (2009)
5. Hartman, J., Dean, S.: Teaching parallel processing using free resources. In: ASEE/IEEE Frontiers in Education
(FIE 96) Conference. Salt Lake City, Utah, USA (1996), http://fie-conference.org/fie96/papers/437.pdf,
uRL http://fie-conference.org/fie96/papers/437.pdf
6. Hartman, J., Sanders, D.: Teaching a course in parallel processing with limited resources. In: SIGCSE ’91: Proceedings of the twenty-second SIGCSE technical symposium on Computer science education. pp. 97–101. ACM,
New York, NY, USA (1991)
7. Hyde, D.G.: A parallel processing course for undergraduates. In: SIGCSE ’89: Proceedings of the twentieth
SIGCSE technical symposium on Computer science education. pp. 170–173. ACM, New York, NY, USA (1989)
8. Kurtz, B.L., Tashakkori, R., Helfert, J.J., Sage, M.: Using microlabs to teach modern distributed computing. In:
SIGCSE ’10: Proceedings of the 41st ACM technical symposium on Computer science education. pp. 285–289.
ACM, New York, NY, USA (2010)
9. McGuire, T.J.: Introducing multi-core programming into the lower-level curriculum: an incremental approach. J.
Comput. Small Coll. 25(3), 118–119 (2010)
10. Rivoire, S.: A breadth-first course in multicore and manycore programming. In: SIGCSE ’10: Proceedings of the
41st ACM technical symposium on Computer science education. pp. 214–218. ACM, New York, NY, USA (2010)
11. Shiflet, A.B., Cannon, S., Frederick, T.J., Hartman, J., Meredith, M., Nevison, C., Sanders, D.: Approaches to
teaching parallel processing on the undergraduate level (abstract). In: SIGCSE ’93: Proceedings of the twentyfourth SIGCSE technical symposium on Computer science education. p. 298. ACM, New York, NY, USA (1993)
Descargar