Saltar al contenido principal

# 1.3: Instrucciones de plomería y paralelismo de nivel de instrucción (ILP)

$$\newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} }$$

$$\newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}}$$

$$\newcommand{\id}{\mathrm{id}}$$ $$\newcommand{\Span}{\mathrm{span}}$$

( \newcommand{\kernel}{\mathrm{null}\,}\) $$\newcommand{\range}{\mathrm{range}\,}$$

$$\newcommand{\RealPart}{\mathrm{Re}}$$ $$\newcommand{\ImaginaryPart}{\mathrm{Im}}$$

$$\newcommand{\Argument}{\mathrm{Arg}}$$ $$\newcommand{\norm}[1]{\| #1 \|}$$

$$\newcommand{\inner}[2]{\langle #1, #2 \rangle}$$

$$\newcommand{\Span}{\mathrm{span}}$$

$$\newcommand{\id}{\mathrm{id}}$$

$$\newcommand{\Span}{\mathrm{span}}$$

$$\newcommand{\kernel}{\mathrm{null}\,}$$

$$\newcommand{\range}{\mathrm{range}\,}$$

$$\newcommand{\RealPart}{\mathrm{Re}}$$

$$\newcommand{\ImaginaryPart}{\mathrm{Im}}$$

$$\newcommand{\Argument}{\mathrm{Arg}}$$

$$\newcommand{\norm}[1]{\| #1 \|}$$

$$\newcommand{\inner}[2]{\langle #1, #2 \rangle}$$

$$\newcommand{\Span}{\mathrm{span}}$$ $$\newcommand{\AA}{\unicode[.8,0]{x212B}}$$

$$\newcommand{\vectorA}[1]{\vec{#1}} % arrow$$

$$\newcommand{\vectorAt}[1]{\vec{\text{#1}}} % arrow$$

$$\newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} }$$

$$\newcommand{\vectorC}[1]{\textbf{#1}}$$

$$\newcommand{\vectorD}[1]{\overrightarrow{#1}}$$

$$\newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}}$$

$$\newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}}$$

$$\newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} }$$

$$\newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}}$$

$$\newcommand{\avec}{\mathbf a}$$ $$\newcommand{\bvec}{\mathbf b}$$ $$\newcommand{\cvec}{\mathbf c}$$ $$\newcommand{\dvec}{\mathbf d}$$ $$\newcommand{\dtil}{\widetilde{\mathbf d}}$$ $$\newcommand{\evec}{\mathbf e}$$ $$\newcommand{\fvec}{\mathbf f}$$ $$\newcommand{\nvec}{\mathbf n}$$ $$\newcommand{\pvec}{\mathbf p}$$ $$\newcommand{\qvec}{\mathbf q}$$ $$\newcommand{\svec}{\mathbf s}$$ $$\newcommand{\tvec}{\mathbf t}$$ $$\newcommand{\uvec}{\mathbf u}$$ $$\newcommand{\vvec}{\mathbf v}$$ $$\newcommand{\wvec}{\mathbf w}$$ $$\newcommand{\xvec}{\mathbf x}$$ $$\newcommand{\yvec}{\mathbf y}$$ $$\newcommand{\zvec}{\mathbf z}$$ $$\newcommand{\rvec}{\mathbf r}$$ $$\newcommand{\mvec}{\mathbf m}$$ $$\newcommand{\zerovec}{\mathbf 0}$$ $$\newcommand{\onevec}{\mathbf 1}$$ $$\newcommand{\real}{\mathbb R}$$ $$\newcommand{\twovec}[2]{\left[\begin{array}{r}#1 \\ #2 \end{array}\right]}$$ $$\newcommand{\ctwovec}[2]{\left[\begin{array}{c}#1 \\ #2 \end{array}\right]}$$ $$\newcommand{\threevec}[3]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \end{array}\right]}$$ $$\newcommand{\cthreevec}[3]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \end{array}\right]}$$ $$\newcommand{\fourvec}[4]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}$$ $$\newcommand{\cfourvec}[4]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}$$ $$\newcommand{\fivevec}[5]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}$$ $$\newcommand{\cfivevec}[5]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}$$ $$\newcommand{\mattwo}[4]{\left[\begin{array}{rr}#1 \amp #2 \\ #3 \amp #4 \\ \end{array}\right]}$$ $$\newcommand{\laspan}[1]{\text{Span}\{#1\}}$$ $$\newcommand{\bcal}{\cal B}$$ $$\newcommand{\ccal}{\cal C}$$ $$\newcommand{\scal}{\cal S}$$ $$\newcommand{\wcal}{\cal W}$$ $$\newcommand{\ecal}{\cal E}$$ $$\newcommand{\coords}[2]{\left\{#1\right\}_{#2}}$$ $$\newcommand{\gray}[1]{\color{gray}{#1}}$$ $$\newcommand{\lgray}[1]{\color{lightgray}{#1}}$$ $$\newcommand{\rank}{\operatorname{rank}}$$ $$\newcommand{\row}{\text{Row}}$$ $$\newcommand{\col}{\text{Col}}$$ $$\renewcommand{\row}{\text{Row}}$$ $$\newcommand{\nul}{\text{Nul}}$$ $$\newcommand{\var}{\text{Var}}$$ $$\newcommand{\corr}{\text{corr}}$$ $$\newcommand{\len}[1]{\left|#1\right|}$$ $$\newcommand{\bbar}{\overline{\bvec}}$$ $$\newcommand{\bhat}{\widehat{\bvec}}$$ $$\newcommand{\bperp}{\bvec^\perp}$$ $$\newcommand{\xhat}{\widehat{\xvec}}$$ $$\newcommand{\vhat}{\widehat{\vvec}}$$ $$\newcommand{\uhat}{\widehat{\uvec}}$$ $$\newcommand{\what}{\widehat{\wvec}}$$ $$\newcommand{\Sighat}{\widehat{\Sigma}}$$ $$\newcommand{\lt}{<}$$ $$\newcommand{\gt}{>}$$ $$\newcommand{\amp}{&}$$ $$\definecolor{fillinmathshade}{gray}{0.9}$$

### Introducción

Esta sección introduce a los alumnos a la plomería de Instrucción y el paralelismo a nivel de instrucción (ILP). Básicamente todo esto sobre cuántas de las operaciones en un programa de computadora se pueden realizar simultáneamente

Instrucción de plomería es una medida de cuántas de las operaciones en un programa de computadora se pueden realizar simultáneamente. El solapamiento potencial entre las instrucciones se denomina paralelismo a nivel de instrucción.

Hay dos enfoques para el paralelismo a nivel de instrucción:

• Hardware
• Software

El nivel de hardware funciona sobre el paralelismo dinámico, mientras que el nivel de software funciona en paralelismo estático

El procesador Pentium funciona en la secuencia dinámica de ejecución paralela pero el procesador Itanium funciona en el paralelismo de nivel estático.

Ejemplo$$\PageIndex{1}$$

Considera el siguiente programa:

1.e = a + b

2.f = c + d

3.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 entonces estas tres instrucciones se pueden completar en un total de dos unidades de tiempo, dando un ILP de 3/2.

Los programas ordinarios suelen escribirse 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 solapar 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 la gráfica y la computación científica la cantidad puede ser muy grande. Sin embargo, las cargas de trabajo como la criptografía pueden exhibir mucho menos paralelismo.

Las técnicas microarquitectónicas que se utilizan para explotar ILP incluyen:

• Instruccióncanalización en donde la ejecucióndemúltiples instrucciones se puede solapar parcialmente.

• Ejecución superscalar, VLIW, y los conceptos de computación de instrucción explícitamente paralelos 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 dependencias de datos. Tenga en cuenta que esta técnica es independiente tanto de la canalización como de la superscalar. Las implementaciones actuales de ejecución fuera de orden dinámicamente (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 conjuntos de instrucciones que codifican explícitamente múltiples operaciones independientes por instrucción.

• Renombración 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 esas operaciones, utilizada para permitir la ejecución fuera de orden.

• Ejecución especulativa que permita la ejecución de instrucciones completas o partes de instrucciones antes de tener la certeza de si esta ejecución debe llevarse a cabo. Una forma comúnmente utilizada de ejecución especulativa es la especulación de flujo de control donde 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 otras formas de ejecución especulativa que están en uso, incluida 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 caché.

• Predicción de bifurcación que se utiliza para evitar el bloqueo para que se resuelvan las dependencias de control. La predicción de rama se utiliza con ejecución especulativa

Las arquitecturas de flujo de datos son otra clase de arquitecturas donde ILP se especifica explícitamente. En los últimos años, las técnicas ILP se han utilizado para proporcionar mejoras de rendimiento a pesar

### Arquitecturas superescalares

Es una CPU que implementa una forma de paralelismo llamada paralelismo a nivel de instrucción dentro de un solo procesador o una computadora diseñada para mejorar el rendimiento de la ejecución de instrucciones escalares. Un escalar es una variable que puede contener solo un valor atómico a la vez, por ejemplo, un entero o un real. Una arquitectura escalar procesa un elemento de datos a la vez, las computadoras que discutimos hasta ahora.

Ejemplos de variables no escalares:

• Matrices
• Matrices
• Registros

En una arquitectura superscalar (SSA), varias instrucciones escalares pueden ser iniciadas simultáneamente y ejecutadas independientemente. La canalización permite también ejecutar varias instrucciones
al mismo tiempo, pero tienen que estar en diferentes etapas de tubería en un momento dado. SSA incluye todas las características de la canalización pero, además, puede haber varias instrucciones ejecutándose simultáneamente en la misma etapa de canalización. Por lo tanto, la SSA introduce un nuevo nivel de paralelismo, llamado paralelismo a nivel de instrucción.

### Conclusión

Esta sección abarcó la Instrucción de plomería y el paralelismo a nivel de instrucción (ILP), es decir, cuántas de las operaciones en un programa de cómputos se pueden realizar simultáneamente.

### Evaluación

1. El esquema da un ejemplo de un paralelismo a nivel de instrucción (ILP)

es una medida de cuántas de las operaciones en un programa de computadora se pueden realizar simultáneamente. El solapamiento potencial entre las instrucciones se denomina paralelismo a nivel de instrucción.

idea básica es ejecutar varias instrucciones en paralelo. El paralelismo existe en que realizamos diferentes operaciones (fetch, decode,...) en varias instrucciones diferentes en paralelo.

Principalmente determinado por el número de dependencias verdaderas (datos) y dependencias procesales (control) en relación con el número de otras instrucciones.

p. ej.

• A: AGREGAR R1 = R2 + R3
• B: SUB R4 = R1 — R5

El ILP es tradicionalmente “extraer paralelismo de una sola secuencia de instrucciones trabajando en una sola corriente de datos”.

This page titled 1.3: Instrucciones de plomería y paralelismo de nivel de instrucción (ILP) is shared under a CC BY-SA license and was authored, remixed, and/or curated by Harrison Njoroge (African Virtual University) .