Canalización de software

La canalización de software es un patrón de diseño para programar un procesador con múltiples unidades de ejecución para que la mayor cantidad posible de ellas estén ocupadas al mismo tiempo. El propósito del método es acortar el tiempo para un cálculo, ya que el paralelismo intraprocesador puede usarse para el cálculo. Estas llamadas líneas de montaje de comandos se denominan "tuberías".

antecedentes

La canalización de software se utiliza para el procesamiento paralelo de comandos de un solo hilo ( paralelismo a nivel de instrucción ). A diferencia del procesamiento en paralelo de comandos, la canalización de software se utiliza cuando se realiza el mismo cálculo en un vector de datos de entrada (es decir, una forma de SIMD ) y se ha prestado especial atención a la disposición de los comandos en el flujo de instrucciones .

A diferencia de una canalización dentro de un procesador, que divide los pasos de procesamiento individuales de una instrucción de máquina para que se puedan procesar varias instrucciones (en diferentes etapas de finalización) al mismo tiempo, una canalización de software implica varias instrucciones de máquina para realizar un cálculo en un conjunto de datos de entrada. . Esto también significa que la canalización de software está explícitamente influenciada por el programador y no es una propiedad o funcionalidad del procesador, sino que se utilizan las propiedades de superescalaridad y arquitectura de canalización, que en conjunto permiten la ejecución paralela de instrucciones. Por el contrario, el programador no puede manipular la canalización del procesador.

ejemplo

Se debe y = (x + 3) * 2realizar, es decir, un vector de valores x (i) debe incrementarse en 3 elemento por elemento y luego duplicarse. Si el procesador tiene dos unidades de ejecución para instrucciones aritméticas, estas se pueden asignar de la siguiente manera:


Tacto yo Unidad de almacenamiento A Unidad de ejecución A Unidad de ejecución B Unidad de almacenamiento B
1 0 r (0) = x (0)
2 1 r (1) = x (1) r (0) = r (0) + 3
3 2 r (2) = x (2) r (1) = r (1) + 3 r (0) = r (0) * 2
Cuarto 3 r (3) = x (3) r (2) = r (2) + 3 r (1) = r (1) * 2 y (0) = r (0)
...
j + 1 j r (j) = x (j) r (j - 1)) = r (j - 1) + 3 r (j - 2) = r (j - 2) * 2 y (j - 3) = r (j - 3)
...
n + 3 n + 2 y (n - 1) = r (n - 1)

Leyenda:

  • yo es el índice actual
  • En la 2a columna se puede ver el cálculo realizado por la unidad de ejecución A.
  • r (i) es un registro que almacena el paso intermedio del cálculo

La canalización de software requiere que el procesador pueda decodificar y ejecutar más de una instrucción al mismo tiempo.

El término pipelining proviene de la división de una operación a realizar en pasos de trabajo individuales o etapas que se llevan a cabo una tras otra, como en una línea de montaje. Dado que el cálculo de un valor en un ciclo solo toma un paso en la tubería, se pueden procesar varios conjuntos de datos (en diferentes etapas de finalización) al mismo tiempo. Si una operación ya está en el segundo paso, la siguiente operación ya se puede iniciar en el paso anterior. En general, la canalización de software es compatible con todos los procesadores superescalares, a menudo con la ayuda del desenrollado de bucles y el cambio de nombre de registros en el compilador . El IA-64 admite especialmente la canalización de software, no es necesario desenrollar el bucle, el procesador se hace cargo del cambio de nombre de los registros durante la ejecución del motor de pila de registros .

literatura

  • M. Lam: Canalización de software. Una técnica de programación eficaz para máquinas VLIW. En: Avisos SIGPLAN. ACM, Nueva York 1966, ISSN  0362-1340 .
  • Hongbo Rong, Alban Douillet, R. Govindarajan, Guang Gao: Generación de código para la canalización de software de una sola dimensión de lazos multidimensionales. En: Generación y optimización de código, 2004. CGO 2004. Simposio internacional sobre. ISBN 0-7695-2102-9 , doi : 10.1109 / CGO.2004.1281673 .
  • Markus Pister: Pipelining de software genérico a nivel de ensamblaje. (Tesis de diploma) Universidad de Saarland, Saarbrücken 2005.

enlaces web

Evidencia individual

  1. a b Markus Pister: canalización de software genérico a nivel de ensamblaje. - Capítulo 5: Canalización de software. Pág. 48.