robot de la enciclopedia para niños

Segmentación de instrucciones para niños

Enciclopedia para niños

La segmentación de instrucciones es una técnica especial que usan los procesadores de las computadoras para trabajar de forma más rápida y eficiente. Imagina que es como una cadena de montaje en una fábrica. En lugar de que una sola persona haga todo el trabajo de principio a fin en un producto, varias personas hacen una parte del trabajo al mismo tiempo en diferentes productos.

De manera similar, la segmentación divide las tareas que una computadora debe hacer (llamadas "instrucciones") en pasos más pequeños. Diferentes partes del procesador (la CPU) trabajan en estos pasos al mismo tiempo, pero en instrucciones distintas. Esto permite que la CPU procese más instrucciones en menos tiempo, aunque cada instrucción individual pueda tardar un poquito más en completarse.

Segmentación básica de cinco etapas
Ciclo reloj
Instr.
1 2 3 4 5 6 7
1 LI DI EJ MEM ES
2 LI DI EJ MEM ES
3 LI DI EJ MEM ES
4 LI DI EJ MEM
5 LI DI EJ
(LI = Lectura de Instrucción, DI = Decodificación de Instrucción, EJ = Ejecución, MEM = Acceso a Memoria, ES = Escritura de vuelta al registro).

En el cuarto ciclo de reloj (la columna verde), la primera instrucción está en la etapa MEM, mientras que la última (y más reciente) no ha sido segmentada todavía.

¿Cómo funciona la segmentación de instrucciones?

Las computadoras funcionan con un "reloj" interno que envía pulsos. Cada pulso es como una señal para que la CPU haga algo. En un procesador sin segmentación, una instrucción completa se procesa paso a paso antes de que empiece la siguiente.

Con la segmentación, los pasos de una instrucción se dividen. Por ejemplo, mientras una parte de la CPU está leyendo una instrucción, otra parte está descifrando la instrucción anterior, y otra parte está ejecutando una instrucción aún más antigua. Así, varias instrucciones están "en progreso" al mismo tiempo, cada una en una etapa diferente.

¿Cuántos pasos tiene la segmentación?

El número de pasos en una segmentación puede variar mucho según el tipo de procesador. Algunos ejemplos son:

  • Los primeros diseños, como el proyecto IBM Stretch (entre 1956 y 1961), usaban tres pasos: Lectura (Fetch), Decodificación (Decode) y Ejecución (Execute).
  • La segmentación clásica de los procesadores RISC (un tipo de arquitectura de procesadores) tiene cinco pasos:

* Lectura de instrucción (LI): La CPU lee la instrucción de la memoria. * Decodificación de instrucción (DI): La CPU entiende qué debe hacer la instrucción. * Ejecución (EJ): La CPU realiza la operación que pide la instrucción. * Acceso a memoria (MEM): Si la instrucción necesita datos de la memoria, los busca aquí. * Escritura de vuelta al registro (ES): La CPU guarda el resultado de la instrucción.

  • Algunos microcontroladores pequeños, como los AVR y PIC, tienen solo dos etapas.
  • Los procesadores modernos pueden tener muchas más etapas. Por ejemplo, algunos Pentium 4 de Intel tenían 20 etapas, y las versiones más recientes llegaron a tener hasta 31 etapas.

Cuantos más pasos tiene una segmentación (más "profunda" es), más rápido puede funcionar el reloj del procesador. Esto se debe a que cada paso es más simple y se puede completar más rápido.

Se dice que un procesador está totalmente segmentado si puede empezar a leer una nueva instrucción en cada pulso del reloj.

¿Qué son los "peligros" en la segmentación?

En un procesador segmentado, las instrucciones no se completan una por una antes de que empiece la siguiente. Esto puede causar problemas si una instrucción necesita el resultado de otra que aún no ha terminado. A estas situaciones problemáticas se les llama peligros.

Imagina estas dos instrucciones: 1. Sumar 1 a un valor guardado en el lugar R5. 2. Copiar el valor de R5 a otro lugar, R6.

Si la instrucción 2 intenta copiar el valor de R5 antes de que la instrucción 1 haya terminado de sumarle 1, la instrucción 2 copiará el valor antiguo, no el nuevo. ¡Eso es un peligro!

¿Cómo se resuelven los peligros?

Los procesadores segmentados usan varias técnicas para evitar estos problemas:

  • Frenado: El procesador puede "frenarse" y esperar. Retrasa la segunda instrucción (y las siguientes) hasta que el valor que necesita esté listo. Esto crea una "burbuja" en la segmentación, como un espacio vacío donde no se hace nada por un momento.
  • Reenvío de operandos: Algunos procesadores son más inteligentes. Pueden detectar que una instrucción necesita un resultado que otra instrucción está a punto de producir. En lugar de esperar, el procesador "reenvía" ese resultado directamente a la instrucción que lo necesita, sin tener que esperar a que se guarde en la memoria.
  • Ejecución fuera de orden: El procesador puede buscar otras instrucciones que no dependan de las que están causando el peligro y ejecutarlas primero. Así, aprovecha el tiempo mientras espera.

Ramificaciones y predicción

Las "ramas" son instrucciones que le dicen al programa que salte a otra parte del código (por ejemplo, un "si esto es cierto, ve aquí; si no, ve allá"). Esto puede ser un problema para la segmentación, porque el procesador no sabe qué camino tomar hasta que se completa una parte de la instrucción.

Para solucionar esto, los procesadores a menudo usan un predictor de saltos. Intentan adivinar qué camino tomará el programa. Si la predicción es correcta, el procesador sigue trabajando sin problemas. Si se equivoca, tiene que deshacer el trabajo que ya había empezado por el camino equivocado y empezar de nuevo por el camino correcto. Esto puede hacer que el procesador pierda tiempo.

Por eso, los programadores a veces intentan escribir código que tenga menos "ramas" para que el procesador pueda trabajar de forma más fluida.

Ventajas de la segmentación

La segmentación tiene varias ventajas importantes:

  • Velocidad: Mantiene todas las partes del procesador ocupadas, lo que significa que la computadora puede hacer más trabajo útil en el mismo tiempo. Esto hace que el procesador sea más rápido en general.
  • Economía: Al dividir las operaciones complejas en pasos más simples, la segmentación puede hacer que sea más económico construir procesadores que realicen tareas avanzadas. En lugar de necesitar circuitos muy complicados para una sola operación, se usan circuitos más simples para cada etapa.

Ejemplo ilustrado

Aquí puedes ver un ejemplo de cómo funciona una segmentación con cuatro etapas: lectura, decodificación, ejecución y escritura.

Archivo:Pipeline, 4 stage
Segmentación genérica de 4 etapas; las cajas de colores representan instrucciones independientes entre sí

En la imagen:

  • La caja gris de arriba muestra las instrucciones que esperan.
  • La caja blanca del centro es la segmentación, donde las instrucciones se procesan en etapas.
  • La caja gris de abajo muestra las instrucciones que ya terminaron.
Reloj Ejecución
0
  • Cuatro instrucciones esperan a ser ejecutadas
1
  • La instrucción verde se lee de la memoria (etapa de lectura).
2
  • La instrucción verde se decodifica (etapa de decodificación).
  • La instrucción lila se lee de la memoria (etapa de lectura).
3
  • La instrucción verde se ejecuta (etapa de ejecución).
  • La instrucción lila se decodifica (etapa de decodificación).
  • La instrucción azul se lee de la memoria (etapa de lectura).
4
  • El resultado de la instrucción verde se escribe (etapa de escritura).
  • La instrucción lila se ejecuta (etapa de ejecución).
  • La instrucción azul se decodifica (etapa de decodificación).
  • La instrucción roja se lee de la memoria (etapa de lectura).
5
  • La instrucción verde ha terminado.
  • La instrucción lila se escribe (etapa de escritura).
  • La instrucción azul se ejecuta (etapa de ejecución).
  • La instrucción roja se decodifica (etapa de decodificación).
6
  • La instrucción lila ha terminado.
  • La instrucción azul se escribe (etapa de escritura).
  • La instrucción roja se ejecuta (etapa de ejecución).
7
  • La instrucción azul ha terminado.
  • La instrucción roja se escribe (etapa de escritura).
8
  • La instrucción roja ha terminado.
9
  • Todas las instrucciones han terminado.

Burbuja en la segmentación

Archivo:Pipeline, 4 stage with bubble
Una burbuja en el ciclo 3 retarda la ejecución.

Como mencionamos, a veces el procesador tiene que esperar, creando una "burbuja". En la imagen de la derecha, en el ciclo 3, la instrucción lila no puede decodificarse. Esto podría ser porque necesita un resultado de la instrucción verde que aún no está listo.

La instrucción verde sigue su camino, pero la lila se retrasa un ciclo completo. La instrucción azul y la roja también se retrasan. Durante el ciclo 3, la parte de decodificación del procesador no hace nada. Lo mismo ocurre con la parte de ejecución en el ciclo 4 y la de escritura en el ciclo 5.

Cuando la burbuja finalmente sale (en el ciclo 6), todo vuelve a la normalidad, pero con un retraso. En este ejemplo, las cuatro instrucciones tardan 8 ciclos en lugar de 7 en completarse.

Historia de la segmentación

La idea de la segmentación no es nueva. Ya se usó una versión sencilla en las computadoras Z1 (1939) y Z3 (1941). Proyectos importantes como el ILLIAC II y el IBM Stretch también la implementaron.

A finales de los años 70, la segmentación se hizo muy popular en las supercomputadoras, especialmente en los procesadores vectoriales. Empresas como Control Data Corporation y Cray Research (fundada por Seymour Cray) usaron la segmentación para hacer sus computadoras increíblemente rápidas.

La segmentación no se limitó a las supercomputadoras. En 1976, los grandes ordenadores de la Corporación Amdahl ya tenían una segmentación de 7 etapas.

Hoy en día, la segmentación es una parte fundamental de casi todos los microprocesadores que usamos en nuestras computadoras, teléfonos y otros dispositivos. Es una de las razones por las que son tan rápidos.

Véase también

Kids robot.svg En inglés: Instruction pipelining Facts for Kids

  • Estado de espera
  • Segmentación RISC clásica
kids search engine
Segmentación de instrucciones para Niños. Enciclopedia Kiddle.