viernes, 12 de febrero de 2016

Programación de computadoras paralelas

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