stringtranslate.com

Paralelismo de tareas

El paralelismo de tareas (también conocido como paralelismo de funciones y paralelismo de control ) es una forma de paralelización del código informático entre varios procesadores en entornos de computación paralela . El paralelismo de tareas se centra en la distribución de tareas (realizadas simultáneamente por procesos o subprocesos ) entre diferentes procesadores. A diferencia del paralelismo de datos , que implica ejecutar la misma tarea en diferentes componentes de datos, el paralelismo de tareas se distingue por ejecutar muchas tareas diferentes al mismo tiempo en los mismos datos. [1] Un tipo común de paralelismo de tareas es la canalización , que consiste en mover un único conjunto de datos a través de una serie de tareas separadas donde cada tarea puede ejecutarse independientemente de las demás.

Descripción

En un sistema multiprocesador, el paralelismo de tareas se logra cuando cada procesador ejecuta un hilo (o proceso) diferente sobre los mismos datos o sobre datos diferentes. Los hilos pueden ejecutar el mismo código o un código diferente. En el caso general, los diferentes hilos de ejecución se comunican entre sí mientras trabajan, pero esto no es un requisito. La comunicación suele tener lugar al pasar datos de un hilo al siguiente como parte de un flujo de trabajo . [2]

Como ejemplo simple, si un sistema está ejecutando código en un sistema de 2 procesadores ( CPU "a" y "b") en un entorno paralelo y deseamos realizar las tareas "A" y "B", es posible indicarle a la CPU "a" que realice la tarea "A" y a la CPU "b" que realice la tarea "B" simultáneamente, reduciendo así el tiempo de ejecución. Las tareas se pueden asignar utilizando instrucciones condicionales como se describe a continuación.

El paralelismo de tareas enfatiza la naturaleza distribuida (paralelizada) del procesamiento (es decir, los subprocesos), en oposición a los datos ( paralelismo de datos ). La mayoría de los programas reales se encuentran en algún punto intermedio entre el paralelismo de tareas y el paralelismo de datos. [3]

El paralelismo a nivel de subprocesos ( TLP ) es el paralelismo inherente a una aplicación que ejecuta varios subprocesos a la vez. Este tipo de paralelismo se encuentra principalmente en aplicaciones escritas para servidores comerciales , como bases de datos. Al ejecutar muchos subprocesos a la vez, estas aplicaciones pueden tolerar las altas cantidades de E/S y latencia del sistema de memoria que pueden generar sus cargas de trabajo: mientras un subproceso se retrasa esperando un acceso a la memoria o al disco, otros subprocesos pueden realizar un trabajo útil.

La explotación del paralelismo a nivel de subprocesos también ha comenzado a abrirse paso en el mercado de los ordenadores de sobremesa con la llegada de los microprocesadores multinúcleo . Esto se ha producido porque, por diversas razones, se ha vuelto cada vez más impráctico aumentar la velocidad de reloj o las instrucciones por reloj de un único núcleo. Si esta tendencia continúa, habrá que diseñar nuevas aplicaciones que utilicen múltiples subprocesos para beneficiarse del aumento de la potencia de cálculo potencial. Esto contrasta con las innovaciones anteriores en microprocesadores en las que el código existente se aceleraba automáticamente al ejecutarlo en un ordenador más nuevo y más rápido.

Ejemplo

El pseudocódigo siguiente ilustra el paralelismo de tareas:

programa:...Si CPU = "a" entonces hacer la tarea "A"De lo contrario, si CPU="b" entonces hacer la tarea "B"terminar si...Fin del programa

El objetivo del programa es realizar una tarea total neta ("A+B"). Si escribimos el código como se indica arriba y lo ejecutamos en un sistema de 2 procesadores, el entorno de ejecución lo ejecutará de la siguiente manera.

Código ejecutado por la CPU "a":

programa:...hacer la tarea "A"...Fin del programa

Código ejecutado por la CPU "b":

programa:...hacer la tarea "B"...Fin del programa

Este concepto ahora se puede generalizar a cualquier número de procesadores.

Soporte de idiomas

El paralelismo de tareas se puede soportar en lenguajes de uso general mediante bibliotecas o funciones integradas. Algunos ejemplos notables incluyen:

Se pueden encontrar ejemplos de lenguajes de tareas paralelas de grano fino en el ámbito de los lenguajes de descripción de hardware como Verilog y VHDL .

Véase también

Referencias

  1. ^ Reinders, James (10 de septiembre de 2007). "Understanding task and data parallelism" (Comprensión del paralelismo de datos y tareas). ZDNet . Consultado el 8 de mayo de 2017 .
  2. ^ Quinn, Michael J. (2007). Programación paralela en C con MPI y openMP (Tata McGraw-Hill ed.). Nueva Delhi: Tata McGraw-Hill Pub. ISBN 978-0070582019.
  3. ^ Hicks, Michael. "Conceptos básicos de concurrencia" (PDF) . Universidad de Maryland: Departamento de Ciencias de la Computación . Consultado el 8 de mayo de 2017 .