
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 nivel de hardware funciona con paralelismo dinámico, mientras que el 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 de nivel estático.
Consideremos el siguiente programa:
e = a + b
f = c + d
m = 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 segmentación como de la ejecución superescalar. Las implementaciones actuales 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, utilizadas 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 que 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 se utilizan otras formas de ejecución especulativa, entre ellas la ejecución especulativa impulsada por la predicción de valores, la predicción de dependencia de la memoria y la predicción de latencia de la memoria caché.
- Predicción de saltos que se utiliza para evitar el bloqueo de la resolución de dependencias de control. La predicción de saltos se utiliza con ejecución especulativa.
Se sabe que el ILP es explotado tanto por el compilador como por el soporte de hardware, pero el compilador también proporciona ILP inherente e implícito en programas al hardware mediante optimizaciones en tiempo de compilación. Algunas técnicas de optimización para extraer el ILP disponible en los programas incluirían 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, consulte la arquitectura TRIPS .
En los últimos años, las técnicas de ILP se han utilizado para proporcionar mejoras de rendimiento a pesar de la creciente disparidad entre las frecuencias de funcionamiento 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, una penalización por fallo 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 de funcionamiento 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 mediante técnicas como el multiprocesamiento y el multihilo . [4]
Véase también
Referencias
- ^ "La historia de la informática". mason.gmu.edu . Consultado el 24 de marzo de 2019 .
- ^ 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.S2CID26665479 .
- ^ Hennessy, John L.; Patterson, David A. (1996). Arquitectura informática: un enfoque cuantitativo .
- ^ 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)
Enlaces externos
- 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.