El director de Intel, James Reinders, explica la diferencia entre el paralelismo de tareas y de datos, y cómo hay una manera de sortear los límites impuestos por la Ley de Amdahl…
Soy James Reinders y hoy cubriré dos conceptos clave relacionados con el paralelismo. Son términos que escuchará cuando comience a trabajar con programación paralela, cuando comience a analizar procesadores multinúcleo y comience a escribir programas para ellos, y son términos realmente importantes que es necesario comprender a fondo. Son conceptos muy simples. Repasémoslos.
El primero que repasaré hoy es el paralelismo de tareas y datos: ¿qué son y qué significan? — y luego terminaré hablando un poco sobre la Ley de Amdahl. La Ley de Amdahl es una observación muy interesante, pero a veces se utiliza para predecir cosas que simplemente no tienen sentido.
Entonces, comencemos con el paralelismo de tareas y datos. El paralelismo consiste en hacer varias cosas a la vez, pero existen fundamentalmente dos tipos de paralelismo que…
…la gente hablará de ello. Uno es el paralelismo de tareas y el otro es el paralelismo de datos.
El paralelismo de datos es bastante simple. Es el concepto de que usted tiene una gran cantidad de datos que desea procesar: tal vez muchos píxeles en una imagen, tal vez tenga una gran cantidad de cheques de nómina que actualizar. Tomar esos datos y dividirlos entre varios procesadores es un método para conseguir paralelismo de datos. Ésta es un área en la que las supercomputadoras han destacado durante años. Es un tipo de problema que se comprende bastante bien y en el pasado se ha puesto más énfasis en el paralelismo de datos que en el paralelismo de tareas.
El paralelismo de tareas, por otro lado, es donde hay múltiples tareas por realizar. Entonces, tal vez tenga un gran conjunto de datos y quiera saber el valor mínimo, el máximo y el promedio. Este es un ejemplo bastante trivial, pero podría hacer que diferentes procesadores observen el mismo conjunto de datos y calculen respuestas diferentes. Entonces, el paralelismo de tareas es una forma diferente de ver las cosas. En lugar de dividir los datos y hacer el mismo trabajo en diferentes procesadores, en el paralelismo de tareas lo que estás haciendo es dividir la tarea a aplicar.
El paralelismo de tareas más común es algo llamado “pipelining”. La canalización es algo en lo que tienes múltiples tareas, digamos la tarea uno, la tarea dos y la tarea tres, y, en lugar de hacer que cada una de ellas opere con los datos de forma independiente, lo que realmente haces es tomar los datos y dárselos a la primera tarea y procesarlo y la segunda tarea y la tercera tarea.
El procesamiento de imágenes a menudo se realiza en forma de canalización; los procesadores gráficos a menudo realizan canalizaciones. Transmites una imagen y parte del procesamiento comienza con la primera tarea: se aplica un determinado filtro y luego se transmite, se transmite y se transmite. Esta es una combinación muy común de paralelismo de tareas y datos.
Así que lleva un tiempo acostumbrarse a esto. Vale la pena profundizar y comprender dónde está el paralelismo en su aplicación. En realidad, por lo general, existen otros tipos de paralelismo y, a medida que empiece a buscarlos y comprenderlos, comenzará a comprender si es mejor escribir su programa para paralelismo de tareas o paralelismo de datos o quizás ambos, para canalización.
Ahora, con eso en mente, tienes la idea de que vas a dividir tu tarea o tus datos o un poco de ambos, y la pregunta es: ¿cuánta velocidad puedes esperar, cuánto rendimiento ¿Qué vas a obtener de estos procesadores multinúcleo?
Hay una observación muy famosa de Gene Amdahl. Se conoce como Ley de Amdahl y es que la aceleración está limitada por las partes en serie de su programa, es decir, en serie las partes que no se ejecutan en paralelo.
Entonces, echemos un vistazo a un ejemplo simple de un programa que tiene cinco partes diferentes y cada parte requiere 100 unidades de tiempo. En este caso supongamos que la primera, segunda y quinta parte son seriales y no vamos a encontrar ningún paralelismo en ello. Pero veamos la segunda y cuarta partes y supongamos que estamos encontrando paralelismo entre datos y tareas. Entonces, inicialmente el programa toma 500 unidades de tiempo para ejecutarse, entonces, si podemos cambiar el segundo y el cuarto para que solo tomen 50 unidades de tiempo porque los ejecutamos en dos procesadores, este programa general ahora solo tomará 400 unidades de tiempo. tiempo de ejecución, lo que representa una aceleración del 25 por ciento.
Podemos continuar con esto y tal vez tengamos cuatro procesadores y hagamos que cada uno funcione en 25 unidades de tiempo y podamos ver cómo progresa esto. Cada una de estas partes del programa ahora solo toma 25 unidades de tiempo para ejecutarse porque tenemos cuatro procesadores haciendo el trabajo que hacíamos antes. Conseguimos que el tiempo de ejecución del programa se reduzca a 350 unidades de tiempo, lo que representa una aceleración del 40 por ciento.
Ahora bien, lo que pasa con la Ley de Amdahl es que continúa centrándose en el hecho de que las porciones en serie no se están haciendo más pequeñas. Podemos imaginar tomar una gran cantidad de procesadores y hacer que estas dos partes del programa se ejecuten en muy poco tiempo. Aún así, el programa tarda 300 unidades de tiempo en ejecutarse porque dejamos el…
…porciones en serie detrás. Esta es la clave de la Ley de Amdahl. Básicamente dice que estará limitado por la parte serial de su código, y la Ley de Amdahl predice para este ejemplo simple en particular que, no importa cuántos procesadores tenga, nunca obtendrá más del 70 por ciento de velocidad. -arriba.
Si toma esto al pie de la letra, la Ley de Amdahl acelera los programas actuales, puede ver que el multinúcleo no parece muy atractivo, el paralelismo en general no parece atractivo. Entonces, ¿qué está pasando? Hemos construido supercomputadoras con miles de procesadores, por lo que está claro que la Ley de Amdahl no es todo lo que hay que hacer. A Gene Amdahl se le ocurrió esta observación en 1967.
Sorprendentemente, tomó bastante tiempo, pero en 1988 Gustafson señaló algo sobre la Ley de Amdahl. Lo miró de manera muy diferente y dijo: Mira, las computadoras no hacen el mismo trabajo año tras año tras año. A medida que las computadoras se vuelven más poderosas, tendemos a lanzarles cargas de trabajo cada vez mayores, con más y más datos para procesar. Y eso lo vemos hoy.
Entonces, si miramos esto de otra manera y decimos: nuestro programa se ejecutó en 500 unidades de tiempo, duplicaremos la cantidad de trabajo que estamos haciendo en nuestras secciones paralelas y ahora obtendremos 200 unidades. unidades de trabajo realizadas en la misma cantidad de tiempo, el programa todavía tarda 500 unidades de tiempo en ejecutarse, pero logramos realizar 700 unidades de trabajo y eso es un 40 por ciento de aceleración con solo dos procesadores. Y, si continuamos con esta tendencia y agregamos un par de procesadores más, cada uno de los cuales realiza la misma cantidad de trabajo, podemos realizar 1100 unidades de trabajo en 500 unidades de tiempo y eso es una aceleración de 2,2.
La observación de Gustafson básicamente dice que, si podemos seguir aumentando la cantidad de trabajo que queremos realizar, que es la historia de la informática, las porciones en serie en realidad tienen un impacto cada vez menor en nosotros y podemos ver aceleraciones en el orden. del número de procesadores que tenemos.
Por lo tanto, puede que no sea un uso perfecto del paralelismo, una aceleración perfecta: cada procesador no aumenta nuestra velocidad, por lo tanto, si tenemos 10 procesadores, no obtenemos una aceleración diez veces mayor, pero estamos obteniendo una velocidad lineal. -arriba; podemos esperar que 20 procesadores nos brinden aproximadamente el doble del rendimiento que obtendríamos con 10 procesadores.
Entonces, si alguna vez escuchas citar la Ley de Amdahl como una razón por la cual el paralelismo no funciona para nosotros, puedes regresar y hacer la observación de que Gustafson tenía una explicación sobre qué hacer. Y esta es la clave de por qué las supercomputadoras han tenido éxito con el paralelismo, porque seguimos aumentando los conjuntos de datos, y lo mismo sucederá con los procesadores multinúcleo.