De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

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

El paralelismo a nivel de instrucción ( ILP ) es una medida de cuántas de las instrucciones en un programa de computadora se pueden ejecutar simultáneamente.

ILP no debe confundirse con concurrencia :

  • ILP es la ejecución paralela de una secuencia de instrucciones que pertenecen a un hilo específico de ejecución de un proceso (un programa en ejecución con su conjunto de recursos: espacio de direcciones , un conjunto de registros , sus identificadores, su estado, contador de programa (también conocido como puntero de instrucción) ), y más).
  • Por otro lado, la concurrencia implica la asignación de subprocesos de uno o más procesos al núcleo de una CPU en una alternancia estricta, o en verdadero paralelismo si hay suficientes núcleos de CPU, idealmente un núcleo para cada subproceso ejecutable.

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

El nivel de hardware funciona con un paralelismo dinámico, mientras que el nivel de software funciona con un 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. [2] [ aclaración necesaria ] El procesador Pentium trabaja en la secuencia dinámica de ejecución paralela, pero el procesador Itanium trabaja en el paralelismo de nivel estático.

Considere 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 se completen ambas. Sin embargo, las operaciones 1 y 2 no dependen de ninguna otra operación, por lo que se pueden calcular simultáneamente. Si asumimos que cada operación se puede completar en una unidad de tiempo, estas tres instrucciones se pueden completar en un total de dos unidades de tiempo, dando un ILP de 3/2.

Un objetivo de los diseñadores de compiladores y procesadores es identificar y aprovechar tanto ILP como sea posible. Los programas ordinarios generalmente se escriben bajo un modelo de ejecución secuencial donde las instrucciones se ejecutan una tras otra y en el orden especificado por el programador. ILP permite al compilador y al procesador superponer la ejecución de múltiples instrucciones o incluso cambiar el orden en que se ejecutan las instrucciones.

La cantidad de ILP que existe en los programas es muy específica de la aplicación. En ciertos campos, como los gráficos y la informática 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 donde las instrucciones se ejecutan en cualquier orden que no viole las dependencias de datos. Tenga en cuenta que esta técnica es independiente de la ejecución de canalizaciones y superescalar. Las implementaciones actuales de ejecución desordenada de forma dinámica (es decir, mientras el programa se está ejecutando y sin ninguna ayuda del compilador) extraen ILP de 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 las operaciones del programa impuesta por la reutilización de registros por parte de esas operaciones, que se utiliza 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 esta ejecución debe tener lugar. Una forma comúnmente utilizada de ejecución especulativa es la especulación de flujo de control en la que las instrucciones más allá de una instrucción de flujo de control (por ejemplo, una rama) 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 varias otras formas de ejecución especulativa, incluida la ejecución especulativa impulsada por la predicción del valor , la predicción de la dependencia de la memoria y la predicción de la latencia de la memoria caché .
  • Predicción de rama que se utiliza para evitar el estancamiento para resolver las dependencias de control. La predicción de rama 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 los programas al hardware mediante optimizaciones en tiempo de compilación. Algunas técnicas de optimización para extraer ILP disponible en programas incluirían programación, asignación / cambio de nombre de registros y optimización del acceso a la memoria.

Las arquitecturas de flujo de datos son otra clase de arquitecturas en las que ILP se especifica explícitamente; para ver un ejemplo reciente, consulte la arquitectura TRIPS .

En los últimos años, se han utilizado técnicas de ILP 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 IBM System / 360 Model 91utilizó técnicas de ILP para superar las limitaciones impuestas por un archivo de registro relativamente pequeño). Actualmente, una penalización por falta de caché en la memoria principal cuesta varios cientos de ciclos de CPU. Si bien, en principio, es posible usar ILP para tolerar incluso esas latencias de memoria, los costos asociados de disipación de energía y recursos 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 antes mencionadas resultan inadecuadas para evitar que la CPU se detenga por los datos fuera del chip. En cambio, la industria se dirige hacia la explotación de niveles más altos de paralelismo que pueden explotarse mediante técnicas como el multiprocesamiento y el multiproceso . [3]

Ver también [ editar ]

  • Dependencia de datos
  • Paralelismo a nivel de memoria (MLP)

Referencias [ editar ]

  1. ^ "La historia de la informática" . mason.gmu.edu . Consultado el 24 de marzo de 2019 .
  2. ^ Hennessy, John L .; Patterson, David A. Arquitectura informática: un enfoque cuantitativo .
  3. ^ Reflexiones del muro de la memoria

Lectura adicional [ editar ]

  • Aiken, Alex; Banerjee, Utpal; Kejariwal, Arun; Nicolau, Alexandru (30 de noviembre de 2016). Paralelismo en el nivel de instrucción . Computación profesional (1 ed.). Saltador. ISBN 978-1-4899-7795-3. ISBN 1-4899-7795-3 .  (276 páginas)

Enlaces externos [ editar ]

  • Enfoques para abordar el Muro de la memoria
  • Artículo de la revista Wired que hace referencia al documento anterior
  • https://www.scribd.com/doc/33700101/Instruction-Level-Parallelism#scribd
  • http://www.hpl.hp.com/techreports/92/HPL-92-132.pdf