Arquitectura de computadora: ¿Cuál es la diferencia entre canalización y paralelismo?

La canalización es solo una de las muchas formas de paralelismo.

Siempre busco la analogía cuando me hacen preguntas como esta.

Imagine una habitación llena de gente llenando sobres para un negocio. Cada persona realiza la tarea completa de ensamblar los documentos en orden, doblarlos, colocarlos en el sobre, sellar el sobre, colocar el franqueo y colocar la etiqueta de dirección. Eso es paralelismo. Escala muy bien, nota; puedes imaginar emplear a miles de personas para hacer el trabajo si tuvieras que enviar una gran cantidad de cosas por correo.

Ahora imagine que organiza los rellenos de sobres como una línea de montaje. Una persona no hace nada más que reunir los documentos en orden y manejarlos con la siguiente persona en línea, que no hace nada más que doblar los documentos y entregárselos a la siguiente persona, y así sucesivamente. Esto es eficiente porque cada persona se vuelve altamente competente en la única tarea repetitiva en la que se especializan … pero tenga en cuenta que no se escala . En este caso, la tarea se divide en seis etapas de canalización, por lo que la canalización de los rellenos de sobres tiene una concurrencia limitada. Si la tarea fuera algo más complicada, como construir un automóvil, entonces obviamente podría dividir la tarea en muchas más etapas y utilizar a más personas en la línea de montaje.

El otro problema es que es difícil asegurarse de que cada etapa de la tubería tome la misma cantidad de tiempo. Tal vez sellar el sobre solo lleva dos segundos, pero armar los papeles lleva veinte segundos. Entonces tienes un cuello de botella en la tubería .

Sin embargo, las tuberías tienen una ventaja significativa sobre el tipo de paralelismo de trabajadores independientes: administran el flujo de material (o en el caso de una computadora, datos). Si cada trabajador tiene que tener su propio suministro de sobres y etiquetas de dirección, entonces deben reponerse cuando se agoten o se necesitan trabajadores adicionales para el trabajo de distribución de materiales.

Por lo tanto, la canalización es solo una forma de paralelismo. Hay muchos otros Por ejemplo, imagine una especie de sargento de instrucción al frente de la sala ladrando comandos para que todos se doblen, luego todos rellenen, luego todos sellen, etc., para que cada persona haga exactamente lo mismo sincrónicamente pero con diferentes direcciones en su conjunto de etiquetas. Eso se llama paralelismo SIMD (Single Instruction Multiple Data), y requiere que cada persona sea igualada por la velocidad. Si no lo son, entonces, en lugar de un cuello de botella, tiene un desequilibrio de carga .

Espero que eso le ayude a comprender cómo la canalización contrasta con otros tipos de paralelismo.

Por lo general, una CPU consta de muchas unidades funcionales como aritmética, predictor de ramificación, carga / almacenamiento. Estas funcionalidades se implementan en el propio hardware, por lo que pueden funcionar simultáneamente.

Ahora tomemos un ejemplo simple de seguir las instrucciones.
a = b + c;
A nivel de máquina, esta sencilla instrucción constará de:

  1. cargar los valores de b & c en registros de la memoria
  2. agregar el contenido de los registros r0, r1
  3. almacenar el resultado en la ubicación de memoria señalada por a.

Ahora, mientras los valores de a & b se cargan en los registros r0 y r1, otra unidad funcional estará inactiva. Así desperdicio de recursos. Para evitar este concepto de tubería se introdujo, donde la ejecución de la instrucción se divide en múltiples etapas. Cada etapa es ejecutada por diferentes unidades funcionales de la CPU. Por lo tanto, cuando addr agrega dos registros, la unidad de carga puede cargar el valor de alguna otra ubicación de memoria señalada por una instrucción diferente. Por lo tanto, en un momento dado, habrá múltiples instrucciones en la tubería en diferentes etapas, lo que resultará en un aumento en el rendimiento.

El paralelismo llega a un nivel un poco más lógico. Aquí usted escribe su programa de tal manera que diferentes partes (una parte comprenderá varias instrucciones) pueden ser ejecutadas simultáneamente por diferentes CPU. (donde se implementó la canalización dentro de la propia CPU). Por ejemplo, digamos que dos conjuntos de tamaños 10000000 cada uno deben agregarse en cuanto a índice. ahora puede dividir la matriz en múltiples sub-matrices y asignar cada par de sub-matrices a diferentes CPU. Al final se recogen los resultados de cada subconjunto de diferentes CPU y se obtiene el resultado final.

PS- paralelismo y tubería típicamente coexisten.

La canalización es una forma particular de paralelismo. En general, el paralelismo es simplemente operaciones múltiples que ocurren al mismo tiempo. La canalización es una disposición particular de funciones para que diferentes partes de una operación fluyan a través de un conjunto particular de subfunciones, con las subfunciones sucediendo en paralelo.

Ejemplos particularmente divertidos de tuberías son:

  • Ejecución de instrucciones en procesadores x86 recientes.
  • Vectorización de operación de punto flotante en un Cray-1.
  • La tubería de reenvío de paquetes en la NPU Procket: 198 núcleos VLIW.

El paralelismo implica hardware replicado (aprovechando el espacio). La canalización implica reutilizar el hardware de manera óptima en función de los flujos de datos (aprovechando el tiempo).

El paralelismo puede hacer dos cálculos al mismo tiempo en unidades de cómputo separadas. La canalización puede hacer un cálculo dos veces en tiempo incremental sobre hacerlo una vez, utilizando un solo conjunto de unidades de cálculo.

La canalización es un tipo de paralelismo.

Aquí hay ejemplos concretos simples del mundo real (solo para ilustrar el punto):

Tubería:

Supongamos que una línea de pago de una tienda de comestibles está siendo respaldada. En esta tienda lo registran, lo embolsan y lo llevan a su automóvil. Sin embargo, el cajero solo puede ir tan rápido. Ella tiene que escanear los artículos, deslizarlos hacia el área de la bolsa, tomar el siguiente artículo, tomar el pago, empacar los artículos, cargar el carrito, llevar al cliente al automóvil y regresar, todo antes de que pueda pasar al siguiente cliente.

¿Solución? Tubería Agregue una ensacadora a la sección de ensacado en la parte inferior del soporte del cajero que empacará los artículos y cargará el carrito del cliente mientras el cajero saca los artículos y acepta el pago. Ahora hemos agregado una segunda etapa a nuestra cartera de puestos de caja. Un nuevo cliente ahora puede acercarse y comenzar a pagar. Podríamos optimizar aún más nuestra cartera agregando un empleado adicional que acompañe a los clientes al automóvil. Todavía lleva aproximadamente la misma cantidad de tiempo atender a un solo cliente, pero se ha dividido en “etapas”, lo que significa que estaremos produciendo más clientes con este método.

Paralelismo:

Asumamos el mismo problema que el anterior antes de agregar la tubería.

¿Solución? Agregue más empleados y revise los carriles. Ahora simplemente está procesando más líneas de clientes y cajeros al mismo tiempo (potencialmente con beneficios adicionales de canalización en cada línea, mejorando aún más la eficiencia).


La clave para entender aquí es que la canalización es realmente un enfoque inteligente para dividir y conquistar. El paralelismo también es un tipo de enfoque de divide y vencerás, pero es más un método de “fuerza bruta” que esencialmente agrega más “cpus” para hacer más cosas al mismo tiempo.

También es importante tener en cuenta que la canalización aún necesita una forma de operar alguna sección de sus etapas de canalización al mismo tiempo. Si no es así, es esencialmente solo el tiempo empalmado multitarea. Ese escenario sería similar a cómo funciona el cerebro humano, o cómo Windows y otros sistemas operativos realizan una “multitarea” básica. Realmente no podemos realizar múltiples tareas sin tener otro cerebro o CPU (núcleo). Esencialmente, cambiamos muy rápidamente entre el mismo conjunto de tareas para dar la ilusión de que todas se están completando simultáneamente y sin demora aparente.

More Interesting

¿Cómo es útil un co-NP Oracle cuando se enfrenta a una tautología?

¿Qué son las computadoras de control BRAIN?

¿Hay alguna forma de contribuir al código abierto en Selenium Webdriver? Si es así, ¿cuáles son esos?

¿Qué tan similares son Haskell y Scheme?

Cómo hacer un buen proyecto de ciencias de la computación para el último año que sea tan bueno como los proyectos en la universidad de primer nivel

¿Cómo debería un estudiante de ciencias de la computación abordar un problema de investigación, dado que ya se ha reducido en qué problema trabajar?

Estoy buscando comprar una nueva computadora portátil. ¿Dónde encontraría el mejor precio en línea?

Además del desarrollo de software y la ingeniería de software, ¿qué otros campos emplean muchos científicos / ingenieros informáticos?

¿Cuánto tiempo lleva la multiplicación entera, en comparación con la suma?

Excepto la arquitectura Lambda, ¿qué otras arquitecturas de big data existen?

Si cambia el tamaño de una imagen ráster de 1000 × 1000 a 10 × 10 y luego la redimensiona a 1000 × 1000, ¿se considera que esto es un alias en informática?

¿Se está utilizando Quora para entrenar inteligencia artificial para pasar la prueba de Turing?

¿Cuáles son algunos buenos libros sobre arquitectura de computadoras para principiantes?

Si voy a ser asistente de enseñanza de CS este otoño, ¿debería incluir eso en mi currículum ahora?

¿Qué es una explicación intuitiva sobre cómo funciona un árbol de sufijos comprimido?