Agregar una capa de lenguaje paralelo encima de un lenguaje secuencial existente
La mayoría de
código que existe en la actualidad es correcto y sirve para resolver
unos problemas dados. Este código pude ser ejecutado en varios
multiprocesadores no necesita cambiar en su mayoría, tan solo
añadirle algunas características de sincronización. De hecho, la
mayoría de los errores en programación concurrente aparecen en la
sincronización o partición de los datos. Por lo tanto, una posible
solución es usar un pequeño lenguaje-compilador para expresar la
estructura paralela del programa, dejando que el resto del código se
exprese en un lenguaje convencional (Fortran o C).
Esta solución tiene
sus inconvenientes. Uno de los mas importantes se refiere a la
depuración de programas, ya que debido a la existencia de un
pre-procesador es difícil detectar donde esta el fallo cometido.
Definir totalmente un nuevo lenguaje paralelo asi como su compilador
Se trata sin lugar a
dudas de la mas radical de las cuatro vías mencionadas. Esta es la
mas cara y la que exige mas labor de desarrollo. Como contrapartida,
la mayoría de los problemas que se han expuesto hasta ahora se
pueden solucionar mediante un diseño adecuado del sistema
lenguaje/compilador.
Los avances
realizados hasta la fecha se han orientado en el área de los
lenguajes funcionales, como FP o SISAL. Las principales
características de diseño de estos lenguajes son mejora la claridad
de la concurrencia, sin requerir que el programador maneje la
sincronización, así como permitir que no dependan de la
arquitectura objeto sobre la que se van a implementar.
Otra de las grandes
ventajas aparece desde el punto de vista de la depuración de
programas. Por contra de los mayores inconvenientes descansan en la
construcción del compilador. Este requiere técnicas muy
sofisticadas para realizar con eficacia las funciones que tiene
encomendadas, como particionar, mapear y sincronizar el programa. En
la actualidad se tienen problemas debido a que estas implementaciones
requieren grandes cantidades de memoria.
Principales lenguajes de programación paralelos:
- HWLOC, Portable Hardware Locality, http://www.open-mpi.org/projects/hwloc/
- CUDA, http://www.nvidia.es/object/cuda home new es.html
- TBB, Threading Building Blocks, http://www.threadingbuildingblocks.org/
- PLASMA, Parallel Linear Algebra for Scalable Multi-core Architectures, http://icl.cs.utk.edu/plasma/ ForestGOMP, An OpenMP platform for hierarchical architectures, http://runtime.bordeaux.inria.fr/forestgomp/
- UPC, Unified Parallel C, http://upc.gwu.edu/
- OpenCL, The open standard for parallel programming of heterogeneous systems, http://www.khronos.org/opencl/
Referencias:
- http://es.slideshare.net/neztooor7/presentacin-lenguajes-paralelos
- el paralelismo. Una manera de mejorar la eficiencia de los ordenadores. Jose Ma. Carrasco y Fco. Jose Quiles Flor.
No hay comentarios:
Publicar un comentario