fbpx
Wikipedia

Paralelización automática

Paralelización automática, también auto paralelización, autoparalelización, o paralelización, se refiere a convertir código secuencial en multihilo o vectorizado (o los dos) con objeto de utilizar múltiples procesadores simultáneamente en una máquina con multiprocesador (SMP) de memoria compartida. La utilidad de la paralelización automática es liberar a los programadores del proceso tedioso y tendente a errores de la paralelización manual. Aunque la calidad de la automatización paralela ha mejorado en las últimas décadas, una paralelización automática completa de programas secuenciales por un compilador sigue siendo un gran reto, ya que necesita de un complejo análisis informático, y a los factores desconocidos(como el rango de los datos de entrada) durante la compilación.[1]

Las estructuras de control de programación en las que la autoparalelización se centra son los bucles, ya que, en general, la mayor parte del tiempo de ejecución de un programa tiene lugar en el interior de algún bucle. Un compilador paralelo intenta dividir un bucle de forma que sus iteraciones puedan ser ejecutadas en microprocesadores separados de forma concurrente.

Análisis de la compilación paralela

El compilador realiza normalmente dos ciclos de análisis antes de una paralelización para determinar lo siguiente:

  • ¿Es seguro paralelizar el bucle? La respuesta a esta pregunta requiere un preciso análisis de dependencias y análisis de alias.
  • ¿Merece la pena pralelizarlo? Esta respuesta requiere una estimación fiable (modelado) de la carga de trabajo del programa y de la capacidad del sistema paralelo.

En el primer paso el compilador realiza un análisis de dependencias del bucle para determinar si cada iteración del bucle puede ejecutarse de forma independiente a las demás. La dependencia de datos puede tratarse a veces mediante paso de mensajes, sincronización de memoria compartida, o algún otro método de comunicación entre procesadores, pero puede incrementar la sobrecarga.

El segundo paso intenta justificar el esfuerzo de paralelización, comparando el tiempo teórico de ejecución del código paralelizado con el tiempo de ejecución del código secuencial. Aunque parece contraproducente, el código no siempre se beneficia de la ejecución paralela. La carga de trabajo extra que se puede asociar al uso de múltiples procesadores puede anular el posible incremento de velocidad de ejecución del código paralelo.

Ejemplo

El código Fortran que aparece a continuación puede ser auto-paralelizado por un compilador porque cada iteración es independiente de las demás, y el resultado final del vector z será correcto independientemente del orden de ejecución de las iteraciones.

 do i=1, n z(i) = x(i) + y(i) enddo 

Por otro lado, el siguiente código no puede ser auto-paralelizado, porque el valor de z(i) depende del resultado de la iteración anterior, z(i-1).

 do i=2, n z(i) = z(i-1)*2 enddo 

Esto no significa que no pueda ser paralelizado. De hecho, es equivalente a

 do i=2, n z(i) = z(1)*2**(i-1) enddo 

Sin embargo, los compiladores paralelos actuales no son capaces de conseguir estas paralelizaciones de forma automática, y es cuestionable que este código pueda beneficiarse de la paralelización.

Dificultades

La paralelización automática de los compiladores o herramientas es muy compleja debido a las siguientes causas:

  • el análisis de dependencias es muy complejo para el código que utiliza direccionamiento indirecto, punteros, recursividad, y llamadas indirectas a funciones;
  • los bucles tienen un número indeterminado de iteraciones;
  • los accesos a recursos globales son difíciles de coordinar en términos de reserva de memoria, E/S, y variables compartidas.

Soluciones

Debido a las dificultades inherentes a la paralelización automática completa, existen varias aproximaciones más sencillas para conseguir un programa paralelo de más calidad, como son:

  • Permitir a los programadores añadir "pistas" a sus programas para guiar al compilador en la paralelización, como HPF para sistemas de memoria distribuida y OpenMP o OpenHMPP para sistemas de memoria compartida.
  • Construir un sistema interactivo entre los programadores y las herramientas que realizan la paralelización. Algunos ejemplos notables son Vector Fabrics' vfAnalyst, SUIF Explorer (El compilador de formato intermedio de la Universidad de Stanford), el compilador Polaris, y ParaWise (formalmente CAPTools).
  • speculative multithreading soportado por hardware.

Compiladores paralelos históricos

La mayoría de las investigadores en compiladores para la paralelización automática prefieren los programas Fortran,[cita requerida] porque Fortran ofrece mayores garantías sobre aliasing que otros lenguajes como C. Ejemplos típicos son:

  • Rice Fortran D compiler
  • Vienna Fortran compiler
  • Paradigm compiler
  • Polaris compiler
  • SUIF compiler

Véase también

  • Optimización de bucles anidados
  • Modelo Polytope
  • Paralelismo escalable

Referencias

  1. Fox, Geoffrey; Roy Williams, Giuseppe Messina (1994). Parallel Computing Works!. Morgan Kaufmann. pp. 575,593. ISBN 978-1558602533. 


  •   Datos: Q2323839

paralelización, automática, este, artículo, sección, necesita, referencias, aparezcan, publicación, acreditada, este, aviso, puesto, enero, 2012, también, auto, paralelización, autoparalelización, paralelización, refiere, convertir, código, secuencial, multihi. Este articulo o seccion necesita referencias que aparezcan en una publicacion acreditada Este aviso fue puesto el 13 de enero de 2012 Paralelizacion automatica tambien auto paralelizacion autoparalelizacion o paralelizacion se refiere a convertir codigo secuencial en multihilo o vectorizado o los dos con objeto de utilizar multiples procesadores simultaneamente en una maquina con multiprocesador SMP de memoria compartida La utilidad de la paralelizacion automatica es liberar a los programadores del proceso tedioso y tendente a errores de la paralelizacion manual Aunque la calidad de la automatizacion paralela ha mejorado en las ultimas decadas una paralelizacion automatica completa de programas secuenciales por un compilador sigue siendo un gran reto ya que necesita de un complejo analisis informatico y a los factores desconocidos como el rango de los datos de entrada durante la compilacion 1 Las estructuras de control de programacion en las que la autoparalelizacion se centra son los bucles ya que en general la mayor parte del tiempo de ejecucion de un programa tiene lugar en el interior de algun bucle Un compilador paralelo intenta dividir un bucle de forma que sus iteraciones puedan ser ejecutadas en microprocesadores separados de forma concurrente Indice 1 Analisis de la compilacion paralela 2 Ejemplo 3 Dificultades 4 Soluciones 5 Compiladores paralelos historicos 6 Vease tambien 7 ReferenciasAnalisis de la compilacion paralela EditarEl compilador realiza normalmente dos ciclos de analisis antes de una paralelizacion para determinar lo siguiente Es seguro paralelizar el bucle La respuesta a esta pregunta requiere un preciso analisis de dependencias y analisis de alias Merece la pena pralelizarlo Esta respuesta requiere una estimacion fiable modelado de la carga de trabajo del programa y de la capacidad del sistema paralelo En el primer paso el compilador realiza un analisis de dependencias del bucle para determinar si cada iteracion del bucle puede ejecutarse de forma independiente a las demas La dependencia de datos puede tratarse a veces mediante paso de mensajes sincronizacion de memoria compartida o algun otro metodo de comunicacion entre procesadores pero puede incrementar la sobrecarga El segundo paso intenta justificar el esfuerzo de paralelizacion comparando el tiempo teorico de ejecucion del codigo paralelizado con el tiempo de ejecucion del codigo secuencial Aunque parece contraproducente el codigo no siempre se beneficia de la ejecucion paralela La carga de trabajo extra que se puede asociar al uso de multiples procesadores puede anular el posible incremento de velocidad de ejecucion del codigo paralelo Ejemplo EditarEl codigo Fortran que aparece a continuacion puede ser auto paralelizado por un compilador porque cada iteracion es independiente de las demas y el resultado final del vector z sera correcto independientemente del orden de ejecucion de las iteraciones do i 1 n z i x i y i enddo Por otro lado el siguiente codigo no puede ser auto paralelizado porque el valor de z i depende del resultado de la iteracion anterior z i 1 do i 2 n z i z i 1 2 enddo Esto no significa que no pueda ser paralelizado De hecho es equivalente a do i 2 n z i z 1 2 i 1 enddo Sin embargo los compiladores paralelos actuales no son capaces de conseguir estas paralelizaciones de forma automatica y es cuestionable que este codigo pueda beneficiarse de la paralelizacion Dificultades EditarLa paralelizacion automatica de los compiladores o herramientas es muy compleja debido a las siguientes causas el analisis de dependencias es muy complejo para el codigo que utiliza direccionamiento indirecto punteros recursividad y llamadas indirectas a funciones los bucles tienen un numero indeterminado de iteraciones los accesos a recursos globales son dificiles de coordinar en terminos de reserva de memoria E S y variables compartidas Soluciones EditarDebido a las dificultades inherentes a la paralelizacion automatica completa existen varias aproximaciones mas sencillas para conseguir un programa paralelo de mas calidad como son Permitir a los programadores anadir pistas a sus programas para guiar al compilador en la paralelizacion como HPF para sistemas de memoria distribuida y OpenMP o OpenHMPP para sistemas de memoria compartida Construir un sistema interactivo entre los programadores y las herramientas que realizan la paralelizacion Algunos ejemplos notables son Vector Fabrics vfAnalyst SUIF Explorer El compilador de formato intermedio de la Universidad de Stanford el compilador Polaris y ParaWise formalmente CAPTools speculative multithreading soportado por hardware Compiladores paralelos historicos EditarLa mayoria de las investigadores en compiladores para la paralelizacion automatica prefieren los programas Fortran cita requerida porque Fortran ofrece mayores garantias sobre aliasing que otros lenguajes como C Ejemplos tipicos son Rice Fortran D compiler Vienna Fortran compiler Paradigm compiler Polaris compiler SUIF compilerVease tambien EditarOptimizacion de bucles anidados Modelo Polytope Paralelismo escalableReferencias Editar Fox Geoffrey Roy Williams Giuseppe Messina 1994 Parallel Computing Works Morgan Kaufmann pp 575 593 ISBN 978 1558602533 La referencia utiliza el parametro obsoleto coautores ayuda Datos Q2323839 Obtenido de https es wikipedia org w index php title Paralelizacion automatica amp oldid 142206639, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos