Paralelismo a nivel de instrucción

Capacidad de que las instrucciones de la computadora se ejecuten simultáneamente con resultados correctos

Computadora Atanasoff-Berry , la primera computadora con procesamiento paralelo [1]

El paralelismo a nivel de instrucción ( ILP ) es la ejecución paralela o simultánea de una secuencia de instrucciones en un programa informático . Más específicamente, ILP se refiere al número promedio de instrucciones ejecutadas por paso de esta ejecución paralela. [2] : 5 

Discusión

No debe confundirse ILP con concurrencia . En ILP, existe un único hilo específico de ejecución de un proceso . Por otro lado, la concurrencia implica la asignación de múltiples hilos a un núcleo de la CPU en una alternancia estricta, o en verdadero paralelismo si hay suficientes núcleos de CPU, idealmente un núcleo por cada hilo ejecutable.

Hay dos enfoques para el paralelismo a nivel de instrucción: hardware y software .

El ILP a nivel de hardware funciona con paralelismo dinámico, mientras que el ILP a nivel de software funciona con paralelismo estático. El paralelismo dinámico significa que el procesador decide en tiempo de ejecución qué instrucciones ejecutar en paralelo, mientras que el paralelismo estático significa que el compilador decide qué instrucciones ejecutar en paralelo. [3] [ aclaración necesaria ] El procesador Pentium funciona con la secuencia dinámica de ejecución paralela, pero el procesador Itanium funciona con paralelismo a nivel estático.

Consideremos el siguiente programa:

e = a + bf = c + dm = e * f

La operación 3 depende de los resultados de las operaciones 1 y 2, por lo que no se puede calcular hasta que ambas se completen. Sin embargo, las operaciones 1 y 2 no dependen de ninguna otra operación, por lo que se pueden calcular simultáneamente. Si suponemos que cada operación se puede completar en una unidad de tiempo, entonces estas tres instrucciones se pueden completar en un total de dos unidades de tiempo, lo que da un ILP de 3/2.

Un objetivo de los diseñadores de compiladores y procesadores es identificar y aprovechar la mayor cantidad posible de ILP. Los programas ordinarios suelen escribirse según un modelo de ejecución secuencial en el que las instrucciones se ejecutan una tras otra y en el orden especificado por el programador. El ILP permite al compilador y al procesador superponer la ejecución de varias instrucciones o incluso cambiar el orden en el que se ejecutan las instrucciones.

La cantidad de ILP que existe en los programas depende de cada aplicación. En ciertos campos, como los gráficos y la computación científica , la cantidad puede ser muy grande. Sin embargo, las cargas de trabajo como la criptografía pueden mostrar mucho menos paralelismo.

Las técnicas de microarquitectura que se utilizan para explotar ILP incluyen:

  • Canalización de instrucciones , donde la ejecución de múltiples instrucciones puede superponerse parcialmente.
  • Ejecución superescalar , VLIW , y los conceptos de computación de instrucciones explícitamente paralelas estrechamente relacionados , en los que se utilizan múltiples unidades de ejecución para ejecutar múltiples instrucciones en paralelo.
  • Ejecución fuera de orden , en la que las instrucciones se ejecutan en cualquier orden que no viole las dependencias de datos. Tenga en cuenta que esta técnica es independiente tanto de la ejecución en cadena como de la ejecución superescalar. Las implementaciones actuales [ ¿cuándo? ] de ejecución fuera de orden extraen dinámicamente (es decir, mientras el programa se está ejecutando y sin ninguna ayuda del compilador) el ILP de los programas ordinarios. Una alternativa es extraer este paralelismo en tiempo de compilación y, de alguna manera, transmitir esta información al hardware. Debido a la complejidad de escalar la técnica de ejecución fuera de orden, la industria ha reexaminado los conjuntos de instrucciones que codifican explícitamente múltiples operaciones independientes por instrucción.
  • Cambio de nombre de registros , que se refiere a una técnica utilizada para evitar la serialización innecesaria de operaciones de programa impuesta por la reutilización de registros por dichas operaciones, utilizada para permitir la ejecución fuera de orden.
  • Ejecución especulativa , que permite la ejecución de instrucciones completas o partes de instrucciones antes de tener la certeza de si dicha ejecución debe tener lugar. Una forma de ejecución especulativa que se utiliza habitualmente es la especulación del flujo de control, en la que las instrucciones posteriores a una instrucción de flujo de control (por ejemplo, una bifurcación) se ejecutan antes de que se determine el objetivo de la instrucción de flujo de control. Se han propuesto y están en uso otras formas de ejecución especulativa, incluida la ejecución especulativa impulsada por predicción de valores, predicción de dependencia de memoria y predicción de latencia de caché.
  • Predicción de bifurcación , que se utiliza para evitar el estancamiento de las dependencias de control que se deben resolver. La predicción de bifurcación se utiliza con la ejecución especulativa.

El compilador y el hardware aprovechan la ILP, pero el compilador también proporciona ILP inherente e implícita en los programas al hardware mediante optimizaciones en tiempo de compilación. Algunas técnicas de optimización para extraer la ILP disponible en los programas incluyen la programación de instrucciones , la asignación/cambio de nombre de registros y la optimización del acceso a la memoria.

Las arquitecturas de flujo de datos son otra clase de arquitecturas donde ILP se especifica explícitamente; para un ejemplo reciente [¿ cuándo? ] , consulte la arquitectura TRIPS .

En los últimos [ ¿cuándo? ] años, se han utilizado técnicas de ILP para proporcionar mejoras de rendimiento a pesar de la creciente disparidad entre las frecuencias operativas del procesador y los tiempos de acceso a la memoria (los primeros diseños de ILP, como el IBM System/360 Model 91, utilizaban técnicas de ILP para superar las limitaciones impuestas por un archivo de registros relativamente pequeño). En la actualidad [ ¿cuándo? ] , una penalización por error de caché en la memoria principal cuesta varios cientos de ciclos de CPU. Si bien en principio es posible utilizar ILP para tolerar incluso esas latencias de memoria, los costos asociados de recursos y disipación de energía son desproporcionados. Además, la complejidad y, a menudo, la latencia de las estructuras de hardware subyacentes dan como resultado una frecuencia operativa reducida, lo que reduce aún más los beneficios. Por lo tanto, las técnicas mencionadas anteriormente resultan inadecuadas para evitar que la CPU se detenga para los datos fuera del chip. En cambio, la industria se dirige hacia la explotación de niveles más altos de paralelismo que se pueden aprovechar a través de técnicas como el multiprocesamiento y el multihilo . [4]

Véase también

Referencias

  1. ^ "La historia de la informática". mason.gmu.edu . Consultado el 24 de marzo de 2019 .
  2. ^ Goossens, Bernard; Langlois, Philippe; Parello, David; Petit, Eric (2012). "PerPI: una herramienta para medir el paralelismo a nivel de instrucción". Applied Parallel and Scientific Computing . Apuntes de clase en informática. Vol. 7133. págs. 270–281. doi :10.1007/978-3-642-28151-8_27. ISBN 978-3-642-28150-1. Número de identificación del sujeto  26665479.
  3. ^ Hennessy, John L.; Patterson, David A. (1996). Arquitectura informática: un enfoque cuantitativo .
  4. ^ Reflexiones del Muro de la Memoria

Lectura adicional

  • Aiken, Alex; Banerjee, Utpal; Kejariwal, Arun; Nicolau, Alexandru (30 de noviembre de 2016). Paralelismo a nivel de instrucción . Computación profesional (1.ª ed.). Springer. ISBN 978-1-4899-7795-3. ISBN 1-4899-7795-3 . (276 páginas)
  • Enfoques para abordar el Muro de la Memoria
  • Artículo de la revista Wired que hace referencia al artículo mencionado anteriormente
  • https://www.scribd.com/doc/33700101/Instruction-Level-Parallelism#scribd
  • http://www.hpl.hp.com/techreports/92/HPL-92-132.pdf Archivado el 4 de marzo de 2016 en Wayback Machine.
Obtenido de "https://es.wikipedia.org/w/index.php?title=Paralelismo_a_nivel_de_instrucción&oldid=1257082094"