Articulo de referencia

Paralelismo de tareas

El paralelismo de tareas (también conocido como paralelismo de funciones y paralelismo de control ) es una forma de paralelización de código informático en múltiples procesadore...

El paralelismo de tareas (también conocido como paralelismo de funciones y paralelismo de control ) es una forma de paralelización de código informático en múltiples procesadores en entornos de computación paralela . El paralelismo de tareas se centra en distribuir tareas —ejecutadas concurrentemente por procesos o hilos— 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 el pipelining , 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 código diferente. En general, los distintos hilos de ejecución se comunican entre sí mientras trabajan, pero esto no es un requisito. La comunicación suele producirse mediante el paso de datos de un hilo a otro como parte de un flujo de trabajo . [ 2 ]

Como ejemplo sencillo, si un sistema ejecuta código en un sistema de dos 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 mediante sentencias condicionales, como se describe a continuación.

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

El paralelismo a nivel de hilo ( TLP ) es el paralelismo inherente a una aplicación que ejecuta múltiples hilos simultáneamente. Este tipo de paralelismo se encuentra principalmente en aplicaciones escritas para servidores comerciales , como bases de datos. Al ejecutar muchos hilos a la vez, estas aplicaciones pueden tolerar la alta latencia del sistema de E/S y memoria que pueden generar sus cargas de trabajo: mientras un hilo espera el acceso a la memoria o al disco, otros hilos pueden realizar tareas útiles.

La explotación del paralelismo a nivel de hilos también ha comenzado a abrirse camino en el mercado de las computadoras de escritorio con la llegada de los microprocesadores multinúcleo . Esto se debe a que, por diversas razones, se ha vuelto cada vez más impracticable aumentar la velocidad de reloj o las instrucciones por ciclo de un solo núcleo. Si esta tendencia continúa, las nuevas aplicaciones deberán diseñarse para utilizar múltiples hilos con el fin de aprovechar el aumento en 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 ejecutarse en una computadora más nueva y rápida.

Ejemplo

El siguiente pseudocódigo ilustra el paralelismo de tareas:

programa: ... si CPU = "a" entonces realizar la tarea "A" de lo contrario si CPU="b" entonces realizar la tarea "B" fin si ... fin del programa

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

  • En un sistema SPMD (programa único, datos múltiples), ambas CPU ejecutarán el código.
  • En un entorno paralelo, ambos tendrán acceso a los mismos datos.
  • La cláusula "if" diferencia entre las CPU. La CPU "a" leerá verdadero en el "if" y la CPU "b" leerá verdadero en el "else if", por lo que tendrán su propia tarea.
  • Ahora, ambas CPU ejecutan bloques de código separados simultáneamente, realizando diferentes tareas al mismo tiempo.

Código ejecutado por la CPU "a":

programa: ... realizar la tarea "A" ... fin del programa

Código ejecutado por la CPU "b":

programa: ... realizar la tarea "B" ... fin del programa

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

Soporte de idiomas

El paralelismo de tareas puede ser soportado en lenguajes de propósito general mediante funcionalidades integradas o bibliotecas. Algunos ejemplos notables son:

Ejemplos de lenguajes de paralelismo de tareas de grano fino se pueden encontrar 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). "Comprender el paralelismo de tareas y datos" . ZDNet . Recuperado el 8 de mayo de 2017 .
  2. Quinn, Michael J. (2007). Programación paralela en C con MPI y OpenMP (ed. Tata McGraw-Hill ). 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 .